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

FreeSWITCH注册Contact头缺失用户1000问题求助

FreeSWITCH SIP.js注册后Contact头显示(null)导致无法呼叫的问题

问题描述

我有一台FreeSWITCH服务器,使用external配置文件通过SIP.js注册分机1000,连接和认证环节均正常,但注册后的Contact头存在异常——用户部分显示为(null),怀疑此问题导致后续无法呼叫分机1000。

注册状态信息如下:

sofia status profile external reg

Registrations:
=================================================================================================
Call-ID:        <call-id>
User:           1000@<public-ip>
Contact:        "" <sip:(null)@<public-ip>;fs_nat=yes;fs_path=sip%3A(null)%403.7.130.46%3A57899>
Agent:          JsSIP 3.9.1
Status:         Registered(WS-NAT)(unknown) EXP(2022-09-28 20:04:55) EXPSECS(631)
Ping-Status:    Reachable
Ping-Time:  0.00
Host:           <host>
IP:             <client ip>
Port:           57899
Auth-User:      1000
Auth-Realm:     <public-ip>
MWI-Account:    1000@<public-ip>

其中异常的Contact头:

Contact:        "" <sip:(null)@<public-ip>;fs_nat=yes;fs_path=sip%3A(null)%403.7.130.46%3A57899>

搜索到线索指向公网身份的SIP URI无效,但对此理解不清晰,寻求解决方案。

可能原因与解决步骤

1. 检查FreeSWITCH external profile配置

打开conf/sip_profiles/external.xml,确认以下参数设置:

  • force-register-domain:设置为你的公网IP或域名,确保FreeSWITCH处理注册时用正确域名生成Contact URI
    <param name="force-register-domain" value="<public-ip>"/>
    
  • rewrite-contact:设为true,让FreeSWITCH自动重写Contact头,修正NAT场景下的URI问题
    <param name="rewrite-contact" value="true"/>
    
  • contact-scheme:如果用WebSocket注册,确保设置为ws或wss(与客户端一致)
    <param name="contact-scheme" value="ws"/>
    

修改后重启external profile:

sofia profile external restart

2. 验证SIP.js注册配置

确保SIP.js的注册参数中,uri是完整格式:

const registration = new JsSIP.UA({
  uri: 'sip:1000@<public-ip>',
  // 其他配置项...
});

避免出现缺失用户部分的URI,保证客户端发送的注册请求中Contact头包含正确的用户标识。

3. 排查NAT相关配置

若服务器部署在NAT环境下,确认external.xml中的NAT参数配置正确:

<param name="ext-rtp-ip" value="<public-ip>"/>
<param name="ext-sip-ip" value="<public-ip>"/>
<param name="nat-map" value="true"/>

这些参数确保FreeSWITCH处理NAT客户端时,生成包含公网地址的正确Contact URI。

4. 测试验证

重新注册分机1000后,再次执行命令查看注册状态:

sofia status profile external reg

确认Contact头中的用户部分显示为1000而非(null),比如:

Contact:        "1000" <sip:1000@<public-ip>;fs_nat=yes;fs_path=sip%3A1000%403.7.130.46%3A57899>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:32