Александр Мисюрин
06.08.2020
54566

BLF Yealink: настройка для создания конференций парой нажатий

В данной статье рассмотрим реализацию сборщика конференций на базе Asterisk, при помощи AMI и кнопок на Yealink аппарате с BLF-панелью (можно настроить BLF наэкранные кнопки, если аппарат поддерживает несколько аккаунтов). Для начала настроим возможность сбора конференций на АТС, с помощью сервисного кода. Создаем скрипт сборки конференций, прописываем данные для подключения и функцию записи в AMI: […]

BLF Yealink

В данной статье рассмотрим реализацию сборщика конференций на базе Asterisk, при помощи AMI и кнопок на Yealink аппарате с BLF-панелью (можно настроить BLF наэкранные кнопки, если аппарат поддерживает несколько аккаунтов).

Для тестов использовалась АТС: CentOS 6.9, FreePBX 13, Asterisk 13, Yealink T46.

Для начала настроим возможность сбора конференций на АТС, с помощью сервисного кода.

Создаем скрипт сборки конференций, прописываем данные для подключения и функцию записи в AMI:

<?php
// AMI доступы
define('AMI_HOST','127.0.0.1');
define('AMI_PORT','5038');
define('AMI_USER','chmuser');
define('AMI_PASS','chmpass');
// MySQL доступы
define('BD_HOST','localhost');
define('BD_USER','chmuser');
define('BD_PASS','chmpass');
// AMI коннектор
function ami_request($ingect){
  $answer=false;
  if ($socket = fsockopen(AMI_HOST, AMI_PORT, $ac_err_num, $ac_err_msg, 1)){
    stream_set_timeout($socket, 1);
    $action  = "Action: login\r\n";
    $action .= "Username: ".AMI_USER."\r\n";
    $action .= "Secret: ".AMI_PASS."\r\n\r\n";
    $action .= $ingect;
    $action .= "Action: Logoff\r\n\r\n";
    fwrite($socket,$action);
    sleep(1);
    $answer = fread($socket,8291);
    fclose($socket);
  }
  return $answer;
}

Получаем переменную, означающую необходимое нам действие (Создать конференцию или добавить нового участника):

$k = $argv[1];

Создаем условия для нужных действий:

//Создание конференции во время разговора
if ($k == 1){
$channel = $argv[2];
$bridgepeer = $argv[3];
$confnum = $argv[4];
print_r($bridgepeer);
print_r($confnum);
	//Назначаем переменную CONFNUM для изначального канала
	$action = "Action: Setvar\r\n";
	$action .= "Channel: $channel\r\n";
	$action .= "Variable: CONFNUM\r\n";
	$action .= "Value: $confnum\r\n\r\n";
	//Назначаем переменную CONFNUM для вызываемого канала
	$action .= "Action: Setvar\r\n";
	$action .= "Channel: $bridgepeer\r\n";
	$action .= "Variable: CONFNUM\r\n";
	$action .= "Value: $confnum\r\n\r\n";
	//Переводим каналы в конференцию по переданному номеру (CONFNUM)
	$action .= "Action: Redirect\r\n";
	$action .= "Channel: $bridgepeer\r\n";
	$action .= "ExtraChannel: $channel\r\n";
	$action .= "Context: conference_sc\r\n";
	$action .= "Exten: conference\r\n";
	$action .= "Priority: 1\r\n\r\n";
//echo $action;
ami_request($action);
}
Создание конференции во время звонка

Данная часть скрипта создает конференцию в первый раз, когда вы находитесь в разговоре и объединяет обе стороны разговора в нее. Далее нам нужно добавлять новых участников:

//Добавление нового участника
if ($k == 2) {
//Получаем переменные
$confnum = $argv[2];
$inviten = $argv[3];
	//Звоним и закидываем в конфу нового участника
	$action = "Action: Originate\r\n";
	$action .= "Channel: Local/".$inviten."@from-internal\r\n";
	$action .= "Context: conference_sc\r\n";
	$action .= "Exten: conference\r\n";
	$action .= "Priority: 1\r\n";
	$action .= "Variable: CONFNUM=".$confnum."\r\n\r\n";
//echo $action;
ami_request($action);
}

Так мы добавляем новых участников конференции.

Добавление участника в конференцию
//Для создание конференций с нуля
if ($k == 3){
//Получаем переменные
$channel = $argv[2];
$confnum = $argv[3];
	//Задаем переменные канала
	$action = "Action: Setvar\r\n";
	$action .= "Channel: $channel\r\n";
	$action .= "Variable: CONFNUM\r\n";
	$action .= "Value: $confnum\r\n\r\n";

	//Редиректим
	$action .= "Action: Redirect\r\n";
	$action .= "Channel: $channel\r\n";
	$action .= "Context: conference_sc\r\n";
	$action .= "Exten: conference\r\n";
	$action .= "Priority: 1\r\n\r\n";
//echo $action;
ami_request($action);
}
Создание конференц-комнаты с нуля/подключение к созданной

Данная часть создает конференцию с нуля и сразу же добавляет вас в нее. Для работы каждой части нужен также диалплан, ниже приведем его:

[from-internal-custom]
exten => _*5XXX,1,Set(CONFCHAN=${CHANNEL});добавляем имя канала в переменную
same => n,NoOp(${CONFCHAN})
same => n,Set(__CONFNUM=${EXTEN:2});назначаем именем конференции набранный номер
same => n,System(/usr/bin/php -f /opt/conference.php 3 ${CONFCHAN} ${CONFNUM});вызываем скрипт с нужными параметрами (сбор с нуля)

[conference_sc]
exten => conference,1,ConfBridge(${CONFNUM},,,default_menu);подключаемся в конференцию
exten => conference_add,1,Read(INVITEN,dial,11,i);считываем номер следующего участника
same => n,System(/usr/bin/php /opt/conference.php 2 ${CONFNUM} ${INVITEN});добавляем его в конференцию

Также необходимо добавить записи еще в несколько файлов:

confbridge_custom.conf:
[default_menu]
type = menu
*5=dialplan_exec(conference_sc,conference_add,1)
features_applicationmap_custom.conf:
conference => *5,self,System(/usr/bin/php -f /opt/conference.php 1 ${CHANNEL} ${BRIDGEPEER} ${CALLERID(num)})
globals_custom.conf:
DYNAMIC_FEATURES=conference

Данного функционала достаточно для сбора конференции с помощью сервисных кодов, далее необходимо настроить клавиши на аппарате для сбора конференций по клику.

  1. Переходим в меню DSS-Кнопки -> Кнопки 1-9 и назначаем какой-либо клавише Донабор и наш сервисный код (который указан во feautures_applicationmap_custom)
  2. Назначаем клавиши BLF либо на клавишах аккаунта, либо на панели BLF (Ext Key).
Клавиша сервисного кода
Клавиши BLF панели

Сбор в конференцию происходит следующим образом:

  1. Во время разговора нажимается клавиша, назначенная на донабор, происходит объединение в конференцию
  2. Затем нажимается клавиша того, кого необходимо добавить в конференцию и ему поступает вызов от номера конференции
  3. При подъеме трубки со стороны вызываемого его подключает к конференции.
В более новых версиях аппаратов возможно назначать клавишу сервисного кода на неиспользуемые во время разговора кнопки (стрелочки, ОК и т.д.).
Демонстрация работы
Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.