Парковка и соединение с парковочным лотом выполняется с помощью ресурса
PUT /extension/{extension_id}/valet_park/{call_api_id}
По аналогии с ресурсом управления вызовом
В теле запроса должен быть указан параметр действия (action) и опционально номер слота
в виде:
{ “action” : “действие (string)” , “slot” : “номер слота (integer)”}
Действие | Тип | Описание |
---|---|---|
|
|
|
|
| обязателен при действии |
Действия по управлению вызовом
Действие | Тип | Описание |
---|---|---|
| string | Припарковать вызов. Указание номера слота обязательно. Количество слотов = количеству возможных одновременных вызовов timeout ожидания на парковке- 3 минуты, по истечении этого времени вызов вернется к добавочному, от имени которого произошла парковка. |
| string | Соединить текущий вызов с случайным, если слот не указано, либо с указанным слотом, если он задан явно |
| string | Указание номера слота обязательно. Уточняет какой 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 все еще на парковке или его там уже нет.
Если отправить запрос на PUT /extension/{extension_id}/valet_park/{call_api_id} с телом {"action": "park", "slot" : "6"} Если парковочный слот занят - будет ошибка : '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 в слоте и запаркованный вызов можно соотнести. Чтобы забриджить с конкретным слотом: {"action": "bridge", "slot" : "6"} Можно забриджить со случайным слотом не нужно указывать слот: {"action": "bridge"}