JavaScript

В своих старых вебинарах я рассказывал о реализации функции “звонк на ответственного” через разработку дополнительного web-сервиса без авторизации в bpm’online. Данный сервис позволяет определить контакта по номеру телефона, найти внутренний номер сотрудника, закрепленного за этим контактом и направить звонок непосредственно на него. Только если он не ответил на протяжение n-секунд, отправить по общему правилу.

В представленной мною реализации было несколько проблем:

  1. Сервис без авторизации, а значит, к нему легко получить доступ. Ничего, кроме внутреннего номера ответственного по заданному номеру клиента не увидят. Но, это все же не безопасный метод.
  2. Есть основание полагать, что после очередного обновления bpm’online, этот сервис перестанет работать и нужна будет повторная его установка.

В документации по разработке bpm’online 7.8 появилось описание интеграции с помощью веб-службы DataService. Как уверяют меня коллеги, этот функционал был давно, но, описание появилось только начиная с 7.8 🙂 Вот на него и будем переводить нашу функцию “Звонок на ответственного”.

Для реализации поставленной задачи, нужна сборка ACR от 27.06.2016 или старше (начиная с релиза webitel v3.3.0), где была добавлена функция реверса строки и работы с Cookie. Так же, нам понадобиться логин и пароль пользователя bpm’online, у которого есть доступ на чтение в разделе Контакты.

В предыдущих статьях мы обсудили основные преимущества и возможности Docker. Сегодня я хочу рассказать о реализации сервера Webitel Collaboration с помощью этой технологии. Напомню, что не так давно, с выходом bpm’online 7.4.1, был анонсирован новый продукт для бесплатных внутренних коммуникаций. Вот его мы сегодня и разберем по кирпичиках.

Микросервисы

Помните, микросервисы в основе приложения? Именно эта идеология и заложена в Collaboration. Мы разбили все компоненте на несколько небольших контейнеров в зависимости от выполняемой задачи. А какие основные задачи Collaboration? Если вкратце, то это внутренние звонки. Здесь нет статистики, нет записей разговоров, нет внешней маршрутизации и провайдеров связи.

Архитектура решения

Webitel Collaboration Cloud

Продолжая серию публикаций о SMS, сегодня хочу рассказать о еще одной удобной функции, которую легко реализовать в АТС. Типовая ситуация: менеджер звонит на мобильный клиента, а тот просит sms-кой скинуть свои контакты… Мы уже говорили о SMS-визитках, но это же исходящий звонок, здесь наш сценарий не сработает! Как быть? Просто, воспользуемся уже знакомым bind_meta_app application. В dialplan, когда звоним на мобильные, добавим вызов вот такого action:

В самом JavaScript сценарии у меня будет простенькая визиточка, но Вы сможете делать даже личные sms для каждого менеджера! Вот пример кода для моего провайдера:

use("CURL");

var CallerID = session.destination;
var SMS = " \
 \
Nashy kontakty: (044)591-92-81, (032)232-77-57, office@it-sfera.com.ua, www.it-sfera.com.ua" ;

console_log("info","Send SMS Card: \n" + SMS + "\n");
var curl = new CURL();
curl.run("POST", "http://sms.it-sfera.com/websend/", SMS);

Теперь менеджер во время разговора с клиентом может просто нажать *0 на SIP-телефоне и клиент получает SMS-визитку на свой телефон. Удобно, вчера дважды сам воспользовался этой функцией!

FreeSWITCHЯ уже описывал, как в Oktell организовать сценарий Callback для сотрудников (звонок за счет офисной АТС). Теперь рассмотрим как такое же реализовать с помощью FreeSWITCH.

Для этой функции я выделил отдельный городской SIP-номер (благо, у меня их 10 шт.). Пускай Вас не смущает, что придется звонить с мобильного на городской, мы сделаем все возможное отправим в trunk SIP 183 Session Progress Message, что бы сотрудник не потерял и копейки. Вот таким будет наш диалплан:

    <extension name="380322320000">
    <condition field="destination_number" expression="^(380322320000)$">
            <action application="pre_answer"/>
            <action application="read" data="3 12 'tone_stream://%(10000,0,350,440)' digits 20000 #"/>
            <action application="set" data="api_hangup_hook=jsrun callback.js ${caller_id_number} ${digits}"/>
            <action application="hangup" data="CALL_REJECTED"/>
    </condition>
    </extension>

Поступил звонок, отправили Session Progress и гудок. Ждем ввода номера, после чего завершаем соединение. А вот уже после завершения запускаем JavaScript callback.js, где на вход отправляем номер звонящего и набранные цифры. Вот код скрипта callback.js:

    if ( ['0636150000','0939230000'].indexOf(argv[0]) != '-1' ) {
    console_log("info","Callback to " + argv[0] + "\n");
    session = new Session("{ignore_early_media=true}sofia/gateway/gsm/" + argv[0]);
    while (session.ready()) {
            session.execute("execute_extension", argv[1]+ " XML default");
            }
    }

Здесь все просто: проверяем номер ли нашего сотрудника, дозваниваемся ему и соединяем с набранным ранее абонентом.

FreeSWITCHЯ описывал, как можно отправить SMS-визитку после звонка в Oktell. Пришла очередь сделать аналогический функционал на FreeSWITCH! Для этого я создаю в MySQL базе на сервере отдельную табличку, где буду хранить информацию о том, кому уже отправил визитку. В качестве языка написания сценария я выбрал JavaScript. Сценарий проверяет в табличке была ли отправлена уже SMS-визитка (на 1 номер должна только 1 уходить SMS), если нет, тогда смотрим код оператора (я смотрю украинских операторов) и для каждого из операторов создаем SMS. Отправляем через нашего SMS-провайдера.

А вот и сам JavaScript: