From 9f9b6aef366c35ffd8874df68343bf62002a8894 Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Tue, 29 Sep 2015 19:21:51 +0200 Subject: [PATCH] Passe sip.conf, voicemail.conf, manager.conf, extensions.conf avec le module python --- Bundler/asterisk-server.xml | 4 + .../asterisk/extensions.conf/extensions.conf | 229 ++++++++++++++++++ Cfg/etc/asterisk/extensions.conf/info.xml | 3 + Cfg/etc/asterisk/voicemail.conf/info.xml | 3 + .../asterisk/voicemail.conf/voicemail.conf | 31 +++ Python/etc/asterisk/manager.conf | 45 ++++ Python/etc/asterisk/sip.conf | 88 +++++++ 7 files changed, 403 insertions(+) create mode 100644 Cfg/etc/asterisk/extensions.conf/extensions.conf create mode 100644 Cfg/etc/asterisk/extensions.conf/info.xml create mode 100644 Cfg/etc/asterisk/voicemail.conf/info.xml create mode 100644 Cfg/etc/asterisk/voicemail.conf/voicemail.conf create mode 100644 Python/etc/asterisk/manager.conf create mode 100644 Python/etc/asterisk/sip.conf diff --git a/Bundler/asterisk-server.xml b/Bundler/asterisk-server.xml index 333a929..0bf0ed0 100644 --- a/Bundler/asterisk-server.xml +++ b/Bundler/asterisk-server.xml @@ -3,4 +3,8 @@ + + + + diff --git a/Cfg/etc/asterisk/extensions.conf/extensions.conf b/Cfg/etc/asterisk/extensions.conf/extensions.conf new file mode 100644 index 0000000..240b3d4 --- /dev/null +++ b/Cfg/etc/asterisk/extensions.conf/extensions.conf @@ -0,0 +1,229 @@ +[general] +static=yes +writeprotect=no +autofallthrough=yes +clearglobalvars=no +priorityjumping=no + +[globals] +CONSOLE=Console/dsp +IAXINFO=guest +TRUNK=Zap/g2 +TRUNKMSD=1 + +[voicemail] +exten => _1XXXX,1,VoiceMail(${EXTEN}@666) +exten => _1XXXX,n,GotoIf($["${VMSTATUS}" = "FAILED"]?inconnu:hangup) +exten => _1XXXX,n(inconnu),Goto(voicemail,i,1) +exten => _1XXXX,n(hangup),Hangup() +include => numero-invalide + +[crans-sms] +;#include "/usr/scripts/var/sip/sip_accounts_alias" +exten => 7806,1,Goto(imprimante-sms,${CUT(CUT(CUT(MESSAGE(from),<,2),@,1),:,2)},1) +exten => _[a-zA-Z0-9].,1,AGI(alias) +exten => _[a-zA-Z0-9].,n,Set(ACTUALFROM=${CUT(CUT(MESSAGE(from),<,2),@,1)}) +exten => _[a-zA-Z0-9].,n,Set(DOMAINFROM=${CUT(CUT(MESSAGE(from),@,2),>,1)}) +exten => _[a-zA-Z0-9].,n,Set(nom=${SHELL(/usr/scripts/sip/scripts/num_to_callerid ${CUT(ACTUALFROM,:,2)})}) +exten => _[a-zA-Z0-9].,n,MessageSend(sip:${EXTEN},"${nom}" <${ACTUALFROM}@${DOMAINFROM}>) +exten => _[a-zA-Z0-9].,n,NoOp(Send status is ${MESSAGE_SEND_STATUS}) +exten => _[a-zA-Z0-9].,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg) +exten => _[a-zA-Z0-9].,n,Hangup() +exten => _[a-zA-Z0-9].,n(sendfailedmsg),GotoIf($["${SHELL(/usr/scripts/sip/scripts/user_exist.py ${EXTEN} )}" = "TRUE"]?enqueue) +exten => _[a-zA-Z0-9].,n,Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d/%m/%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Retry later.") +exten => _[a-zA-Z0-9].,n,MessageSend(${ACTUALFROM},ServiceCenter) +exten => _[a-zA-Z0-9].,n,Hangup() +exten => _[a-zA-Z0-9].,n(enqueue),AGI(sms_delay,"\"${nom}\"" <${ACTUALFROM}@${DOMAINFROM}>,sip:${EXTEN},${BASE64_ENCODE(${MESSAGE(body)})},${EXTEN}) +exten => _[a-zA-Z0-9].,n,Hangup() + +[horloge] +exten => 1234,1,Ringing() +exten => 1234,n,Wait(3) +exten => 1234,n,AGI(alias) +exten => 1234,n,AGI(agi://127.0.0.1:1234) +exten => 1234,n,Set(COUNTER=0); +exten => 1234,n,Answer() +exten => 1234,n(time),Wait(1) +exten => 1234,n,SayUnixTime(,Europe/Paris,AdBY kM) +exten => 1234,n,Set(COUNTER=$[${COUNTER} + 1]); +exten => 1234,n,Wait(1) +exten => 1234,n,GotoIf($[${COUNTER} < 2]?time) +exten => 1234,n,Playback(vm-goodbye) +exten => 1234,n,Hangup() +include => hangup + + +[conference] +exten => _9XXXX,1,Ringing +exten => _9XXXX,n,Wait(3) +exten => _9XXXX,n,Answer() +exten => _9XXXX,n,ConfBridge(${EXTEN}) +exten => _9XXXX,n,Hangup() +include => hangup + + + +[crans-sip] +exten => _[a-zA-Z0-9+].,1,Gotoif($["${SIPDOMAIN}" = "crans.org"]?internal) +exten => _[a-zA-Z0-9+].,n,Gotoif($["${SIPDOMAIN}" = "sip.crans.org"]?internal) +exten => _[a-zA-Z0-9+].,n,Gotoif($["${SIPDOMAIN}" = ""]?internal) +exten => _[a-zA-Z0-9+].,n(external),AGI(history,add,${UNIQUEID},${CALLERID(num)},${EXTEN}@${SIPDOMAIN}) +exten => _[a-zA-Z0-9+].,n,Goto(crans-sip-autre,${EXTEN},1) +exten => _[a-zA-Z0-9+].,n(internal),AGI(history,add,${UNIQUEID},${CALLERID(num)},${EXTEN}) +exten => _[a-zA-Z0-9+].,n,Goto(crans-sip-dispatch,${EXTEN},1) + + +[crans-from-external] +exten => _[a-zA-Z0-9].,1,Noop(external call: ${CALLERID(num)}@${CDR(channel):4:-9}) +exten => _[a-zA-Z0-9].,n,Set(__SIPFROMDOMAIN=${CDR(channel):4:-9}) +exten => _[a-zA-Z0-9].,n,AGI(history,add,${UNIQUEID},${CALLERID(num)}@${CDR(channel):4:-9},${EXTEN}) +exten => _[a-zA-Z0-9].,n,Noop(Ip: ${CHANNEL(recvip)}) +exten => _[a-zA-Z0-9].,n,Goto(crans-sip-account,${EXTEN},1) + + +[crans-sip-dispatch] +exten => 01189998819991197253,1,Goto(crans-sip-internal-special,${EXTEN},1) ; petit hack pour ne pas envoyer le numéro dans crans-sip-dial +exten => _0ZXXXXXXXX!,1,Goto(crans-sip-dial,+33${EXTEN:1},1) ; on remplace 0[1-9] par +33[1-9] +exten => _00!,1,Goto(crans-sip-dial,+${EXTEN:2},1) ; on remplace 00 par + +exten => _+!,1,Goto(crans-sip-dial,${EXTEN},1) +exten => _[a-zA-Z0-9].,1,Goto(crans-sip-internal,${EXTEN},1) + +[test-playback] +exten => 3333,1,Ringing +exten => 3333,n,Wait(2) +exten => 3333,n,Answer +exten => 3333,n,Playback(higurashi) +exten => 3333,n,Hangup() +include => hangup + +[messagerie] +exten => 666,1,Ringing +exten => 666,n,Wait(2) +exten => 666,n,VoiceMailMain(s${CALLERID(num)}@666) +exten => 666,n,Hangup() +include => hangup + +[crans-sip-autre] +;exten => _[a-zA-Z0-9].,1,AGI(billing) +exten => _[a-zA-Z0-9].,1,Dial(SIP/${EXTEN}@${SIPDOMAIN},120,tr) +exten => _[a-zA-Z0-9].,n,Noop(Status: ${DIALSTATUS}) +exten => _[a-zA-Z0-9].,n,Hangup() +include => hangup + +[voice-recorder] +exten => 7777,1,Ringing +exten => 7777,n,Wait(2) +exten => 7777,n,Playback(parlez apres le bip sonore) +exten => 7777,n,record(mytest.alaw,5,30) ; record audio and video to a file "mytest" +exten => 7777,n,playback(beep) +exten => 7777,n,playback(mytest) ; play the recorded file +exten => 7777,n,hangup() +include => hangup + + +[crans-sip-internal-special] +exten => 01189998819991197253,1,Goto(multidial,nounou,1) +exten => 2024561111,1,Goto(multidial,bureau,1) +exten => 00911,1,Goto(multidial,cableur,1) +exten => 911,1,Goto(multidial,cableur,1) +exten => 119,1,Goto(multidial,imprimeur,1) +exten => 3333,1,Goto(test-playback,${EXTEN},1) +exten => 666,1,Goto(messagerie,${EXTEN},1) +exten => 1234,1,Goto(horloge,${EXTEN},1) +exten => 7777,1,Goto(voice-recorder,${EXTEN},1) +exten => 7806,1,Goto(imprimante,${EXTEN},1) +exten => _9XXXX,1,Goto(conference,${EXTEN},1) +include => numero-invalide + +[crans-sip-account] +exten => _1XXXX,1,Ringing +exten => _1XXXX,n,Wait(1) +exten => _1XXXX,n,Dial(SIP/${EXTEN},30) +exten => _1XXXX,n,Goto(voicemail,${EXTEN},1) +include => numero-invalide + +[crans-sip-internal] +;#include "/usr/scripts/var/sip/sip_accounts_alias" +exten => _[a-zA-Z][a-zA-Z0-9].,1,AGI(alias) +exten => _1XXXX,1,Goto(crans-sip-account,${EXTEN},1) +include => crans-sip-internal-special + +[imprimante-sms] +exten => _1XXXX,1,Set(code=${SHELL(/usr/scripts/sip/scripts/code_impression.py ${EXTEN})}) +exten => _1XXXX,n,Set(MESSAGE(to)=sip:${EXTEN}@crans.org) +exten => _1XXXX,n,Set(MESSAGE(from)="Impression" ) +exten => _1XXXX,n,GotoIf($[ "${code}" = "NONE" ]?nocode:code) +exten => _1XXXX,n(nocode),Set(MESSAGE(body)=vous n'avez pas de code en cours de validité) +exten => _1XXXX,n,Goto(send) +exten => _1XXXX,n(code),Set(MESSAGE(body)=code : ${code}#) +exten => _1XXXX,n(send),MessageSend(sip:${EXTEN},${MESSAGE(from)}) +exten => _1XXXX,n,Hangup() + +[imprimante] +exten => 7806,1,Ringing +exten => 7806,n,Wait(3) +exten => 7806,n,Answer +exten => 7806,n,Set(code=${SHELL(/usr/scripts/sip/scripts/code_impression.py ${CALLERID(num)})}) +exten => 7806,n,GotoIf($[ "${code}" = "NONE" ]?hangup) +exten => 7806,n,Set(MESSAGE(to)=sip:${CALLERID(num)@crans.org}) +exten => 7806,n,Set(MESSAGE(from)="Impression" ) +exten => 7806,n,Set(MESSAGE(body)=code : ${code}#) +exten => 7806,n,MessageSend(sip:${CALLERID(num)},${MESSAGE(from)}) +exten => 7806,n,Playback(impression-1) +exten => 7806,n,SayDigits(${code}#) +exten => 7806,n,Wait(3) +exten => 7806,n,SayDigits(${code}#) +exten => 7806,n,Playback(impression-2) +exten => 7806,n,Hangup(16) +exten => 7806,n(hangup),Playback(impression-3) +exten => 7806,n,Hangup(16) +include => hangup + +[multidial] +;#include "/usr/scripts/var/sip/sip_multidial" +exten => _[a-zA-Z0-9].,1,Set(nums=${SHELL(/usr/scripts/sip/scripts/right_to_nums ${EXTEN})}) +exten => _[a-zA-Z0-9].,n,GotoIf($["${nums}" != "NONE"]?ring:nonvalide) +exten => _[a-zA-Z0-9].,n(ring),Ringing +exten => _[a-zA-Z0-9].,n,Wait(4) +exten => _[a-zA-Z0-9].,n,Dial(${nums},30) +exten => _[a-zA-Z0-9].,n,Wait(3) +exten => _[a-zA-Z0-9].,n,VoiceMail(${EXTEN}@666) +exten => _[a-zA-Z0-9].,n,Hangup() +exten => _[a-zA-Z0-9].,n(nonvalide),Goto(numero-invalide,i,1) +include => hangup + +[crans-sip-dial] +; On autorise que les numéro normaux et les 08 gratuits +exten => _+33[123459]XXXXXXXX,1,Set(policie=${SHELL(/usr/scripts/sip/agi/history quota ${EXTEN})}) +exten => _+33[123459]XXXXXXXX,n,GotoIf($[ "${policie}" != "ALLOWED" ]?hangup) +exten => _+33[123459]XXXXXXXX,n,AGI(billing) +;exten => _+33[123459]XXXXXXXX,n,Dial(SIP/${EXTEN}@forfait-ovh,60,L(1800000:60000:20000)) +exten => _+33[123459]XXXXXXXX,n(hangup),Hangup(16) +exten => _+3380[0459]XXXXXX,1,Set(policie=${SHELL(/usr/scripts/sip/agi/history quota ${EXTEN})}) +exten => _+3380[0459]XXXXXX,n,GotoIf($[ "${policie}" != "ALLOWED" ]?hangup) +exten => _+3380[0459]XXXXXX,n,Dial(SIP/${EXTEN}@forfait-ovh,60,L(1800000:60000:20000)) +exten => _+3380[0459]XXXXXX,n(hangup),Hangup(16) +include => numero-invalide + +[ovh-sip] +exten => s,1,Ringing +exten => s,n,Wait(2) +exten => s,n,Answer +exten => s,n,Read(digit,composez le numero de votre correspondant suivit de la touche diese,25,,,60) +exten => s,n,AGI(history,add,${UNIQUEID},${CALLERID(num)},${digit}) +exten => s,n,Goto(crans-sip-internal,${digit},1) +exten => h,1,AGI(history,update,${UNIQUEID},${CDR(billsec)}) +exten => h,n,Hangup() + +[numero-invalide] +exten => i,1,AGI(history,delete,${UNIQUEID}) +exten => i,n,Noop(Ip: ${CHANNEL(recvip)}) +exten => i,n,Playback(numero non attribue) +exten => i,n,Wait(2) +exten => i,n,Playback(numero non attribue) +exten => h,n,Hangup(16) +include => hangup + +[hangup] +exten => h,1,AGI(history,update,${UNIQUEID},${CDR(billsec)}) +exten => h,n,Hangup() diff --git a/Cfg/etc/asterisk/extensions.conf/info.xml b/Cfg/etc/asterisk/extensions.conf/info.xml new file mode 100644 index 0000000..8d4a1f0 --- /dev/null +++ b/Cfg/etc/asterisk/extensions.conf/info.xml @@ -0,0 +1,3 @@ + + + diff --git a/Cfg/etc/asterisk/voicemail.conf/info.xml b/Cfg/etc/asterisk/voicemail.conf/info.xml new file mode 100644 index 0000000..8d4a1f0 --- /dev/null +++ b/Cfg/etc/asterisk/voicemail.conf/info.xml @@ -0,0 +1,3 @@ + + + diff --git a/Cfg/etc/asterisk/voicemail.conf/voicemail.conf b/Cfg/etc/asterisk/voicemail.conf/voicemail.conf new file mode 100644 index 0000000..75cd3dc --- /dev/null +++ b/Cfg/etc/asterisk/voicemail.conf/voicemail.conf @@ -0,0 +1,31 @@ +[general] +format = wav49|gsm|wav +serveremail = sip +attach = yes +mailcmd=/usr/sbin/sendmail -t +skipms = 3000 +maxsilence = 10 +silencethreshold = 128 +maxlogins = 3 +maxsecs = 300 +minsecs = 1 +externpass = /usr/scripts/sip/scripts/update_pin +forcename=yes +forcegreeting=yes +charset = UTF-8 + +fromstring = "Sip Cr@ns" +emaildateformat = %d/%m/%Y à %H:%M:%S +emailsubject = [Sip Cr@ns] Nouveau message vocal +emailbody = Bonjour ${VM_NAME},\r\n\r\nLe numéro ${VM_CALLERID} a tenté\r\nde vous joindre sans succès le ${VM_DATE}.\nCette personne vous a laissé un message de ${VM_DUR} seconde(s).\r\nVous pouvez le consulter en appelant votre boite vocale. \r\n\r\nBonne journée !\r\n\r\n-- \r\nVoicemail, service effectué par Asterisk\n + +pagerfromstring = [Sip Cr@ns] +pagersubject = Nouveau message vocal +pagerbody = Nouveau message de ${VM_DUR} seconde(s), dans la boite ${VM_MAILBOX}, laissé le ${VM_DATE} par ${VM_CALLERID}. + +[666] +nounou => 098765432,les Nounous du Crans,roots@crans.org,,attach=yes|delete=yes +bureau => 098765432,le CA du Crans,bureau@crans.org,,attach=yes|delete=yes +imprimeur => 098765432,les Imprimeurs du Crans,impression@crans.org,,attach=yes|delete=yes +cableur => 098765432,les Câbleurs du Crans,respbats@lists.crans.org,,attach=yes|delete=yes +#include "/usr/scripts/var/sip/sip_accounts_voicemail" diff --git a/Python/etc/asterisk/manager.conf b/Python/etc/asterisk/manager.conf new file mode 100644 index 0000000..8a5aaee --- /dev/null +++ b/Python/etc/asterisk/manager.conf @@ -0,0 +1,45 @@ +info["owner"] = "asterisk" +info["group"] = "asterisk" +info["perms"] = 0644 + +include("secrets") + +out("""; +; Asterisk Call Management support +; Géré par bcfg2 + +; By default asterisk will listen on localhost only. +[general] +enabled = yes +port = 5038 +bindaddr = 0.0.0.0 + +; No access is allowed by default. +; To set a password, create a file in /etc/asterisk/manager.d +; use creative permission games to allow other serivces to create their own +; files +#include "manager.d/*.conf" + +[django] +secret =""" + secrets.asterisk_django_passwd + """ +deny=0.0.0.0/0.0.0.0 +permit=127.0.0.1/255.255.255.0 +permit=10.231.136.0/255.255.255.0 +write = config + +; Le mot de passe est aussi present dans /etc/crans/secrets.py +; (update accordingly ) +[sms] +secret = """ + secrets.asterisk_sms_passwd + """ +deny=0.0.0.0/0.0.0.0 +permit=127.0.0.1/255.255.255.0 +permit=10.231.136.0/255.255.255.0 +read = system +write = system,message + +[billing] +secret = """ + secrets.asterisk_billig_passwd + """ +deny=0.0.0.0/0.0.0.0 +permit=127.0.0.1/255.255.255.0 +read = call,system +write = call""") diff --git a/Python/etc/asterisk/sip.conf b/Python/etc/asterisk/sip.conf new file mode 100644 index 0000000..164fef7 --- /dev/null +++ b/Python/etc/asterisk/sip.conf @@ -0,0 +1,88 @@ +info["owner"] = "asterisk" +info["group"] = "asterisk" +info["perms"] = 0644 + +include("secrets") + +out("""[general] +language=fr +context=crans-from-external +outofcall_message_context=crans-sms +vmexten=666 +bindport=5060• +bindaddr=:: +srvlookup=yes• +domain = crans.org +fromdomain=crans.org +domain = sip.crans.org +domain = sip.v6.crans.org +domain = sip.v4.crans.org +qualify = 10000 +qualifyfreq = 60 +realm = asterisk +rtpholdtimeout=300 +rtptimeout=60 +register => 0033972113270:G1mrWTZ43Z8S@sip.ovh.fr + +tlsenable=yes +tcpenable=yes +tlsbindaddr=:: +tcpbindaddr=:: +tlscertfile=/etc/asterisk/cert/asterisk.pem +tlscafile=/etc/ssl/certs/cacert.org.pem +tlscipher=ALL +tlsclientmethod=tlsv1 + +videosupport=yes +disallow=all +allow=alaw +allow=ulaw +allow=h263 +;allow=h263p +;allow=h261• +allow=h264 +;allow=g729 +;maxcallbitrate=512 +;localnet=138.231.0.0/255.255.0.0 +;localnet=138.231.144.0/255.225.248.0 +;localnet=138.231.136.0/255.225.248.0 + +nat=force_rport,comedia + + +[forfait-ovh] +type=peer +host=sip.ovh.fr +;allow=all +context=ovh-sip +language=fr +insecure=port,invite +fromuser=""" + secrets.sip_username + """ +unername=""" + secrets.sip_username + """ +secret=""" + secrets.sip_secret + """ +canreinvite=no +dtmfmode=auto +video=no +restrictcid=no +amaflags=default + +;template par default des lignes pour le crans +[default-crans](!) +type=friend +transport=udp,tcp,tls +fromdomain=crans.org +host=dynamic +context=crans-sip +language=fr +insecure=port +canreinvite=no +dtmfmode=auto +call-limit = 10 +video=yes +restrictcid=no +amaflags=default +accept_outofcall_message=yes +outofcall_message_context=crans-sms +encryption=may + +#include "/usr/scripts/var/sip/sip_accounts" """)