'ivrapi' capability для WebSocket Token API
- Обзор
- Запросы
- Взятие управления
- Инициация компонентов
- Инициация выполнения стандартного компонента (
ivrapi_component_apply
) - Прерывание выполнения ранее инициированного компонента (
ivrapi_component_terminate
) - Работа с файлами
- Получение временной ссылки на скачивание файла (
ivrapi_file_get_path
) - Заливка файла во временную папку сценария (
ivrapi_file_upload_temp
) - Заливка файла в статическое хранилище (
ivrapi_file_upload_static
)
- События
- Ссылки
Обзор
Предоставляет интерфейс для принятия управления IVR сценарием и инициации обработки вызова различными компонентами.
Запросы
Взятие управления
Чтобы принять управление во внешнем модуле, в сценарии IVR должен быть размещен компонент Внешнее управление через API.
В момент, когда начинается его обслуживание в конкретной сессии, подписчикам отправляется событие 'ivrevents.api_start' с привязкой к этой сессии и конкретному компоненту.
Соответственно приложение должно быть подписано на события класса ivrevents
.
После получения события любое из приложений может принять управление отправкой запроса ivrapi_accept
через API текущего модуля. Только одно подключение может захватить управление - то, чей запрос ivrapi_accept
будет первым обработан.
В дальнейшем можно перехватить управление отправкой запроса ivrapi_reaccept
, что имеет смысл в случае разрыва websocket-соединения.
Отказаться от управления можно отправкой запроса ivrapi_abort
. В этом случае сценарий продолжит выполнение следующего компонента.
Также управление следует прекратить при получении события 'ivrevents.api_stop'. В этом случае не требуется отправлять никаких запросов в связи с управляемой сессией.
Поле key
в запросах должно содержать значение, совпадающее с аналогичным значением из события ivrevents.api_start
.
[ "notify", { "class": "ivrevents", "type": "api_start", "eventts": 1602002803754, "data": { "callid": "rB2-002-SuDtIE-01-2582368067@192.168.0.149", "cid": "267278f0-0642-00af-0ac9-b80000000006", "componentid": 14, "componentname": "Внешнее управление 3", "ivrid": "rDlg-006-ZevQbP", "ivrts": 1602002800707, "key": "abc", "params": "{\"asdf\":\"zxcv\"}", "sm_id": "f9098ae9-0642-00af-0ad1-880000000006" } } ]
Принятие управления (ivrapi_accept
)
[ "ivrapi_accept", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll" } ]
Инициация компонентов
Во время принятого управления внешнему модулю доступно выполнение любых стандартных компонентов сценария запросом ivrapi_component_apply
.
Инициированный таким образом компонент может быть прерван запросом ivrapi_component_terminate
.
Инициация выполнения стандартного компонента (ivrapi_component_apply
)
Для инициации компонента необходимо разместить в поле data
объект с настройками компонента в соответствии с тем, как описано в документации по компонентам.
-
Обязательно должно присутствовать поле
oType
, сообщающее системе о типе компонента (из перечня компонентов платформы Era). -
Другие свойства, настраивающие компонент.
-
Поля
name
,oId
дефолтятся и могут быть опущены, хотяoId
будет сообщаться в событиях. -
Необязательно заполнять свойства
transfer*
, а также те, которые возвращают значения - они декорируются автоматически. -
Необязательными также являются поля, имеющие значения по умолчанию, а также не используемые при выбранных режимах работы компонента.
-
При завершении компонента отправляется событие
ivrapi_component_stopped
(ниже), сообщающее по какой ветке перехода компонент вышел, а также список всех возвращаемых значений, в обычном режиме сохраняемых в переменные. -
Типы компонентов и их свойства - в документации к платформе Era.
-
Можно пользоавться следующим подходом - создать сценарий через админку, настроить компонент, сохранить сценарий, открыть его содержание, найти компонент в json и взять его содержимое в качестве
data
.
Вплоть до получения события о завершении работы компонента не следует пытаться инициировать новые компоненты - система отфильтрует эти запросы и будет отвечать на них ошибкой.
[ "ivrapi_component_apply", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll", "data": { "oType": 204, "mode": 0, "file": ":GS_PUB/x/y/14.mp3" } } ]
[ "ivrapi_component_apply", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll", "data": { "oType": 208, "recTimeSec": "10", "maxSymbolCount": "3", "interruptSymbols": "4, 5, 6", "abortOnSilence": 0 } } ]
[ "ivrapi_component_apply_result", { "qid": 0.1234, ... } ]
// Пример перевода звонка "data": {"oType":203, "number": "13", "reinviteMode":2} // Завершение звонка "data": {"oType":201} // Воспроизведение ранее загруженного во временную папку файла "data": {"oType":204, "mode":0, "file":":TEMP/14.mp3"}
Прерывание выполнения ранее инициированного компонента (ivrapi_component_terminate
)
Ранее инициированный компонент может быть корректно прерван в любое время. Переходить к инициации следующего компонента следует дождавшись ответа на отправленный запрос.
[ "ivrapi_component_terminate", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll" } ]
Получение временной ссылки на скачивание файла (ivrapi_file_get_path
)
Сценарий периодически генерирует файлы (например в результате записи или приема факса). Внутренний путь к сгенерированному таким образом файлу возвращается в результате завершения работы инициированного компонента. Это значение содержится в поле, соответствующем переменной принимающей выходное значение.
Такой файл может быть скачан внешней системой через публичную ссылку в REST-API, пока сценарий активен. Для этого необходимо получить эту публичную ссылку с помощью данного запроса. Ссылка будет доступна в течение 5 минут. Даже если сценарий к этому времени завершится.
[ "ivrapi_file_get_path", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll", "path": ":TEMP/ivr_records/ivr_000006_1602234901218.wav" } ]
Заливка файла во временную папку сценария (ivrapi_file_upload_temp
)
При необходимости воспроизвести динамический файл, или отправить факс, почту и т.д. может потребоваться залить файл на сервер и сделать его доступным сценарию для последующего использования компонентами. Для этого необходимо выполнить данный запрос. Сервер самостоятельно скачает файл с указанного URL, разместит его во временном каталоге сценария и вернет корректный путь для использования в компонентах сценариев. Файл автоматически будет удален после завершения сценария.
[ "ivrapi_file_upload_temp", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll", "url": "http://192.168.0.112/14.mp3" } ]
Заливка файла в статическое хранилище (ivrapi_file_upload_static
)
В некоторых случаях может понадобиться в большом количестве одновременно работающих сценариев или на среднесрочной перспективе воспроизводить один и тот же файл.
Заливка его в каждую сессию может быть неприемлема в силу естественно возникающей паузы, а также нагрузки на сеть.
В этом случае файл может быть загружен в статическую папку заблаговременно, а затем применяться в любых сценариях.
Загрузка производится в указанное файловое хранилище в том виде, как задаются пути при настройке сценариев (поле destpath
).
Необходимо выполнить данный запрос. Сервер самостоятельно скачает файл с указанного URL, разместит его по указанному пути.
При последующей инициации компонентов в качестве путей к файлу следует указывать то же значение, что находится в поле destpath
.
[ "ivrapi_file_upload_temp", { "qid": 0.1234, "key": "abc", "ivrid": "rDlg-006-Sm41ll", "url": "http://192.168.0.112/14.mp3", "destpath": ":GS_PUB/x/y/" } ]
[ "ivrapi_file_upload_static_result", { "qid": 0.1234, "result": ":GS_PUB/a/b/c/abc.wav" } ]
Основные наименования путей для размещения:
-
:SYNC_COMMON
или:SYN_MEDIA
-
:SYNC_DOMAIN_DATA
или:SYN_DOM
-
:SYNC_DOMAIN_COMMON
или:SYN_DOM_MEDIA
-
:SITESHARE_PUBLIC
или:SS_PUB
-
:SITESHARE_DOMAIN_DATA
или:SS_DOM
-
:GLOBALSHARE_PUBLIC
или:GS_PUB
-
:GLOBALSHARE_DOMAIN_DATA
или:GS_DOM
Стандартным значением считается :SYNC_DOMAIN_DATA
.
Заливка может производиться также без ссылки на сессию со взятым управлением. Для этого служит метод `file_upload_static'
[ "file_upload_static", { "qid": 123, "url": "http://192.168.0.12/abc.wav", "destpath":":GS_PUB/a/b/c" } ] ---
[ "file_upload_static_result", { "qid": 123, "result": ":GS_PUB/a/b/c/abc.wav" } ] ---
События
Завершение работы компонента (ivrapi_component_stopped
)
[ "ivrapi_component_stopped", { "oId": 0, "transferKey": "transfer", "results": { "dtmfBuffer": "78" } } ]
Получен DTMF (ivrapi_dtmf
)
Событие дублирует сообщение callevents.dtmf
, но приходит раньше и только в рамках захваченного управления через API.
[ "ivrapi_dtmf", { "key": "abc", "ivrid": "rDlg-006-WbVFRX", "mode": "idle", "dtmf":"5" } ]
[ "ivrapi_dtmf", { "key": "abc", "ivrid": "rDlg-006-WbVFRX", "mode": "component", "oId": 0, "dtmf": "5" } ]