Hallo,
ich habe mir ein kleine Lösung für das Problem gebaut. Vllt. hilft es ja dem ein oder anderen weiter. Es verwendet erst einmal interne Mittel um das Caching zu erledigen.
Weiterhin kann ich statische Einträge vornehmen z.B. für Spitznamen.
so long,
Marcus
ich habe mir ein kleine Lösung für das Problem gebaut. Vllt. hilft es ja dem ein oder anderen weiter. Es verwendet erst einmal interne Mittel um das Caching zu erledigen.
Weiterhin kann ich statische Einträge vornehmen z.B. für Spitznamen.
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,
Marcus