Парковка вызова и соединение с припаркованным вызовом (/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

Припарковать вызов. Указание номера слота обязательно. Количество слотов равно количеству возможных одновременных вызовов.
Timeout ожидания вызова на парковке — 3 минуты, по истечении этого времени вызов вернется к внутреннему номеру, от имени которого произошла парковка

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 в слоте и запаркованный вызов можно соотнести.

Чтобы соединить текущий вызов с конкретным слотом, необходимо отправить запрос с телом:

Можно соединить текущий вызов со случайным слотом, для этого не нужно указывать слот:

Ресурсы раздела “Внутренний номер”

PUT /extension/{extension_id}/valet_park/{call_api_id}

Обновить вызов (припарковать или снять с парковки)

Параметры URL

Имя

Тип

Имя

Тип

call_api_id

string

extension_id

string

Параметры JSON

Имя

Тип

Имя

Тип

action

string

slot 

long

Поля ответа

Имя

Тип

Имя

Тип

action

string

slot 

long