Asterisk. Конфигурационный файл func_odbc.conf.

Файл конфигурации для работы функции func_odbc. Эта функция обеспечивает простой механизм соединения с базами данных ODBC посредством плана набора. В этом файле описываются SQL-запросы, а функция диалплана создается автоматически.

Ниже приведены примеры использования. Взяты с http://www.voip-info.org/wiki/view/Asterisk+func+func_odbc.

Example 1
func_odbc.conf:
[PRESENCE]
dsn=mydb
readsql=SELECT `location` FROM `locationtable` WHERE `username`='${SQL_ESC(${ARG1})}'
writesql=UPDATE `locationtable` SET `location`=${SQL_ESC(${VAL1})}` WHERE `username`='${SQL_ESC(${ARG1})}'

extensions.conf:
exten => 1234,1,NoOp(Set and read location)
exten => 1234,n,Set(ODBC_PRESENCE(${EXTEN})=office)
exten => 1234,n,Set(CURLOC=${ODBC_PRESENCE(${EXTEN})})
exten => 1234,n,NoOp(Current location of user ${EXTEN} is ${CURLOC}.)
exten => 1234,n,Hangup()

verbose output:
pbx*CLI> console dial 1234
— Executing [1234@default:1] NoOp("Console/dsp", "Set and read location") in new stack
— Executing [1234@default:2] Set("Console/dsp", "ODBC_PRESENCE(1234)=office") in new stack
— Executing [1234@default:3] Set("Console/dsp", "CURLOC=office") in new stack
— Executing [1234@default:4] NoOp("Console/dsp", "Current location of user 1234 is office.") in new stack
— Executing [1234@default:5] Hangup("Console/dsp", "") in new stack
== Spawn extension (default, 1234, 5) exited non-zero on 'Console/dsp'

Example 2 with GotoIf
in func_odbc.conf:
[ISLOCAL]
dsn=foo
read=SELECT COUNT(*) FROM localexchanges WHERE prefix='${ARG1:0:6}'

in extensions.conf:
exten => _011-1-NXX-NXX-XXXX,1,GotoIf($[${ODBC_ISLOCAL(${EXTEN:4})}]?${EXTEN:4},1:${EXTEN:3},1)

More example lines from func_odbc.conf
[ORGOPEN]
dsn=mydb
readsql=SELECT COUNT(`orgcode`)>0 AS 'open' FROM `opentimes` WHERE ((`orgcode`='${SQL_ESC(${ARG1})}' OR `orgcode`='ALL') AND `day`=DAYOFWEEK(CURDATE()) AND `starttime`<=CURTIME() AND `endtime`>CURTIME()) AND (SELECT COUNT(`orgcode`)=0 FROM `closeddates` WHERE (`orgcode`='${SQL_ESC(${ARG1})}' OR `orgcode`='ALL') AND `closeddate`=CURDATE())=1

[GETCIDNAME]
dsn=mydb
readsql=SELECT `cidname` FROM `callerid` WHERE `cidnum`='${SQL_ESC(${ARG1})}' LIMIT 1

[GETEXCHANGENAME]
dsn=mydb
readsql=SELECT `location` FROM `exchangecodes` WHERE '${SQL_ESC(${ARG1})}' REGEXP CONCAT('^',`stdcode`) ORDER BY LENGTH(`stdcode`) DESC LIMIT 1