如何在 asterisk 拨号计划中处理 SQL 失败

我正在使用

  • Asterisk certified/16.8-cert2
  • MSSQL Express 2014
  • unixODBC 2.3.1
  • freetds v1.1.20
  • Lua 5.1.4
  • CentOS7

我使用 func_odbc.so 在 SQL 中执行 update 语句,这个语句一切正常没有问题。但我想要一种方式来捕获错误,比如断开连接或网络中断。

这是我的 update 语句

  UPDATE Customers SET AccountBalance = AccountBalance - ${VAL1} WHERE cif = ${ARG1}

我的拨号计划函数调用(在 extention.lua 中)

local statues = channel.ODBC_ErrorTest(1499):set(10)

我认为可以通过在 SQL 语句本身中添加 TRY 和 CATCH 块来解决这个问题,所以如果出现错误就会返回错误编号

BEGIN TRY
  UPDATE Customers SET AccountBalance = AccountBalance - a WHERE cif = 17399
END TRY
BEGIN CATCH
 SELECT   ERROR_NUMBER() AS ErrorNumber
END CATCH

但是当我尝试执行此操作时,如果失败了,它不会返回错误编号,只会返回一个空字符串。

所以我的问题很简单,如何从拨号计划中处理 SQL 失败?

点赞
用户861388
用户861388

对于更新操作,如果出现写SQL错误,应该返回-1。

然而你应该理解,星号是PBX,不适合进行复杂的SQL检查。

可能的解决方法:

1)创建其他表格并使用命令创建外部脚本,该脚本检查是否有新的“操作”并返回结果/错误。在0.5秒、1秒等后在星号中检查。

2)创建简单的REST API并使用func_CURL。

2020-05-31 17:48:40