The Beginning: An Overpriced, Frustrating Start

I started this project with one goal: to deploy a high-quality, conversational AI voice bot that could handle real interactions, respond naturally, and integrate with my existing systems without costing a fortune. Sounds simple, right? Yeah, not so much.

First, I tested SignalWire's AI bot — it worked well, but the costs were insane. With ElevenLabs for voice, plus SignalWire's AI logic, I was looking at $0.50 per minute to run this thing. Even stripping ElevenLabs out, I was still hovering around $0.20 per minute, which wasn't sustainable.

Next, I tried Google DialogFlow with SignalWire's One-Click Telephony. On paper, it seemed like a cost-effective solution. But the experience? Garbage. The bot couldn't handle interruptions, didn't retain context, and basically functioned as a glorified FAQ system. I even built out 250 intents with variations, hoping to improve things, but the bot still felt robotic and disconnected from real conversation.

That's when I knew I needed a completely different approach.

The Shift: Open Source + Kubernetes

I already had a Kubernetes cluster running with Rasa, DeepSpeech, and Asterisk, so I decided to build my own AI bot from scratch. The idea:

1. Use Rasa for the conversation logic (a real conversational AI, not just a Q&A bot).
2. Use DeepSpeech for Speech-to-Text (STT) instead of Google's overpriced API.
3. Use Coqui TTS for natural-sounding speech instead of ElevenLabs.
4. Use Asterisk as the PBX to connect my bot to a real phone system.
5. Log calls and contacts in GoHighLevel for tracking and CRM integration.

The Current Nightmare: Asterisk Won't Deploy

Here's what I was staring at when checking the cluster:

kubectl get pods -n ccmschatbot

asterisk-deployment-7cb9d75795-b97kq   0/1   ImagePullBackOff   603 (18d ago)   20d

ImagePullBackOff — the dreaded Kubernetes error when it can't pull an image. I checked my Asterisk deployment and realized the problem: I'm storing all my images on GitLab, but I never properly configured Kubernetes to authenticate and pull from the registry.

The Fix: Pulling Asterisk from GitLab's Container Registry

Step 1: Add GitLab Container Registry Credentials

kubectl create secret docker-registry gitlab-registry-secret \
  --docker-server=registry.gitlab.com \
  --docker-username=<your-gitlab-username> \
  --docker-password=<your-gitlab-access-token> \
  --docker-email=<your-email>

Step 2: Update My Kubernetes Deployment

Add imagePullSecrets to the deployment spec referencing gitlab-registry-secret.

Step 3: Redeploy

kubectl apply -f asterisk-deployment.yaml

And FINALLY, Asterisk started pulling the image and deploying correctly.

What's Next? Converting DialogFlow Intents to Rasa

Now that my infrastructure is (mostly) working, my next step is migrating my DialogFlow intents and entities to Rasa. I exported my DialogFlow agent as a ZIP and used this command to convert the training data:

pip install rasa-nlu-converters
rasa-nlu-converter convert --data dialogflow-export.zip --out rasa-training-data --format rasa

Next Up:

  • Fix interruptions & context retention in Rasa
  • Ensure calls flow through Asterisk to Rasa properly
  • Log contacts & calls in GoHighLevel
  • Test Coqui TTS as a replacement for ElevenLabs

Final Thoughts

This journey has been raw and brutal — but also exciting. I've learned that off-the-shelf solutions (like SignalWire AI and DialogFlow) are great for small projects but get expensive and fall apart at scale. Open-source gives me control, but it also requires a lot of debugging and troubleshooting.

If you're building a similar AI-powered voice bot, don't make my mistakes:

  1. Don't trust One-Click setups — they work, but they're fragile.
  2. Always verify Kubernetes can pull images before deploying.
  3. If you're using GitLab for container storage, set up imagePullSecrets early.
  4. Plan your conversation logic carefully — chatbots are NOT just fancy FAQs.

I'll be documenting everything as I go, including all the problems and solutions. If you're on a similar journey, feel free to reach out, ask questions, or drop suggestions.