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

如何在C++的Pjsua2中设置VoIP.ms外呼主叫ID?

在Pjsua2中为VoIP.ms设置动态外呼主叫ID(C++)

你之前修改AccountConfig.idUri的思路不对——这个字段是用来定义SIP账户的身份标识,注册时发送给服务器,但外呼时的主叫ID需要在每次发起呼叫时单独设置,而非修改账户配置。

前置确认

先确保VoIP.ms账户设置正确:在VoIP.ms在线门户中开启「接受PBX或交换系统发送的主叫ID号码」选项,这是服务商接收自定义主叫ID的前提。

正确实现方式

发起呼叫时,通过CallOpParam的callSetting指定主叫ID,核心是设置fromUri或者添加P-Asserted-Identity自定义头(部分服务商优先读取后者)。

以下是完整代码示例:

// 假设已初始化Account实例acc,目标呼叫号码为destNumber
Call *call = new Call(*acc, -1);
CallOpParam callParam;

// 方式1:设置From头(推荐优先尝试)
// 格式:"显示名称" <sip:你的号码@VoIP.ms服务器地址>
callParam.callSetting.fromUri = "\"5550125\" <sip:5550125@newyork1.voip.ms>";

// 方式2:添加P-Asserted-Identity头(方式1无效时使用)
SipHeader paiHeader;
paiHeader.hName = "P-Asserted-Identity";
paiHeader.hValue = "\"5550125\" <sip:5550125@newyork1.voip.ms>";
callParam.callSetting.headers.push_back(paiHeader);

// 发起呼叫
try {
    call->makeCall(destNumber, callParam);
} catch (Error &err) {
    // 处理呼叫失败逻辑,比如打印err.info()
}

关键说明

  • 指定的主叫号码5550125必须是VoIP.ms账户下已绑定的有效号码,否则服务器会自动替换为默认号码
  • 服务器地址(如newyork1.voip.ms)要和注册SIP账户时使用的地址完全一致
  • 无需修改AccountConfig的任何字段,保持原有账户配置即可(比如acfg.idUri = "<sip:1234567@newyork1.voip.ms>")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:05:00