.NET 6下使用SIPSorcery对接VoIP.ms时主叫ID无法正常传递
排查SIPSorcery传递自定义Caller ID失败的问题
检查SIPSorcery的Caller ID设置细节
- 确认代码中是否同时设置了
CallerName和CallerNumber:SIPSorcery发起呼叫时,需同时指定这两个字段,仅设置其一可能导致VoIP.ms无法识别。示例设置参考:var callDescriptor = new CallDescriptor( destination: "目标号码", callerId: "自定义主叫号码", callerName: "自定义主叫名称", fromHeader: "自定义主叫号码", // 其他必要参数 ); - 验证
From头格式是否符合SIP规范:From头需遵循"显示名称"<sip:主叫号码@你的SIP域名>格式,若SIPSorcery未自动生成正确格式,可手动构造:callDescriptor.FromHeader = $"\"{自定义名称}\"<sip:{自定义号码}@{sipAccount.SIPDomain}>";
核对VoIP.ms的补充配置
- 确认自定义Caller ID已添加到VoIP.ms账户的允许主叫号码列表:即便开启了自行传递选项,VoIP.ms仍会验证号码是否在白名单内,未添加的号码会被替换或屏蔽。
- 检查VoIP.ms的SIP中继设置:部分套餐需在中继详情页单独开启**“允许任意主叫ID”**选项,仅全局设置可能不生效。
分析Serilog日志的关键信息
- 查看
INVITE请求中的From和P-Asserted-Identity头:若这两个头未携带自定义号码,说明SIPSorcery未正确生成请求;若已携带但VoIP.ms后续信令中号码被修改,需排查VoIP.ms端的验证规则。 - 检查是否存在VoIP.ms返回的错误码(如
403 Forbidden):这类错误通常意味着主叫号码未被授权,需回到账户配置核对。
检查SIPSorcery全局配置
- 确认SIPSorcery的SIP账户已开启**“允许自定义主叫ID”**:部分版本的SIPSorcery在账户设置中有相关开关,需确保未被禁用。
- 排查代码逻辑是否覆盖了Caller ID设置:后续的呼叫拦截器或事件处理中,可能存在修改已设置主叫信息的逻辑。
内容的提问来源于stack exchange,提问作者LeanTyl
相关产品推荐
相关产品推荐

