Outbound AI Agents with VICIdial + Ultravox

Fermin Perdomo Fermin Perdomo
schedule 2 min read

I’ve been experimenting with combining VICIdial (classic Asterisk-based dialer) with Ultravox (speech-language model for real-time voice AI). The goal: let the dialer place calls, route live answers to an AI bot, and then transfer to a human closer when needed.

Most call centers still run VICIdial, one of the most reliable dialers out there. But what if every live answer could be handled first by an AI agent—qualifying, answering FAQs, even delivering compliance lines—before a closer picks up?

That’s exactly what I’ve been testing: VICIdial + Ultravox.

Here’s how it works:

  1. VICIdial dials the lead, as usual.
  2. Instead of sending a live answer to a human right away, the call goes to an AI voice bot (Ultravox).
  3. The bot engages the customer in real time—no awkward lag.
  4. When ready, the call is seamlessly transferred to a sales agent.

Benefits for call centers:

  • ✅ Agents focus only on high-value conversations
  • ✅ Consistent compliance / script delivery
  • ✅ Lower cost per call with higher throughput
  • ✅ 24/7 coverage for first-touch conversations

If your contact center is running on VICIdial, this is a way to bring next-gen AI voice into your existing infrastructure—without ripping out what already works.

Would you try an AI front-end for your outbound campaigns?

 Integrating VICIdial with Ultravox (AI Bot Frontend)

I’ve been building a bridge between VICIdial and Ultravox to run outbound AI phone agents. The goal: VICIdial dials, Ultravox handles the conversation, then transfers to a closer.

🔗 Call Flow

  • VICIdial campaign → Remote Agent → Asterisk Dialplan
  • Dialplan uses ExternalMedia() to stream RTP to a Node.js gateway
  • Gateway converts G.711 ↔ PCM16 and streams audio to Ultravox via WebSocket
  • Ultravox bot replies with text/speech → played back to the customer
  • On transfer intent, gateway uses Asterisk AMI Redirect → VICIdial ingroup

📝 Dialplan Snippet

[ultravox-outbound]
exten => 7000,1,Answer()
 same => n,Set(CHANNEL(audio_read_format)=ulaw)
 same => n,Set(CHANNEL(audio_write_format)=ulaw)
 same => n,ExternalMedia(format=ulaw, direction=both, \
      remote_host=10.0.0.50, remote_port=40000, codec=ulaw)
 same => n,ConfBridge(7000)
 same => n,Hangup()

💻 Gateway Highlights

  • Listens for RTP from Asterisk
  • Sends audio frames to Ultravox streaming API
  • Uses TTS (Polly/ElevenLabs) for bot replies back into the call
  • Executes AMI Redirect to drop caller into a live ingroup when ready

Why Ultravox?
Unlike classic pipelines (ASR → LLM → TTS), Ultravox processes speech directly, keeping latency low and conversations fluid—perfect for outbound bots.

Next step: add RAG knowledge bases so the bot can pull live product info, and multilingual support for English/Spanish campaigns.


Reactions

lock You need to be logged in to react.
Log In

Newsletter

Get new posts delivered straight to your inbox.

mail

Great Tools for Developers

Git Tower

Git Tower

A powerful Git client for Mac and Windows that simplifies version control.

Visit arrow_forward
Mailcoach

Mailcoach

Self-hosted email marketing platform for sending newsletters and automated emails.

Visit arrow_forward
Uptimia

Uptimia

Website monitoring and performance testing tool to ensure your site is always up and running.

Visit arrow_forward
Cloudways

Cloudways

Managed cloud hosting platform that simplifies server management for developers.

Visit arrow_forward

Comments

No comments yet. Be the first to share your thoughts.

chat_bubble Join the conversation — log in to leave a comment.
Log In