Описание

С помощью сервиса 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

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