Asterisk mit ODBC und MSSQL-Server 2008 R2

padowa76

Aktives Mitglied
Mitglied seit
23 Jun 2006
Beiträge
1,275
Punkte für Reaktionen
9
Punkte
38
Hallo zusammen,

ich habe nach diese Anleitung ODBC auf der Debian-Machine installiert und soweit läuft auch alles. Asterisk schreibt die CDR-Daten in eine MSSQL-Tabelle und ich kann auch über die func_odbc.conf lesend auf die MSSQL-Datenbank zugreifen (z.B. mit folgendem SQL-Statements)

Code:
[extensions.conf]
exten => s,n,Set(CALLERNAME=${ODBC_CALLERNAME(${CALLERID(num)})}
exten => s,n,Set(LASTCHANGE=${ODBC_LASTCHANGE(${CALLERID(num)})=})

[func_odbc.conf]

[CALLERNAME]
dsn=asterisk
read=SELECT callername FROM asterisk_phonebook where callerid='${ARG1}'

[LASTCHANGE]
dsn=asterisk
read=UPDATE dbo.asterisk_phonebook SET lastchange = getdate(), count = count + 1 WHERE callerid = '${ARG1}'

Ein Update habe ich mittlerweile auch hinbekommen, allerdings nur wenn ich das SQL-Update auch mit read aufrufe, mit write passiert einfach nichts. Ich bin mir aber auch nicht klar, ob die ODBC-Zugriffe irgendwo geloggt werden, so das man einfach mal in einem Logfile nachschauen könnte wieso er nichts schreibt. Inserts habe ich bisher noch gar nicht hinbekommen. Die einschlägigen Tutorials haben meisst immer die gleichen Beispiele und man findet auch viele Seiten wo es ebenso nicht funktioniert hat.

Hat von euch jemand hier Infos die mir weiterhelfen könnten?

Gruß Patrick
 
Für write ist die Syntax sowohl aus Sicht der Extensions, als auch aus Sicht der func_odbc.conf falsch:

func_odbc.conf
Code:
[CALLERNAME]
dsn=asterisk
readsql=SELECT callername FROM asterisk_phonebook where callerid='${ARG1}'

[LASTCHANGE]
dsn=asterisk
writesql=UPDATE dbo.asterisk_phonebook SET lastchange = getdate(), count = count + 1 WHERE callerid = '${ARG1}'

Hier wäre im Übrigen - aus Sicherheitsgründen - zu empfehlen, die Argumente (also ${ARG1} in diesem Fall) mit SQL_ESC zu behandeln, also so: ${SQL_ESC(${ARG1})}. Das schützt for SQL-Injections. Aber das nur nebenbei. In der Extensions.conf wären diese beiden Funktionen jetzt wie folgt verwendbar:

Code:
exten => s,n,Set(CALLERNAME=${ODBC_CALLERNAME(${CALLERID(num)})}
exten => s,n,Set(ODBC_LASTCHANGE(${CALLERID(num)})=)

Wenn Du Argumente an ein INSERT oder UPDATE übergeben willst, geht das natürlich auch (nach dem = als kommaseparierte Liste)- In der Funktion werden übergebene Werte dann als VAL1 .. n benutzt, Beispiel (ohne fachliche Funktionsgarantie):

Code:
[LASTCHANGE]
dsn=asterisk
writesql=UPDATE dbo.asterisk_phonebook SET lastchange = ${VAL1}, count = count + 1 WHERE callerid = '${ARG1}'

exten => s,n,Set(ODBC_LASTCHANGE(${CALLERID(num)})=${EPOCH})
 
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.