Code:
; Macro aus meiner extentions.conf
[macro-incoming_call]
; ${ARG1} - Destination(s)
; ${ARG2} - Mailbox
; set CALLERID(name)
exten => s,1,Log(NOTICE, "Original CallerID Data: ${CALLERID(all)}")
exten => s,n,Ringing()
exten => s,n,GotoIf($["${DB(known/${CALLERID(num)})}" = ""]?unknown:known)
exten => s,n(known),Set(CALLERID(name)=${DB(known/${CALLERID(num)})})
exten => s,n,Goto(dnd)
exten => s,n(unknown),GotoIf($["${DB(cache/${CALLERID(num)})}" = ""]?lookup:cache)
exten => s,n(lookup),AGI(name.py)
exten => s,n,Goto(dnd)
exten => s,n(cache),Set(CALLERID(name)=${DB(cache/${CALLERID(num)})})
exten => s,n,Goto(dnd)
exten => s,n(dnd),GotoIf($[${DB(dnd/${ARG1})}]?on:off) ; check the dnd flag of the destination
exten => s,n(on),Wait(5)
exten => s,n,VoiceMail(${DB(voicebox/${ARG1})},u)
exten => s,n,Hangup()
exten => s,n(off),UserEvent(Call,Source: ${CALLERID(name)} (${CALLERID(num)}),Value: ${ARG1}); Trigger für SmartHome.py
exten => s,n,Dial(${DB(call/${ARG1})},10)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${DB(voicebox/${ARG1})},u) ; Voicemail mit Ansage "nicht erreichbar"
exten => s-BUSY,1,VoiceMail(${DB(voicebox/${ARG1})},b) ; Voicemail mit Ansage "besetzt"
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1) ; alles andere wie nicht erreichbar behandeln
Code:
#!/usr/bin/env python
# /usr/share/asterisk/agi-bin/name.py
#
import sys
import re
import urllib2
while 1:
line = sys.stdin.readline()
if not line.startswith('agi_'):
break
key,value = line.split(':')
vars()[key] = value.strip()
if agi_callerid == 'unknown':
sys.exit()
lookup = urllib2.urlopen("http://www.dasoertliche.de/Controller?form_name=search_inv&js=no&ph=%s" % agi_callerid, timeout=1)
lookup = lookup.read()
exp = re.compile('na: "([a-zA-Z0-9_ ]+)",', re.MULTILINE)
lookup = exp.search(lookup)
if lookup != None:
sys.stdout.write("SET VARIABLE CALLERID(name) \"%s\"\n" % lookup.group(1))
sys.stdout.flush()
#result = sys.stdin.readline()
sys.stdout.write("DATABASE PUT cache %s \"%s\"\n" % (agi_callerid, lookup.group(1)))
sys.stdout.flush()
#result = sys.stdin.readline().strip()
so long,