【问题标题】:Asterisk: don't wait for AGI script (bash) to finish before continuing in dialplan星号:在继续拨号计划之前不要等待 AGI 脚本 (bash) 完成
【发布时间】:2013-11-07 15:55:47
【问题描述】:

我有一个 Asterisk 拨号计划,它执行一个 bash 脚本,该脚本将 callerID 与数据库相匹配,以对来电者进行地理定位(通过匹配国家和地区代码)。由于数据库非常大(全球规模),最多需要 15 秒才能完成。

我需要在接听电话后立即运行此脚本(以防用户在通话结束前挂断),但不希望用户等待脚本执行。理想情况下,返回值应该在挂断之前的拨号计划结束时处理。

Q1:我找到了http://www.voip-info.org/wiki/view/Asterisk+AGI#Forkandcontinuedialplan,它解决了我关于 perl 脚本的问题。我如何在 bash 中完成相同的任务?我知道我可以通过在末尾添加一个“&”将任何 bash 脚本发送到后台,但我不知道如何在拨号计划/使用 AGI 脚本时做到这一点。

Q2:即使用户之前挂断/拨号方案“退出非零”,我如何处理这些值?

感谢您的帮助!

【问题讨论】:

    标签: bash asterisk agi


    【解决方案1】:

    使用 fastagi 界面。或者使用 AMI 监听器触发 UserEvent。

    AGI 的设计初衷并非如您所愿,因此无法正常工作。

    当然你可以使用 nohup 命令来获得不朽的 bash 脚本,但事实并非如此。

    【讨论】:

    • 你能详细说明一下吗?使用 fastAGI 会更好,因为我可以将负载分配给其他机器,还是可以在脚本运行时继续拨号计划,然后在稍后处理返回值?
    • Fastagi 是外部 TCP 服务器。您可以将消息放入服务器中,也可以做任何您想做的事情。连接将被关闭,但线程通常不会关闭(取决于您的服务器实现)。例如,如果用户 perl Asterisk::FastAGI,您可以将函数映射到拨号计划,然后在需要时将相同的调用引用到其他函数等。您可以使用 AMI 执行呼叫操作(从 fastagi 服务器到星号的通信)或者您可以询问从星号拨号计划另一个动作,无论你想要什么。
    • 感谢您的澄清。我对这一切都很陌生,所以这很有帮助。将在接下来的几天内尝试实现这一点,但无论如何我都会将问题标记为已解决。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    相关资源
    最近更新 更多