По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Друзья, сегодня речь пойдет о синтезе речи в Asterisk. Этот простой способ позволит вам озвучивать требуемое голосовое сообщение в структурах IVR или обычных приветствиях. Да где угодно. Профит этого решения: Единый голос для всех аудио – файлов; Кэширование и сохранение озвученных текстов, фраз в виде медиа - файлов, для последующего использования на Asterisk; Получаем токен Приступим. Прежде всего нужно получить API - токен на использование сервиса от Яндекс. Этот процесс расписан в статье по ссылке ниже (раздел Получение API - токена Yandex.SpeechKit): Получение токена Возвращайтесь с токеном и будем приступать к коду :) Кодим! Для начала создадим директорию /var/lib/asterisk/tts/ и дадим права. Там мы будем хранить текстовый файл, благодаря которому, сможем идентифицировать аудио – файлы по совпадению MD5 названия. Внутри файла будет фраза: mkdir /var/lib/asterisk/tts/ chown asterisk:asterisk /var/lib/asterisk/tts/ chmod 775 /var/lib/asterisk/tts/ В зависимости от дистрибутива и вариантов установки IP – АТС Asterisk, звуковые файлы могут располагаться в другой директории. Вы можете самостоятельно поправить это в скрипте. Использовать будем AGI приложение. Традиционно, комментарии к коду прикладываются: #!/usr/bin/php -q <?php error_reporting(0); // выключаем ошибки, необязательно, нужно в процесcе дебага скрипта require('phpagi.php'); $agi = new AGI(); $str = $agi->request['agi_arg_1']; //записываем в переменную текст, который необходимо озвучить $str = iconv('cp1251', 'utf-8', $str); // конвертируем в кириллическую кодировку $md5 = md5($str); //вычисляем md5 - хэш от переменной $str $prefix = '/var/lib/asterisk/sounds/ru/custom/'; //устанавливаем директорию для файлов. Мы ее создавали по ходу движения $filename = $prefix.$md5; //устанавливаем название файла(оно будет равно md5 текста) $format = 'wav'; //устанавливаем формат получаемого файла от Яндекс $quality = 'hi'; //устанавливаем качество $speaker = 'oksana'; //выбираем голос. На момент написания статьи доступны женские голоса: jane, oksana, alyss и omazh и мужские голоса: zahar и ermil. $emotion = 'evil'; // выбираем интонацию голоса, good — радостный, доброжелательный, evil — раздраженный, neutral — нейтральный (используется по умолчанию). Будем злее :) $speed = '0.9'; // данный параметр отвечает за скорость (темп) речи, подбирается опытным путем на слух, в данном случае оптимальный $key = 'Ваш_токен'; //ваш токен, который вы получили ранее. if (!file_exists($filename.'.wav')) { $qs = http_build_query(array("format" => $format,"quality" => $quality,"lang" => "ru-RU","speaker" => $speaker,"speed" => $speed,"key" => $key,"emotion" => $emotion, "text" => $str)); //формируем строку запроса $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); //закрываем файл shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 '.$filename.'.wav'); //конвертируем файл под требования Asterisk и закидываем в директорию для аудио shell_exec('chown asterisk:asterisk '.$filename.'.wav'); shell_exec('chmod 775 '.$filename.'.wav'); // даем файлу нужные пермишны; shell_exec('rm -f file1.wav'); // удаляем файл, который создали в процессе обращения к API; shell_exec('echo '.$str.' > /var/lib/asterisk/tts/'.$md5.'.txt'); // добавляем магии ;-) о ней ниже в тексте статьи. } $agi->exec('Playback',"custom/$md5"); //проигрываем файл звонящему. Скачать скрипт синтеза речи После загрузки файла, сохраните его с расширением .php Сохраняем скрипт как texttospeech.php и закидываем его в директорию /var/lib/asterisk/agi-bin. После, даем последовательность следующих команд: dos2unix /var/lib/asterisk/agi-bin/texttospeech.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/texttospeech.php chmod 775 /var/lib/asterisk/agi-bin/texttospeech.php Как вы могли заметить, скрипт настраивается. Голос, интонация, скорость речи, качество получаемого файла – подлежат корректировке для вашей задачи. Схема работы всего процесса следующая: Скрипт получает из диалплана текст по AGI и сохраняет в переменной; Если у нас уже существует аудио – файл для заранее записанной фразы, мы отдаем в диалплан команду на воспроизведение. Если нет – обращаемся к API; Скрипт отправляет запрос в сторону API Яндекса; Происходит конвертация полученного аудио – файла в нужный формат; Даем права файлу для воспроизведения на Asterisk и удаляем временный файл; Делаем отметку о создании файла в служебный текстовый файл; Воспроизводим файл; А как заставить скрипт работать? Очень просто. Открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись: [text_to_speech] exten => s,1,Answer() exten => s,2,AGI(texttospeech.php,"Привет! Это Мерион Нетворкс. Если ты слышишь это сообщение, значит все сделал правильно!") Сохраняем изменения и прыгаем в FreePBX. Будем вызывать кастомный контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути Admin → Custom Destinations и нажимаем Add Destination: Настроили и сохранили. Наша задумка такова – человек звонит на наш номер, набирает 13 и попадает на синтезированное сообщение. Переходим в главный IVR и в секции IVR Entries добавляем следующее: Звоним, проверяем. Работает :) Если хотите заменить фразу, которую нужно озвучить, просто поправьте ее в файле /etc/asterisk/extensions_custom.conf.
img
Теперь вы знаете, как работают глобальные префиксы и подсети, а как насчет ID интерфейса? Мы еще не говорили о назначении IPv6-адресов нашим хостам. Назначение адресов хостам почти то же самое, что и для IPv4: Адреса должны быть уникальными для каждого хост; Вы не можете использовать префиксный адрес в качестве адреса хоста. Ранее мы писали про основы работы протокола IPv6 (Internet Protocol version 6). Вы можете настроить IPv6-адрес вручную вместе со шлюзом по умолчанию, DNS-сервером и т. д. или ваши хосты могут автоматически получить IPv6-адрес либо через DHCP, либо через что-то новое, называемое SLAAC (Stateless Address Autoconfiguration). Вот пример IPv6 адресов, которые вы могли бы выбрать для топологии, которая показана выше: Для интерфейсов роутера предлагаю использовать наименьшие числа, так как они легко запоминаются. В этом примере показан уникальный global unicast IPv6-адрес для каждого устройства. Это все, что касается global unicast адресов, так же мы должны рассмотреть уникальные локальные одноадресные адреса. Уникальные локальные адреса работают так же, как и частные адреса IPv4. Вы можете использовать эти адреса в своей собственной сети, если не собираетесь подключаться к Интернету или планируете использовать IPv6 NAT. Преимущество уникальных локальных адресов заключается в том, что вам не нужно регистрироваться в специализированном органе, чтобы получить дополнительные адреса. Вы можете распознать эти адреса, потому что все они начинаются с FD в шестнадцатеричном формате. Есть еще несколько правил, которым вы должны следовать, если хотите использовать уникальные локальные адреса: Убедитесь, что FD - это первые два шестнадцатеричных символ; Вам нужно составить 40-битный глобальный ID, вы можете выбрать все, что вам нравится; Добавьте 40-битный глобальный ID после "FD", чтобы создать 48-битный префикс; Следующие 16 бит должны использоваться для подсетей Это оставляет вам последние 64 бита для использования идентификатора интерфейса. Вот как выглядит уникальный локальный адрес: Это дает нам уникальный локальный адрес, который мы можем использовать в наших собственных сетях. Подсети global unicast адресов или уникальных локальных адресов точно такие же, за исключением того, что на этот раз мы сами создаем префикс вместо того, чтобы провайдер назначил нам глобальный префикс. Глобальный ID может быть любым, что вам нравится, с 40 битами у вас будет 10 шестнадцатеричных символов для использования. Вы можете выбрать что-то вроде 00 0000 0001, поэтому, когда вы поставите перед ним "FD", у вас будет префикс FD00:0000:0001::/48. Вы можете удалить некоторые нули и сделать этот префикс короче, он будет выглядеть так: FD00:0:1:: / 48 Теперь вы можете добавить различные значения за префиксом, чтобы сделать уникальные подсети: FD00:0:1:0000::/6; FD00:0:1:0001::/6; FD00:0:1:0002::/6; FD00:0:1:0003::/6; FD00:0:1:0004::/6; FD00:0:1:0005::/6; FD00:0:1:0006::/6; FD00:0:1:0007::/6; FD00:0:1:0008::/6; FD00:0:1:0009::/6; FD00:0:1:000A::/6; FD00:0:1:000B::/6; FD00:0:1:000C::/6; FD00:0:1:000D::/6; FD00:0:1:000E::/6; FD00:0:1:000F::/6; FD00:0:1:0010::/6; FD00:0:1:0011::/6; FD00:0:1:0012::/6; FD00:0:1:0013::/6; FD00:0:1:0014::/6; И так далее. Когда вы выполняете лабораторные работы, можно использовать простой глобальный ID. В конечном итоге вы получите короткий и простой в запоминании префикс. Для производственных сетей лучше использовать глобальный ID, чтобы он был действительно уникальным. Возможно, однажды вы захотите подключить свою сеть к другой сети, или, возможно, вам придется объединить сети. Когда обе сети имеют один и тот же глобальный идентификатор, вам придется изменить IPv6-адрес для объединённой сети. В случае, если глобальные идентификаторы отличаются, Вы можете просто объединить их без каких-либо проблем. Настройка на маршрутизаторе В оставшейся части этой статьи мы рассмотрим, как можно настроить IPv6 на наших роутерах. Если вы хотите настроить IPv6 адрес на роутере у вас есть два варианта: Вручную настроить 128-битный IPv6-адрес; Использовать EUI-64; Сначала я покажу вам, как вручную настроить IPv6-адрес, а затем объясню, что такое EUI-64. Вот что необходимо выполнить: OFF1(config)#interface fastEthernet 0/0 OFF1(config-if)#ipv6 address 2001:1234:5678:abcd::1/64 Вам нужно использовать команду ipv6 address, а затем вы можете ввести адрес IPv6. Префикс, который я использую, - это 2001:1234:5678:abcd, и этот роутер будет иметь в качестве своего адреса "хоста" "1". Если хотите Вы также можете ввести полный IPv6-адрес: OFF1(config)#interface fastEthernet 0/0 OFF1(config-if)#ipv6 address 2001:1234:5678:abcd:0000:0000:0000:0001/64 Эта команда будет иметь точно такой же результат, что и команда, введенная ранее. Мы можем проверить подсеть и IPv6-адрес следующим образом: OFF1#show ipv6 interface fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C000:18FF:FE5C:0 No Virtual link-local address(es): Global unicast address(es): 2001:1234:5678:ABCD::1, subnet is 2001:1234:5678:ABCD::/64 Данный вывод информации отображает global unicast адрес и нашу подсеть. Есть еще одна важная вещь, когда мы настраиваем IPv6 на роутере. По умолчанию роутер не будет пересылать никакие пакеты IPv6 и не будет создавать таблицу маршрутизации. Чтобы включить "обработку" пакетов IPv6, нам нужно включить его: OFF1(config)#ipv6 unicast-routing Большинство команд "ip" будут работать, просто попробуйте "ipv6" вместо этого и посмотрите, что он делает: OFF1#show ipv6 interface brief FastEthernet0/0 [up/up] FE80::C000:18FF:FE5C:0 2001:1234:5678:ABCD::1 OFF1#show ipv6 route connected IPv6 Routing Table - 3 entries Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP U - Per-user Static route, M - MIPv6 I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2 ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2 D - EIGRP, EX - EIGRP external C 2001:1234:5678:ABCD::/64 [0/0] via ::, FastEthernet0/0 Теперь вы знаете, как настроить IPv6-адрес вручную и как его проверить. После, почитайте о том, как настроить IPv6 с EUI-64 на Cisco.
img
Друг, привет! Хотим рассказать про интересный способ создания индивидуального дашборда в FreePBX, а именно – наполнение его с помощью интересного для тебя контента. В статье покажем простой способ добавить RSS – ленту в FreePBX. Настройка Открываем графический интерфейс FreePBX и переходим в раздел Settings → Advanced Settings и включаем там две опции: Display Readonly Settings - Yes; Override Readonly Settings - Yes; Нажимаем Submit и Apply Config. Оставаясь на той же странице, находим опцию RSS Feed и заполняем ее как указано ниже: Будем ближе – добавьте себе нашу RSS ленту :) https://wiki.merionet.ru/wiki.rss.feed Нажимаем Submit и Apply Config. Переходим на Dashboard интерфейса FreePBX, а там:
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59