如何修改FreeSwitch的拨号计划/Sofia配置文件添加P-Early-Media头?
在FreeSwitch中配置预应答时183消息添加P-Early-Media头
一、修改拨号计划(针对特定业务场景)
直接在需要触发预应答的拨号计划路由中,通过set指令添加P-Early-Media头,配合pre_answer动作生效:
- 打开目标拨号计划文件(如
conf/dialplan/default.xml或业务专属拨号计划) - 在对应路由的
<condition>块内添加以下动作:
<extension name="pre_answer_with_early_media"> <condition field="destination_number" expression="^你的业务号码前缀$"> <!-- 设置P-Early-Media头,值需和3GPP核心网侧确认,常用supported或sendrecv --> <action application="set" data="sip_h_P-Early-Media=supported"/> <!-- 触发预应答,发送183 Session Progress消息 --> <action application="pre_answer"/> <!-- 播放错误语音文件 --> <action application="playback" data="error-message.wav"/> <!-- 后续业务逻辑 --> </condition> </extension>
sip_h_前缀是FreeSwitch中设置自定义SIP头的标准方式,会自动将头插入到后续发送的SIP消息中(包括183)。- 执行
pre_answer后,FreeSwitch会立即发送带SDP的183消息,此时P-Early-Media头已被附加。
二、调整Sofia配置(全局生效或对接3GPP的Profile)
如果需要所有对接3GPP核心网的呼叫都自动添加该头,可修改对应SIP Profile的配置:
- 打开与3GPP核心网对接的Sofia配置文件(如
conf/sip_profiles/external.xml) - 在
<profile>标签内添加以下参数:
<!-- 开启183消息发送 --> <param name="enable-183" value="true"/> <!-- 全局添加P-Early-Media头 --> <param name="sip-headers" value="P-Early-Media: supported"/> <!-- 确保183消息携带SDP,P-Early-Media通常需配合SDP使用 --> <param name="183-session-progress-sdp" value="true"/>
- 若仅需在预应答场景添加,可结合
send-p-early-media参数:
<param name="send-p-early-media" value="true"/>
三、关键注意事项
- 头值确认:务必和电信核心网侧确认P-Early-Media的取值(
supported/sendrecv等),不同厂商的核心网可能要求不同。 - 媒体协商:确保FreeSwitch的编码配置(如G.711、AMR等)与3GPP核心网一致,否则即使头正确,错误语音也无法正常传输。
- 验证方法:执行命令
sofia global siptrace on开启SIP追踪,在FreeSwitch日志中检查发送的183消息是否包含P-Early-Media头。
内容的提问来源于stack exchange,提问作者sorosh_sabz
相关产品推荐
相关产品推荐

