Asterisk 中被叫通道挂断后保持呼叫通道

Keep calling channel after called channel hangs up in Asterisk

我想在被叫挂机后为主叫执行一个AGI脚本。例如,为了对客户进行调查,我将在代理挂断后 运行 AGI 脚本。 不幸的是,当 AGI 脚本 运行s 时,agi 调试输出显示: “511:无法在死通道上执行命令” 我在我的 agi 脚本中使用像 "ANSWER" 或 "STREAM FILE" 这样的命令,它需要一个通向 运行 的通道。 我知道一旦被叫方挂断,呼叫通道就会挂断。 我尝试了 DeadAGI 而不是 AGI,也尝试了拨号命令中的 "g" 选项,但其中 none 有效。 因此,我想我必须寻找一种解决方案来保持呼叫通道畅通,这样我就可以 运行 我的脚本了。 有什么建议吗?

您不应该在这种情况下使用 "g" 参数,因为它是 CALLER 挂断。你应该使用 "F"

    F([[context^]exten^]priority): When the caller hangs up, transfer
    the *called* party to the specified destination and *start* execution
    at that location.
    NOTE: Any channel variables you want the called channel to inherit
    from the caller channel must be prefixed with one or two underbars ('_').
    F: When the caller hangs up, transfer the *called* party to the next
    priority of the current extension and *start* execution at that location.
    NOTE: Any channel variables you want the called channel to inherit
    from the caller channel must be prefixed with one or two underbars ('_').
    NOTE: Using this option from a Macro() or GoSub() might not make
    sense as there would be no return points.
    g: Proceed with dialplan execution at the next priority in the current
    extension if the destination channel hangs up.

终于找到答案了。问题是我们不必在 h 扩展中执行 agi 脚本,否则我们会在 agi 中的某些函数(如 answer 或 streamfile)中出错。我们必须将呼叫重定向到 h 分机之前的某个分机,为此在 elastix 中我必须更改 extensions.conf.