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

передача данных из внешнего скрипта в Asterisk

Asterisk GUI 9 сообщений -
#1

передача данных из внешнего скрипта в Asterisk


Добрый день. Возник один вопрос, может кто сталкивался: есть скрипт в который попадает внутренний номер абонента, необходимо реализовать следующее:
После дозвоне до абонента, соединить с оператором ( внутренний номер которого отрабатывается скриптом sip.sh)
пробовал следующею реализацию

exten => s, 1, Set(RESULT=${SHELL(/bin/sh /call/sip.sh)})
exten => s, n, Dial(Sip\${RESULT})

содержимое скрипта простое:
#!/bin/sh
let RESULT=37105
echo "$RESULT"

Права на скрипт 773, пользователь и группа asterisk
Проблема в следующем не передается значение переменной RESULT.....
#2

Если не ошибаюсь, он берет код выхода а не то, что печаталось. На моей системе (openwrt) такое однако работает:
Код:
/etc/asterisk/openwrt_dialplans.conf:exten => h,n,Set(call_channel_awk=${SHELL(echo -n ${CDR(dstchannel)} | awk -F '/' '{print $2}' | awk -F '-' '{print $1}')})
#3

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

Нет, вполне нормально принимает стандартный поток вывода. Разве что посмотрите, кажись оно должно заканчиваться \n
Или передавайте через AGI. Вполне нормально работает и с bash

_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
#5

Если не затруднит можно привести пример... Спасибо
#6

Вполне пример из Гугла.

Код:

#!/bin/bash
declare -a array
while read -e ARG && [ "$ARG" ] ; do
array=(` echo $ARG | sed -e 's/://'`)
export ${array[0]}=${array[1]}
done

# following variables are available from asterisk
echo $agi_request >&2
echo $agi_channel >&2
echo $agi_language >&2
echo $agi_type >&2
echo $agi_uniqueid >&2
echo $agi_callerid >&2
echo $agi_dnid >&2
echo $agi_rdnis >&2
echo $agi_context >&2
echo $agi_extension >&2
echo $agi_priority >&2
echo $agi_enhanced >&2

checkresults() {
while read line
do
case ${line:0:4} in
"200 " ) echo $line >&2
return;;
"510 " ) echo $line >&2
return;;
"520 " ) echo $line >&2
return;;
* ) echo $line >&2;; #keep on reading those Invlid command
#command syntax until "520 End ..."
esac
done
}

res=

echo "1. Setting Variable 'Test Variable' ..." >&2
echo "SET VARIABLE TestVariable \"$res\""
checkresults

echo "=================== Complete ====================" >&2

_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
#7

Столкнулся с проблемой что не отрабатывается команда System, т.е. пытаюсь выполнить простой скрипт exten => s,n,System(/calls/sip.sh), в консоли отрабатывает нормально а вот через asterisk не хочет. И Еще одна проблема когда включаю agi debug on
Usage: agi debug
Enables dumping of AGI transactions for debugging purposes
при использовании AGI логов не видно.
Вызываю стандартным образом exten => s,n,AGI(test.php), как я понимаю в CLI, должны отображаться данные которые передаются в agi, или я ошибаюсь.
В консоль захожу через: asterisk -vvvvvr
#8

Да вроде всё просто должно быть.
Код:

exten => s,1,AGI(test.php,${foo},${foo2})
exten => s,2,NoOp(---${TEST}---)


Сам test.php
Код:

#!/usr/bin/php -q


Это простейший пример, когда скрипту передаются две переменные, а возвращается - одна.

_________________
Внимание! Свет в конце тоннеля может быть светом фар приближающегося поезда!
Ubuntu 10.04/12.04 - Asterisk 1.8.11.0-rc2/1.8.14.1/1.8.17.0/10.10.0
#9

Спасибо, разобрался...