Posts Tagged ‘ asterisk

Програмный SIP-телефон Blink

Есть множество разных програмных SIP телефонов, но многие из них мне не нравятся по таким причинам:

  • X-lite – в старых версих был хорош, в новых версиях тянет за собой столько мусора, что даж диву даюсь … в результате его установки места на диске становится на почти 100Мб меньше. Для примера – базовый генту на HDD занимает 200Мб, но это уже полноценная ОС 🙂 К тому-же нет нормальных сборок под Linux
  • Ekiga – типа кроссплатформенный телефон, но его зависания после окончания звонка просто выводят из себя.
  • SJPhone – юзерфрендли интерфей – это не про него…. выглядит уныло и не понятно куда нужно тыкать мышкой, та и функционал не ахти
  • KPhone – работает под Qt и тянет за собой кучу библитек, но пользователям KDE сойдет 🙂
  • Остальные либо платные, либо глючные, либо написаны на коленке и последний раз обновлялись в прошлом веке.
    Read more

Huawei 1550 + Asterisk = дешевый GSM шлюз

Очередной пост в интернете на тему создания дешевого GSM-шлюза на основе 3G модема от Huawei и IP PBX Asterisk.
Мануалов по настройке данной связки в интернете предостаточно, поэтому дання заметка больше для себя, нежели для других.

Что мы имеем:
3g модем от Киевстара на базе Huawei 1550 разлоченый под все, что только можно (MMC+ голос + видео+ любой оператор …) и купленый на aukro.ua
– сервер на базе Gentoo x64, kernel 2.6.38
Asterisk 1.8.4.1
Read more

“RTP read too short” при работе с FXO-шлюзом D-link

Голосовой шлюз D-Link DVG-6004S

Голосовой шлюз D-Link DVG-6004S

Достался мне FXO шлюз D-Link DVG-6004S который находится в удаленном офисе. А пользователи просто рыдают от того, что он лагает и голос едва слышно и звонки рвутся.

Полез я в консоль, а там почти при каждом входящем звонке вот такое валится:

WARNING[27281] rtp.c: RTCP Read too short

Вродь все понятно как ясный день – RTP пакет приходит или пустым или слишком маленьким.
Задача – сделать его нормальным 🙂
Read more

Функциональные изменения от версии Астериск 1.6.2 до версии Астериск 1.8

Огромное спасибо сайту pbxware.ru

Изменения в SIP

Добавлена опция preferred_codec_only в sip.conf. Эта возможность ограничивает пересечение множества кодеков, отправляемых в ответе на INVITE сообщение единственным, наиболее предпочтительным кодеком.
Добавлена переменная номерного плана SIP_CODEC_OUTBOUND, которая может быть использована для установки кодека на исходящие вызовы. Это должен быть один из кодеков, сконфигурированных для устройства.
Добавлена опция tlsprivatekey в sip.conf. Опция позволяет хранить private key в отдельном .pem файле. Если опция tlsprivatekey не используется, то поиск файла tlscertfile будет выполнен как для public, так и для private key.
Read more

Синтез речи и 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
Read more

Использование 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"

Read more

Настройка языков в 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
Либо можно внести изменения в глобальные настройки Астера

cat asterisk.conf
....
[options]
...
defaultlanguage = ru

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

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

Read more

Создание очередей на примере 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:
Read more

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

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

Подборка SQL запросов

Допустим у вас есть номер телефона рекламного отдела и PR-манагеры пустили какую-то рекламу в сентябре.
Задача: найти всех клиентов которые позвонили в сентябре первый раз в жизни, но при этом им, что-то не понравилось и они не звонили после сентября.
Инфа нужна, чтоб промыть им мозги… 🙂
Вот, что у меня получилось сходу:

SELECT c.*,d.*
FROM
(SELECT a.callerid AS callerid1,a.count AS count1 FROM
(SELECT callerid,dst,COUNT(*) FROM calls WHERE dt BETWEEN '2010-09-01 00:00:00' AND '2010-10-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS a 
 
LEFT OUTER JOIN
(SELECT callerid,dst,operator FROM calls WHERE dt BETWEEN '2009-02-01 00:00:00' AND '2010-09-01 00:00:00' AND dst='5555555') AS b
 
ON a.callerid=b.callerid
WHERE b.dst IS NULL) AS c
 
LEFT OUTER JOIN
(SELECT callerid AS callerid2,dst,COUNT(*) AS count2 FROM calls WHERE dt BETWEEN '2010-10-01 00:00:00' AND '2010-11-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS d
 
ON c.callerid1=d.callerid2
WHERE d.dst IS NULL

Запрос не сильно легкий, требует оптимизации, но результат дает 🙂