Asterisk AGI BASH

использую давно bash в качестве AGI. Чего только на нём не делал – всё работает как часы.

Для того, чтобы получить в диалплан обратно параметры из bash, нужно сделать следующее:
#!/bash

# тут получили параметры, переданные скрипту как $1, $2 и т.п..
# произвели какие-то вычисления и нам нужно вернуть в диалплан
# переменную $res и использовать её в диалплане как bashres:

echo “SET VARIABLE bashres $res”
В диалплане после этого на время жизни канала будет доступно значение локальной переменной bashres:
….
exten => s,n,AGI(myscript,${ARG1}, ${ARG2})
exten => s,n,NoOp(Result: ${bashres})
…..

 

Распределение на внутренние номера с учетом переадресаций и статусов каналов

context internal {
_XXXXX => {
Set(REDIRECTNUM=${DB(REDIRECT/${EXTEN})}); //get redirect number from the base
&special-record();
if ( !${ISNULL(${REDIRECTNUM})} ) goto redirect;
&transfered-callerid-correction();
ChanIsAvail(SIP/${EXTEN},as);
if (${AVAILSTATUS} = 1) goto ${Dial_Sity},${EXTEN},1;
Answer();
Playtones(busy);
Busy(10);
Hangup();
redirect:
// Noop(len = ${LEN(${REDIRECTNUM:3})}); //for debug
Set(CDR(userfield)=12345);
//if number consist of 5 numbers it means it is local – to call local otherwise to call external
if ( ${LEN(${REDIRECTNUM:3})} = 5 ) {
&transfered-callerid-correction();
ChanIsAvail(SIP/${REDIRECTNUM:3},as);
if (${AVAILSTATUS} = 1) {
Dial(SIP/${REDIRECTNUM:3},60,rtT);
&dialstatus();
};
Answer();
Playtones(busy);
Busy(10);
Hangup();
}
Dial(Local/${REDIRECTNUM:3}@${Ext_Sity},${TRUNK_RING_TIMER},${TRUNK_OPTIONS});
&dialstatus();
}
}