Automatisch bellen
Laat de nummerlijst een aankondiging, IVR of enquête bellen; geeft het resultaat en de toetsinvoer terug. Integratiesleutel (bt_…, bereik autocall).
Endpoint: https://api.buluthat.com/api/autocall.php?action=<işlem>
Typische flow:
1. media -> anons id'sini al (ya da tts_template kullan)
2. trunks -> çıkış hattının slug'ını al
3. create_campaign -> status "draft", digit_labels ile anket seçenekleri
4. add_leads -> numaraları partiler hâlinde gönder
5. start -> kampanyayı kuyruğa al
6. webhook -> sonuçlar size gelsin (ya da results ile çekin)
7. summary -> tuş dağılımı
GETping · media · trunks · caller_ids
GET https://api.buluthat.com/api/autocall.php?action=ping
GET https://api.buluthat.com/api/autocall.php?action=media → [{ "id": 12, "name": "Hatırlatma anonsu" }]
GET https://api.buluthat.com/api/autocall.php?action=trunks → çıkış hatları (slug)
GET https://api.buluthat.com/api/autocall.php?action=caller_ids → kullanılabilir arayan numaralar
POSTcreate_campaign
curl -X POST "https://api.buluthat.com/api/autocall.php?action=create_campaign" \
-H "Authorization: Bearer bt_xxx" -H "Content-Type: application/json" \
-d '{
"name": "Randevu hatırlatma",
"campaign_type": "survey",
"trunk_slug": "hat-1",
"caller_id": "02124119610",
"tts_enabled": true,
"tts_template": "Merhaba {sayin}, {randevu} randevunuzu hatırlatmak için aradık. Geliyorsanız 1, iptal için 2.",
"digit_labels": { "1": "Geliyorum", "2": "İptal" },
"digit_destinations": { "9": "queue:4" },
"start_time": "09:00", "end_time": "18:00",
"weekdays": ["mon","tue","wed","thu","fri"],
"max_channels": 3, "ring_timeout_seconds": 30,
"retry_count": 1, "retry_delay_minutes": 30,
"amd_enabled": true, "amd_action": "hangup",
"webhook_url": "https://ornek.com/buluthat/sonuc",
"webhook_secret": "gizli",
"webhook_events": "call_finished,dtmf",
"status": "draft",
"leads": [ { "phone": "05551112233", "name": "Ahmet Yılmaz", "external_id": "CRM-1", "fields": { "randevu": "12 Eylül 14:00" } } ]
}'
Verplicht: name, trunk_slug en media_file_id of tts_template. Als beide worden opgegeven, wordt eerst het gepersonaliseerde geluid afgespeeld, daarna de kant-en-klare aankondiging.
| Veld | Waarden | Notitie |
|---|---|---|
campaign_type | announcement, ivr, survey | announcement speelt de aankondiging af en hangt op, wacht niet op een toets |
digit_labels | {"1":"Evet"} | Invullen voor een enquête. Een toets met een label wordt geregistreerd, ook zonder bestemming |
digit_destinations | {"9":"queue:4"} | Verbindt wie een toets indrukt door: ext:1001, queue:4, ivr:2, flow:3, repeat, hangup |
amd_action | hangup, play, continue | Wat te doen als het antwoordapparaat opneemt |
tts_template | "Sayın {ad}, …" | Variabelen: {sayin}, {unvan}, {adi}, {ad}, {telefon} en fields velden |
status | draft, queued | queued geeft u dit op, dan komt de campagne direct in de rij |
retry_count / retry_delay_minutes | aantal | Opnieuw bellen bij geen gehoor/bezet |
thanks_tts_text | tekst | Bedankzin na de toetsinvoer van de enquête |
Antwoord: { "ok": true, "data": { "id": 7, "status": "draft", … } }
POSTupdate_campaign
Gedeeltelijke update; alleen de verzonden velden veranderen. status niet meesturen (het laat een lopende campagne vallen); voor de status start/pause/cancel gebruik.
{ "campaign_id": 7, "max_channels": 5, "retry_count": 2 }
POSTadd_leads
Maximaal 5.000 records per verzoek. Hetzelfde nummer wordt in dezelfde campagne niet twee keer toegevoegd (duplicate).
{ "campaign_id": 7, "leads": [ { "phone": "05551112233", "name": "Ahmet Yılmaz", "external_id": "CRM-1", "fields": { "borc": "1.240 TL" } } ] }
Korte notatie: { "campaign_id": 7, "phones": ["05551112233", "05551112234"] }
Antwoord: { "inserted": 2, "duplicate": 0, "invalid": 0 }
POSTrequeue_leads
Zet eerder gebelde nummers opnieuw in de rij (calls wordt gereset, de toetsinvoer gewist). Een nummer dat al wacht wordt niet aangeraakt (skipped). Gebruik dit bij betalingsherinneringen om, in plaats van op de toets "ik heb betaald" te vertrouwen, opnieuw te bellen op basis van uw eigen administratie.
{ "campaign_id": 7, "phones": ["05551112233"] }
POSTstart · pause · cancel
{ "campaign_id": 7 }
start zet de campagne in de rij; het bellen begint binnen het dag-/tijdvenster. Voegt u nummers toe aan een afgeronde campagne, dan wordt de campagne automatisch heropend.
GETresults
Resultaat per nummer. limit (standaard 200, maximaal 1000), offset; filters status, dtmf, phone.
GET https://api.buluthat.com/api/autocall.php?action=results&campaign_id=7&dtmf=1
{
"ok": true, "total": 512, "limit": 200, "offset": 0,
"data": [ {
"campaign_id": 7, "lead_id": 91, "external_id": "CRM-1",
"phone": "05551112233", "name": "Ahmet Yılmaz",
"status": "answered", "attempts": 1,
"dtmf": "1", "dtmf_label": "Geliyorum", "dtmf_all": ["1"],
"amd_result": "HUMAN", "duration_seconds": 34, "talk_seconds": 22,
"hangup_cause": "ANSWERED",
"started_at": "2026-09-04 10:12:03", "answered_at": "2026-09-04 10:12:11", "ended_at": "2026-09-04 10:12:33",
"custom_fields": { "randevu": "12 Eylül 14:00" }
} ]
}
Statussen: pending, calling, answered, machine, no_answer, busy, failed, cancelled.
GETsummary
{ "ok": true, "data": {
"total": 512, "answered": 388, "pressed": 301, "machine": 44,
"answer_rate": 75.8, "press_rate": 77.6, "talk_seconds": 8624, "avg_talk_seconds": 22,
"digits": [ { "digit": "1", "label": "Geliyorum", "total": 214, "percent": 55.2 }, { "digit": "2", "label": "İptal", "total": 87, "percent": 22.4 } ]
} }
GETevents
Gebeurtenislogboek van de campagne (originate, answered, amd, dtmf, cdr, error) — voor diagnose.
Webhook
webhook_url is het ingesteld, dan stuurt Buluthat het resultaat naar u. Gebeurtenissen: call_finished (eenmaal per nummer), dtmf (op het moment van de toetsdruk), campaign_finished. Headers X-Buluthat-Event, X-Buluthat-Delivery, X-Buluthat-Signature: sha256=… (webhook_secret indien opgegeven). Body results heeft dezelfde velden als. Zie voor handtekeningverificatie en herhaalbeleid Webhooks.
Gepersonaliseerde aankondiging en kosten
Het sjabloon wordt in vaste en variabele delen gesplitst; de vaste zin wordt in een lijst van duizend personen eenmaal ingesproken, dezelfde {tutar} dezelfde waarde wordt niet twee keer gegenereerd (gemeten besparing %97,9). Stuur variabele waarden in een standaardformaat ("1.000 TL" altijd hetzelfde geschreven). De keuze tussen meneer/mevrouw gebeurt automatisch op basis van de naam; bij unisex namen blijft de aanspreektitel leeg.
PHP-client
Gedownload via Paneel > Automatisch bellen > tabblad API buluthat-autocall-client.php:
require_once 'buluthat-autocall-client.php';
$bt = new BuluthatAutoCall('https://api.buluthat.com', 'bt_xxx');
$k = $bt->createCampaign(['name' => 'Ödeme hatırlatma', 'campaign_type' => 'survey', 'trunk_slug' => 'hat-1',
'tts_enabled' => true, 'tts_template' => 'Merhaba {sayin}, {tutar} tutarındaki ödemenizi hatırlatmak için aradık. Ödediyseniz 1, ödemediyseniz 2.',
'digit_labels' => ['1' => 'Ödedim', '2' => 'Ödemedim'], 'webhook_url' => 'https://crm.example.com/buluthat-sonuc.php']);
$bt->addLeads($k['id'], [['phone' => '05551112233', 'name' => 'Burak Yılmaz', 'external_id' => 'CARI-451', 'fields' => ['tutar' => '1.000 TL']]]);
$bt->start($k['id']);
// webhook tarafı
$olay = BuluthatAutoCall::readWebhook($secret); // imzayı doğrular
if ($olay['event'] === 'call_finished' && $olay['data']['dtmf'] === '1') { /* ödedim dedi */ }
