Asterisk mit MariaDB verbinden

Tiieto

Neuer User
Mitglied seit
16 Jan 2021
Beiträge
146
Punkte für Reaktionen
6
Punkte
18
Moin moin..

Wie im Thema erwähnt würde ich meine Asterisk gern mit einer (in Docker) laufende MariaDB verbinden um damit verschiedenste Spielereien im Dialplan umsetzen zu können...

Ich hab also nen passenden ODBC Treiber installiert, die odbc.ini und die odbcinst.ini entsprechend angepasst.
odbc.ini
Code:
[AsteriskDB]
Description = Connection to Asterisk Database
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Server = 172.18.0.2
Database = asterisk
Port = 3306
User = asterisk
Password = ***********

odbcinst.ini
Code:
[ODBC]
Trace=yes
TraceFile=/tmp/odbctrace.log

[MariaDB Unicode]
Driver=libmaodbc.so
Description=MariaDB Connector/ODBC(Unicode)
Threading=0
UsageCount=1

Verbindung getestet mittels:
Code:
$ isql -v AsteriskDB
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
Funktioniert soweit...

In asterisk die Verbindung gecheckt:
Code:
CLI> odbc show

ODBC DSN Settings
-----------------

  Name:   asteriskdb
  DSN:    AsteriskDB
    Number of active connections: 1 (out of 1)
    Logging: Disabled

CLI>

Funktioniert scheinbar auch... Zumindest steht die Verbindung...
Dann hab ich in der res_odbc.conf diese paar Zeilen drin stehen:
Code:
[asteriskdb]
enabled => yes
dsn => AsteriskDB
username => asterisk
password => *********
pre-connect => yes

und zu guter letzt in die func_odbc.conf diese paar Zeile hinzugefügt.
Code:
[CHECK_OPENING_HOURS]
dsn=asterisk
readsql=SELECT open_time, close_time, is_closed FROM opening_times WHERE day_of_week = ${ARG1} AND exception_date IS NULL

Das ganze dann (testweise) im Dialplan eingearbeitet:
Code:
[open-check]
exten => s,1,NoOp(Check if we are open)
  same => n,Set(DAY_OF_WEEK=${STRFTIME(${EPOCH},,%u)})  ; Get current day of week (1=Monday, ..., 7=Sunday)
  same => n,Set(RESULT=${ODBC_CHECK_OPENING_HOURS(${DAY_OF_WEEK})})
  same => n,Set(OPEN_TIME=${CUT(RESULT,"|",1)})
  same => n,Set(CLOSE_TIME=${CUT(RESULT,"|",2)})
  same => n,Set(IS_CLOSED=${CUT(RESULT,"|",3)})
  same => n,GotoIf($[${IS_CLOSED} = 1]?closed)
  same => n,NoOp(Open Time: ${OPEN_TIME}, Close Time: ${CLOSE_TIME})
  same => n,Hangup()

exten => s,n(closed),NoOp(We are closed)
  same => n,Hangup()

Den teil in der CLI abgefragt sollten dort eigentlich die Einträge aus der Datenbank zu finden sein, statt dessen bekomm ich diese Meldung(en):
Code:
CLI> channel originate Local/s@open-check extension s@open-check
    -- Called s@open-check
    -- Executing [s@open-check:1] NoOp("Local/s@open-check-00000003;2", "Check if we are open") in new stack
    -- Executing [s@open-check:2] Set("Local/s@open-check-00000003;2", "DAY_OF_WEEK=7") in new stack
[Jul 14 18:23:01] ERROR[9395][C-00000004]: func_odbc.c:876 acf_odbc_read: Unable to execute query [SELECT open_time, close_time, is_closed FROM opening_times WHERE day_of_week = 7 AND exception_date IS NULL]
    -- Executing [s@open-check:3] Set("Local/s@open-check-00000003;2", "RESULT=") in new stack
    -- Executing [s@open-check:4] Set("Local/s@open-check-00000003;2", "OPEN_TIME=") in new stack
    -- Executing [s@open-check:5] Set("Local/s@open-check-00000003;2", "CLOSE_TIME=") in new stack
    -- Executing [s@open-check:6] Set("Local/s@open-check-00000003;2", "IS_CLOSED=") in new stack
[Jul 14 18:23:01] WARNING[9395][C-00000004]: ast_expr2.fl:468 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
 = 1
 ^
[Jul 14 18:23:01] WARNING[9395][C-00000004]: ast_expr2.fl:472 ast_yyerror: If you have questions, please refer to https://docs.asterisk.org/Configuration/Dialplan/Variables/Channel-Variables/
    -- Executing [s@open-check:7] GotoIf("Local/s@open-check-00000003;2", "?closed") in new stack
    -- Executing [s@open-check:8] NoOp("Local/s@open-check-00000003;2", "Open Time: , Close Time: ") in new stack
    -- Executing [s@open-check:9] Hangup("Local/s@open-check-00000003;2", "") in new stack
  == Spawn extension (open-check, s, 9) exited non-zero on 'Local/s@open-check-00000003;2'
CLI>

Ich glaube ich seh den Wald vor lauter Bäumen nicht mehr und erbitte mal einen Hinweis, was ich da falsch gemacht haben könnte...

LG
 
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.