Реализация функционала Click2call из slack
В данной статье мы рассмотрим возможность реализации звонка по клику(click2call) из корпоративного мессенджера slack. Ранее мы уже проводили интеграцию с данным сервисом, чтобы информировать сотрудников о пропущенных звонках, об этом вы можете ознакомится, посетив пост Отправка уведомлений о пропущенных вызовах в slack Настройка. Теперь приступим к конфигурированию. Мы будем использовать тот же входящий webhook, который […]
В данной статье мы рассмотрим возможность реализации звонка по клику(click2call) из корпоративного мессенджера slack. Ранее мы уже проводили интеграцию с данным сервисом, чтобы информировать сотрудников о пропущенных звонках, об этом вы можете ознакомится, посетив пост Отправка уведомлений о пропущенных вызовах в slack
Настройка.
Теперь приступим к конфигурированию. Мы будем использовать тот же входящий webhook, который был ранее, но нам необходимо немного модернизировать диалплан.
Диалплан для очереди.
[ext-queues]
exten => h,1,NoOp( ================== lost call in queues ================== )
same => n,ExecIf($["${FORWARD_CONTEXT}"!="from-internal"]?System(/usr/bin/curl -X POST --data-urlencode 'payload={"channel":"#asterisk","username":"Asterisk Allert","text":" <https://ВАШ_ВНЕШНИЙ_АДРЕС/callback.php?phone=${CALLERID(num)}&agent=${NODEST}|Перезвонить> \n Пропущенный в очереди ${NODEST} пропущен от ${CALLERID(num)}","icon_emoji":":warning:"}' https://hooks.slack.com/services/ВАШ_ТОКЕН))
same => n,Macro(hangupcall,)
Давайте рассмотрим, что у нас поменялось. Мы добавили ссылку на вызов скрипта callback.php, который мы позднее создадим. В нём объявляем значения двух переменных:
FORWARD_CONTEXT — это переменная, которая отвечает за то, достиг ли вызов нужного контекста. При входящем звонке он будет from-internal, когда на вызов ответят.
Phone – номер клиента
Agent – номер очереди
Давайте проверим, отрабатывает ли наш диалплан.
Теперь перейдем в наш чат в slack и проверим, пришло ли уведомление.
Как видим на скриншоте, сообщение поступило, а также доступна ссылка для нажатия, чтобы осуществить click2call.
Проделаем аналогичные операции для IVR.
Диалплан для IVR.
[ivr-1]
exten => h,1,NoOp( ================== lost call in queues ================== )
same => n,ExecIf($["${FORWARD_CONTEXT}"!="from-internal"]?System(/usr/bin/curl -X POST --data-urlencode 'payload={"channel":"#asterisk","username":"Asterisk Allert","text":" <https://ferma.voxlink.ru:2243/callback.php?phone=${CALLERID(num)}&agent=400|Перезвонить> \n Пропущенный в IVR-main, пропущен от ${CALLERID(num)}","icon_emoji":":warning:"}' https://hooks.slack.com/services/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))
same => n,Macro(hangupcall,)
Опять выполняем проверку и смотрим пришло ли сообщение в slack.
Теперь при помощи любого текстового редактора создадим файл callback.php в директории /var/www/html/.
Внесем туда следующее содержимое:
<?php
define('AMI_HOST', '127.0.0.1');
define('AMI_PORT', '5038');
define('AMI_USER', 'Логин AMI пользователя');
define('AMI_PASS', 'Пароль от AMI пользователя');
define('DEF_ROUT', 'Local/400@ext-queues');
extract($_REQUEST);
function actual($var){
return (isset($var) && $var!='' && preg_match('/^[0-9]+$/', $var, $matches, PREG_OFFSET_CAPTURE)) ? true : false;
}
if(actual($phone)){
$target = (actual($agent)) ? "Local/$agent@from-internal" : DEF_ROUT;
$msg = "Action: Login\r\nUsername: ".AMI_USER."\r\nSecret: ".AMI_PASS."\r\n\r\n";
$msg .= "Action: Originate\r\nChannel: $target\r\nContext: outrt-1\r\nExten: $phone\r\nCallerid: Callback <$phone>\r\nTimeout: 30000\r\nPriority: 1\r\nAsync: yes\r\n\r\n";
$msg .= "Action: Logoff\r\n\r\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Error : can't create socket");
socket_connect($socket,AMI_HOST,AMI_PORT) or die("Error : $errstr ($errno)");
socket_write($socket, $msg, strlen($msg)) or die("Error : can't write to socket");
sleep(1);
// echo socket_read($socket, 1024);
socket_close($socket);
echo '0';
}
echo "<script>window.close();</script>";
?>
Данный скрипт выполняет подключение к AMI и выполняет вызов, согласно нашим заданным переменным phone и agent. Т.е. вызов сперва поступит на внутренний номер или очередь, а после ответа вызов уйдёт до клиента . Обязательно сделайте так, чтобы в очереди был выставлен параметр Queue No Answer, чтобы вызов без ответа оператора не ушел до клиента.
Параметр ‘DEF_ROUT’ отвечает за то, что если у нас в поле agent пустое значение, то обратный звонок уйдет на маршрут по умолчанию.
Запрос echo «<script>window.close();</script>»; — означает, что после нажатия на кнопку Перезвонить, открывшееся окно автоматически закроется.
После того как мы добавили скрипт, можем выполнять click2call по ссылке в чате slack.
На этом настройка завершена.
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.