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

SIP Sorcery(C#):服务器拒接呼叫及接收端检测方法问询

场景说明

发起呼叫的代码片段

SIPUserAgent objSIPUserAgent = new SIPUserAgent();
WindowsAudioEndPoint objWindowsAudioEndPoint = new WindowsAudioEndPoint(new AudioEncoder());
VoIPMediaSession objVoIPMediaSession = new VoIPMediaSession(objWindowsAudioEndPoint.ToMediaEndPoints());
objVoIPMediaSession.AcceptRtpFromAny = true;

string strDestinationAddress = strDialledNumber + gblStrDomain;
bool blnCallResult = await objSIPUserAgent.Call(strDestinationAddress, gblStrExtentionNumber, gblStrExtentionPassword, objVoIPMediaSession);
  • 服务器通过上述代码向接收端发起呼叫
  • 接收端已收到来电通知

技术问询解答

1. 服务器如何拒接或取消已发起的呼出呼叫?

要取消或终止已发起的呼出呼叫,需结合SIP协议规范与所用SDK的API操作:

  1. 保留呼叫会话引用:若SIPUserAgent.Call()方法存在返回呼叫会话实例的重载(比如SIPCall对象,而非仅返回布尔值),发起呼叫时必须保存该会话的引用。
  2. 调用对应终止方法:
    • 呼叫未被接收端接通时,调用会话对象的Cancel()方法(对应SIP协议的CANCEL请求),即可取消呼出呼叫;
    • 呼叫已接通时,调用会话对象的Hangup()或Terminate()方法(对应SIP协议的BYE请求),终止当前呼叫;
    • 若SDK的SIPUserAgent类提供直接挂断指定呼叫的方法,也可传入目标呼叫标识完成操作。

2. 接收端如何检测到呼叫已被服务器拒接或取消?

接收端可通过监听协议消息与SDK事件回调来检测:

  1. 监听SIP协议层消息:
    • 服务器取消未接通呼叫时,接收端会收到CANCEL请求;
    • 服务器终止已接通呼叫时,接收端会收到BYE请求;
    • 服务器直接拒接呼叫时,接收端会收到4xx类SIP响应(如486 Busy Here、403 Forbidden等)。
  2. 监听SDK封装事件:
    所用SIP SDK通常会封装对应状态事件,比如CallCancelled(呼叫被取消)、CallTerminated(呼叫被终止)、CallRejected(呼叫被拒接)等,接收端只需注册这些事件的处理逻辑,就能实时感知呼叫状态变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:21