AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Выполнение команды при регистрации SIP-клиента

Asterisk IP PBX 6 сообщений -
#1

Доброго времени суток!

Как при регистрации/отключении определённого SIP-peer'а, запустить определённую shell-команду?

Есть смартфон, регистрирующийся на домашнем asterisk'e через sip по wi-fi. Смартфон подключен к Мегафону. К этому мегафоновскому номеру привязан Мультифон, который так же зарегистрирован на Asteriskе для входящих/исходящих звонков. В Мультифоне есть возможность принимать звонки на телефон (через GSM), либо через SIP (на Asterisk). Режим приёма звонков можно изменить, отправив https-запрос мегафоновскому серверу определённого вида (описано тут - http://multifon.ru/publications/settings_sip/index.html).

Хочу следующего. Зарегистрировался на сервере - мегафоновские звонки идут на SIP, отключился от сервера - звонки идут снова через GSM. Т.е. при регистрации/отключении SIP-клиента на сервере с * нужно запускать shell-команду, отправляющую http-запрос. Вижу способ некрасивый: периодически опрашивать из консоли sip show peers и потом парсить его. Думаю, есть какое-то более правильное решение. Подскажите пожалуйста.

_________________
Debian 6 "Squeeze" (2.6.32-5-686), * 1.8.9.0, C470IP & SPA2102, PCI 4xUSB 2.0, 2xHuawei E1550 unlocked
#2

Можно конечно подключится по сокету в AMI и просто ждать нужного сообщения "ХХХ Подключился" или "ХХХ отключился"
Почитайте о AMI тут.

http://www.voip-info.org/wiki/view/Asterisk+manager+API
#3

Grigoriy писал(а):
Можно конечно подключится по сокету в AMI и просто ждать нужного сообщения "ХХХ Подключился" или "ХХХ отключился"
Почитайте о AMI тут.

Спасибо за ответ.
Но мне кажется всё равно такое решение больше похоже на костыль и не сильно отличается от того, что я собирался сделать через sip show peers. Неужели никакого встроенного обработчика событий в * нет?

_________________
Debian 6 "Squeeze" (2.6.32-5-686), * 1.8.9.0, C470IP & SPA2102, PCI 4xUSB 2.0, 2xHuawei E1550 unlocked
#4

Вот что получилось.

asterisk_peer_check.sh
Код:
#!/bin/bash

# My SIP-smartphone peer
peer=$1
path="/var/spool/asterisk/tmp"
peer_state_last_file="$path/peer_state_$peer"

#Multifon account
multifon_login="7922XXXXXXX@multifon.ru"
multifon_password="mypassword"

# Jabber account for report
xmpp_jid="jid@jabberserver.com"
xmpp_bin="/usr/bin/sendxmpp"

#getting actual peer state from asterisk
peer_state_now=`asterisk -rx "sip show peers" | grep -i $peer | awk '{print $2}'`;

#getting previous state of peer from file
if [ -f "$peer_state_last_file" ];
then
peer_state_last=`cat $peer_state_last_file`
else
#first run
peer_state_last=$peer_state_now
fi

if [ "$peer_state_now" != "$peer_state_last" ]
then
#peer status changed
if [ "$peer_state_now" = "(Unspecified)" ]
then
#GSM-2-GSM
multifon_routing="0"
else
#GSM-2-SIP
multifon_routing="1"
fi

#changing multifon status
multifon_url="https://sm.megafon.ru/sm/client/routing/set?login=$multifon_login&password=$multifon_password&routing=$multifon_routing"
w3m $multifon_url >/dev/null

#jabber announce
test ! -x $xmpp_bin || ( echo "[`hostname`] Asterisk: Megafon incoming calls set to $multifon_routing" | $xmpp_bin -i $xmpp_jid )
fi

#writing actual peer state in file
echo $peer_state_now > $peer_state_last_file
/etc/crontab
Код:
# Каждую минуту проверять подключение смартфона по Wi-Fi.
* * * * * root /etc/cron/asterisk_peer_check.sh mywifipeer

_________________
Debian 6 "Squeeze" (2.6.32-5-686), * 1.8.9.0, C470IP & SPA2102, PCI 4xUSB 2.0, 2xHuawei E1550 unlocked
#5

Поставил мультифон и включил пакет "безлимитный мультифон". Теперь плачу 100 руб. в месяц и за это есть 2000 халявных минут.
С помощью USSD-комманды можно запросить сколько минут ещё осталось. Но остаток минут нужно как-нибудь засунуть в AstDB - Asterisk ведь должен знать сколько минут осталось а не я.
Как решить проблему?
Я вижу две возможности: взять chan_datacard и спрашивать через USSD, но это значит использовать модем только для этой цели: как то некрасиво.
Вторая возможность: Астер должен как-то залазить в СервисГид - там тоже написан остаток минут.
Или есть ещё какие-нибудь возможности?
#6

так никто и не предложил решения по exec при sip регистрации?

а есть возможность автоматом совершить звонок на определенный ext при регистрации?
и где бы про эвенты почитать которые юзаються при регистрации?

_________________
ася #643888492