使用 odbc_func 写入多个字段的正确语法?

Proper Syntax for Writing Multiple Fields with odbc_func?

这是我之前 post 的后续。尝试在挂断时写入 CDR table。 Asterisk 13 似乎阻止在 h 扩展中使用 CDR()(尽管我可以在 *11 中使用)。 所以,我将创建一个很好的 ODBC_FUNC 函数并使用它来写入我的数据。 除了我不能让它工作。 我要写多个字段:

 exten => h,n,Set(ODBC_WRITE_TEST(${E})=First\,Second,Third,Fourth)

 exten => h,n,Set(ODBC_WRITE_TEST(${E})=${cause_name},${cause_name}, ${TrNumber},${uID})

这些都不起作用。他们都向 table 写入一条空白记录,因此我们知道 ODBC 正在工作。但是字段内容没有通过。 func_odbc.conf:

 [WRITE_TEST]
 dsn=asterisk
 ; writesql=INSERT INTO LogAndDebug (debugMessage, debugData, logMessage) VALUES ('test','123','done')
 writesql=INSERT INTO LogAndDebug (debugMessage, debugData, logMessage) VALUES ('${SQL_ESC(${ARG1})}','${SQL_ESC(${VAR2})}','${SQL_ESC(${VAR1})}')

上面的注释行确实按预期写入了数据。 uncommend 行写入一条空记录。

我试过没有 SQL_ESC。这些字段是 varchars...所以引用的文本似乎是正确的。看起来好像 ARGx 和 VARx 没有被传递。

我在 Asterisk 文档中查找了这方面的文档,结果令我惊讶 -- NADA

从 asterisk 1.8 开始 func_odbc 是这样的:

在func_odbc.conf中:

[WRITE_TEST]
dsn=asterisk
writesql=INSERT INTO LogAndDebug (debugMessage, debugData, logMessage) VALUES ('${ARG1}','${VAR2}','${VAR3}')

在拨号方案中:

exten => s,n,NoOp(WRITE_TEST.${ODBC_WRITE_TEST('this','is','test')})