Ověřování probíhá pomocí HTTP Basic, použijte váš libovolný administrátorský účet. Vždy je třeba nastavit Accept hlavičku na application/xml nebo přidat .xml za URL (případně ekvivalent application/json resp. .json pro JSON), viz příklady. Dále je nutné nastavit správnou hodnotu hlavičky Content-Type, v případě XML na "application/xml", v případě JSON opět "application/json".
Základní URL je vždy https://telfa.cz, za něj přidejte příslušnou cestu, viz dále v dokumentaci.
POST /calls.xml?number=245008328
Vytočí Telfa účet uživatele, pod kterým je URL zavoláno a spojí hovor s číslem předaným jako parametr. Je-li Telfa účet nedostupný, použije se nastavený mobilní telefon uživatele.
POST /calls/announce.xml?number=245008328&text=ahoj%20pane
Vytočí zadané telefonní číslo a přečte volanému zadaný text pomocí řečového sytentizéru (text2speech).
GET /calls/current.xml?login=jan.kubr.livispace.cz
Vrátí XML s informacemi o právě probíhajícím hovoru uživatele s daným loginem:
<call>
<caller_number>777123456</caller_number>
<dialed_number>245008328</dialed_number>
<start>2009-10-11T13:41:59+02:00</start>
<answered_at>2009-10-11T13:42:10+02:00</answered_at>
<transfer_description>Nova objednavka</transfer_description>
</call>
GET /calls.xml?from=2009-10-11+10%3A30
Vrátí XML obsahující všechny hovory od 11.10.2009 10:30. Možno využít například pro notifikace o zmeškaných hovorech:
<calls type="array">
<call>
<answered_at/>
<answered_by_user_id/>
<bridge_start_at>2009-10-11T13:42:19+02:00</bridge_start_at>
<caller_number>777123456</caller_number>
<dialed_number>245008328</dialed_number>
<created_at>2009-10-11T13:41:59+02:00</created_at>
<hungup_at/>
<id>13576</id>
<inbound>true</inbound>
<outbound_from_external_number/>
<recorded>true</recorded>
<task_id/>
<transfer_description>Nova objednavka</transfer_description>
<transferred_to_number/>
<voice_mail_file_name/>
<recording_file_name>/calls/13110/recording</recording_file_name>
</call>
</calls>
Hovory jsou vždy stránkovány po 20 záznamech, pro vrácení všech stran navyšujte parametr page do té doby, než se vám vrátí stránka s méně než 20 záznamy nebo stránka prázdná:
GET /calls.xml?from=2009-10-11+10%3A30&page=15
Pokud vrátí prázdnou stránku:
<nil-classes type="array"/>
Tato data lze získat i ve formátu JSON:
GET /calls.json?from=2009-10-11+10%3A30
[{"answered_by_user_id":null,
"answered_at":null,
"inbound":true,
"hungup_at":null,
"caller_name":null,
"recording_file_name":null,
"created_at":"2009/10/11 13:41:59+02:00",
"outbound_from_external_number":null,
"bridge_start_at":"2009/10/11 13:42:19+02:00",
"caller_number":"777123456",
"recorded":true,
"voice_mail_file_name":null,
"transfer_description":"Nova objednavka",
"task_id":null,
"id":13576,
"dialed_number":"245008328",
"transferred_to_number":null}]
GET /recipes.json
Vrátí JSON s plány hovorů pro přidělená čísla. Plány jsou stránkovány po 20 záznamech. Pro vrácení všech stran navyšujte parametr page do té doby, než se vám vrátí stránka s méně než 20 záznamy nebo stránka prázdná.
[{"contact_group_id":null, // ID skupiny kontaktů, je-li tento plán specifický pouze pro některou skupinu kontaktů
"number":"212212212", // Číslo, kterému je plán hovoru přiřazen
"number_id":10, // ID čísla, kterému je plán hovoru přiřazen
"name":null, // Jméno plánu, jedná-li se o opakující se část (v takovém případě je položka number prázdná)
"id":534, // ID plánu
"description":"zakaznicka linka"}] // Popis plánu hovoru
GET /recipes/534.json
Vrátí detail plánu hovoru.
{"number":"245008328",
"number_id":10,
"contact_group_id":null,
"name":null,
"id":534,
"items":
[{"remove_from_queue_after":null, //Po kolika sekundách se má pokračovat dalším krokem, pokud tento krok je "Zařadit do fronty skupiny"
"transfer_user_id":null, // ID uživatele, na kterého se má hovor přepojit při akci "transfer" nebo "transfer_to_mobile"
"action":"play", // Jméno akce, kterou tato položka plánu vykonává, seznam akcí níže
"menu_tries":1, // Počet možných chybných pokusů při akci "menu"
"phone_number":null, // Telefonní číslo, na které se má hovor přepojit při akci "call"
"url":null, // URL, na které se má předat řízení při akci "api"
"run_on_days":"every_day", // Časové omezení položky, může být jedna z "every_day" (každý den), "working_days" ( pracovní dny), "non_working_days" (v nepracovní dny), "business_hours" (v pracovní dobu), "outside_business_hours" (mimo nepracovní dobu)
"menu_timeout":0, // Počet sekund, které se čekají na zadání volby při akci "menu"
"recording_id":2722, // ID nahrávky, která se má přehrát v kroku "play", případně přehrávat jako zvonění
"ringing_length":20, // Délka zvonění v případě akce přepojování
"sequence":1, // Pořadí kroku v plánu hovoru
"run_before":"00:00", // Časové omezení, do kdy v rámci dne se má položka provádět
"transfer_description":null, // Popis přepojení, zobrazuje se např. na displeji telefonu
"continue_with_recipe_id":null, // ID plánu hovoru, kterým se má pokračovat v případě položky typu "continue_with"
"run_after":"00:00", // Časové omezení, od kdy v rámci dne se má položka provádět
"id":119, // ID položky
"group_call_kind":null, // Druh vytáčení hovorů na skupinu uživatelů v případě položky "transfer_to_group", může být jedna z "in_order" (dle pořadí ve skupině), "least_idle" (nejdéle bez hovoru) nebo "at_once" (všichni najednou)
"call_group_id":null, // Skupina uživatelů, na kterou se mají hovory směrovat v případě položky "transfer_to_group", případně přijemci hlasové zprávy v případě akce "voice_mail"
"text_to_speak":null, // Text, který se má přečíst při akci "read"
"female": true // Má-li být hlas pro akci "read" ženský nebo mužský
}]}
POST /recipe_items.json
Založí novou položku plánu hovoru a umístí jí na jeho konec. Vrací buď 200 OK a v těle JSON s daty položky nebo 422 Unprocessable Entity a v těle seznam chyb. V těle požadavku musí být minimálně:
"recipe_item":{
"recipe_id":534, // ID plánu hovoru, do kterého se má položka zařadit
"action":"play"// Název akce, kterou bude položka provádět, seznam akcí níže
}
Dále zde mohou být libovolné další položky, které jsou vidět výše ve výpisu detailu plánu hovoru v položce "items".
PUT /recipe_items/5304.json
Aktualizuje položku plánu hovoru s daným ID. Tělo požadavku vypadá obdobně, jako v případě vytváření položky.
DELETE /recipe_items/5304.json
Smaže položku plánu hovoru s daným ID.
| Kód akce | Popis |
|---|---|
| play | Přehrát |
| read | Přečíst |
| menu | Výběr |
| transfer | Přepojit na VoIP telefon |
| transfer_to_mobile | Přepojit na mobilní telefon |
| transfer_to_group | Zařadit do fronty skupiny |
| call | Vytočit |
| voice_mail | Nahrát zprávu |
| api | Předat řízení |
| mobility_extension | Spojit s číslem |
| continue_with | Pokračuj opakující se částí |
GET /numbers/10.json
Vrátí detail přiděleného telefonního čísla. Funkcionalita ring_hook_url a transfer_hook_url je vysvětlena níže v části Webhooky.
{"id":"10",
"number":"212212212",
"ring_hook_url":null,
"transfer_hook_url":null}
PUT /numbers/10.json
Aktualizuje číslo. Vrací buď 200 OK a v těle JSON s daty čísla nebo 422 Unprocessable Entity a v těle seznam chyb. Měnit lze pouze ring_hook_url nebo transfer_hook_url.
"number":{"ring_hook_url":"https://moje.url.cz",
"ring_hook_url": null}
Chcete vašim operátorům zobrazit informace o volajícím ve chvíli, kdy jím zvoní nový hovor? Lze využít tzv. webhooku, tedy URL, na které Telfa pošle přes HTTP POST informace o právě zvonícím hovoru.
<call>
<id>345032</id>
<caller_number>777123456</caller_number>
<dialed_number>245008328</dialed_number>
<start>2009-10-11T13:41:59+02:00</start>
<ring_start_at>2009-10-11T13:42:05+02:00</ring_start_at>
<transferred_to>jan.kubr.livispace.cz</transferred_to>
<transfer_description>Nova objednavka</transfer_description>
</call>
Podobné XML můžete dostat i ve chvíli, kdy operátor hovor zvedne:
<call>
<id>345032</id>
<caller_number>777123456</caller_number>
<dialed_number>245008328</dialed_number>
<start>2009-10-11T13:41:59+02:00</start>
<answered_at>2009-10-11T13:42:10+02:00</answered_at>
<answered_by_login>jan.kubr.livispace.cz</answered_by_login>
<transfer_description>Nova objednavka</transfer_description>
</call>
Webhooky se dají nastavit buď centrálně pro všechna vaše čísla (na vyžádání) nebo přes API pomocí aktualizace čísla, viz předchozí sekce. Pokud si chcete tyto informace od serveru vyžádat sami, je to možné, opět viz předchozí sekce.
V plánu hovoru:
Volá URL:
POST http://example.com/telfa_handler?vlastni=hodnota&caller_number=777123321&called_number=245008328
Při položení hovoru přidá parameter hangup=true, tj.:
POST http://example.com/telfa_handler?vlastni=hodnota&caller_number=777123321&called_number=245008328&hangup=true
Jako odpověď na výše uvedený dotaz je třeba poslat JSON s akcí, která se má vykonat. Po skončení akce je výše uvedené URL zavoláno znovu (s výjimkou akce Položit).
Zvednout:
{
"action": "answer"
}
Položit:
{
"action": "hangup"
}
Přehrát:
{
"action": "play",
"recording_id": "4"
}
Přepojit:
{
"action": "transfer",
buď:
"transfer_user_login": "jan.kubr.livispace.cz",
nebo:
"transfer_user_id": "2",
#nepovinne:
"recording_id": "2",
"transfer_description": "Fakturace",
"ringing_length": "60",
}
Vytočit:
{
"action": "call",
"number": "777123321",
#nepovinne:
"recording_id": "2",
"ringing_length": "60",
}
Nahrát zprávu:
{
"action": "voice_mail",
"call_group_id": "2",
}
{
"action": "voice_mail",
"flempo_team_id": "12",
}
Výběr:
{
"action": "menu",
"recording_id": => "4",
#nepovinne:
"menu_timeout": "10",
"max": "1",
"terminator": "#"
}
Předání řízení zpět do statického plánu hovoru:
{
"action": "resign",
}
Dokumentace API nemusí být úplná, pokud vám něco chybí, kontaktujte nás. Funkce webhook a plná kontrola vyžadují aktivaci z naší strany.