β Twilio credentials not configured.
Live Dashboard
{{ selectedCampaign.status }}
π
{{ leadName(currentLead) }}
{{ currentLead.phone }}
{{ k }}{{ v }}
{{ currentLead.status || 'initiated' }}
{{ amdLabel(currentLead.answered_by) }}
since {{ fmtTime(currentLead.started_at) }}
{{ stats.total||0 }}
Total
{{ stats.answered||0 }}
Answered
{{ stats.failed||0 }}
Failed
{{ stats.busy||0 }}
Busy
{{ stats.no_answer||0 }}
No Answer
{{ stats.avg_duration ? Math.round(stats.avg_duration)+'s' : 'β' }}
Avg Duration
| Phone | Status | Answered By | Flow Path | Duration | Started |
|---|---|---|---|---|---|
| {{ call.phone }} | {{ call.status }} | {{ amdLabel(call.answered_by) }}β | {{ call.flow_path||'β' }} | {{ call.duration!=null ? call.duration+'s' : 'β' }} | {{ fmtTime(call.started_at) }} |
|
{{ callLogs.length ? 'No calls match your filter.' : 'No calls yet. Upload leads, build a flow, and start a campaign.' }} |
|||||
Upload Leads
New Campaign
{csvDrag=false;csvFile=e.dataTransfer.files[0]}">
csvFile=e.target.files[0]" />
{{ csvFile ? csvFile.name : 'Drop CSV here or click to browse' }}
Max 10 MB
β Loaded {{ csvResult.count }} numbers into {{ csvResult.campaignName }}
All Campaigns
No campaigns yet.
{{ c.name }}
{{ c.total }} leads
{{ c.status }}
{{ fmtDate(c.created_at) }}
Flow Builder
Click + Add Step to start building your IVR tree.
Edit Step
β No audio files yet β upload some in the Audio Files tab.
Digit Map
{{ digit }}
β
Twilio detects whether the call was answered by a human, a machine/voicemail, or is unknown, then this step branches accordingly.
Make sure Answering Machine Detection is enabled in Settings.
This step immediately hangs up the call.
Select a step to edit it.
Audio Files
Upload Audio
{audioDrag=false;audioFile=e.dataTransfer.files[0]}">
audioFile=e.target.files[0]" />
{{ audioFile ? audioFile.name : 'Drop audio here or click to browse' }}
Library ({{ audioFiles.length }})
No audio files yet.
Settings
Twilio Credentials
{{ showToken?'π Hide':'π Show' }} token
Leave unchanged to keep existing token.
{{ credTestResult.ok ? `β ${credTestResult.friendlyName} (${credTestResult.status})` : `β ${credTestResult.error}` }}
Webhook URL
Twilio fetches
{url}/voice when a call connects. Run ngrok http 3000 and paste the https:// URL here.
Dialling Behaviour
After each call ends, wait this long before dialling the next.
β Configured
β Incomplete
π Setup Checklist
- Sign up at twilio.com and buy a phone number.
- Copy your Account SID and Auth Token from the Twilio Console into the fields above.
- In a terminal:
ngrok http 3000and paste the HTTPS URL into Public URL. - Click Test Connection to verify.
- Upload audio, build your IVR flow, upload leads, and start a campaign.