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

sipsimple中accept方法无法处理来电会话问题求助

正确实现来电接受的步骤

你遇到的问题核心在于会话对象的有效性和调用时机:

  • 第二种代码报错cannot call accept in None state是因为self.session未被正确赋值,此时它是None,自然无法调用方法。
  • 第一种代码无反应,大概率是会话状态异常,或者音频流初始化不完整。

正确实现代码示例

def _NH_SIPSessionNewIncoming(self, notification):
    print("Incoming Call")
    session = notification.sender
    
    # 先验证会话状态是否为可接受的状态
    if session.state != "incoming":
        print(f"会话状态异常,当前状态: {session.state}")
        return
    
    try:
        # 初始化音频流时指定兼容编码,提升适配性
        audio_stream = AudioStream(codecs=["PCMU", "PCMA"])
        # 调用accept方法接受会话
        session.accept([audio_stream])
        print("来电已成功接受")
    except Exception as e:
        print(f"接受来电失败: {str(e)}")

关键注意事项

  • 必须使用notification.sender获取当前会话:每个来电对应独立的会话对象,self.session如果没有在正确时机赋值,会是None或者指向旧会话,导致报错。
  • 检查会话状态:只有当会话处于incoming状态时,accept()方法才有效,否则会触发状态错误。
  • 音频流配置:使用常见的PCMU/PCMA编码可以提升与不同终端的兼容性,避免因编码不支持导致会话无法建立。
  • 保留会话引用:如果需要后续操作(比如挂断),要将session对象保存到实例变量(比如self.current_session = session),防止被垃圾回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:22:13