如何在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
相关产品推荐
相关产品推荐

