По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Всем привет! В этой статье мы расскажем о том, что такое Device Pool в Cisco Unified Communications Manager (CUCM) и как его настроить.
Device Pool можно представить как набор конфигураций и шаблонов, который применяется к группе устройств. Их можно создавать сколько угодно и использовать для разных локаций или функций абонентов (например, отдельные Device Pool’ы для центрально офиса и филиалов в другом городе). Но прежде чем создавать Device Pool необходимо настроить несколько разделов, которые будут использоваться в Device Pool’е
Cisco Unified CM Group
Эта группа определяет, на каких серверах и в каком порядке должна происходить регистрация телефона. Первый в списке сервер является основным, остальные являются дополнительными и телефоны регистрируются на них, если у них не получилось зарегистрироваться на основном. Для добавления Cisco Unified CM группы нужно перейти во вкладку System → Cisco Unified CM Group и нажать Add New. В появившемся меню в поле Name указываем название группы, а ниже в поле Selected Cisco Unified Communications Managers добавляем наши серверы в желаемом порядке (доступные серверы находятся в поле Available Cisco Unified Communications Managers). Изменить приоритет можно кнопкой со стрелкой.
Region
Разделение на регионы нужно для определения пропускной способности аудио и видео звонков внутри и между регионами. Аудио кодек определяет тип сжатия и максимум использования полосы пропускания, которая используется при звонке. Для создания региона нужно перейти во вкладку System → Region и нажимаем на кнопку Add New Region. Далее указываем имя региона и попадаем на страницу настроек. В поле Regions выбираем, с каким регионом мы хотим настроить связь (если хотим применить настройки внутри региона то выбиваем в этом поле его самого), из выпадающего списка Audio Codec выбираем желаемый кодек, в поле Video Call Bandwidth указываем пропускную способность для видеозвонков и далее выбираем Link-Loss Type на случай потерь. После чего нажимаем Save и настройки пропускной способности между регионами переносятся в верхнюю часть в поле Region Relationships.
Date/Time Group
Использование Date/Time групп нужно для определения временных зон аппаратов, подключенных к CUCM. При установке CUCM автоматически создается группа CMLocal, дата и время которой синхронизированы с ОС системы, на которой установлен CUCM. Для создания новой группы переходим во вкладку System → Date/Time Group и нажимаем Add New Date/Time Group. В новом окне указываем ее название в поле Group Name, в поле Time Zone выбираем временную зону, разделитель выбираем в поле Separator, форматы даты и времени выбираем в полях Date Format и Time Format.
Создание Device Pool
Переходим во вкладку System → Device Pool и нажимаем Add New. Тут четыре поля обязательны к заполнению. Первое это название Device Pool’а, а остальные ты мы настроили ранее - это Cisco Unified Communications Manager Group, Region и Date/Time Format. Остальные поля можно заполнить, выбрав пункт по умолчанию. После заполнения всех полей нажимаем Save и сохраняем наш Device Pool. Теперь его можно применить в настройках уже созданного телефона, либо выбирать его при создании нового.
Данная статья будет посвящена еще одному проприетарному протоколу компании Cisco Systems - VTP (VLANTrunkingProtocol), который призван решать возможные проблемы в среде коммутации в случае расширения парка оборудования организации.
Для начала вспомним что же такое VLAN. VLAN – это Virtual Local Area Network, что дословно переводится как “виртуальная локальная сеть”. При создании VLAN’а хосты физической сети, объединенные общей функцией, выделяются в логическую виртуальную сеть, при этом их физическое местонахождение не имеет значения. Обычно VLAN настраивается на сетевом коммутаторе, по средствам добавления портов, за которыми находятся хосты подлежащие объединению, в группу. Выглядит это примерно так:
На слайде приведен случай, когда на коммутаторе настроено два VLAN’a. Порты с 1 по 3 принадлежат VLAN’у 10, а порты с 6 по 8 находятся во VLAN’е 20.
Команды, которые вводил администратор для такой конфигурации, примерно такие:
Создание VLAN 10
Switch(config)# vlan 10
Switch(config)# interface range fa0/1 - 3
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10
Создание VLAN 20
Switch(config)# vlan 20
Switch(config)# interface range fa0/5 - 8
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 20
Как видите набор команд довольно простой, но администратор вводил их на единственном коммутаторе. Хосты реальных VLAN’ов могут быть рассредоточены по сети и находиться за разными устройствами, как показано на рисунке:
Как видно из рисунка хосты принадлежащие VLAN 10 рассредоточены по сети, они находятся как за коммутатором 1 так и за коммутатором 3. Для того, чтобы они могли корректно взаимодействовать, администратору вручную придется создавать VLAN на каждом устройстве и добавлять в них порты. Реальные сети могут содержать ещё больше VLAN сетей и каждую необходимо прописать вручную, в следствие чего растет вероятность допущения ошибок в конфигурации, которая может привести перекрестному соединению и многочисленным несогласованностям.
Для того чтобы исключить вероятность таких ошибок и был разработан протокол VTP, который позволяет устройствам автоматически делиться информацией о настроенных на них VLAN’ах и самостоятельно вносить изменения в конфигурацию.
Режимы работы VTP
VTP коммутатор имеет два режима работы:
Server
В этом режиме можно создавать новые и вносить изменения в существующие VLAN’ы.
Коммутатор будет обновлять свою базу VLAN’ов и сохранять информацию о настройках во Flashпамяти в файле vlan.dat.
Генерирует и передает сообщения как от других коммутаторов, работающих в режиме сервера, так и от клиентов
Client
Коммутатор в этом режиме будет передавать информацию о VLAN’ах полученную от других коммутаторов и синхронизировать свою базу VLANпри получении VTPобновлений. Настройки нельзя будет поменять через командную строку такого устройства. 3) Transparent
В данном режиме коммутатор будет передавать VTPинформацию другим участникам, не синхронизируя свою базу и не генерируя собственные обновления. Настройки VLAN можно поменять лишь для локального коммутатора.
Типы сообщений VTP
В VTPсуществует три типа сообщений:
Advertisement requests
Представляет из себя запрос от клиента к серверу на оповещение SummaryAdvertisement
Summary advertisements
Данное сообщение по умолчанию сервер отправляет каждые 5 минут или сразу же после изменения конфигурации.
Subset advertisements
Отправляется сразу же после изменения конфигурации VLAN, а также после запроса на оповещение.
Стоит отметить, что VTPкоммутатор, который получает информацию о новых VLAN’ах, внесет ее в свою конфигурацию только в том случае, если сообщение пришло от коммутатора с большим номером ревизии.
Номер ревизии это некий идентификатор “свежести” базы VLAN. Коммутатор воспринимает базу с наивысшим номером ревизии как самую “свежую” и вносит изменения в свою конфигурацию.
Протокол VTPявляется проприетарным, т.е закрытым. Он сильно облегчает жизнь администраторам, работающим с оборудованием Cisco.
Для оборудования других производителей существует аналогичный открытый стандарт - GVRP (GARP VLAN Registration Protocol).
Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере E-commerce. Речь пойдет про автоматизацию клиентского обслуживания, а именно:
/p>
Клиент звонит в интернет – магазин и ему предлагают ввести номер заказа;
Введенные абонентом значения по DTMF передаются в AGI скрипт;
По номеру заказа, мы формируем SQL – запрос к базе данных, где храним информацию о заказах. Из соответствующей таблицы мы получаем статус заказа и имя клиента;
Мы формируем строку, которую необходимо озвучить клиенту и отправляем ее на аудио-генерацию в сторону API Yandex.SpeechKit (TTS технология – text to speech);
Получаем аудио файл от Yandex, декодируем его в нужный нам формат (.wav, 8k) и воспроизводим клиенту;
Удаляем воспроизведенный файл и завершаем звонок клиента;
На наш взгляд это любопытная автоматизация. Приступаем к настройке? :)
Получение API - токена Yandex.SpeechKit
Для знакомства с технологией Яндекс предоставляет бесплатный тестовый период в 1 месяц с момента отправки первого запроса. После этого, чтобы продолжить использование Yandex. SpeechKit Cloud нужно заключить договор. Подробности условия использования можно прочитать здесь.
Первым делом перейдите в кабинет разработчика по ссылке https://developer.tech.yandex.ru и нажмите Получить ключ:
Имя ключа - введите имя для ключа. Например, Asterisk + TTS;
Подключение - выберите из списка SpeechKit Cloud;
Запоминаем значение, которое выделено красным на скриншоте выше – это и есть ваш токен. Переходим к настройке AGI – скрипта.
Создаем таблицу с заказами
Создадим SQL – таблицу, в которой будем хранить данные о заказах. В лабораторных целях, мы развернем ее на том же хосте, что и IP – АТС Asterisk (+ это снизит задержку и процессинг по времени). Итак, вводим следующие команды в консоли сервера (предварительно подключитесь по SSH):
use asteriskcdrdb;
CREATE TABLE zakazy(name varchar(20),phone varchar(20),nomerzakaza varchar(20),status varchar(20));
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Александр", "79257777777", 300388, "Отправлен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Иван", "79251111111", 476656, "Оплачен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Сергей", "79252222222", 0089822, "Доставлен");
Мы создали и наполнили таблицу. Теперь необходимо создать пользователя, который сможет иметь SELECT – доступ к таблице:
CREATE USER 'логин_mysql'@'localhost' IDENTIFIED BY 'пароль_mysql';
GRANT SELECT ON asteriskcdrdb.zakazy TO 'логин_mysql';
Запомните ваш логин и пароль и переходите к следующему шагу – адаптации скрипта AGI. Традиционно, комментарии к коду после двойного слеша //:
AGI - скрипт
Ниже представлена структура скрипта:
#!/usr/bin/php -q
<?php
error_reporting(0);
require('phpagi.php');
$agi = new AGI();
$result = $agi->get_data('custom/generate', 6000, 10); //принимаем DTMF от клиента;
$number= $result['result']; //записываем в переменную введенный клиентом номер заказа;
$hostname = "localhost"; // у нас localhost. У вас может быть IP адрес сервера, на котором хранится БД с заказами (настройте предварительно pg_hba.conf на удаленном хосте);
$username = "логин_mysql"; // логин, который вы создали этапом ранее;
$password = "пароль_mysql"; // пароль, который вы создали этапом ранее;
$dbName = "asteriskcdrdb";
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
$query = "SELECT * FROM zakazy WHERE `nomerzakaza`='$number';"; // подключаемся и парсим данные по номеру заказа;
$res=mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {
$status = $row['status'];
$name = $row['name']; // имя и статус, полученные из SQL пишем в переменные;
};
$str = 'Дорогой '.$name.'! Статус вашего заказа '.$status.' Спасибо за обращение, всего доброго!'; // формируем строку, которую необходимо синтезировать;
$qs = http_build_query(array("format" => "wav","lang" => "ru-RU","speaker" => "jane","key" => "ваш_токен","emotion" => "good", "text" => $str)); //описываем переменные, которые будем отправлять в сторону API Яндекса. Вы можете регулировать формат файла, локаль, спикера (мужской или женский голоса) и эмоциональный окрас. Заменить "ваш_токен" на ключ, полученный от API Yandex. SpeechKit Cloud;
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer:
")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx);
$file = fopen("file1.wav", "w");
fwrite($file, $soundfile);
fclose($file); // получаем аудио файл (сохраняем его как file1.wav);
shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // выполняем преобразование аудио в нужный для Asterisk аудио-формат и копируем его в директорию /var/lib/asterisk/sounds/ru/custom/;
shell_exec('chown asterisk:asterisk /var/lib/asterisk/sounds/ru/custom/output1.wav');
shell_exec('chmod 775 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // даем файлу нужные пермишны;
$agi->exec('Playback',"custom/output1"); // передаем в AGI команду проиграть полученный аудио – файл;
shell_exec('rm -f /var/lib/asterisk/sounds/ru/custom/output1.wav');
shell_exec('rm -f file1.wav'); // удаляем оба файла;
Скачать скрипт AGI
После загрузки файла, сохраните его с расширением .php
Сохраните скрипт под именем tts.php в директории /var/lib/asterisk/agi-bin и дайте следующие команды в консоль сервера:
dos2unix /var/lib/asterisk/agi-bin/tts.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/tts.php
chmod 775 /var/lib/asterisk/agi-bin/tts.php
Адаптируем функционал в «продакшн»
Итак, первым делом, открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись:
[tts_menu]
exten => s,1,Answer()
exten => s,2,AGI(tts.php)
Очень хорошо. Сделаем вызов кастомного контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути Admin → Custom Destinations и нажимаем Add Destination:
Нажимаем Submit и Apply Config. Мы хотим чтобы из главного IVR – меню клиент при нажатии 4 мог бы узнать статус своего заказа. Переходим в главный IVR и в секции IVR Entries добавляем следующее:
Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь :)