Здравствуте! Алгоритм таков Поступает входящий звонок, звонят ВСЕ зареганые сипы. НЕОБХОДИМО:
определить КАКОЙ СИП поднял трубу, вычислить его IP и дополнительно послать в определенный порт этого IP номер с которого был звонок.
его родимого скрещиваем :-(
вы случаем не Такси-диспетчер используете?:)
пару лет назад создателю этой программы я высылал AGI и пример диалплана, попросите у него.
Я использовал trixbox 2.8.0.3, дам я вам диалплан с комментами, его надо будет положить в файл extensionsoverridefreepbx.conf, вот собственно диалплан:
[ext-queues] ; это очередь под номером 300 fkjujhbnv pdjyzn dct
include => ext-queues-custom
exten => 300,1,Macro(user-callerid,)
exten => 300,n,Answer
exten => 300,n,Set(__BLKVM_OVERRIDE=BLKVM/${EXTEN}/${CHANNEL})
exten => 300,n,Set(__QAZ=${CALLERID(num)}) ; выясняем номер звонящего
exten => 300,n,Set(__BLKVM_BASE=${EXTEN})
exten => 300,n,Set(DB(${BLKVM_OVERRIDE})=TRUE)
exten => 300,n,ExecIf($["${REGEX("(M[(]auto-blkvm[)])"
${DIAL_OPTIONS})}" != "1"],Set,_DIAL_OPTIONS=${DIAL_OPTIONS}M(auto-blkvm))
exten => 300,n,Set(__NODEST=${EXTEN})
exten =>
300,n,Set(MONITOR_FILENAME=/var/spool/asterisk/monitor/q${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID})
exten => 300,n,Set(__CWIGNORE=TRUE)
exten => 300,n,Queue(300,t,,,270)
exten => 300,n,dbDel(${BLKVM_OVERRIDE})
exten => 300,n,Set(__NODEST=)
exten => 300,n,Set(__CWIGNORE=)
exten => 300,n,Goto(app-blackhole,hangup,1)
exten => 300*,1,Macro(agent-add,300,)
exten => 300**,1,Macro(agent-del,300,300)
; end of [ext-queues]
В предыдущем диалплане вызывается контекст :
[macro-auto-blkvm]
include => macro-auto-blkvm-custom
exten => s,1,Set(__MACRO_RESULT=)
exten => s,n,macro(unix) ; на этом этапе мы узнаем кто поднял трубку, и
запускаем свой макрос, я его назвал unix
exten => s,n,dbDel(${BLKVM_OVERRIDE})
; end of [macro-auto-blkvm]
[macro-unix]
exten => s,1,noop(${QAZ}) ; выводим в CLI номер звонящего
exten => s,2,noop(${CALLERID(num)}) ; здесь CALLERID(num), это номер
того кто поднял трубку.
exten => s,3,System(/var/spool/asterisk/tmp/tdtn ${QAZ}
${CALLERID(num)}) ; здесь мы запускаем наш bash скрипт с параметрами
первый параметр кто звонит, второй кто поднял трубку
; end of [macro-unix]
вот скрипт: у меня все просто номер 101 находится на 192.168.0.101, 102 на 192.168.0.102 и т.д. ну чтобы проще было определять куда телнетом цепляться. ниже скрипт
#!/bin/bash
w=$1
op=$2
wc=" COF \t $w \n "
((/bin/sleep 1 ; /bin/echo -e $wc ; /bin/sleep 1 ; /bin/echo " " ; ) |
telnet 192.168.0.$op 333)
exit
соответсвенно должен быть на каждом принимающем компе задейсмтвовам tcp сервер с портом 333 и tcpipmode = 1
все можешь наслаждаться:)
Спасибо за подсказки!!!
Собсно решил сам таким способом
В extentions.conf [global] добавил
ip101 = XXX.XXX.XXX.XXX
Это SIP <-> IP
DESTPORT = XXXX
[incoming_lkm]
exten => _12,1,Set(CHAN=${RAND(101,105)})
exten => _12,n,noop(${CHAN})
exten => _12,n,Dial(SIP/${CHAN},7,mtM(send,${CHAN}))
[macro-send]
exten => s,1,System(echo -e "Message: Call \r\n CallerID: ${CALLERID(num)} \r\n" | nc ${ip${ARG1}} ${DESTPORT})
Собственно и все. По рандому выбирается SIP, потом в соответствии с ним во время Dial выполняется макрос по потсылке нужной инфы на нужный порт и IP.
Спасибо всем, считаю тему закрытой...
зато я нашел скрипт! Оказалось, что он с тех пор в составе trixbox embedded:
#!/usr/bin/env php
<?php
$shortopts = "";
$shortopts .= "i:"; //ipaddr
$shortopts .= "p:"; //port
$shortopts .= "m:"; //message
$options = getopt($shortopts);
print_r($options);
$fp = fsockopen($options['i'], $options['p'], $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = str_replace("<br>","\r\n",$options['m']);
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Запускать нужно из командной строки:
#bash ./taxi-disp.php -i 192.168.0.123 -p 1111 -m ХХХ
опции:
-i это адрес, куда слать
-p это порт, куда слать
-m это команда. Описание API (команд) нужно взять у девелопера
определить адрес можно запросом в astdb по ключу
/SIP/Registry/number
Задан: 2011-04-13 15:37:08 +0400
Просмотрен: 1,615 раз
Обновлен: Apr 14 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.