You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asterisk ARI发起本地端点通话:能否省略拨号与接听操作?

可以省去拨号和接听步骤!

绝对能跳过手动拨号和接听这两步,我之前在做内部IP电话互通的场景时就这么实现过,核心是让信道自动进入Up状态并直接接入混音桥,不用走常规的呼叫流程。具体操作分两种场景:

场景1:创建信道时直接自动接听并接入桥

如果是从头创建信道,在调用ARI的Channel.create接口时,直接添加两个关键参数:

  • auto_answer=yes:让信道创建完成后自动接听,跳过手动接听步骤
  • 提前创建好mixing类型的桥,在stasisStart事件触发时,立刻将信道加入桥

示例伪代码(用ARI的Python客户端举例):

# 先创建混音桥
bridge = ari.bridges.create(type='mixing', name='my_bridge')

# 创建第一个信道,自动接听
channel1 = ari.channels.create(
    endpoint='PJSIP/100',
    app='my_stasis_app',
    app_args='bridge_id=' + bridge.id,
    auto_answer='yes'
)

# 创建第二个信道,自动接听
channel2 = ari.channels.create(
    endpoint='PJSIP/102',
    app='my_stasis_app',
    app_args='bridge_id=' + bridge.id,
    auto_answer='yes'
)

# 在stasisStart事件回调里加入桥
def on_stasis_start(channel_obj, ev):
    bridge_id = ev['args'][0]
    ari.channels.bridge(channel=channel_obj.id, bridge=bridge_id)

场景2:已有Down状态的信道,手动触发接听并接入桥

如果已经创建了状态为Down的信道,不需要重新创建,直接在stasisStart事件里先调用Channel.answer()接口让信道进入Up状态,再加入桥即可:

def on_stasis_start(channel_obj, ev):
    # 先接听信道
    ari.channels.answer(channel=channel_obj.id)
    # 加入指定桥
    ari.channels.bridge(channel=channel_obj.id, bridge='my_bridge_id')

关键原理说明

你之前的信道处于Down状态,是因为它们只被创建但没有发起媒体协商——常规呼叫流程里的拨号是发起呼叫请求,接听是确认媒体连接,而通过auto_answer或Channel.answer(),直接跳过了人工交互环节,让Asterisk自动完成媒体协商,把信道状态切换为Up,此时加入混音桥就能直接实现音频互通了。

注意事项

  • 确保你的PJSIP端点配置里没有禁用自动接听的参数(比如direct_media设置正确,没有强制要求手动确认)
  • 桥的类型必须是mixing,holding或dtmf_events类型的桥无法实现双向音频互通

内容的提问来源于stack exchange,提问作者user3640553

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:25:04