如何处理来自星号拨号计划的 SQL 失败

how to handle SQL failer from asterisk dial plan

我正在使用

我在 SQL 和 func_odbc.so 中执行 更新语句 。更新语句工作正常,没有问题。但我想在发生错误时能够捕捉到错误,例如断开连接或网络中断。

这是我的更新声明

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

我的 dialPlan 函数调用(在 extention.lua 中)

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

虽然我可以让它工作,但其中一件事是在 SQL 语句本身中添加 TRY 和 CATCH blook,如下所示,因此如果出现错误,它将 return错误编号

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

但是当我尝试执行此操作时,它不会 return 当出现失败时给我一个错误编号,只是 return 一个空字符串。

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

对于更新,它应该 return -1 以防写入 sql 错误。

不过你应该明白,asterisk 是 PBX,不是 suitable 复杂 sql 检查的东西。

可能的解决方法

1) 使用命令创建其他 table,创建检查新 "actions" 并发回 results/error 的外部脚本。在 0.5 秒、1 秒等后检查星号

2) 创建简单的休息 API 并使用 func_CURL.