По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Роутеры MikroTik имеют множество полезных функций для траблшутинга проблем. Одной из таких утилит является возможность создания supout.rif файла. Supout.rif - это файл, который содержит всю конфигурацию вашего роутера, а также логи и другую полезную информацию об устройстве. Возможность создания данного файла задумывалась командой MikroTik как быстрый способ информации получения всей необходимой информации о роутере в рамках работ по оказанию технической поддержки. Дабы не нагружать пользователя просьбами выгружать сначала конфигурацию, потом снимать логи, а просто попросить выгрузить Support.rif и начать исследовать проблему. При этом, пользователь может не переживать за то, что его пароли из утекут на третью сторону, так как все пароли в файле supout.rif шифруются. Итак, чтобы создать данный файл через WinBox, нужно просто нажать на кнопку Make Supout.rif, затем Start и дождаться пока завершится процесс генерации. Теперь, чтобы скачать его, просто открываем Files, ищем support.rif, нажимаем на него правой кнопкой и выбираем Download. Чтобы сгенерировать этот файл из командной строки, вводим в Terminal: /system sup-output name=supout.rif. Далее можно скачать его по FTP или отправить на другой хост. Но текстовым редактором данный файл мы открыть не сможем. Для того, чтобы его прочитать в команде MikroTik придумали инструмент Supout.rif viewer. Чтобы им воспользоваться, необходимо зарегистрироваться на сайте MikroTik.com, залогиниться в свой аккаунт, перейти в раздел Support и найти там Supout.rif viewer. Далее нужно просто загрузить сгенерированный файл в открывшейся форме. После этого перед вами откроется список из 46 пунктов, нажав на которые вы сможете посмотреть соответствующую информацию. Правила firewall, настройки маршрутизации, лог устройства, в общем все что здесь есть - все это есть. Например, в разделе export содержится вся текущая конфигурация. Очень удобный инструмент, который пригодится любому, кто администрирует роутеры MikroTik.
img
Всем привет! Мы продолжаем рассказывать про протокол маршрутизации OSPF. В этой статье мы рассмотрим создание конкретных типов областей. Подробнее про области можно прочитать в предыдущей статье. Предыдущие статьи: Расширенные возможности OSPF: Области Короткая Область (Stubby Area) Рисунок 1 - топология OSPF Пришло время сделать нашу область 1 из рисунка 1 короткой областью. Это внесение небольших настроек в конфигурацию. На каждом устройстве в этой области нам нужно установить область 1 в качестве заглушки. Вот наша конфигурация: ATL2# configuration terminal Enter configuration commands, one per line. End with CNTL/Z. ATL2 (config)#router ospf 1 ATL2 (config-router)#area 1 stub ATL2 (config-router)#end ATL2# ORL# configuration terminal Enter configuration commands, one per line. End with CNTL/Z . ORL(config)#router ospf 1 ORL(config-router)#area 1 stub ORL(config-router)#end ORL# Это вызовет сброс соседства. После внесения изменений настало время просмотреть таблицу маршрутизации и базу данных OSPF. show ip route ospf Как мы и надеялись, теперь таблица маршрутизации стала меньше! Больше нет детализации внешних префиксов из ASBR. Вместо этого у нас есть маршрут по умолчанию, автоматически генерируемый ABR. Этот маршрут по умолчанию конечно необходим, потому что маршрутизаторы в области 1 все еще должны иметь возможность доступа к удаленным префиксам (если это необходимо). Теперь пришло время изучить базу данных OSPF. Это именно то, что мы ожидали бы увидеть в области заглушки: show ip ospf database Type 4 LSA и Type 5 LSA фильтруются, и теперь существует Type 3 LSA для маршрута по умолчанию. Видео: протокол OSPF (Open Shortest Path First) за 8 минут Полностью Короткая Область (Totally Stubby Area) Если мы хотим быть еще более эффективными в нашем примере, мы можем преобразовать область 1 в полностью короткую область. Это устранит Type 3 LSA, которые используются для объявления Loopback 0 на ATL и связей между ATL и AT2. Конечно, все равно будет объявлен маршрут по умолчанию, потому что теперь он нужен больше, чем когда-либо! Вот такая конфигурация и верификация: ATL2# configuration terminal Enter configuration commands , one per line . End with CNTL/Z. ATL2 (config)#router ospf 1 ATL2 (config-router )#area 1 stub no-summary ATL2 (config-router )#end ATL2# show ip route ospf show ip ospf database Not So Stubby Area (NSSA) Если вам необходимо ввести внешние префиксы в область заглушки, вы должны сделать ее Not So Stubby Area (NSSA). Это позволяет внешние префиксы, которые будут пересылаться через зону-заглушку, определять как LSA типа 7. Затем ABR преобразует их в LSA типа 5 для распространения через домен OSPF (потенциально). Ниже настройка для нашей схемы: ATL2# configuration terminal Enter configuration commands , one per line. End with CNTL/Z. ATL2 (config)#router ospf 1 ATL2 (config-router)#no area 1 stub ATL2 (config-router)#area 1 nssa ATL2 (config-router)#end ATL2# ORL# configuration terminal Enter configuration commands , one per line . End with CNTL/Z. ORL(config)#router ospf 1 ORL(config-router)#no area 1 stub ORL(config-router)#area 1 nssa ORL(config)#interface loopback10 ORL(config-if)#ip address 172.16.10.З 255.255.255.0 ORL(config)#interface loopback20 ORL(config-if)#ip address 172.16.20.З 255.255.255.0 ORL(config-if)#exit ORL(config)#router eigrp 200 ORL(config-router)#network 172.16.10.З 0.0.0.0 ORL(config-router)#network 172.16.20.З 0.0.0.0 ORL(config-router)#exit ORL(config)#router ospf 1 ORL(config-router)#redistribute eigrp 200 subnets metric 1000 ORL(config-router)#end ORL# Интересно просмотреть результаты нашей настройки. Давайте начнем с изучения маршрутов OSPF и базы данных OSPF на ORL: show ip route ospf show ip ospf database Из таблицы маршрутизации видно, что мы снова изучаем объявления Type 3 из области 0 (1.1.1.1 и 10.12.12.0). База данных OSPF доказывает, что NSSA работает так, как объявлено на данный момент. Мы можем видеть внешние префиксы, внесенные в область 1 как Type 7 в базе данных. Давайте быстро проверим ATL, чтобы увидеть, появляются ли они там как Type 5 LSA, как мы ожидаем. show ip route ospf show ip ospf database Да, выводимая информация дает нам полное понимание, как работает NSSA. Префиксы существуют как Type 5s, и мы видим это в таблице маршрутизации. Примечание: область NSSA не имеет динамически генерируемого маршрута по умолчанию без настройки этой функции. Так, наша сеть не будет работать! Чтобы создать маршрут по умолчанию, просто используйте следующую команду на маршрутизаторе ATL2: area 1 nssa default-information-originate Totally NSSA Поскольку вы уже освоили Totally Stubby, скорее всего вы уже понимаете, что происходит с Totally NSSA. Здесь мы блокируем дополнительные типы LSA из этой области. К ним относятся Type 3 LSA. И снова для нас автоматически создается маршрут по умолчанию. Вот настройки и результирующие проверки: ATL2# configuration terminal Enter configuration commands , one per line . End with CNTL/Z. ATL2 (config)#router ospf 1 ATL2 (config-router )#area 1 nssa no-summary ATL2 (config-router )#end ATL2# show ip route ospf show ip ospf database Как видно из выводимой информации, что у нас невероятно сжатая таблица маршрутизации (для OSPF) на роутере ORL. Как вы можете видеть, OSPF отлично справляется с автоматической фильтрацией маршрутов за счет использования специальных областей и типов LSA. В следующий раз мы рассмотрим варианты ручной фильтрации маршрутов в OSPF.
img
Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере 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 добавляем следующее: Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь :)
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59