Синтез речи и Asterisk

Ради эксперемента решил прикрутить Festival к Asterisk, но что-то он не завелся.
Пока-что у меня это дело работает через несколько костылей.
Вот что получилось.
Устанавливаем фестиваль

emerge -av app-accessibility/festival-ru

простая конфигурация

cat server.scm
(set! server_max_clients 10)
(set! server_port 1314)
(set! server_log_file "/var/log/festival/festival.log")
(set! server_access_list '("[^.]+" "127.0.0.1" "localhost" ))
(set! server_deny_list nil)

Просто проигрывать фразу “Привет” не интересно, интереснее слушать прогноз погоды 🙂
С помощью спонсора программы – gismeteo, будем генерировать файл прогноза на 2 дня.
Для это используем xml, который распарсиваем с помощью php
Скрипт на PHP

Читати далі

Использование MySQL в Asterisk 1.8

В Астериске 1.8 поддержка MySQL идет из коробки в отличии от предыдущих версий в которых необходимо доустанавливать asterisk-addons
Первым делом устанавливает сам Астер, если его еще нет 🙂

sudo -s
emerge -av asterisk

>>Calculating dependencies... done!
>>[ebuild     N ] net-misc/asterisk-1.8.4.1  USE="ais calendar caps curl dahdi doc gtalk h323 http iconv jabber jingle mysql newt postgres samples snmp span speex srtp ssl syslog usb vorbis -alsa -bluetooth -debug -freetds -ldap -lua -odbc -osplookup -oss -portaudio -radius -sqlite -sqlite3 -static"

Читати далі

Настройка языков в Asterisk

Для добавления русского языка в астериск нужно скачать русские звуковые файлы отсюда http://www.pbxware.ru/products/ivr/files/asterisk-sounds-ru-gsm-2010-04-28.tar.gz/view или отсюда http://www.ivrvoice.ru/downloader/download/ и распаковать их в какталог /var/lib/asterisk/sounds/ru После чего внести правки в конфигурацию cat sip.conf [general] ….. language=ru …… [user1] language=en для всех SIP-аккаунтов установится русский по умолчанию, а для user1 – английский Аналогичные манипуляции производятся для iax.conf Либо можно … Читати далі

Перекодирование записей звонков

Частенько приходится перегонять записи телефонных разговоров в другие форматы.
И постоянно приходится гуглить по этому поводу в поисках рабочих скриптов. Посему попробую сделать подборочку разных скриптов.
Начнем-с.
gsm -> wav

#!/bin/bash
cd /var/samba/convert
if ! test -d /var/samba/convert/wav
then
    mkdir /var/samba/convert/wav
    chmod -R 0644 /var/samba/convert/wav
fi
for a in *.gsm;
do
#Строка ниже для старых версий sox
#sox "$a" -t raw -r 8000 -s -w -c 1 `echo $a|sed "s/.wav/.sln/"` resample -ql;
sox "$a" -r 8000 -c 1 -2 -s wav/`echo $a|sed "s/.gsm/.wav/"` > /dev/null 2>&1
rm "$a" > /dev/null 2>&1
done

Читати далі

Создание очередей на примере Asterisk 1.6

Здравствуйте.
Для того, что бы более эффективно распределять звонки в офисе в Asterisk присутствует возможность создания очередей обработки звонка. Особенно эта функция актуальна для рекламных отделов компаний.
Будем считать, что у вас уже установлен и настроен Asterisk версии 1.6 и выше
Для начала расмотрим как описываются очереди (Queues)

Code queues.conf:
......
[queue_template](!)
musicclass=default      ; play [default] music
strategy=rrmemory       ; использовать стратегию обзвона  Round Robin Memory
joinempty=yes           ; загонять звонок в очередь если там отсутствуют агенты
leavewhenempty=no       ; оставлять очередь без агентов
ringinuse=no            ; звонить на члена очереди когда он занят ?

[sales](queue_template)
; Sales queue

[support](queue_template)
; Support queue

В данном примере мы создали шаблон queue_template и на базе шаблона создали 2 очереди: sales и support.
Теперь приступим к написанию диалплана.
Для этого нам нужно описать, как абоненты будут попадать в очередь, а также как логиниться и вылогиниваться из очереди агентам.
Пример 1:

Читати далі

Asterisk: импорт из Master.csv в Postgresql

postgres=# CREATE USER ast_user with password 'xxxxxxx';
CREATE ROLE
postgres=# CREATE DATABASE ast_db with owner ast_user;
CREATE DATABASE
postgres=#exit

psql ast_db ast_user
ast_db=> CREATE TABLE cdr (
calldate timestamp with time zone DEFAULT now() NOT NULL,
clid character varying(80) DEFAULT '' NOT NULL,
src character varying(80) DEFAULT '' NOT NULL,
dst character varying(80) DEFAULT '' NOT NULL,
dcontext character varying(80) DEFAULT '' NOT NULL,
channel character varying(80) DEFAULT '' NOT NULL,
dstchannel character varying(80) DEFAULT '' NOT NULL,
lastapp character varying(80) DEFAULT '' NOT NULL,
lastdata character varying(80) DEFAULT '' NOT NULL,
duration bigint DEFAULT 0::bigint NOT NULL,
billsec bigint DEFAULT 0::bigint NOT NULL,
disposition character varying(45) DEFAULT '' NOT NULL,
amaflags bigint DEFAULT 0::bigint NOT NULL,
accountcode character varying(20) DEFAULT '' NOT NULL,
uniqueid character varying(32) DEFAULT '' NOT NULL,
userfield character varying(255) DEFAULT '' NOT NULL
);
CREATE TABLE

Устанавливаем поддержку постгреса в Perl:

perl -e shell -MCPAN
install DBI::DBD
install DBD::Pg

Создаем скрипт для переноса даных:

Читати далі

Iskratel vs Asterisk

Состыковка Астериска с ИскраТел проходит довольно занятно.
Провайдер телефонной связи может отдавать телефонные звонки по SIP, но сервер сигнализации и голосовые сервера находятся в разных местах.
По умолчанию Астер считает, что источник RTP находится на одном хосте с Сервером сигнализации, чтоб сказать ему о поиске голоса на тех хостах которые приходят в INVITE, а также в SDP, в настройках sip.conf необходимо добавить такие строки

canreinvite=yes
dtmfmode=info

When SIP initiates the call, the INVITE message contains the information on where to send the media streams. Asterisk uses itself as the end-points of media streams when setting up the call. Once the call has been accepted, Asterisk sends another (re)INVITE message to the clients with the information necessary to have the two clients send the media streams directly to each other.

А также опцией permit разрешить посылать голос на хосты отличные от сигнального.
В итоге лог должен содержать что-то типа такого:

Читати далі

Blacklist в Asterisk

Допустим нужно, чтоб определенный список людей попадал сразу в отдел продаж минуя IVR. Реализация такой схемы: [incoming] exten => s,1,LookupBlacklist(j) ;проверка на наличие номера в базе, j – переход на приоритет n+101 exten => s,2,Goto(ivr,s,1) exten => s,102,Dial(SIP/1234,60,tT) exten => s,103,Hangup Добавление номера в базу данных происходит таким образом: asterisk -rx “database put blacklist 0442223344 … Читати далі

Новый синтаксис в Asterisk 1.6

Буду тут оставлять заметки о том как меняется синтаксис между Asterisk 1.2 и Asterisk 1.6 1. Вместо “трубы” теперь в диалплане используется запятая, например 1.2 include => kiev|8:30-18:30|mon-fri|*|* 1.6 include => kiev,8:30-18:30,mon-fri,*,* 2. В ivr сменилось использование переменных DigitTimeout, ResponseTimeout, например: 1.2 exten => s,1,DigitTimeout,5 ; Set Digit Timeout to 5 seconds exten => s,2,ResponseTimeout,10 … Читати далі