Парковка и соединение с парковочным лотом выполняется с помощью ресурса
PUT /extension/{extension_id}/valet_park/{call_api_id}
По аналогии с ресурсом управления вызовом
В теле запроса должен быть указан параметр действия (action) и опционально номер слота
в виде:
{ “action” : “действие” , “slot” : “номер слота от 1 до 9 (опционально)”}
Действия по управлению вызовом
Действие | Тип | Описание |
---|---|---|
| string | Припарковать вызов. При указании слота вызов будет припаркован в нужный слот. Без указания слота будет выбран случайный слот. Всего слотов доступно от 1 до 9. timeout ожидания на парковке- 3 минуты, по истечении этого времени вызов вернется к добавочному, от имени которого произошла парковка. |
| string | Соединить текущий вызов с случайным, если слот не указано, либо с указаным слотом, если он задан явно |
| string | При указании слота- уточняет какой uuid (часть от call_api_id) там припаркован. Без указания слота ресурс вернет свободные слоты в данный момент. может быть от 1 до 9 |
Пример использования:
Входящий звонок(может быть и исходящий - не важно) на добавочный 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 (3232240860-37b98fb2-a66c-11ea-ae69-6fd86d94a0e0) пригодится, если понадобится выяснить стоит ли в данный момент на паркове вызов с этим id- часть от call_api_id в виде UUID будет возвращать запрос на действие slots с указанием слота
Если отправить запрос на PUT /extension/{extension_id}/valet_park/{call_api_id} с телом {"action": "park", "slot" : "6"} Если парковочный слот занят - будет ошибка : 'slot already have parked member, slot is full' Без указания параметра slot- будет парковка в первый свободный слот. Если вторая сторона разговора будет поставлена в слот ожидания, то на добавочном (где сработал event) произойдет окончание разговора. По второму звоноку (также не важно входящий, исходящий) Используя {call_api_id} звонка можно сразу узнать есть ли кто-нибудь в слоте (чтобы забриджить с ним, или не делать этого, если ожидающий вышел), запросить свободные слоты (чтобы узнать какой слот свободный для парковки) запрос с телом в рамах этого примера: {"action": "slots", "slot" : "6"} ответ: {u'slot': u'6', u'UUID': u'37b98fb2-a66c-11ea-ae69-6fd86d94a0e0'} Чтобы узнать какие слоты свободные - не нужно указывать слот: запрос с телом {"action": "slots"} call_api_id вызова на парковке: 3232240860-37b98fb2-a66c-11ea-ae69-6fd86d94a0e0 UUID: 37b98fb2-a66c-11ea-ae69-6fd86d94a0e0 Таким образом uuid в слоте и запаркованный вызов можно соотнести. Чтобы забриджить с конкретным слотом: {"action": "bridge", "slot" : "6"} Можно забриджить также со случайным слотом не указывая слот: {"action": "bridge"}