Rückwärtssuche bei dasoertliche.de neues Script

@Snaker

Wie hast du es denn schließlich eingebunden?
Hab auch Trixbox 2.8 (Asterisk 1.6) installiert.
In der Konsole klappt es soweit, bekomme den Namen, allerdings nicht den Ort, ...
Aber das liegt wohl daran, dass ich in Österreich sitze.

Alle einkommenden Anrufe werden zuerst auf den Tag/Nacht Force Switch geleitet und dann auf mehrere Time Conditions (WE-Dienst, Nachtdienst, Feiertage, etc.) und dann (wenn Dienst) beim IVR, der gibts weiter zur Ringgroup...

Wo muß ich denn das AGI-Skript jetzt einbauen?
Kann ich die extension-custom-Datei verwenden?

danke
Reinhard
 
@stindl

Ich habe es wie folgt getan...

Österreich geht bei mir auch...

Leider habe ich aber im Moment das Problem, bei laufendem reverse script, in unregelmäßigen abständen nicht mehr Gespräche von ausserhalb intern verbinden zu können.

[macro-dial]

exten => s,1,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => s,2,Set(CALLERID(name)=${LONGNAME})
exten => s,3,Set(CALLERID(num)=${LONGDETAILS})
exten => s,4,GotoIf($["${MOHCLASS}" = ""]?dial)

Gruß
Stefan
 
Danke dir!
Ich nehme an, das gehört in die extension-custom...
Dass du plötzlich intern nicht mehr verbinden kannst, schreckt mich etwas...
Bei aller Spielerei, sollte die Telefonanlage schon fehlerfrei funktionieren :)

Mittlerweile hab ich es in der Konsole hinbekommen. Alles wird perfekt angezeigt.
Mir ist nur aufgefallen, dass wenn eine Nummer zu 2 Treffern führt, im AGI-Skript "Kein Eintrag" "Keine Adresse" angezeigt wird...
Ist wohl so gewollt!?
 
Hallo stindl,

ich habe den kompletten [macro-dial] in die extensions_override_freepbx.conf kopiert.

Dann ersetzt Du folgendes

exten => s,1,GotoIf($["${MOHCLASS}" = ""]?dial)

mit

exten => s,1,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => s,2,Set(CALLERID(name)=${LONGNAME})
exten => s,3,Set(CALLERID(num)=${LONGDETAILS})
exten => s,4,GotoIf($["${MOHCLASS}" = ""]?dial)

Falls Du eine Lösung für das verbinden findest, melde Dich bitte hier...

Gruß
Stefan
 
@snaker
Danke!!!
Ist ein toller Moment, wenn man plötzlich auf seinem SIP-Phone seinen Namen und Adresse sieht ;)

@devs
Danke an alle hier im Thread, die dieses wunderbare Addon möglich gemacht haben. :dance:

Snaker,

Ja, kann ich replizieren. Wenn ich in die extensions-override-freepbx.conf folgendes eingebe

Code:
[macro-dial]
exten => s,1,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => s,2,Set(CALLERID(name)=${LONGNAME})
exten => s,3,Set(CALLERID(num)=${LONGDETAILS})
exten => s,4,GotoIf($["${MOHCLASS}" = ""]?dial)
exten => s,n,SetMusicOnHold(${MOHCLASS})
exten => s,n(dial),AGI(dialparties.agi)
exten => s,n,NoOp(Returned from dialparties with no extensions to call and DIALSTATUS: ${DIALSTATUS})

exten => s,n+2(normdial),Dial(${ds})                               ; dialparties will set the priority to 10 if $ds is not null
exten => s,n,Set(DIALSTATUS=${IF($["${DIALSTATUS_CW}"!="" ]?${DIALSTATUS_CW}:${DIALSTATUS})})
exten => s,n,GosubIf($["${SCREEN}" != ""]?${DIALSTATUS},1)

exten => s,20(huntdial),NoOp(Returned from dialparties with hunt groups to dial )
exten => s,n,Set(HuntLoop=0)
exten => s,n(a22),GotoIf($[${HuntMembers} >= 1]?a30)  ; if this is from rg-group, don't strip prefix
exten => s,n,NoOp(Returning there are no members left in the hunt group to ring)

; dialparties.agi has setup the dialstring for each hunt member in a variable labeled HuntMember0, HuntMember1 etc for each iteration
; and The total number in HuntMembers. So for each iteration, we will update the CALLTRACE Data.
;
exten => s,n+2(a30),Set(HuntMember=HuntMember${HuntLoop})
exten => s,n,GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $[$["${RingGroupMethod}" = "hunt" ] | $["${RingGroupMethod}" = "firstavailable"] | $["${RingGroupMethod}" = "firstnotonphone"]]]?a32:a35)

exten => s,n(a32),Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${HuntLoop} + 1])})
exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
exten => s,n,Goto(s,a42)

;Set Call Trace for each hunt member we are going to call "Memory groups have multiple members to set CALL TRACE For hence the loop
;
exten => s,n(a35),GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $["${RingGroupMethod}" = "memoryhunt" ]]?a36:a50)  
exten => s,n(a36),Set(CTLoop=0)
exten => s,n(a37),GotoIf($[${CTLoop} > ${HuntLoop}]?a42)  ; if this is from rg-group, don't strip prefix
exten => s,n,Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${CTLoop} + 1])})
exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
exten => s,n,Set(CTLoop=$[1 + ${CTLoop}])
exten => s,n,Goto(s,a37)
        
exten => s,n(a42),Dial(${${HuntMember}}${ds})
exten => s,n,Set(HuntLoop=$[1 + ${HuntLoop}])
exten => s,n,GotoIf($[$[$["foo${RingGroupMethod}" != "foofirstavailable"] & $["foo${RingGroupMethod}" != "foofirstnotonphone"]] | $["foo${DialStatus}" = "fooBUSY"]]?a46)
exten => s,n,Set(HuntMembers=0)
exten => s,n(a46),Set(HuntMembers=$[${HuntMembers} - 1])
exten => s,n,Goto(s,a22)

exten => s,n(a50),DBdel(CALLTRACE/${CT_EXTEN})
exten => s,n,Goto(s,a42)

; For call screening
exten => NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => NOANSWER,n,GotoIf($["${IVR_RETVM}" != "RETURN" | "${IVR_CONTEXT}" = ""]?bye)
exten => NOANSWER,n,Return
exten => NOANSWER,n(bye),Macro(hangupcall)
exten => TORTURE,1,Goto(app-blackhole,musiconhold,1)
exten => TORTURE,n,Macro(hangupcall)
exten => DONTCALL,1,Answer
exten => DONTCALL,n,Wait(1)
exten => DONTCALL,n,Zapateller()
exten => DONTCALL,n,Playback(ss-noservice)
exten => DONTCALL,n,Macro(hangupcall)

; make sure hungup calls go here so that proper cleanup occurs from call confirmed calls and the like
;
exten => h,1,Macro(hangupcall)

; Ring an extension, if the extension is busy or there is no answer send it
; to voicemail
; ARGS: $VMBOX, $EXT

kann ich den Anruf intern nicht weiterleiten. Der Anrufer bekommt während meines Transferversuchs auch keine Wartemusik vorgespielt.

Do hot`s wos! Wie wir in Österreich sagen... :wink:

Ciao
Reinhard
 
Halllo Reverser,

ich kann das Problem wie hier geschrieben auch bestätigen. Es führt zu allerlei seltsamen Dingen :

ATAs der Marken Linksys und Grandstream schellen durch
SNOM ab FW 7.x kann intern nicht mehr verbinden
ATA (ebenfalls Linksys und Grandstream) kann Gesprächspartner nicht mehr mit RTP Daten versorgen

Es ist definitiv die Variable LONGNAME und das Einsetzen dieser in CALLERID(name).

Hier ist der Beitrag

LG Stefan
 
Na da bekomm ich langsam Knieschlottern... ;-)
Hab jetzt schon solange an Trixbox 2.8 rumgebastelt (bin schon ganz blaß und sollte mal in die Sonne ;-) ), dass ich jetzt nicht alles durch ein Skript gefährden will.
Mir war nicht bewußt, dass ein Skript so weitreichende Folgen haben kann.

Warte mal ab, ob die Profis eine Lösung finden...

Reinhard
 
Ich denke mal an Asterisk hat jeder der hier schraubt schon Viel Zeit gegeben, mein reverse.agi-chen läuft hioer seit 2005, seit dem upgrade von 1.2 auf 1.4 habe ich dieses dilemma, jedoch half auch ein downgrade nicht mehr, ich weiss ja nun warum - ich habe die syntax von :

$CALLERNAME

wie befohlen auf

$CALLERID(name)

verändert, dieser Zeitpunkt muss das ganze Dilemma beginnen lassen haben.

Ggf. gibt es bei der asteriskeigenen Variable neuerdings einschränkungen o.ä. ?

Bei Deinen Extensions.conf Einträgen sollte ein Ausklammern dieser Zeilen :

Code:
exten => s,2,Set(CALLERID(name)=${LONGNAME})
exten => s,3,Set(CALLERID(num)=${LONGDETAILS}

aber Abhilfe verschaffen.

LG Stefan

Ich würde aber vorschlagen das wir uns einen Thread aussuchen um dort weiterzuschreiben, nicht in 2 das gleiche Problem...
 
OK, machen wir hier weiter...

Bei mir hilft das auskommentieren nicht.

Aber, es ist bei mir auch nicht immer der Fall das es läuft oder nicht läuft, also nicht wirklich einfach reproduzierbar....
 
Einverstanden, machen wir hier weiter ;-)

Bei mir sehr gut reproduzierbar, wenn das Skript läuft gibts kein Weiterleiten, Hold oder Music on Hold.
Wenn das Skript nicht läuft, alles in Ordnung!
ast_revers.agi-1.0_2009.03.26

Reinhard
 
Nur wenn es, und das glaube ich, so wie bei mir ist, kann es zum beispiel nach einer weile aus irgendwelchen gründer wieder gehen.
 
Hab mal eine ganz naive Frage eines Unwissenden ;-)

Statt am Skript zu tüfteln, könnte man vielleicht an den Einstellungen der betroffenen Telefone was ändern?
Gibt es irgendeine Einstellung bei den Snoms, die dieses "Mißverständnis" verhindern kann?

Reinhard

NACHTRAG: Ich hab derzeit nur einen sipcall.at Trunk in Verwendung und ich rufe immer vom selben Festnetztelefon aus an. Und bisher hab ich eine 100%ige Reproduzierbarkeit...
 
Noch eine Frage... ;)

Weiß nicht, ob das jetzt mit dem Bug zusammenhängt oder ein normales Phänomen ist.

Wenn ich das Skript am Laufen habe, und ich dann beim Snom 370 die Liste "verpasste Anrufe" ansehe und dann auf den Namen klicke um zurückzurufen...geht das nicht, weil ja keine Nummer gespeichert wurde, sondern nur der Name vom ReverseLookup!

Reinhard
 
@stindl

Ist hier genau so, Rückruf unmöglich da der "name" auch gleich die "nummer" ist, da läuft irgendwas schief.

Es bleibt die Frage wo dies passiert - ist das im skript der fall, ist es die übergabe nach dem skript ?

könnte man vielleicht an den Einstellungen der betroffenen Telefone was ändern?

Ich denke dass das aktuell noch nicht geht, schliesslich weiss hier noch keiner was da passiert, nur mittlerweile schon woher es kommt.
Ich habe hier in diesem Zusammenhang mit 3 verschd. SNOM Modellen, einem Linksys ATA, einer Grandstream und einem Fritzel System SOrgen gehabt, alle Sorgen sind sofort aus der Welt wenn ich das Skript entferne, es sieht also sehr so aus als ob wir den SIP Header verunstalten.

LG Stefan
 
Interessante Diskussion. Das Skript zeigt die von Euch beschriebenen Phänomene unter einer "normalen" Asterisk-Installation (egal ob 1.4 oder 1.6) nicht!
Es steht zu erwarten, dass Trixbox ggf. an irgendeiner Stelle identische Variablennamen benutzt.
Die einzige (schreibende) Interaktion des AGI mit dem Channel passiert in der Methode asterisk:

Code:
## LONGNAME an die Asterisk uebergeben
function asterisk {
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
if [ "$READRES" == "0" ]; then
        checkresults
fi
# F�¼r mein Fax-Script wird auch Details zur�¼ckgeschrieben
echo 'SET VARIABLE LONGDETAILS '"\"$DETAILS\"" >/dev/stdout
if [ "$READRES" == "0" ]; then
        checkresults
fi
#falls BLACKLISTING-Funktionalitaet gesetzt, dieses auch zuückgeben
if [ "$BLACKLIST" == "YES" ]; then
        echo 'SET VARIABLE BLACK '"\"$ISBLACK\"" >/dev/stdout
        if [ "$READRES" == "0" ]; then
                checkresults
        fi
fi
}

Wie zu sehen ist, werden exakt 3 Variablen gesetzt (davon eine nur, falls gewünscht):

$LONGNAME
$LONGDETAILS
$ISBLACK

Auf alles andere nimmt das Skript keinen Einfluß. Im übrigen führt

Code:
exten => s,3,Set(CALLERID(num)=${LONGDETAILS})

natürlich dazu, dass die Rufnummer des Angerufenen überschrieben wird mir Ort und Strasse, die in $LONGDETAILS geliefert werden. Das sollte man also nicht tun, es führt zum hier bereits von Reinhard geschilderten Verhalten

Wenn ich das Skript am Laufen habe, und ich dann beim Snom 370 die Liste "verpasste Anrufe" ansehe und dann auf den Namen klicke um zurückzurufen...geht das nicht, weil ja keine Nummer gespeichert wurde, sondern nur der Name vom ReverseLookup!

Im Dialplan sollte man also etwa folgendes haben:

Code:
exten   =>      100,1, AGI(ast_reverse.agi,${CALLERID(num})[,${EXTEN}]); der zweite Parameter ist optional und nur für DB-Logs + Jabber interessant
exten   =>      100,2, NoOp(Ein Anruf von ${LONGNAME});
exten   =>      100,2, NoOp(Ein Anruf in ${LONGDETAILS});
exten   =>      100,3, NoOp(Dieser Anrufer darf uns nicht anrufen/ist geblacklisted ${ISBLACK}); Variable ist nur bei eingeschalteter Blacklistingfunktionalität gesetzt
exten   =>      100,4, Set(CALLERID(name)=${LONGNAME});
exten   =>      100,5, Dial(...)

Um jetzt Eurten Fehler weiter einzugrenzen, könntet ihr zunächst das Setzen von CALLERID-Werten nach Scriptablauf auskommentieren, hilft dies auch nicht, die entsprechenden SET VARIABLE- Befehle im AGI-Skript auskommentieren.

Wie gesagt: Ich vermute, dass Trixbox intern irgendeine dieser Variablen benutzt. Wäre dies der Fall, könnte man sie im Skript umbenennen. Dazu müssen wir aber erst mal herausfinden, ob meine Vermutung zutrifft.
 
Danke, abw1oim
Werd mal ein bisserl experimentieren ;-)

Kann es sein, dass diese Variabel vom CID-Lookup Modul in Trixbox verwendet wird?
Weil das ist bei Trixbox standardmäßig aktiviert!!!

lg
Reinhard
 
Hallo,

treten denn diese Probleme nur auf der Trixbox auf?

Folgende änderungen habe ich nun gemacht:

exten => s,1,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => s,2, NoOp(Ein Anruf von ${LONGNAME1})
exten => s,3, NoOp(Ein Anruf in ${LONGDETAILS1})
exten => s,4, Set(CALLERID(name)=${LONGNAME1})
exten => s,5,GotoIf($["${MOHCLASS}" = ""]?dial)

und im agi:

Code:
## LONGNAME an die Asterisk uebergeben
function asterisk {
echo 'SET VARIABLE [B]LONGNAME1[/B] '"\"$NAME\"" >/dev/stdout
if [ "$READRES" == "0" ]; then
	checkresults
fi
# Für mein Fax-Script wird auch Details zurückgeschrieben
echo 'SET VARIABLE [B]LONGDETAILS1[/B] '"\"$DETAILS\"" >/dev/stdout
if [ "$READRES" == "0" ]; then
        checkresults
fi
#falls BLACKLISTING-Funktionalitaet gesetzt, dieses auch zuückgeben
if [ "$BLACKLIST" == "YES" ]; then
	echo 'SET [B]VARIABLE BLACK1[/B] '"\"$ISBLACK\"" >/dev/stdout
	if [ "$READRES" == "0" ]; then
	        checkresults
	fi
fi
}

Bis jetzt geht es, das hat aber noch nichts zu sagen...
 
Teillösung für Trixbox 2.8

OK, Lösung für Trixbox 2.8 gefunden...zumindest eine Teillösung ;-)

Hier ist der Code in meiner extensions_override_freepbx.conf, wobei die Änderungen zur extension.conf fett markiert sind:

Code:
[macro-dial]
[B]exten => s,1,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => s,2,Set(CALLERID(name)=${LONGNAME})
exten => s,3,GotoIf($["${MOHCLASS}" = ""]?dial)[/B]
exten => s,n,SetMusicOnHold(${MOHCLASS})
exten => s,n(dial),AGI(dialparties.agi)
exten => s,n,NoOp(Returned from dialparties with no extensions to call and DIALSTATUS: ${DIALSTATUS})

exten => s,n+2(normdial),Dial(${ds})                               ; dialparties will set the priority to 10 if $ds is not null
exten => s,n,Set(DIALSTATUS=${IF($["${DIALSTATUS_CW}"!="" ]?${DIALSTATUS_CW}:${DIALSTATUS})})
exten => s,n,GosubIf($["${SCREEN}" != ""]?${DIALSTATUS},1)

exten => s,20(huntdial),NoOp(Returned from dialparties with hunt groups to dial )
exten => s,n,Set(HuntLoop=0)
exten => s,n(a22),GotoIf($[${HuntMembers} >= 1]?a30)  ; if this is from rg-group, don't strip prefix
exten => s,n,NoOp(Returning there are no members left in the hunt group to ring)

; dialparties.agi has setup the dialstring for each hunt member in a variable labeled HuntMember0, HuntMember1 etc for each iteration
; and The total number in HuntMembers. So for each iteration, we will update the CALLTRACE Data.
;
exten => s,n+2(a30),Set(HuntMember=HuntMember${HuntLoop})
exten => s,n,GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $[$["${RingGroupMethod}" = "hunt" ] | $["${RingGroupMethod}" = "firstavailable"] | $["${RingGroupMethod}" = "firstnotonphone"]]]?a32:a35)

exten => s,n(a32),Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${HuntLoop} + 1])})
exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
exten => s,n,Goto(s,a42)

;Set Call Trace for each hunt member we are going to call "Memory groups have multiple members to set CALL TRACE For hence the loop
;
exten => s,n(a35),GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $["${RingGroupMethod}" = "memoryhunt" ]]?a36:a50)  
exten => s,n(a36),Set(CTLoop=0)
exten => s,n(a37),GotoIf($[${CTLoop} > ${HuntLoop}]?a42)  ; if this is from rg-group, don't strip prefix
exten => s,n,Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${CTLoop} + 1])})
exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
exten => s,n,Set(CTLoop=$[1 + ${CTLoop}])
exten => s,n,Goto(s,a37)
        
exten => s,n(a42),Dial(${${HuntMember}}${ds})
exten => s,n,Set(HuntLoop=$[1 + ${HuntLoop}])
exten => s,n,GotoIf($[$[$["foo${RingGroupMethod}" != "foofirstavailable"] & $["foo${RingGroupMethod}" != "foofirstnotonphone"]] | $["foo${DialStatus}" = "fooBUSY"]]?a46)
exten => s,n,Set(HuntMembers=0)
exten => s,n(a46),Set(HuntMembers=$[${HuntMembers} - 1])
exten => s,n,Goto(s,a22)

exten => s,n(a50),DBdel(CALLTRACE/${CT_EXTEN})
exten => s,n,Goto(s,a42)

; For call screening
exten => NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => NOANSWER,n,GotoIf($["${IVR_RETVM}" != "RETURN" | "${IVR_CONTEXT}" = ""]?bye)
exten => NOANSWER,n,Return
exten => NOANSWER,n(bye),Macro(hangupcall)
exten => TORTURE,1,Goto(app-blackhole,musiconhold,1)
exten => TORTURE,n,Macro(hangupcall)
exten => DONTCALL,1,Answer
exten => DONTCALL,n,Wait(1)
exten => DONTCALL,n,Zapateller()
exten => DONTCALL,n,Playback(ss-noservice)
exten => DONTCALL,n,Macro(hangupcall)

; make sure hungup calls go here so that proper cleanup occurs from call confirmed calls and the like
;
exten => h,1,Macro(hangupcall)

; Ring an extension, if the extension is busy or there is no answer send it
; to voicemail
; ARGS: $VMBOX, $EXT

Danke an abw1oim für den großartigen Tipp!!!
Die Zeile mit
Code:
exten => s,3,Set(CALLERID(num)=${LONGDETAILS})
hab ich erstmal rausgenommen.
Hab natürlich jetzt keine Adressdaten, sondern nur den Namen des Anrufers am Display,...
Aber das reicht mir fürs erste!

Meine Snoms (370, 300) können jetzt wieder einwandfrei halten, weiterleiten und MusicOnHold funktioniert auch.

Liegts jetzt eigentlich an der Variable oder einfach nur daran, dass die Telefone ohne CallerID(num) den Anruf nicht mehr handeln können???
Habe am Skript nix geändert!

Gruß
Reinhard

NACHTRAG: Sehe gerade snaker hat aber oben die bessere Lösung...wenn sie dauerhaft funktioniert ;-)
 
Hab die Variante von snaker jetzt getestet.
Funktioniert mit den Snom Telefonen, aber die 2. Zeile mit den Adressdaten wird auch nicht angezeigt, sondern stattdessen die Tel-Nr.
Dann bleib ich mal bei meiner Variante ohne Skriptänderung...

Reinhard
 
Ich weiß, ich bin lästig... ;-)

Hab noch eine Frage:
Möchte ein ganz einfaches Telefonbuch (Asterisk Phonebook?) verwenden und dachte eigentlich dass das automatisch geht...

...wenn eine Nummer in meinem Telefonbuch steht, dass das Skript gar nicht aktiv wird...
...und mir der Name von meinem Telefonbuch angezeigt wird.

Gibt es dafür eine einfache Lösung?

Danke
Reinhard
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.