Telefonummer in Name auflösen

Wir würden gerne den Namen des Anrufer am Telefon anzeigen lassen. Wollen das mit mysql machen. Wir haben ein Script gefunden haben ihn aber noch nicht erfolgreich integrieren können. Wo muss ich das Script einfügen.


exten => querydb,1,mysql(Connect connid 127.0.0.1 [benutzer] [pwd] [shema])
exten => querydb,2,mysql(Query resultid ${connid} SELECT\ AdressVerzeichniss_Name\,AdressVerzeichniss_Firma\ from\ AdressVerzeichniss\ where\ AdressVerzeichniss_Nummer=\"${CALLERID}\")
exten => querydb,3,mysql(Fetch fetchid ${resultid} Name Firma)
exten => querydb,4,MYSQL(Clear ${resultid})
exten => querydb,5,MYSQL(Disconnect ${connid})
exten => querydb,6,Set(CALLERID(name)=${Firma} ${Name})
exten => querydb,7,Set(CALLERID(number)=0${CALLERID(number)})
exten => querydb,8,Return

//Wir haben Aastra Endgeräte

Hallo jg24,

warum bildest Du die mysql Datenbank nicht ins LDAP des MobyDick´s ? siehe hier -> http://wiki.pascom.net/doku.php?id=cmd060600:trc200106
Ist zwar etwas aufwändiger einzurichten. Aber ich denke die Vorteile dieser Lösung wiegt die aufwändigere einmalige Einrichtung bei weiten aus. Du kannst das ganze dann via cron automatisch wiederholt ausführen um den LDAP Baum mit der mysql Datenbank sychron zu halten.

Liebe Grüße

Maik

Wir haben schon ein paar Nr per GUI eingepflegt. Der Name wir am Telefon aber nicht angezeigt. Hab gelesen das die snom auf die LDAP selber zugreifen. Die Aastra aber nicht.
Außerdem wollen wir knapp 1 Mio. Nummer speichern.

Hallo jg24,

du musst bei Deinem Amt (TRC070103) auch die LDAP Abfrage konfigurieren. Dann wird der Name vom MobyDick gesetzt und die Endgeräte brauchen sich nicht selber darum kümmern. Knapp 1 Mio. Einträge sollten kein Problem darstellen sofern dein Festplattenplatz mitspielt. @Thomas bitte korrigiere mich falls ich hier falsch liege.

Grüße

Maik

Hallo jg24,

kleiner Nachtrag noch. Wenn du die Adressen im LDAP hast kannst Du wunderbar das Telefonbuch des MobyDick XML Menüs verwenden um eine Telefonummer manuell nachzuschlagen oder um selbst dort anzurufen. Das Snom benutzt LDAP um deine eingetippte Nummer zu vervollständigen. Sprich um Dir Wahlvorschläge zu machen.

Grüße

Maik

Guten Morgen zusammen,

ich kann nur Maik zustimmen: der automatische Telefonbuchimport und die anschließende LDAP Abfrage sind hier der richtige Lösungsansatz.
Um das ganze “rund” zu machen, solltest Du Dich um folgende Dinge kümmern:

  • konfigurieren der LDAP Abfrage beim Amt
  • periodisches exportieren Deiner Daten in eine CSV Datei
  • kopieren der Datei auf die Anlage (scp o.ä.)
  • importieren der Datei per trc200106 bzw. automatisiert per Cron

Die ganze Kette lässt sich auf beiden Seiten wunderbar skripten und läuft dann ohne zutun des Admins und mit MobyDick Boardmitteln ohne Dialplan-Änderung etc.
Ein paar Anmerkungen noch. Das saubere Parametrieren des Amtes ist leider noch etwas unintuitiv, wir sind hier jedoch bei der kommenden 06.07.00 bereits am umbauen.
Das regelmäßige Abgleichen des Adressbuchs kannst Du direkt aus der Weboberfläche heraus automatisieren, siehe Wiki.
Die so importierten Adressen landen in einem eigenen Topf bzw. LDAP ou und sind gegen die direkte Bearbeitung gesperrt. Dies hat den Vorteil, das man importierte Daten von manuell eingepflegten ordentlich trennen kann. Für den Fall das Dir das nicht gefällt, gibt es aber auch noch eine Systemeinstellung, die den LDAP Zweig umbiegen kann.

Hoffe das hilft Dir einstweilen!

Gruß,

Thomas

Bin heute erst wieder im Büro. Hab es so probiert. Bekomme aber folgende Fehlermeldung bei der Cron verarbeitung:

2010-12-13 14:50:04: Starte Task 020506 ‘Cronjob’, Parameter: [200106|||/var/Adressen/Adressen.csv|1|9], User: [admin]

2010-12-13 14:50:05: Starte Cron Job 200106

2010-12-13 14:50:05: Starte Child-Task 200106 ‘Adressbuch importieren’, Parameter: [/var/Adressen/Adressen.csv|1|9]

2010-12-13 14:50:05: Importiere Datei /var/Adressen/Adressen.csv mit Modus 1

2010-12-13 14:50:05: Es sind Probleme aufgetreten

2010-12-13 14:50:05: Es wird der importFileContentAnalyser für CSV verwendet

2010-12-13 14:50:05: Es wird für die Datei der Feldtrenner ; verwendet;

2010-12-13 14:50:05: Es handelt sich um den Datentyp: csv

2010-12-13 14:50:05: zu konvertierende und importiertende Datei /var/Adressen/Adressen.csv vom Typ csv

2010-12-13 14:50:05: Child-Task 200106 wurde mit ] beendet

2010-12-13 14:50:05: Es wurden folgende Fehler abgefangen:

2010-12-13 14:50:05: 2 ] Mögliche Kopfzeile übersprungen: “Logistik Hattorf”;“Retoure / Kai/Dominique”;“”;“”;“0558xxx”;“Logistik Hattorf”;“Retoure / Kai/Dominique”

2010-12-13 14:50:05: 4 ] Die angegebene Datei /Adressen.csv konnte nicht importiert werden;

2010-12-13 14:50:05: CronJob 200106 mit Fehler beendet

Ich habe es mit ’ " ’ als Textrenner probiert und ohne. Mit der Kopfzeile aus der Vorlage und ohne. Immer das gleiche Ergebnis. Mit der GUI konnte ich es hochladen.

o.k. mein Fehler. Hatte 'n knick in der Optik. Die Feldanzahl hat nicht gestimmt.

Hi jg24,

Schön wenn es jetzt funktioniert.

Grüße Maik

Ich komme leider doch nicht klar. Wenn ich mehr als 10.000 Daten versuche zu importieren bekomme ich nur das:

Console
Falscher return Status!

Die Log sieht so aus

2010-12-14 13:42:57: Starte Task 020506 ‘Cronjob’, Parameter: [200106|||/var/Adressen/Adressen.csv|2|9], User: [admin]

2010-12-14 13:42:57: Starte Cron Job 200106

2010-12-14 13:42:57: Starte Child-Task 200106 ‘Adressbuch importieren’, Parameter: [/var/Adressen/Adressen.csv|2|9]

2010-12-14 13:42:57: Importiere Datei /var/Adressen/Adressen.csv mit Modus 2

Bei Sonderzeichen meckert er auch z.B. ’ + .Hab versucht die mit \ zu escapen geht aber nicht.

Außerdem dauert das Speichern eine Ewigkeit. Ich wäre sehr froh wenn es da eine Mysql Lösung geben würde.

Morgen,

um wieder auf den ersten Ansatz mit der MySql-Abfage zu kommen.
Könnte dies grob so umgesetzt werden.

Als Einstiegspunkt für das Skript würde sich das Macro pre-main anbieten, welches bei jedem Call aufgerufen wird. Dies müsste dann unter Module->Skripte als macro mit Parameter einbinden = NEIN angelegt werden.

Hier wäre es dann noch möglich die MySql-Abfrage nur bei externen Gesprächen durchzuführen. Über die Dialplan-Variable MDC_DIALDESCENT=ext.

Zur Orientierung für eine MySql-Abfrage im Dialplan kannst du auch einen Blick auf das integrierte Makro macro-rcs-manager werfen.

Viel Erfolg!

Das macro-rcs-manager gibt es nicht bei uns.

Ich hab ein Script zum testen angelegt:

exten => _X.,1,Set(CALLERID(name)=EVIL)

Bezeichnung: pre-main
Kontext: pre-main
Es wird trotzdem nur die Nummer angezeigt.

Hallo jg24,

  1. Ich tippe pauschal mal darauf, dass die Zeile nicht zur Ausführung kommt. Der Einstiegspunkt für Macro’s ist im Normalfall immer die s-Extension.
    Probiere mal

exten => s,1,Set(CALLERID(name)=EVIL)

Wichtig ist dann noch, dass am Endgerät die Einstellung vorgenommen ist, dass der CallerId(name) angezeigt wird.

  1. Macro macro-rcs-manager wird nicht im Commander gepflegt, sondern beim Anwenden der Telefonie automatisch generiert, deshalb integriert. Du hast aber den Zugriff über die Konfigurationsdatei /etc/asterisk/extensions.conf.mdc.

exten => s,1,Set(CALLERID(name)=EVIL)

Funktioniert auch nicht. Per LDAP stand der Name im Display

p.s. LDAP abfrage hab ich vorsichtshalber beim Amt ausgeschaltet.

Hallo jg24,

abhängig von deinen hinterlegten Regeln/Einstellungen könnte es natürlich noch sein, dass der CALLERID(name) an anderer Stelle nochmals überschrieben wird, bzw. das Skript widererwarten nicht zur Ausführung kommt.
Um dir hier weiterhelfen zu können, bräuchte ich einen Auszug aus dem CLI (CommandLineInterface) für einen Call. Darüber kann man den genauen Ablauf des Dialplans für diesen Call mitverfolgen. Nähere Info’s zur CLI gibts auch unter voip-info.org.

Hab da ein Warning drin

Dec 15 15:13:25 WARNING[19369]: app_macro.c:208 macro_exec: No such context ‘macro-pre-main’ for macro ‘pre-main’

-- Remote UNIX connection
-- Executing Set("SIP/****-08423208", "MDC_DN=<sip:****@192.168.178.122;user=phone>") in new stack
-- Executing Set("SIP/****-08423208", "MDC_DN=****@192.168.178.122;user=phone>") in new stack
-- Executing Set("SIP/****-08423208", "MDC_DN=****") in new stack
-- Executing Goto("SIP/****-08423208", "mdc_trunk-4|****|1") in new stack
-- Goto (mdc_trunk-4,****,1)
-- Executing Set("SIP/****-08423208", "__MDC_DIALCALLERNUM=015772715***") in new stack
-- Executing Set("SIP/****-08423208", "LANGUAGE()=de") in new stack
-- Executing GotoIf("SIP/****-08423208", "0?forward") in new stack
-- Executing Goto("SIP/****-08423208", "mdc_external-4|****|1") in new stack
-- Goto (mdc_external-4,****,1)
-- Executing Goto("SIP/****-08423208", "mdc_external|200|1") in new stack
-- Goto (mdc_external,200,1)
-- Executing Set("SIP/****-08423208", "MDC_CHANNEL_PROTOCOL=SIP") in new stack
-- Executing Set("SIP/****-08423208", "MDC_CHANNEL_ID=****-08423208") in new stack
-- Executing Set("SIP/****-08423208", "MDC_CHANNEL_TMP=****-08423208") in new stack
-- Executing Set("SIP/****-08423208", "MDC_CHANNEL_NAME=****") in new stack
-- Executing GosubIf("SIP/****-08423208", "1?mdc_initcall-ext|200|1") in new stack
-- Executing NoOp("SIP/****-08423208", "initial call") in new stack
-- Executing Set("SIP/****-08423208", "__MDC_DIALDESCENT=ext") in new stack
-- Executing Set("SIP/****-08423208", "__MDC_DIALCALLEENUM=200") in new stack
-- Executing GotoIf("SIP/****-08423208", "1?nozap") in new stack
-- Goto (mdc_initcall-ext,200,7)
-- Executing Set("SIP/****-08423208", "__MDC_DIALCALLERNAME=") in new stack
-- Executing Return("SIP/****-08423208", "") in new stack
-- Executing Gosub("SIP/****-08423208", "mdc_defcall|200|1") in new stack
-- Executing GotoIf("SIP/****-08423208", "1?nozap") in new stack
-- Goto (mdc_defcall,200,4)
-- Executing Set("SIP/****-08423208", "__MDC_DIALCHANNELNAME=****") in new stack
-- Executing Return("SIP/****-08423208", "") in new stack
-- Executing SIPAddHeader("SIP/****-08423208", ""Alert-Info:<http://www.notused.de>;info=alert-external;x-line-id=0"") in new stack
-- Executing Macro("SIP/****-08423208", "pre-main") in new stack

Dec 15 15:13:25 WARNING[19369]: app_macro.c:208 macro_exec: No such context ‘macro-pre-main’ for macro ‘pre-main’
– Executing GosubIf(“SIP/-08423208", “1?mdc_initloop|s|1”) in new stack
– Executing NoOp("SIP/
-08423208”, “initial loop”) in new stack
– Executing Set(“SIP/-08423208", “MDC_ALIAS_HOP=0”) in new stack
– Executing Return("SIP/
-08423208”, “”) in new stack
– Executing Goto(“SIP/-08423208", “main|200|1”) in new stack
– Goto (main,200,1)
– Executing Set("SIP/
-08423208”, “_MDC_VOICEMAIL=200”) in new stack
– Executing Set(“SIP/-08423208", “_MDC_WATCHED_VOICEMAIL=0”) in new stack
– Executing Goto("SIP/
-08423208”, “mdc_ident-1|200|1”) in new stack
– Goto (mdc_ident-1,200,1)
– Executing NoOp(“SIP/-08423208", “alias-check:: Rufumleitung von 200 - 0”) in new stack
– Executing GotoIf("SIP/
-08423208”, “0?200-umleitung|1:200-dial|1”) in new stack
– Goto (mdc_ident-1,200-dial,1)
– Executing Gosub(“SIP/-08423208", “mdc_prefix-200-ext|200|1”) in new stack
– Executing Return("SIP/
-08423208”, “”) in new stack
– Executing Gosub(“SIP/-08423208", “mdc_main-200-ext|200|1”) in new stack
– Executing Set("SIP/
-08423208”, “TOUCH_MONITOR=015772715***-200-20101215-151325-ext”) in new stack
– Executing Dial(“SIP/****-08423208”, “SIP/Marco||owW”) in new stack
– Called Marco
– SIP/Marco-084260d8 is ringing

Hallo nochmal,

da haben wir es schon

– Executing Macro(“SIP/****-08423208”, “pre-main”) in new stack
Dec 15 15:13:25 WARNING[19369]: app_macro.c:208 macro_exec: No such context ‘macro-pre-main’ for macro ‘pre-main’

Bitte überprüfe ob dein Skript den Kontext macro-pre-main verwendet und Einbinden auf nein gestellt hast. Danach Telefonie anwenden nicht vergessen.
Wenn alles korrekt ist, sollte der oben genannte Abschnitt in der CLI nicht mehr zu sehen sein, anstatt dessen dein Skript zur Ausführung kommen.

Ich bin mal zuversichtlich!

Bei Kontext hatte ich nur pre-main hatte ich ja schon geschrieben. Jetzt funktioniert es. Falls jemand anders das selbe Problem hat hier der Code:


exten => s,1,GotoIf($ ${MDC_DIALDESCENT} = ext ]?ok:nein)
exten => s,2(ok),MYSQL(Connect connid Adresse User Passwd Shema)
exten => s,3(ok),MYSQL(Query resultid ${connid} SELECT\ AdressVerzeichniss_Name\ firma from\ AdressVerzeichniss\ where\ AdressVerzeichniss_Nummer=\"${CALLERID}\")
exten => s,4(ok),MYSQL(Fetch fetchid ${resultid} firma)
exten => s,5(ok),MYSQL(Clear ${resultid})
exten => s,6(ok),MYSQL(Disconnect ${connid})
exten => s,7(ok),Set(CALLERID(name)=${Firma} ${Name})
exten => s,9(nein),Set(CALLERID(name)=${CALLERID(name)})

Hallo jg24,

es wäre schön, wenn Du ein kleines How-To in die ScriptEcke stellen würdest.

Grüße

Maik