Парковка вызова и соединение с припаркованным вызовом (/valet_park/)
Протестировать методы API можно на странице интерактивного обозревателя API и без написания кода
Некоторые ресурсы, описанные на странице, по умолчанию могут быть не доступны из-за типа приложения (см. Создание и авторизация приложений)
Парковка вызова и соединение с парковочным слотом выполняется по аналогии с ресурсом управления вызовом с помощью ресурса
PUT /extension/{extension_id}/valet_park/{call_api_id}
Описание структур данных
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
extension_id | string | да | Идентификатор внутреннего номера |
call_api_id | string | да | Идентификатор вызова |
action | string | да | Параметр действия. Возможные значения: park, bridge или slots |
slot | integer | нет | Номер слота. Обязателен при действии park или slots |
Управление вызовом
Для управления вызовом необходимо выполнить API-запрос PUT на следующий URL, указав extension_id и call_api_id:
PUT /extension/{extension_id}/valet_park/{call_api_id}
В теле запроса должен быть указан параметр действия (action) и опционально номер слота (slot).
Действия по управлению вызовом
Действие | Описание |
---|---|
park | Припарковать вызов. Указание номера слота обязательно. Количество слотов равно количеству возможных одновременных вызовов. |
bridge | Соединить текущий вызов со случайным, если слот не указан, либо с указанным слотом, если он задан явно |
slots | Указание номера слота обязательно. Уточняет, какой UUID (часть от call_api_id) там припаркован |
Пример
Поступил входящий звонок (также может быть и исходящий) на внутренний номер 341 c подпиской на событие answer:
213.170.66.152 - - [04/Jun/2020 13:33:10] "GET /?CalledExtension=022*341@siptest.ringme.ru&
CalledExtensionID=34414&CallerExtension=022*200@siptest.ringme.ru&CallerExtensionID=32494&EventType=answer&
CallID=c69226e0a64e11eaa0086fd86d94a0e0&CallerIDNum=000117443&CallerIDName=via200t&CalledDID=78123093582&
CallStatus=ANSWER&CallFlow=in&CalledNumber=022*341&SubCallID=34414-c8874b88a64e11eaa0406fd86d94a0e0
&CallAPIID=3232240860-37b98fb2-a66c-11ea-ae69-6fd86d94a0e0&EventTime=1591266790576760 HTTP/1.1" 200 -
Нам нужно запомнить CallAPIID, по нему будет запрошен ресурс PUT /extension/{extension_id}/valet_park/{call_api_id}. Также из CallAPIID можно узнать UUID, этот UUID возвращается при запросе информации по слоту. Можно будет понять, вызов этого CallAPIID все еще на парковке или его там уже нет. Отправим запрос:
Если парковочный слот занят, будет получено сообщение об ошибке: 'slot already have parked member, slot is full'
.
Если вторая сторона разговора будет поставлена в слот ожидания, то на внутреннем номере будет озвучен номер слота и произойдет окончание разговора.
По второму звонку (также не важно, входящий или исходящий), используя call_api_id звонка, можно сразу узнать, есть ли кто-нибудь в слоте, чтобы соединить текущий вызов с ним или не делать этого, если ожидающий вышел. Тело запроса в рамках этого примера:
{
"action": "slots",
"slot" : "6"
}
Ответ системы:
{
u'slot': u'6',
u'UUID': u'37b98fb2-a66c-11ea-ae69-6fd86d94a0e0'
}
call_api_id вызова на парковке: 3232240860-37b98fb2-a66c-11ea-ae69-6fd86d94a0e0
UUID: 37b98fb2-a66c-11ea-ae69-6fd86d94a0e0
Таким образом UUID в слоте и запаркованный вызов можно соотнести.
Чтобы соединить текущий вызов с конкретным слотом, необходимо отправить запрос с телом:
Можно соединить текущий вызов со случайным слотом, для этого не нужно указывать слот: