#!/usr/bin/env python #-*- coding: utf-8 -*- import MySQLdb,sys,re def WhatKindOfNumber(WKONnumber): if re.match(r'^[78]3843(\d{6})$', WKONnumber): # print " 11 [78]3843([78] + ): " return WKONnumber[5:11],"our-town" if re.match(r'^[3]843{(\d{6})$', WKONnumber): # print " 10 3843( ): " return WKONnumber[4:10],"our-town" if re.match(r'^[3](\d{6})$', WKONnumber): # print " 7 3( , 7 ): " return WKONnumber[1:7],"our-town" if re.match(r'^(\d{6})$', WKONnumber): # print " 6 : " return WKONnumber,"our-town" if re.match(r'^\+(\d{11})$', WKONnumber): # print " 11 +7: " return WKONnumber[2:12],"mobile" if re.match(r'^[78]9(\d{9})$', WKONnumber): # print " 11 89 79: " return WKONnumber[1:11],"mobile" if re.match(r'^[9](\d{9})$', WKONnumber): # print " 10 9: " return WKONnumber,"mobile" if re.match(r'^[78][^9](\d{9})$', WKONnumber): # print " 11 7 8, : " return WKONnumber[1:11],"another-town" if re.match(r'^[^9](\d{9})$', WKONnumber): # print " 10 : " return WKONnumber,"another-town" return WKONnumber,"default" def agi_command(cmd): print cmd sys.stdout.flush() return sys.stdin.readline().strip() def mysqlconnect(sql): db=MySQLdb.connect(host="127.0.0.1",port=3306,user="asterisk_user",passwd="password",db="asterisk") cursor = db.cursor() cursor.execute(sql) sql = """SELECT FOUND_ROWS(); """ cursor.execute(sql) row = cursor.fetchone() db.close() return row[0] def main(): number, typeofnumber = WhatKindOfNumber(sys.argv[1]) if typeofnumber == "our-town" or typeofnumber == "default": sql = """select SQL_CALC_FOUND_ROWS * from addressbook where mobile= '""" + number + """' or home= '""" + number + """' or work= '""" + number + """' or fax='""" + number + """' limit 1;""" if typeofnumber == "mobile" or typeofnumber == "another-town": sql = """select SQL_CALC_FOUND_ROWS * from addressbook where mobile like '%""" + number + """' or home like '%""" + number + """' or work like '%""" + number + """' or fax like '%""" + number + """' or mobile like '""" + number + """' or home like '""" + number + """' or work like '""" + number + """' or fax like '""" + number + """' limit 1;""" result = mysqlconnect(sql) if result == 0: response = agi_command("EXEC Set QUEUE_PRIO=5") if result > 0: response = agi_command("EXEC Set QUEUE_PRIO=10") sys.exit(0) if __name__ == "__main__": main()
200601 => { &recording(${CALLERID(num)},${EXTEN}); Answer(); AGI(vip_or_not.py,${CALLERID(num)}); Queue(first_TD,tT,,,20); Hangup(); }
mysql>use asterisk; mysql> CREATE TABLE `numbers_remember` ( `id` int(9) unsigned NOT NULL auto_increment, `number` varchar(80) NOT NULL default 'NULL', `date` varchar(80), `agent` varchar(120) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `ix_phone` (`number`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8; mysql> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by 'password'; mysql> flush privileges;
[GET_DATA] dsn=asterisk readsql=SELECT agent, date, number FROM asterisk.numbers_remember WHERE number='${ARG1}' [SET_DATA] dsn=asterisk writesql=INSERT INTO asterisk.numbers_remember (number,date,agent) VALUES ('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}', '${SQL_ESC(${VAL3})}') [UPDATE_TIME] dsn=asterisk writesql=UPDATE asterisk.numbers_remember SET date='${SQL_ESC(${VAL1})}' WHERE number='${SQL_ESC(${VAL2})}' [DELETE_DATA] dsn=asterisk writesql=DELETE FROM asterisk.numbers_remember WHERE number='${SQL_ESC(${VAL1})}' AND date='${SQL_ESC(${VAL2})}'
globals { TIMEOUT_OF_NUMBER=86400; // }; 1333 => { Set(__DYNAMIC_FEATURES=delete_number_by_client); //&recording(${CALLERID(number)},${EXTEN}); //Set(DB(clients/number)=${CALLERID(num)}); Set(__CALLFROMNUM=${CALLERID(num)}); Set(ARRAY(AGENT,DATE,NUMBER)=${ODBC_GET_DATA(${CALLERID(num)})}); if("${NUMBER}"!="") { NoOp(== IF THE NUMBER ISN'T EQUAL "NULL" ==); Set(DATERESULT=${MATH(${EPOCH}-${DATE},i)}); if(${DATERESULT}<${TIMEOUT_OF_NUMBER}) { NoOp(== IF ${DATERESULT} < ${TIMEOUT_OF_NUMBER} ==); Set(_NUM_TO_DEL=${CALLERID(NUM)}); &recording(${CALLFROMNUM},${EXTEN}); Dial(SIP/${AGENT},20,g); if("${DIALSTATUS}"!="ANSWER") { &recording(${CALLFROMNUM},${EXTEN}); Queue(Novokuznetsk,cnF); Set(AGENT=${CUT(MEMBERINTERFACE,/,2)}); Set(ODBC_DELETE_DATA()=${NUMBER},${DATE}); Set(ODBC_SET_DATA()=${CALLFROMNUM},${EPOCH},${AGENT}); }; Set(ODBC_UPDATE_TIME()=${EPOCH},${NUMBER});}; if(${DATERESULT}>${TIMEOUT_OF_NUMBER}) { NoOp(== IF ${DATERESULT} > ${TIMEOUT_OF_NUMBER} ==); Set(ODBC_DELETE_DATA()=${NUMBER},${DATE}); &recording(${CALLFROMNUM},${CALLFROMNUM}); Queue(Novokuznetsk,cnF); Set(AGENT=${CUT(MEMBERINTERFACE,/,2)}); Set(ODBC_SET_DATA()=${CALLFROMNUM},${EPOCH},${AGENT}); }; } else { NoOp(== IF THE NUMBER DOESN'T EXIST IN DB ==); &recording(${CALLFROMNUM},${EXTEN}); Queue(Novokuznetsk,cnF); Set(AGENT=${CUT(MEMBERINTERFACE,/,2)}); NoOp(${CALLFROMNUM},${EPOCH},${AGENT}); Set(ODBC_SET_DATA()=${CALLFROMNUM},${EPOCH},${AGENT}); }; HangUp(); };
[general] persistentmembers = yes autofill = yes updatecdr=yes [StandardQueue](!) setinterfacevar=yes music=default strategy=rrmemory timeout = 12 retry = 1 timeoutpriority = conf joinempty=yes leavewhenempty=no ringinuse=yes [Novokuznetsk](StandardQueue) ... [Kemerovo](StandardQueue) ... [Mejdurechensk](StandardQueue) ...
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TIMEOUT_OF_NUMBER=`grep TIMEOUT_OF_NUMBER= /etc/asterisk/extensions.ael| sed s/[^0-9]//g` CURRENT_DATE=`date +%s` THRESHOLD_DATE=$(($CURRENT_DATE-$TIMEOUT_OF_NUMBER)) mysql -e "delete from numbers_remember where date<$THRESHOLD_DATE;" -uroot -p123 asterisk
delete_number_by_client => *,peer,Macro,delnum
context macro-delnum { s => { Progress(); NoOP(== CALLERID IN MACRO-DELNUM IS ${NUM_TO_DEL} ==); System(/var/lib/asterisk/agi-bin/delete_numbers_by_request.sh ${NUM_TO_DEL}); HangUP(); MacroExit(); }; };
Source: https://habr.com/ru/post/270125/
All Articles