Welcome to Teleman AI Documentation
Complete guide to building and managing automated voice calling campaigns with AI-powered message generation, real-time analytics, and professional softphone integration.
Quick Access
Jump to the section you need
Installation Guide
Complete setup instructions for all environments with system requirements and configuration steps.
Quick Start
20-minute tutorial to get your first campaign running and making calls.
Campaign Management
Create and manage automated calling campaigns with TTS, audio files, and DTMF support.
Softphone
Make calls directly from your browser with full call controls and recording capabilities.
Manual Calling
Click-to-call, post-call notes, disposition codes, and sequential calling sessions for human callers.
Credits & Pricing
Understand the credit system, pricing rules, and how to manage your account balance.
CRM Integrations
Connect your CRM and marketing tools with real-time webhooks for seamless data sync.
Cron Jobs Setup
Configure scheduled tasks for automated campaign processing and system maintenance.
Platform Features
Everything you need for professional voice campaigns
๐ค Text-to-Speech
Multiple voice options in various languages with natural-sounding AI voices.
๐ Audio Files
Upload pre-recorded messages in MP3 or WAV format for professional campaigns.
๐ Real-time Analytics
Track campaign performance with detailed metrics and call analytics.
๐ฏ DTMF Support
Interactive voice response with keypad input for customer interactions.
๐ค AMD Detection
Answering machine detection to optimize campaign effectiveness.
๐ Call Recording
Record and playback calls for quality assurance and compliance.
๐ฅ Contact Management
Organize contacts with lists, tags, and custom variables.
๐ Role-Based Access
Admin, Customer, and Agent roles with granular permissions.
๐ณ Stripe Integration
Secure payment processing for credit top-ups with PCI DSS compliance.
Installation Guide
Complete setup instructions for Teleman AI
Make sure you have all system requirements ready: PHP 8.2+, MySQL 8.0+, Node.js 18+, and Composer installed.
System Requirements
| Component | Minimum | Recommended |
|---|---|---|
| PHP | 8.2.0 | 8.3+ |
| MySQL | 8.0 | 8.0+ |
| Node.js | 18.x | 20.x LTS |
| RAM | 2 GB | 4 GB+ |
| Storage | 5 GB | 10 GB+ |
Installation Steps
Clone the Repository
git clone https://github.com/TheCodeStudioxyz/teleman-new-vue.git
cd teleman-new-vue
Install Dependencies
composer install
npm install
Configure Environment
cp .env.example .env
php artisan key:generate
Edit .env file with your database credentials and app configuration.
Run Migrations & Seed
php artisan migrate:fresh --seed
Build Frontend Assets
npm run build
Start the Application
php artisan serve
Visit http://localhost:8000 in your browser.
Your Teleman AI instance is now running. Default admin credentials are admin@example.com / password
Quick Start Guide
Get your first campaign running in 20 minutes
Follow this tutorial to create and launch your first calling campaign...
Complete documentation for Quick Start available in the markdown files. This HTML version provides the essential overview.
CRM Integrations
Connect your CRM and marketing automation tools with real-time webhooks
Teleman AI integrates seamlessly with your existing CRM, marketing automation platforms, and custom systems through powerful webhook-based integrations. Automatically sync call data, leads, contacts, and campaign events in real-time.
What are CRM Integrations?
CRM Integrations allow you to push data from Teleman AI to external systems automatically. When specific events occur (like a call completion, a hot lead detected, or a contact update), Teleman sends an HTTP webhook to your configured endpoint with the relevant data.
Built with reliability in mind: automatic retries, delivery logs, webhook testing, and multiple authentication methods.
Supported Events
Choose which events trigger webhooks to your system:
Call Completed
Triggered when a call ends. Includes full call data with transcript, duration, sentiment score, and AI-detected intent.
Lead Qualified
Triggered when AI detects a hot lead based on sentiment analysis and conversation quality (high score/positive sentiment).
Contact Added
Triggered when a new contact is created manually or imported. Perfect for syncing your contact database.
Contact Updated
Triggered when contact information is modified. Keep your CRM data synchronized in real-time.
Campaign Started
Triggered when a campaign is launched. Track campaign lifecycle and send notifications.
DTMF Response
Triggered when a contact presses a phone key during a call. Capture survey responses and menu selections.
Authentication Methods
Secure your webhooks with multiple authentication options:
๐ None (Testing Only)
No authentication required. Use only for development and testing. Not recommended for production.
๐๏ธ Bearer Token
Standard OAuth 2.0 bearer token authentication. Most CRMs and APIs use this method. Token is sent in the Authorization: Bearer {token} header.
๐ API Key
Custom header-based authentication. Specify your own header name (e.g., X-API-Key) and secret value. Flexible for custom integrations.
๐ HMAC Signature
Maximum security using cryptographic signatures. Teleman signs each request with your secret key using SHA-256. Your endpoint verifies the signature to ensure authenticity.
Getting Started
Navigate to Integrations โ CRM Integrations in the sidebar to create your first integration.
Step 1: Create Integration
- Go to CRM Integrations page
- Click "Add Integration" button
- Enter a descriptive name (e.g., "Salesforce Production")
- Provide your webhook endpoint URL
- Select which events should trigger webhooks
- Choose authentication method and configure credentials
- Enable the integration
Step 2: Test Your Integration
Before going live, test your webhook endpoint:
- Click the "Test" button on your integration card
- Teleman sends a sample webhook to your endpoint
- Check the response status and verify your endpoint received the data
- Review the Webhook Logs to see delivery details
Step 3: Monitor Delivery
View all webhook deliveries in real-time:
- Click "View Logs" on any integration
- See timestamps, status codes, and response data
- Green badges indicate successful deliveries (2xx status)
- Red badges show failures with error details
- Click "Retry" to resend failed webhooks
Webhook Payload Example
Example payload for a call_completed event:
{
"event": "call_completed",
"data": {
"call_id": 1234,
"contact_id": 5678,
"campaign_id": 91,
"phone_number": "+1234567890",
"duration": 45,
"status": "completed",
"transcript": "Hello, this is John...",
"sentiment": "positive",
"sentiment_score": 0.85,
"ai_detected_intent": "interested",
"created_at": "2025-12-22T10:30:00Z"
},
"timestamp": "2025-12-22T10:30:15Z",
"integration_id": 42
}
Payloads vary by event type. Each event includes relevant data fields and metadata.
Best Practices
โ Respond Quickly
Return a 2xx status code within 5 seconds. Process heavy tasks asynchronously in a background queue.
๐ Handle Retries
Make your endpoint idempotent. Teleman retries failed webhooks up to 3 times with exponential backoff.
๐ Verify Signatures
Always verify HMAC signatures in production. Reject requests with invalid signatures to prevent spoofing.
๐ Log Everything
Log incoming webhooks on your side. This helps debug issues and provides an audit trail.
๐งช Test Regularly
Use the built-in test feature regularly to ensure your integration remains functional after changes.
๐ Monitor Logs
Check webhook logs periodically for failures. High failure rates may indicate endpoint issues.
Troubleshooting
Webhook not arriving?
- Check if the integration is enabled (Active status)
- Verify the event is selected in your integration settings
- Ensure your endpoint URL is correct and accessible
- Check webhook logs for delivery attempts and errors
Getting 4xx errors?
- 400 Bad Request: Your endpoint rejected the payload format
- 401 Unauthorized: Authentication credentials are incorrect
- 404 Not Found: Endpoint URL is incorrect or route doesn't exist
- 429 Too Many Requests: Your endpoint is rate-limiting Teleman
Getting 5xx errors?
- 500 Internal Server Error: Your endpoint code has a bug
- 502 Bad Gateway: Reverse proxy or load balancer issue
- 503 Service Unavailable: Your endpoint is down or overloaded
- 504 Gateway Timeout: Your endpoint took too long to respond (>30s)
Failed webhooks are retried 3 times with delays: 1 minute, 5 minutes, then 15 minutes. After 3 failures, the webhook is marked as permanently failed and requires manual retry.
Advanced Features
Custom Headers
Add custom HTTP headers to your webhook requests (useful for API keys, routing info, etc.):
X-Tenant-ID: abc123
X-Environment: production
X-Source: teleman-ai
Event Filtering
Create multiple integrations for different event types. For example:
- CRM Integration: Only
lead_qualifiedandcontact_added - Analytics Integration: Only
call_completedevents - Notification Service: Only
campaign_startedevents
Manual Retry
Failed webhooks can be manually retried from the Webhook Logs page. This is useful when:
- Your endpoint was temporarily down
- You fixed a bug in your webhook handler
- Authentication credentials were incorrect
Related Documentation
For detailed API documentation, code examples, and advanced configuration, see:
docs/CRM_INTEGRATION_README.md- Complete feature overviewdocs/CRM_INTEGRATION_QUICKSTART.md- Step-by-step setup guidedocs/CRM_INTEGRATION_TESTING.md- Testing and quality assurancedocs/CRM_INTEGRATION_COMPLETE.md- Technical implementation details
Manual Calling Workflow
Click-to-call, post-call disposition, sequential calling sessions, and contact-level call tracking for human callers
The Manual Calling system enables human agents and callers to work through contact lists efficiently. Click to call any contact, record notes and dispositions after each call, and use the sequential calling session to work through lists automatically.
All features are fully integrated with the global softphone widget, authorization system, and i18n translations (10 languages supported).
Feature Overview
Click-to-Call
Call any contact directly from the contacts list or detail page. The softphone widget auto-populates and the call is linked to the contact record.
Post-Call Disposition
After each call ends, a modal prompts the agent to select a disposition code, add notes, and optionally schedule a callback.
Calling Session
Sequential calling interface for working through a contact list. Auto-advances to the next contact after each disposition is saved.
Call Tracking
Contact-level call history with dispositions, notes, and timestamps. See total calls, last contacted date, and call history on each contact.
Click-to-Call
Call contacts directly from anywhere in the application. The softphone widget handles the call while the contact record is automatically linked.
From Contacts List
- Navigate to Contacts from the sidebar
- Find the contact you want to call
- Click the phone icon button in the contact's row
- The softphone widget expands with the number pre-filled
- Click "Call" in the softphone widget to initiate the call
From Contact Detail Page
- Open any contact's detail page
- Click the "Call This Contact" button in the header
- The softphone widget opens with the number ready
- Click "Call" to start the call
When you call a contact via click-to-call, the resulting call record is automatically linked to the contact. This enables disposition tracking and call history on the contact's profile.
Post-Call Disposition
When a contact-linked call ends, a disposition modal automatically appears after a brief delay, prompting the agent to log the call outcome.
Disposition Codes
| Disposition | Description | Color |
|---|---|---|
| Interested | Contact expressed interest in the product/service | Green |
| Not Interested | Contact declined or is not interested | Red |
| Callback | Contact requested a callback at a specific time | Blue |
| Wrong Number | Phone number is incorrect or belongs to someone else | Orange |
| Voicemail | Call went to voicemail | Purple |
| No Answer | Contact did not answer the call | Gray |
| Do Not Call | Contact requested to not be contacted again | Dark Red |
Disposition Modal Fields
- Disposition Code (required) - Select one of the 7 disposition codes above
- Call Notes (optional) - Free-text notes about the conversation
- Callback Date/Time (conditional) - Appears only when "Callback" disposition is selected
Agents can skip the disposition modal if they prefer not to log the call outcome. However, skipping means no disposition data is recorded for that call.
Sequential Calling Session
The calling session provides a dedicated interface for working through a contact list sequentially, maximizing agent productivity.
Starting a Calling Session
- Navigate to Contacts
- Optionally select a contact list from the filter dropdown
- Click the "Start Calling" button
- You'll be taken to the dedicated calling session page
Calling Session Interface
- Progress Bar - Visual indicator showing how far through the list you are
- Current Contact Card - Shows the contact's name, phone number, email, company, total calls, last contacted date, and notes
- Last Call Result - Displays the previous disposition for the current contact (if any)
- Call Now Button - Green button to initiate the call via the softphone
- Skip Contact - Move to the next contact without calling
- Previous / Next - Navigate manually through the list
- Contact Queue - Scrollable sidebar showing all contacts with their disposition badges
- List Switcher - Dropdown to switch between contact lists without leaving the session
Auto-Advance Behavior
After saving a disposition in the post-call modal, the calling session automatically advances to the next contact in the list. This creates a seamless workflow:
- Click "Call Now" to call the current contact
- Have your conversation
- Call ends - disposition modal appears
- Select disposition, add notes, save
- Session auto-advances to the next contact
- Repeat from step 1
Contacts in the calling session are ordered by last contacted date (oldest first), so contacts who haven't been called recently appear first. Opted-out contacts are automatically excluded.
Contact-Level Call Tracking
All manual calls made through click-to-call are tracked at the contact level, providing a complete call history.
Contact Detail Page - Call History
The contact detail page (Contacts > View Contact) shows:
- Total Calls - Cumulative count of all calls made to the contact
- Last Contacted - Timestamp of the most recent call
- Recent Calls Table - List of recent calls with:
- Date and time
- Disposition badge (color-coded)
- Call notes
- Duration
Contacts List View
The contacts index page shows quick indicators:
- Phone icon button - Quick click-to-call action on each row
- Total calls count visible in the table
- Last contacted date for at-a-glance status
Authorization & Roles
Manual calling features respect the existing role-based access control system:
| Role | Click-to-Call | Disposition | Calling Session |
|---|---|---|---|
| Admin | All contacts | All calls | All lists |
| Customer | Own contacts | Own calls | Own lists |
| Agent | Parent's contacts | Own + parent's calls | Parent's lists |
Agents can only access their parent customer's contacts and make calls using assigned phone numbers. They cannot access admin features or other customers' data. The calls.make permission is required.
Database Schema
Manual calling adds the following fields to the calls table:
| Column | Type | Description |
|---|---|---|
contact_id |
FK (nullable) | Links the call to a contact. SET NULL on delete. |
disposition |
VARCHAR(50) | One of 7 disposition codes (interested, not_interested, etc.) |
call_notes |
TEXT | Free-text notes from the agent about the call |
callback_at |
TIMESTAMP | Scheduled callback date/time (for "callback" disposition) |
php artisan migrate
# Runs: 2026_03_16_100000_add_disposition_and_contact_to_calls_table
API Reference
Save Disposition
{
"disposition": "interested", // required: one of 7 codes
"call_notes": "Very interested in premium plan", // optional
"callback_at": "2026-03-20T14:00:00" // optional, for callbacks
}
Initiate Call (with contact linking)
{
"to_number": "+1234567890",
"from_number": "+0987654321",
"contact_id": 42, // optional: links call to contact
"enable_recording": true
}
Related Documentation
For detailed technical documentation, see:
docs/MANUAL_CALLING_WORKFLOW.md- Complete technical implementation guidedocs/GLOBAL_SOFTPHONE_WIDGET_COMPLETE.md- Softphone widget architecturedocs/AGENT_ROLE_ANALYSIS.md- Agent role and permissions details