Километровый, но таки пример. Там еще определяется можно ли звонить на сотовые с внутреннего номера и нужный ОПСОС
macro calling-mobile (calling,called) {
switch (${calling}) {
case 777:
Set(permissions=ALLOW);
break;
case 104:
Set(permissions=ALLOW);
break;
case 105:
Set(permissions=ALLOW);
break;
case 106:
Set(permissions=ALLOW);
break;
case 107:
Set(permissions=ALLOW);
break;
case 109:
Set(permissions=ALLOW);
break;
case 110:
Set(permissions=ALLOW);
break;
default:
Set(permissions=DENY);
break;
}
if ("${permissions}"="ALLOW") {
Set(OPSOS=OTHER);
Agi(opsos_selector.py,${called:1:3});
NoOP(### OPSOS = ${OPSOS} ###);
switch (${OPSOS}) {
case OTHER:
NoOP(### OPSOS ### switch to OTHER ###);
Set(dialprefix=10);
break;
case MEGAFON:
NoOP(### OPSOS ### switch to MEGAFON ###);
Set(dialprefix=11);
break;
case BEELINE:
NoOP(### OPSOS ### switch to BEELINE ###);
Set(dialprefix=12);
break;
case MTS:
NoOP(### OPSOS ### switch to MTS ###);
Set(dialprefix=13);
break;
default:
NoOP(### OPSOS ### switch to default-OTHER ###);
Set(dialprefix=10);
break;
}
Dial(SIP/${dialprefix}${called}@neogate,,r);
if (${dialprefix}>10) {
Set(SIPcause=${MASTER_CHANNEL(HASH(SIP_CAUSE,${CDR(dstchannel)}))});
Set(SIPcode=${CUT(SIPcause," ",2)});
NoOp(### SIPcode = ${SIPcode} ###);
if (${SIPcode} = 486) {
NoOp(### OPSOS ${OPSOS} IS BUSY NOW, TRY TO USE OTHER(MEGAFON2) ###);
Set(dialprefix=10);
Dial(SIP/${dialprefix}${called}@neogate,,r);
Hangup();
}
}
Hangup();
} else
NoOP(### CALL WAS DENIED, BECAUSE CALLING NUMBER IS NOT ALLOWED TO CALL MOBILE PHONES ###);
HangUP();
};
_[78]9XXXXXXXXX => {
&recording(${CALLERID(num)},${EXTEN});
&calling-mobile(${CALLERID(number)},${EXTEN});
};
_9XXXXXXXXX => {
&recording(${CALLERID(num)},${EXTEN});
&calling-mobile(${CALLERID(number)},${EXTEN});
};
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
def agi_command(cmd):
print cmd
sys.stdout.flush()
return sys.stdin.readline().strip()
tele2 = ['900', '902', '904', '908', '950', '951', '952', '953']
mts = ['910', '911', '912', '913', '914', '915', '916', '917', '918', '919', '987', '981', '982', '983', '984', '985', '986', '987', '988', '989']
megafon = ['920', '921', '922', '923', '924', '925', '926', '927', '928', '929', '930', '931', '932', '933', '934', '936', '938']
beeline= ['903', '905', '906', '909', '960', '961', '962', '963', '964', '965', '967']
if sys.argv[1] in mts:
response = agi_command("EXEC Set OPSOS=MTS")
elif sys.argv[1] in megafon:
response = agi_command("EXEC Set OPSOS=MEGAFON")
elif sys.argv[1] in beeline:
response = agi_command("EXEC Set OPSOS=BEELINE")
else:
response = agi_command("EXEC Set OPSOS=OTHER")
sys.exit(0)