A self-hosted automated outbound dialer phone bot
Project description
📞 Autodial PhoneBot: Self-Hosted AI Dialer
Autodial is a production-grade, self-hosted outbound phone automation engine. It leverages state-of-the-art Local Speech-to-Text (STT), Large Language Models (LLM), and Local Text-to-Speech (TTS) to create intelligent, human-like phone interactions.
Built for high-performance automation, Autodial can navigate IVR menus, handle complex DTMF interactions, execute mass broadcasts, and notify your external systems via webhooks upon call conclusion.
🚀 Key Features
- Multi-Concurrent Interaction: Built on FastAPI and Python's
asyncio, handling dozens of simultaneous Twilio Media Streams with low overhead. - Local Transcription Engine: Powered by
Faster-Whisper(STT). Optimized for GPU (RTX series) with automatic CPU fallback. - Dynamic AI Personalities: Inject per-call context, goals, and keywords. The AI intelligently adapts its persona and strategy for every unique target.
- Developer-Defined Guardrails: Set strict
system_instructionsto keep calls on track and ensure brand-safe communication. - Intelligent Call Termination: Built-in intent recognition for phrases like "stop calling me" or "goodbye," ensuring polite and immediate hang-ups.
- Broadcast & Direct Messaging: Need to send a simple notification? Use Broadcast Mode to play a direct message and disconnect immediately.
- Automated Call Logs & Webhooks: Every call generates a detailed JSON transcript. Configure a
callback_urlto receive data as soon as the session ends.
🛠 Prerequisites & Installation
Core Requirements
- Ollama: Serving a chat-ready model (e.g.,
llama3.2) at a reachable URL. - Piper TTS: The
piperbinary should be in your system PATH, along with its.onnxmodels. - Twilio: An active Account SID, Auth Token, and a verified outbound Phone Number.
System Install
pip install autodial
⚙️ Configuration
Autodial consumes configuration via environment variables. Create a .env file in your execution directory:
PORT=8000
OLLAMA_CHAT_URL=http://localhost:11434/api/chat
LLM_MODEL=llama3.2:3b
PIPER_MODEL=./en_US-lessac-medium.onnx
TWILIO_ACCOUNT_SID=your_sid_here
TWILIO_AUTH_TOKEN=your_token_here
TWILIO_PHONE_NUMBER=+1234567890
🖥 Start the Server
Launch the Autodial engine with a single command:
autodial
Note: The server will initialize Whisper on your GPU if available (CUDA), otherwise it fallbacks to CPU.
🐍 Python Client Usage
The library includes a professional AutodialClient to make programmatic orchestration seamless.
from autodial import AutodialClient
# Connect to your Autodial instance
client = AutodialClient("http://localhost:8000")
# Scenario: Appointment Reminder with Guardrails
client.dial(
target_number="+15551234567",
context="Reminder for Dr. Smith's clinic",
goals="Confirm the 2:00 PM slot today",
system_instructions="Always be polite. If the user is busy, offer to call back later.",
callback_url="https://api.yourclinic.com/webhooks/call-results"
)
# Scenario: Emergency Alert Broadcast
client.broadcast(
numbers=["+15550001", "+15550002", "+15550003"],
message="This is an automated alert from the city. Please evacuate immediately.",
callback_url="https://api.city.gov/logs"
)
📡 API Reference
POST /dial
Initiates a single interactive AI session.
| Parameter | Type | Description |
|---|---|---|
to_number |
string |
Required. The target phone number in E.164 format. |
context |
string |
Detailed background info for the AI to understand the call's nature. |
goals |
string |
Specific outcomes or data points the AI should strive to achieve. |
keywords |
string |
Focus phrases for the transcription engine to prioritize. |
system_instructions |
string |
High-priority guardrails and behavioral rules for the session. |
callback_url |
string |
POST endpoint to receive the final JSON transcript and status. |
🛡 License
This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ by the Autodial Maintainers.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autodial-0.3.1.tar.gz.
File metadata
- Download URL: autodial-0.3.1.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81aa2b4b42b50b5769ce0ef9f0d8442edb0496410d8c9e140a2730f141cb4704
|
|
| MD5 |
a6ce66fe9d356aebcb24e46238a23319
|
|
| BLAKE2b-256 |
3facb00f70ea32fbdaea9ef2697162ef39d583bf359a3bb8ee9330cb37e315b0
|
File details
Details for the file autodial-0.3.1-py3-none-any.whl.
File metadata
- Download URL: autodial-0.3.1-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cac8d28faacea9941c544a61441729b24627b3f4e1c17b7b11f63e11518deed3
|
|
| MD5 |
ecfedf441a75e148e72b946f029fde5d
|
|
| BLAKE2b-256 |
c1b3f7693490dc2b91f30c42fdd669556825fd93c5362a1fb36c3f1ff40854c0
|