3

我在 sql 表中创建了一个 write func odbc list records files:

[R]

dsn=connector

write=INSERT INTO ast_records (filename,caller,callee,dtime) VALUES
('${ARG1}','${ARG2}','${ARG3}','${ARG4}')

prefix=M

并将其设置在拨号计划中:

exten => _0X.,n,Set(
M_R(${MIXMONITOR_FILENAME}\,${CUSER}\,${EXTEN}\,${DTIME})= )

当我执行它时,我收到一个错误:ast_func_write:M_R 函数未注册:

请注意:带有Windows的星号

4

3 回答 3

5
  1. 我看到的第一件事是你错误地执行了对函数的调用......你需要分配值,而不是参数......试试这个:

    func_odbc.conf:

    [R]
    dsn=connector
    prefix=M
    writesql=INSERT INTO ast_records (filename,caller,callee,dtime) VALUES('${VAL1}','${VAL2}','${VAL3}','${VAL4}');
    

    拨号方案:

    exten => _0X.,1,Set(M_R()=${MIXMONITOR_FILENAME}\,${CUSER}\,${EXTEN}\,${DTIME})
    

    如果这对您没有帮助,请继续我的列表:)

  2. 确保 func_odbc.so 正在由 Asterisk 加载。(来自星号 CLI:module show like func_odbc)...如果未加载,则无法“构建”您的自定义 odbc 查询功能。

  3. 确保您的 DSN 在 /etc/odbc.ini 中配置
  4. 确保 /etc/asterisk/res_odbc.conf 配置正确
  5. 确保您使用正确的名称调用 DSN(我看到它一直在发生)
  6. 在 Asterisk 日志中启用详细和调试,重新加载记录器,核心设置详细 5,核心设置调试 5,然后再次尝试调用。当通话结束时,查看日志,你会看到更多关于发生的事情的输出......

关于 recluze 的答案......不是在这里叫你,但在这里使用 PHP AGI 是严重的过度杀伤力。func_odbc 函数工作得很好,为什么要通过调用外部脚本(它必须在 TOP 本身上使用解释器程序)来产生更多开销和潜在的安全问题?

于 2011-04-29T18:18:36.643 回答
2

您应该将 func odbc 函数称为“ODBC_connector”。连接器应在 func_odbc.conf 文件 [连接器] 中使用。在拨号计划中,它应该像这样调用。

exten=> _0x.,n,ODBC_connector(${arg1},${arg2})
于 2011-02-17T03:36:33.600 回答
0

我不太了解您尝试使用的语法,但如何为此使用 AGI(使用 php)。只需在 php 脚本中定义您的逻辑并从您的拨号计划中调用它:

exten => _0X.,n,AGI(script-filename.php,${CUSER},${EXTEN},${DTIME})
于 2011-01-10T09:23:33.713 回答