Webhooks
Webhooks - это механизм оповещения пользователей системы о звонках и SMS.
При изменении статуса очередного звонка или приеме SMS платформа ТелеСтор отправляет HTTP-запрос (POST), в теле которого в формате JSON содержится информация о звонке или SMS.
Список HTTP/HTTPS URL, на которые необходимо отправить этот запрос, пользователь с правами администратора задает в своем Личном кабинете услуги ТелеВАТС, на странице Настройки - Дополнительно
.
Пример запроса для звонка:
$ cat <<EOF > body.json
{
"call": {
"a_account": "",
"a_name": "",
"a_number": "79112223344",
"b_account": "0231",
"b_number": "78123332332",
"id": "1592-294330-60361",
"r_number": "",
"start_timestamp": "2020-06-16T07:59:03.734126894Z",
"type": "incoming"
},
"event":"invite",
"source":"account",
"vpbx":"000001"
}
EOF
$ curl -v -X POST -H "Content-Type: application/json" --data @body.json "http://localhost:8080/webhooks"
Пример запроса для SMS:
$ cat <<EOF > body.json
{
"sms": {
"a_number": "79112223344",
"b_number": "78123332332",
"start_timestamp": "2020-06-16T07:59:03.734126894Z",
"type": "outgoing",
"message": "Тестовое сообщение"
},
"event":"sms",
"vpbx":"000001"
}
EOF
$ curl -v -X POST -H "Content-Type: application/json" --data @body.json "http://localhost:8080/webhooks"
Информация о звонке
В каждом запросе платформа ТелеСтор передает информацию о звонке в формате JSON:
Ключ | Тип | Описание | Обязательный | Значения |
---|---|---|---|---|
event | строка | имя события | да | invite - поступление вызова, answer - ответ абонента, hangup - завершение вызова, begin - начало разговора, end - конец разговора |
source | строка | источник события (см. раздел Источники событий о звонках) | да | number - городской номер, neighbour - "свой" номер, sip-number - SIP-адрес, account - внутренний аккаунт, talk - разговор |
vpbx | строка | код клиента | да | |
call | объект | параметры звонка | да | |
call.id | строка | идентификатор звонка | да | |
call.type | строка | тип вызова | да | incoming - входящий, outgoing - исходящий, missed - пропущенный, internal - внутренний, fax - принятый факс, voicemail - принятое голосовое сообщение |
call.a_name | строка | имя вызывающего абонента | ||
call.a_number | строка | номер вызывающего абонента в формате Е.164 | да | |
call.b_number | строка | номер вызываемого абонента в формате Е.164 | да | |
call.r_number | строка | номер абонента, который переадресовал вызов, в формате Е.164 | ||
call.a_account | строка | идентификатор аккаунта, который инициировал вызов | ||
call.b_account | строка | идентификатор аккаунта, на который поступил вызов | ||
call.r_account | строка | идентификатор аккаунта, который переадресовал вызов | ||
call.a_def | строка | номер мобильного абонента, который инициировал вызов (в случае инициации вызова с SIM-карты) | ||
call.b_def | строка | номер мобильного абонента, на который поступил вызов (в случае завершения вызова на SIM-карту) | ||
call.neighbour | строка | идентификатор "своего" номера в формате user@domain.com | ||
call.start_timestamp | временная метка | момент поступления вызова | да | |
call.answer_timestamp | временная метка | момент ответа абонента на вызов | ||
call.hangup_timestamp | временная метка | момент завершения вызова | ||
call.hangup_cause | строка | причина завершения вызова (см. раздел Причины завершения вызова) | ||
call.hangup_cause_code | число | код причины завершения вызова (см. раздел Причины завершения вызова) | ||
call.record | строка | URL файла с записью разговора | ||
call.record_stereo | строка | URL файла с записью разговора в стерео (срок хранения 1 неделя) | ||
call.fax | строка | URL файла с принятым факсимильным документом | ||
call.voicemail | строка | URL файла с записью, оставленной в голосовой почте |
Информация о SMS
В каждом запросе платформа ТелеСтор передает информацию о SMS в формате JSON:
Ключ | Тип | Описание | Обязательный | Значения |
---|---|---|---|---|
event | строка | имя события | да | sms - отправка или получение SMS |
vpbx | строка | код клиента | да | |
sms | объект | параметры SMS | да | |
sms.type | строка | тип SMS | да | incoming - входящее, outgoing - исходящее |
sms.a_number | строка | номер вызывающего абонента в формате Е.164 | да | |
sms.b_number | строка | номер вызываемого абонента в формате Е.164 | да | |
sms.start_timestamp | временная метка | момент поступления вызова | да | |
sms.message | строка | содержимое сообщения | да |
Источники событий о звонках
В платформе ТелеСтор есть 5 источников событий о звонках:
- городской номер - события возникают при поступлении вызова на городской номер на входе в виртуальную АТС, ответе любого абонента виртуальной АТС и завершении вызова;
- "свой" номер - события возникают при поступлении вызова на "свой" номер на входе в виртуальную АТС, ответе любого абонента виртуальной АТС и завершении вызова;
- SIP-адрес - события возникают при поступлении вызова на SIP-адрес из сети Интернет на входе в виртуальную АТС, ответе на него любым абонентом виртуальной АТС и завершении вызова;
- внутренний аккаунт - события возникают при поступлении вызова на определенный аккаунт внутри виртуальной АТС, при ответе вызова с участием данного аккаунта, а также при завершении вызова для данного внутреннего аккаунта;
- разговор - события возникают в начале и конце разговора между двумя абонентами.
Таким образом обеспечивается возможность отслеживать не только состояние вызовов в целом, но и получать оповещения о переводах вызова между внутренними абонентами.
Причины завершения вызова
Код | Причина |
---|---|
0 | Unspecified (unknown) |
1 | Unallocated Number |
2 | No Route Transit Net |
3 | No Route Destination |
6 | Channel Unacceptable |
7 | Call Awarded Delivered |
16 | Normal Clearing |
17 | User Busy |
18 | No User Response |
19 | No Answer |
20 | Subscriber Absent |
21 | Call Rejected |
22 | Number Changed |
23 | Redirection To New Destination |
25 | Exchange Routing Error |
27 | Destination Out Of Order |
28 | Invalid Number Format |
29 | Facility Rejected |
31 | Normal Unspecified |
30 | Response To Status Enquiry |
34 | Normal Circuit Congestion |
38 | Network Out Of Order |
41 | Normal Temporary Failure |
42 | Switch Congestion |
43 | Access Info Discarded |
44 | Requested Chan Unavail |
50 | Facility Not Subscribed |
52 | Outgoing Call Barred |
54 | Incoming Call Barred |
57 | Bearer Capability Not Auth |
58 | Bearer Capability Not Avail |
63 | Service Unavailable |
65 | Bearer Capability Not Impl |
66 | Chan Not Implemented |
69 | Facility Not Implemented |
79 | Service Not Implemented |
81 | Invalid Call Reference |
88 | Incompatible Destination |
95 | Invalid Msg Unspecified |
96 | Mandatory IE Missing |
97 | Message Type Non Exist |
98 | Wrong Message |
99 | IE Non Exist |
100 | Invalid IE Contents |
101 | Wrong Call State |
102 | Recovery On Timer Expire |
103 | Mandatory IE Length Error |
111 | Protocol Error |
127 | Interworking |
487 | Originator Cancel |
601 | Attended Transfer |
Внешнее управление вызовами
Запросы с событиями отправляются асинхронно. В связи с этим для внешнего управления вызовами необходимо в настройках телефонного номера устанавливать голосовое приветствие, чтобы за время его проигрывания успеть получить ответ на запрос.
При отправке запроса с событием о поступлении входящего вызова на городской или "свой" номер платформа ТелеСтор учитывает последний непустой ответ.
Перед тем, как переадресовать вызов в соответствии с настройками номера, заданными через Личный кабинет, она выполняет следующие действия при наличии в полученном ответе непустых значений следующих ключей (в формате JSON):
Ключ | Тип | Действие |
---|---|---|
contact | строка | устанавливается имя вызывающего абонента |
prompt | строка | URL к голосовому файлу, который необходимо проиграть перед выполнением переадресацией. Файл должен быть в формате WAV (Microsoft PCM, 16 bit, mono 8000 Hz) |
dst | строка | переадресует входящий вызов на указанный в данном параметре номер (в формате E.164) или SIP-адрес (в формате user@domain.com), либо на внутренний аккаунт, последние 4 цифры которого указаны в данном параметре |
number | строка | при отсутствии параметра dst, в первую очередь, переадресует входящий вызов на указанный в данном параметре номер (в формате E.164) |
uri | строка | при отсутствии параметра dst, во вторую очередь, переадресует входящий вызов на указанный в данном параметре SIP-адрес (в формате user@domain.com) |
accounts | массив строк | при отсутствии параметра dst, в третью очередь, направляет вызов одновременно на внутренние аккаунты, идентификаторы которых указаны в данном массиве |
hangup | булев | завершить звонок после выполнения переадресации на номера, переданные в ответе |
hangupTimeout | число | таймаут принудительного завершения звонка после ответа абонента, секунды |
Пример ответа c параметром dst:
{
"contact": "Иван Иванов",
"dst": "78123332332"
}
Пример ответа без параметра dst:
{
"contact": "Иван Иванов",
"number": "78123332332",
"uri": "user@provider.com",
"accounts": [
"1000",
"1001"
]
}
Пример ответа c голосовым сообщением без переадресации:
{
"prompt": "https://www.telestore.ru/files/verified/test_welcome.wav",
"hangup": true
}
Пример ответа c параметром dst, с ограничением на длительность звонка в 10 минут:
{
"contact": "Иван Иванов",
"dst": "78123332332",
"hangupTimeout": 600
}
Таймауты
При отправке запросов определены следующие таймауты:
- на установление соединения: 2 секунды;
- на установление соединения и получение ответа: 15 секунд.