SIP

warning: Creating default object from empty value in /usr/data/www/drupal6/modules/taxonomy/taxonomy.pages.inc on line 33.

SIP от Мегафона

Давно хотел попробовать, что из себя представляет Мультифон от Мегафона. (Прямо сейчас, у них какая-то беда с сайтом - сервер не найден. Ночью периодически nginx ругался.)

Качество связи осознать не успел, но успел осознать некоторые плюсы:

0
Your rating: Нет

Полезные команды в консоли Астериска

Некоторые полезные команды в CLI интерфейсе астериска

asterisk -rvvv - подключиться к консоли

core show channels - посмотреть статус каналов
sip show users - посмотреть пользователей сервера (пользователь, пароль, контекст)
sip show peers - посмотреть пиров сервера (пользователь, ip адрес, порт, статус)
sip show registry - посмотреть статус регистраций, т.е. как сервер зарегистрировался
 

Стырено тут.

0
Your rating: Нет

Автонастройка (auto provision) VoIP телефонов в Астериске

Т.к. потихоньку движется проект по мегапереходу на VoIP телефонию, начал разбираться с автонастройкой телефонов. Т.к. у меня планируются все телефоны Panasonic, соответственно, разбирался под них.

Астериск умеет сам генерировать файлы автоматической конфигурации клиентов. У него есть два модуля - http и phoneprov.

http - отвечает за то, чтобы asterisk мог работать web-сервером, а phoneprov - за автоматическое создание файлов конфигурации.

Чего нормально не могу придумать, так это защиту от несанкционированного получения параметров. Вроде, есть идея прогонять через nginx с его авторизацией, но это пока в процессе размышления. Человек, по статье которого делал, пишет, что после запуска всех телефонов, оно отключал http, но я не уверен, что панасоники вспомнят автоматические настройки после перезагрузки при отсутствии сервера.
(P.S. После получения настроек - телефоны их сохраняют и сервер не требуется. Соответственно, после того как телефоны получили настройки, можно спокойно у пользователя отключать провижен.)

Для получения файлов автоконфигурации нам нужно включить оба модуля.

1. Включаем http, для этого в файле http.conf пишем:

[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088

2. Настраиваем автоматиское создание файлов конфигурации телефонов - phoneprov.conf.

0
Your rating: Нет

Подготовка звуковых файлов для Asterisk

В очередной раз потребовалось подготовить голосовые файлы для астериска, и так как долго вспоминал как делается, нарисовал скриптик, который это все автоматизирует.

  1. Сначала нормализуем файл, чтобы громкость была правильная
  2. Конвертируем файл в нужные форматы

#!/bin/sh

file=$1
file_ext=${file##*.}
file_name=${file%.*}
ffmpeg_cmd="ffmpeg -loglevel quiet -i "
edit_file=/tmp/${file_name}_$$.wav
#echo ${edit_file} ${file_ext} ${file_name}

${ffmpeg_cmd} $1 ${edit_file}
normalize ${edit_file}
mkdir out
${ffmpeg_cmd} ${edit_file} -acodec pcm_s16le -ar 8000 -ac 1 -y out/${file_name}.wav
${ffmpeg_cmd} ${edit_file} -ar 8000 -ac 1 -ab 64 -f alaw -y out/${file_name}.alaw
${ffmpeg_cmd} ${edit_file} -ar 8000 -ac 1 -ab 64 -f mulaw -y out/${file_name}.ulaw
rm ${edit_file}

Вроде работает. wink

Соответственно, запускаем sound2asterisk.sh имя_файла, после выполнения в каталоге out забираем результат.

0
Your rating: Нет

Тарифы на звонки по SIP

Что-то утомило с некоторой периодичностью вспоминать, какой оператор дает какие плюшки по сипу, решил собрать в табличку. Надеюсь что-нить толковое получится.

 

0
Your rating: Нет

прослушивание линий в Asterisk

Иногда возникает задача прослушивание телефонных разговоров. На астериске это решается достаточно просто, несколькими строками в

exten => 115001,1,Answer()
exten => 115001,n,ChanSpy(SIP/extension,q)

Где extension - канал, который нужно прослушивать. Если не указать или указать общую часть для нескольких каналов (например 10, для телефонов 101, 102, 103), то будут прослушиваться все каналы совпадающие. При этом переключаться между каналами можно с помощью #.

q - означает, не оповещать о том, что канал прослушивается.

Набор: # циклически изменяет уровень звукового сигнала.
Набор: * останавливает контроль за одним абонентом и ищет другой подходящий канал для контроля.
Набор последовательности цифр, завершенный нажатием кнопки #, создает имя канала, которое будет добавлено к параметру
(например, выполните Chanspy(Agent) и наберите 1234#, в процессе контроля, тогда вы перейдете на канал Agent/1234)

0
Your rating: Нет

Grandstream gxw4232, asterisk и перевод звонков

В связи с переездом одного офиса перевел его на IP телефонию. Т.е. получаю телефонию по SIP от Билайна, разруливаю все на астериске, часть SIP телефонов Panasonic KX-UT133, часть телефонов обычных подключеных через FXS шлюз grandstream GXW4232.

С обычными телефонами возникла проблема - входящий звонок не получалось перевести на другой телефон. Астериск писал:

No compatible codecs, not accepting this offer!

После долгих мучений, гуглений и т.д. в тщетных попытках как-то вылечить кроме кодека alaw (который использует билайн),разрешил в астериске кодек ulaw, после чего все завелось.

Не знаю, что успел поломать за время мучений, но все заработало. Из неприятного, не смог обновить прошивку на шлюзе. Вроде пробовал и через официальный сайт, и через свой tftp сервер - никаких эмоций у шлюза это не вызвало. Нужно будет стучаться в техподдержку грандстрима.

0
Your rating: Нет

Asterisk: Лимитирование звонков по каналу.

Т.к. некоторые SIP/VoIP провайдеры далют халяву с некоторыми ограничениями (на пример sipnet) на количество звонков и их общую продолжительность, захотелось этим воспользоваться, но при этом не попадать на деньги.

Нарисовал 2-а макроса. Первый для учета количества звонков и их длительности, второй для выбора  необходимого транка.

1. Учет звонков.

Учитываем только отвеченные

[macro-count_dial_from_trunk]
exten => s,1,NoOp(${CDR(duration)} ${CDR(billsec)})

; Enable call limit control ?
exten => s,n,GotoIf($[${DB(trunk/${NAME_TRUNK}/day/limit-enable)} = 1 ]?:noanswer)
exten => s,n,GotoIf($[${DIALSTATUS} = ANSWER ]?:noanswer)

exten => s,n,Set(foo=${CUT(CDR(dstchannel),,1)})
exten => s,n,Set(foo=${CUT(foo,/,2)})

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call-time)})}]?:continue_call-time)
exten => s,n,Set(DB(trunk/${foo}/day/call-time)=0)
exten => s,n(continue_call-time),Set(DB(trunk/${foo}/day/call-time)=$[${DB(trunk/${foo}/day/call-time)}+${CDR(billsec)}])

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call)})}]?:continue_call)
exten => s,n,Set(DB(trunk/${foo}/day/call)=0)
exten => s,n(continue_call),Set(DB(trunk/${foo}/day/call)=$[ ${DB(trunk/${foo}/day/call)} + 1 ])

exten => s,n(noanswer),Verbose(4,Call count:${DB(trunk/${foo}/day/call)} - time(s):${DB(trunk/${foo}/day/call-time)})

2. Проверка превышения лимита

0
Your rating: Нет

Оповещение пользователей Asterisk о звонке на почту и jabber

Захотелось извещать пользователей Asterisk о поступающих им звонках. Наваял такой макрос:

[macro-notice_by_call]
exten => s,1,Verbose(4,Starting notification macros)
exten => s,n,Set(TIME_STRING=${STRFTIME($EPOCH,,%d %B %Y -  %T)})
exten => s,n,Set(SUBJECT_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}))
exten => s,n,Set(MESSAGE_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}). Time: ${TIME_STRING})

exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)})}]?skip_jabber_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)}=0]?skip_jabber_notification)
exten => s,n,jabbersend(asterisk,${DB(abonent/${MACRO_EXTEN}/jabber)},${MESSAGE_STRING})
${STRFTIME($EPOCH,,${TIME_STRING})})
exten => s,n(skip_jabber_notification),NoOp(No need jabber notification)
 
exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_email)})}]?skip_email_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_email)}=0]?skip_email_notification)
exten => s,n,system(echo "${MESSAGE_STRING}" | mail -s "${SUBJECT_STRING}" ${DB(abonent/${MACRO_EXTEN}/email)});
exten => s,n(skip_email_notification),NoOp(No need email notification)

Соответственно, в базе данных астериска должна быть информация о контактах пользователей. Пытаться использовать почту из конфигурационного файла я не захотел, т.к. это может быть разная почта.

0
Your rating: Нет

Автоматическая проверка баланса у разных провайдеров через Астериск

Т.к. потренировался в подключении к астериску разных провайдеров, захотелось, как-то просто получать у них всех баланс счета.

У некоторых провайдеров, на пример - НСС, zadarma, sipnet, comtube, есть прямые телефоны для получения сразу баланса голосом, а у некоторых, типа МТС, нужно донабирать цифирки.

В итоге после некоторых тренировок сделал, чтобы при звонке на определенный номер моего астериска, проходил автоматический обзвон провайдеров и можно было прослушать баланс на всех подключенных провайдерах.

Так же для удобства прикрутил голосовые фразы с названием провайдеров, чтобы можно было понять, от какого провайдера идет информация о балансе.

Итоговая конфигурация extensions.conf

[get-balance]
exten => balance-all,1,Background(provider/mtt)
exten => balance-all,n,Dial(SIP/mtt/88003335358,,L(20000)g)
exten => balance-all,n,Background(provider/sipnet)
exten => balance-all,n,Dial(SIP/sipnet/00,,L(5000)g)
exten => balance-all,n,Background(provider/zadarma)
exten => balance-all,n,Dial(SIP/zadarma/1111,,L(7000)g)
exten => balance-all,n,Background(provider/comtube)
exten => balance-all,n,Dial(SIP/comtube/102,,L(7000)g)
exten => balance-all,n,Background(provider/ncc)
exten => balance-all,n,Dial(Dongle/dongle-ncc/10011,20,L(10000)g)
exten => balance-all,n,Playback(provider/mts)
exten => balance-all,n,Dial(Dongle/dongle-mts/111,60,M(balance-mts)L(8000))
exten => balance-all,n,Hangup

0
Your rating: Нет
Ленты новостей