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
odbcinst.ini
Verbindung getestet mittels:
Funktioniert soweit...
In asterisk die Verbindung gecheckt:
Funktioniert scheinbar auch... Zumindest steht die Verbindung...
Dann hab ich in der res_odbc.conf diese paar Zeilen drin stehen:
und zu guter letzt in die func_odbc.conf diese paar Zeile hinzugefügt.
Das ganze dann (testweise) im Dialplan eingearbeitet:
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):
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
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>
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