Описание

С помощью сервиса custom callback абонент может заказать callback (обратный вызов).

В сервисе custom callback важно выделить следующие стороны:

  1. Платформа - платформа Eltex, которая реализует услугу callback;
  2. Владелец - организация которая продает услугу callback (владеет Платформой);
  3. Клиент - клиент Владельца, который купил услугу callback. Предоставляет услугу callback своим Абонентам;
  4. Оператор - оператор Клиента. От имени(номера) Оператора будет сделан callback в сторону Абонента;
  5. Абонент - абонент Клиента, который пользуется услугой 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-сценарий обратного вызова:

  1. Создать новый скрипт для исходящих вызовов:
  2. Добавить в него 2 блока "Установление соединения с абонентом (Connect)" и "Ожидание завершения разговора (Talk)"
  3. В первом блоке "Connect" выбрать "Установление соединения с вызывающим абонентом";
  4. Настроить звуковые файлы для оповещения Оператора и фоновой музыки;
  5. Во втором блоке "Connect" выбрать "Установление соединения с вызываемым абонентом";
  6. Также настроить звуковые файлы для оповещения Абонента и фоновой музыки;
  7. Для блока "Talk" можно добавить описание;
  8. Сохранить скрипт.

Теперь имя или 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

Убеждаемся, что сценарий отрабатывает корректно.