Настройка сервиса "Обратный вызов по запросу (Custom callback)"
Описание
С помощью сервиса custom callback абонент может заказать callback (обратный вызов).
В сервисе custom callback важно выделить следующие стороны:
- Платформа — платформа Eltex, которая реализует услугу callback;
- Владелец — организация которая продает услугу callback (владеет Платформой);
- Клиент — клиент Владельца, который купил услугу callback. Предоставляет услугу callback своим Абонентам;
- Оператор — оператор Клиента. От имени(номера) Оператора будет сделан callback в сторону Абонента;
- Абонент — абонент Клиента, который пользуется услугой callback.
Действия производимые описанными выше сторонами:
1) Клиент создает виджет на Платформе используя команды cli или http.
Виджет — карточка, которая содержит следующие данные:
- номер — номер Оператора.
- имя — имя виджета.
- скрипт — название ivr-скрипта. Ivr-скрипт содержит вызовы до Оператора и Абонента.
В ivr-скрипте можно настраивать проигрываемую информацию как Оператору, так и Абоненту.
Например:1. вызвать оператора *Клиента*; 2. проиграть информацию о том, что был заказан callback; 3. играть оператору *Клиента* фоновую музыку; 4. сделать вызов на *Абонента*; 5. При ответе *Абонента*: проиграть информацию *Абоненту* о том, что сработал callback; 6. При ответе *Абонента*: проиграть информацию *Абоненту* о том, что он будет соединен с оператором.
- описание — данное поле должно отображать информацию о назначении данного виджета.
При создании виджета генерируется идентификатор виджета(widget_id). Данный widget_id устанавливается Клиентом на свой сайт,
где будет заполняться web-форма на заявку callback-а.
2) Абонент заполняет заявку на callback в web-форме, предоставленной Клиентом, где Абонент должен указать:
- номер — на него будет произведен callback со стороны Оператора;
- время — в указанное время будет произведен callback со стороны Оператора;
- количество попыток — количество повторных callback-ов в случае не успешного callback-а. Опциональный параметр, по умолчанию равен 0;
- время между попытками — время между повторными callback-ами. Опциональный параметр, по умолчанию равен 900000 мсек (15 минут).
3) Обработчик заявки на callback вычисляет разницу в мсек между текущим моментом времени и моментом времени,
когда должен активироваться callback.
Затем обработчик через http-запрос оправляет на Платформу
следующие данные:
1. SUBSCRIBER_NUMBER — номер *Абонента*; 2. TIME — вычисленная разница по времени (мс); 3. ATTEMPTS — количество попыток; 4. TIMEOUT — время между попытками (мс); 5. WIDGET_ID — идентификатор widget-а.
Обработчик должен знать куда отправлять http-запрос:
1. HOST — хост *Платформы*; 2. PORT — порт *Платформы*; 3. DOMAIN — домен на котором сгенерирован widget.
Просмотреть HOST и PORT можно посмотреть командой (rest_host & rest_port):
admin@mycelium1@ecss1:/$ system/tc/properties/info ┌────────────────┬────┬─────┐ │ Property │Node│Value│ ├────────────────┼────┼─────┤ │rest_host │ │ecss1│ │rest_port │ │8086 │ │session_lifetime│ │1800 │ └────────────────┴────┴─────┘ [exec at: 13.10.2019 10:01:29, exec time: 83ms, nodes: core1@ecss1]
Общая схема http-запроса:
GET http://HOST:PORT/DOMAIN/service/custom_cb/WIDGET_ID?number=SUBSCRIBER_NUMBER&time=TIME&attempts=ATTEMPTS&timeout=TIMEOUT HTTP/1.1
Пример http-запроса:
GET http://localhost:8086/test.domain/service/custom_cb/054b4a0a684aa67c?number=102&time=1&attempts=1&timeout=10000 HTTP/1.1
Пример http-запроса через curl:
curl -G -d "number=102&time=1&attempts=1&timeout=10000" http://localhost:8086/d.local/service/custom_cb/054b4a0a684aa67c --verbose
или:
curl -G http://localhost:8086/d.local/service/custom_cb/054b4a0a684aa67c?number=102\&time=1\&attempts=1\&timeout=10000 --verbose
4) Платформа, получив http-запрос, обрабатывает его:
1. Взводится таймер на callback (через какой промежуток времени сделать callback);
2. По приходу таймера на callback — выполняется callback по ivr-сценарию указанном в виджете;
3. В случае не успешного соединения(со стороны *Оператора* или *Абонента* телефонный номер не отвечает, поступил сигнал занято и т.п.):
3.1 Если не использованы все попытки на повторное выполнение сallback-а, то взводится таймер на повторный callback(используется попытка). Переход к пункту 2; 3.2 Если использованы все попытки, то callback помечается как неудавшийся.
Виджет, сторона клиента:
1. номер абонента Б(кому перезвонить);
2. время во сколько перезвонить;
3. код клиента.
Виджет, сторона сервера:
1. код клиента(виджета):
- номер оператора от имени которого перезваниваем;
- количество повторных попыток дозвониться;
- имя сценария исходящего вызова;
- файл, озвучивающий имя клиента.
2. номер абонента Б(кому перезвонить).
Команды управления сервисом через Cocon(CLI) приведены в разделе Команды управления виджетом сервиса "custom callback"
Команды управления сервисом помощью API Http-terminal приведены в разделе Hc_custom_cb — Управление виджетом сервиса "custom callback"
Общая блок-схема работы виджета
Пример пошаговой настройки виджета
Для начала нужно определиться с параметрами, например:
- Номер телефона оператора, который будет обрабатывать заявки на обратный вызов — 240475
Время, через которое будет сделан вызов — 30 сек.;
Количество попыток дозвона при занятости/неответе — 2;
Время между попытками — 60 сек;
Куда отправлять http-запрос:
- Хост Платформы — 192.168.1.21;
Порт *Платформы — 8086;
Домен на котором сгенерирован widget — biysk.local.
Далее создать IVR-сценарий обратного вызова:
- Создать новый скрипт для исходящих вызовов:
- Добавить в него 2 блока "Установление соединения с абонентом (Connect)" и "Ожидание завершения разговора (Talk)"
- В первом блоке "Connect" выбрать "Установление соединения с вызывающим абонентом";
- Настроить звуковые файлы для оповещения Оператора и фоновой музыки;
- Во втором блоке "Connect" выбрать "Установление соединения с вызываемым абонентом";
- Также настроить звуковые файлы для оповещения Абонента и фоновой музыки;
- Для блока "Talk" можно добавить описание;
- Сохранить скрипт.
Теперь имя или id этого скрипта можно будет использовать в команде создания виджета
С помощью команды CLI создаем новый виджет:
admin@mycelium1@ecss1:/$ domain/biysk.local/custom_cb/new 240475 cb_475 custom_cb_out "Виджет дежурного менеджера" Widget was created: <<"0622e4c44281371f">> [exec at: 13.10.2019 10:23:48, exec time: 75ms, nodes: core1@ecss1]
Проверяем работу:
bsk@bsk:~$ curl -G -d "number=89913699011&time=30000&attempts=2&timeout=60000" http://192.168.1.21:8086/biysk.local/service/custom_cb/0622e4c44281371f --verbose * Trying 192.168.1.21... * Connected to 192.168.1.21 (192.168.1.21) port 8086 (#0) > GET /biysk.local/service/custom_cb/0622e4c44281371f?number=89913699011&time=30&attempts=2&timeout=60000 HTTP/1.1 > Host: 192.168.1.21:8086 > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < connection: keep-alive < server: Cowboy < date: Sun, 13 Oct 2019 03:32:00 GMT < content-length: 0 < * Connection #0 to host 192.168.1.21 left intact
Убеждаемся, что сценарий отрабатывает корректно.