По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Краткий гайд о том, как включить автоматический логин в графический интерфейс для IP – АТС Asterisk – в FreePBX. Кстати, этот гайд актуален для FreePBX версии 12 и выше.
Процесс
Первым делом открываем FreePBX, переходим в раздел Advanced Settings и находим параметр Enable Remote Unlocking.
После, подключитесь к консоли сервера Asterisk дайте команду:
amportal a genunlockkey
Вы получите примерно такой вывод:
[root@asterisk home]# amportal a genunlockkey
Please wait...
If REMOTEUNLOCK is enabled, you will receive a value for KEY. You can use
that as a parameter to config.php, thus:
http://192.168.0.122/admin/config.php?unlock=abc123def...
KEY=z40usb34g79rkhwv5x76dska6gftlhoyvwbs7hg6ml1am81lg8x9ce2mh7xb46di
[root@asterisk home]#
И еще раз: параметр Enable Remote Unlocking должен быть включен! Иначе в параметре KEY вы не получите ничего.
Таким образом, исходя из сгенерированной комбинации, URL для автоматического входа в FreePBX у вас будет следующим:
http://192.168.0.122/admin/config.php?unlock=z40usb34g79rkhwv5x76dska6gftlhoyvwbs7hg6ml1am81lg8x9ce2mh7xb46di
Важные замечания:
У вас только одна попытка для успешного логина. Если вы перепутаете или ошибетесь в ключе, действующий ключ будет удален и процедуру надо будет проделать заново;
Если Enable Remote Unlocking выключен, ничего не сработает. Это вы уже поняли :)
Ключ не ограничен по времени (бессрочный);
В единицу времени в системе может существовать только один ключ.
Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере 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 добавляем следующее:
Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь :)
Сегодня в статье будут кратко описаны главные функции текстового редактора Vim – данный редактор очень часто является самым простым способом отредактировать конфигтекстовый файл, но он обладает не самым дружелюбным интерфейсом. Давайте разберём основные моменты.
Текстовый редактор Vim
Этот текстовый редактор умеет работать в нескольких режимах: режиме вставки, командном режиме и «ex mode» режиме (режим последней строки). Сразу после открытия файла с помощью команды vim %file_name% редактор запуститься в так называемом «командном режиме» - ввод текста будет недоступен, Vim будет воспринимать только команды. Для переключения в режим вставки необходимо нажать "i" – у вас появится возможность редактировать текст. После того как все манипуляции будут завершены, вам необходимо будет перейти в режим последней строки и дать команду сохранитьвыйтисохранить и выйти и так далее – для этого необходимо: если находитесь в командном режиме нажать ":" (двоеточие) и ввести команду, а если находитесь в режиме вставки – сначала нужно нажать Escape и затем нажать двоеточие.
Командный режим и его возможности
В командном режиме доступно очень большое количество команд, с полным списком которых можно ознакомиться по ссылке: https://www.fprintf.net/vimCheatSheet.html, я же приведу здесь только самые часто используемые и полезные.
Самое главное, что нужно запомнить – это клавиши, используемые для перемещения по тексту – это h, j, k, l.
h - сдвиг на один символ влево
j сдвиг на один символ вниз
k сдвиг на один символ вверх
l сдвиг на один символ вправо
Кроме того, есть возможность перемещаться на одно слово вперед или назад – важно помнить, что словом является нечто вида "aesr1001k", то есть без дефиса и прочих разделительных знаков – "aesr-1001k" – это будет восприниматься редактором как два слова. Итак, для перехода на одно слово вперед нужно нажать "w", а для перехода назад – "b". Не очень интуитивно, не правда ли?:)
Если вам нужно что-то копировать – в Виме это делается достаточно просто – для этого нужно сначала переключиться в режим редактирования текста (клавиши "V" (выделение целых строк),"v"(посимвольное выделение) или "Ctrl-v"(блочное выделение) – после переключения можно будет выделять текст используя кнопки описанные выше или же используя клавиши со стрелками. После выделения нужно нажать клавишу "y" для копирования фрагмента в буфер обмена. Для вставки используются маленькая и большая "p" – маленькая для вставки после курсора и большая, соответственно, до.
Что касается удаления – здесь тоже есть свои «трюки»:
d или x - удаление символов – курсор нужно ставить над нужным символом и нажимать указанную клавишу
dw - удаление слова под курсором
db - удаление предыдущего слова
dd - удаление целой строки
d$ - удаление части строки от позиции курсора до конца строки
d^ - удаление части строки от позиции курсора до начала строки
Что если вам необходимо найти какую-нибудь информацию в тексте? Для этого вам потребуется переключиться в режим поиска, причём есть два режима поиска: при нажатии на "/" - включиться поиск в прямом направлении, и при нажатии на на "?" - включиться поиск в обратном направлении. После этого нужно ввести шаблон поиска – к примеру:
:/ipaddress
Также возможен поиск и замена – данный режим включается командой :s, после чего вам необходимо будет указать слово для поиска и слово, на которое произойдет замена: :%s/192.168.1.1/192.168.2.2/ - в данном примере указана глобальная область поиска, и первый найденный сетевой адрес 192.168.1.1 будет заменен на 192.168.2.2. Если же необходимо заменить все найденные адреса на новые и запрашивать подтверждение при каждой замене – нужно добавить буквы "gc" - :%s/192.168.1.1/192.168.2.2/gc
У многих мог возникнуть вопрос – как же сделать столь привычное Undo, то есть отменить последние действие – для этого нужно воспользоваться командой "u" - но, к сожалению, отменить можно только последние действие. Если же нужно повторить отмененное действие (т.е сделать UnUndo) нужно нажать "Ctrl+r".
Важно – если отменен режим совместимости с Vi, то отменять можно большее количество действий.
Сохранение и выход
Теперь перейдем к важному моменту – сохранению и выходу. Тут есть несколько опций:
:w сохранение изменений без выхода
:wq или :x - старое доброе «сохранить и выйти»
:q! - выход без сохранения изменений
:w %file_name% - «сохранить как» в новый файл
На этом всё, помните, что Vim не является самым удобным редактором, и, если есть возможность – лучше установите что-то более привычное для вас. Но навыки использования Vim важны, так как часто это единственно доступный инструмент для редактирования конфигов на удаленных серверах.