Dzvinar (Ukrainian дзвінар — “the bell-ringer / caller”) — an AI voice-call agent. Goal-driven dialogue, objection handling, a structured outcome at the end. Telephony is pluggable — it runs in a CLI simulator out of the box.
Most “AI caller” demos hard-wire one provider and can’t be tested without a paid
account. Dzvinar separates the conversation engine from the channel:
the engine only knows say() / listen() / hangup(). The shipped channel is
a terminal simulator, so you can design and tune a call script with zero
infrastructure, then drop in Twilio/SIP + TTS/STT by implementing one interface.
- A scenario (JSON) defines persona, goal and opener.
- The engine drives the dialogue turn-by-turn, stays on goal, handles pushback.
- When the goal is reached (or clearly impossible) it emits a structured result:
{ "end": true, "outcome": "success", "summary": "...", "data": {} }npm install
export ANTHROPIC_API_KEY=sk-ant-...
npm start # uses scenarios/demo.json
# or: node index.js scenarios/your-scenario.jsonYou type the caller’s replies; the agent speaks back; the call ends with a machine-readable result you can log or push to a CRM.
Implement the say/listen/hangup interface in src/telephony.js with your
provider (e.g. Twilio <Say> + speech webhook, or any TTS/STT pair). The engine
code does not change.
Node.js · @anthropic-ai/sdk · pluggable telephony interface · prompt caching.
MIT © Oleksandr Bilov (@Dominant-dev)