【问题标题】:Asterisk run script on Phone Answer and Outgoing CallAsterisk 在电话应答和拨出电话上运行脚本
【发布时间】:2017-08-25 13:31:37
【问题描述】:

我试图让我的 Asterisk 在某个电话(Sip Phone)接听或拨出电话以及结束该电话时运行脚本。这样做的目的是在同一个房间里用电话完成通话时自动将我的电视静音。

我已尝试使用系统命令,但无法获取有关接听电话的信息。由于我有多个电话响铃,我无法区分它确实是电视旁边的电话还是完全不同的电话。我在拨出电话时遇到了同样的问题。

有不同的方法吗?我也尝试过使用 AMI,但我还没有找到一种方法来获取特定对等方的状态(离线、在线、通话中、滞后)。

【问题讨论】:

    标签: asterisk asteriskami


    【解决方案1】:

    假设你有 ext sip/111

    支持扩展

    [from-internal-very-special]
    exten => 111,1,UserEvent(TVRingStarted)
    same => n,Set(CHANNEL(hangup_handler_push)=from-internal-very-special,ends,1)
    same => n,Dial(SIP/111,,U(from-internal-very-special,answer,1))
    
    exten =>answer,1,UserEvent(TVRingAnswer)
    same => n,Set(GOSUB_RESULT=);we accept call
    same => n,Return;continue
    
    exten => ends,1,Noop(end of call)
    same => n,UserEvent(TVRingEnds)
    same => n,Return;
    

    在呼叫分机之后为 Local/111@from-internal-very-special/n 而不是 SIP/111

    您将拥有可以通过 AMI 解析的用户事件。或者您可以根据需要将其替换为系统调用。

    【讨论】:

    • 我马上试试,谢谢!对于拨出电话,我必须将其放在特殊的上下文中,或者我该如何处理?由于我的默认上下文包含许多扩展,如果我可以只包含它并在此之前和之后运行一个脚本,那将是最简单的,这可能吗?
    • 可以在 answer(U) 上输入拨号选项 gosub,在里面可以查看频道名称。但恐怕那会是复杂得多的人员。
    • 是的,这肯定会更复杂,因为我必须将它添加到绝对每个拨号命令中,这是几百个。感谢您的帮助,我对您的解决方案做了一些小改动,现在效果非常好!
    • 如果你把它添加到每个拨号命令中,这意味着你的拨号计划结构很糟糕。大多数 PBX 在一个地方都有拨号标志。但是你仍然可以使用 vim replace 或 sed 来完成。
    • 好吧,我有几部电话,所以我需要为每部电话配备一个分机,因为每部电话都有一个内部号码。然后我有大约 15 个“真实”电话号码需要发送到不同的电话。我总是愿意改进我的工作方式,所以如果有不同的方法来完成它,我一定会看看!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多