0

我正在从软电话获取号码,然后插入 mysql db。所有驱动程序和东西都可以。我配置它们。我可以选择/轮询我的所有数据。但我无法插入我的新数据。我的 func_odbc.conf 喜欢这样;

[ADDX];

dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) values (${VAL1},${VAL2})

我的 extensions.conf 是;

exten=>_X.,n(sqlekle),SET(a=${ODBC_ADDX(${digit},${aktartel})})

我检查了我的变量 ${digit} 和 ${aktartel} 是正确的,它给出了错误;

[Jan 30 05:43:21] ERROR[4601]: pbx.c:3380 ast_func_read: Function ODBC_ADDX cannot be read
-- Executing [XXXXXXXXX@phones:30] Set("SIP/out-0000001a", "a=") in new stack

那么有什么不对啦。我找不到解决这个问题的方法非常感谢。

4

2 回答 2

1

已经晚了一年,但我会回答这个问题,以帮助像我一样来自搜索领域的任何人。

在您的 func_odbc.conf 中,您正在尝试编写VAL1VAL2但实际上您想使用ARG1and ARG2; 在随后的拨号计划中,VAL1并且VAL2没有设置(它们会在 之后=

[ADDX]
dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) VALUES (${ARG1},${ARG2})

还有一点要注意,转义和引用您的 SQL 输入始终是一种好习惯;你永远不知道什么时候某个混蛋会在他的 DTMF 键盘上按“A”,只是为了让你保持警觉!在您的查询中使用'${SQL_ESC(${ARG1})}'

INSERT INTO aktarma (musterino, aktartel) VALUES ('${SQL_ESC(${ARG1})}', '${SQL_ESC(${ARG2})}')

继续您的拨号方案:您试图从函数中读取一个值,该函数只是一个写入函数。即使您没有读取值,您仍然需要=在 Set 命令中添加一个以避免错误,但它应该在最后。此外,该函数不需要被包裹起来${}进行编写。

exten=>_X.,n(sqlekle),Set(ODBC_ADDX(${digit},${aktartel})=)

关于 ARG 与 VAL,这是一个同时使用两者的示例:

[ADDX]
dsn=asterisk
writesql = INSERT INTO aktarma SET ${ARG1}='${VAL1}', ${ARG2}='${VAL2}'

我们同时使用 VAL 和 ARG;然后把它放在拨号计划中:

exten=>_X.,n(sqlekle),Set(ODBC_ADDX(musterino,aktartel)=${digit},${aktartel})

所以ARGx作为参数传递给函数,而VALx在调用的右侧Set

关于它如何工作的文档很少;希望这可以帮助某人。

于 2014-02-06T22:06:28.763 回答
0

您在分配的左侧使用了只写函数。

[PRESENCE]
dsn=mydb
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)
于 2013-01-31T15:30:49.810 回答