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

Asterisk 20.03 PJSIP如何转发呼入INVITE中的全部SIP头部?

Asterisk 20.03 转发自定义SIP头部到客户端

原配置问题分析

你的配置存在两个核心问题:

  1. 所有步骤的优先级均为1,Asterisk只会执行最后一条优先级为1的指令(即Dial),前面的Set操作完全不会运行。
  2. 即便Set操作执行成功,也只是将头部值存入变量,并未告知Asterisk要把这些头部添加到 outgoing 的SIP INVITE中。

解决方案

方式1:转发指定的自定义头部

调整步骤优先级,使用PJSIP_HEADER(add)指令将读取到的头部直接添加到 outgoing 消息中:

; extensions.conf
[default]
exten => 1234,1,Set(PJSIP_HEADER(add,X-My-ID)=${PJSIP_HEADER(read,X-My-ID)})
exten => 1234,n,Set(PJSIP_HEADER(add,X-My-Loc)=${PJSIP_HEADER(read,X-My-Loc)})
exten => 1234,n,Set(PJSIP_HEADER(add,X-My-Add)=${PJSIP_HEADER(read,X-My-Add)})
exten => 1234,n,Dial(PJSIP/1234,10)
  • n表示"next",即自动递增优先级,确保每一条指令都会被依次执行。
  • PJSIP_HEADER(add,头部名)用于将指定值添加到 outgoing SIP消息的对应头部。

方式2:自动转发所有X-开头的自定义头部

如果需要批量转发所有X-前缀的自定义头部,无需逐个指定,可通过循环遍历所有入站头部实现:

; extensions.conf
[default]
exten => 1234,1,Set(HEADERS=${PJSIP_HEADER(all)})
exten => 1234,n,While($["${HEADERS}" != ""])
exten => 1234,n,Set(HEADER_PAIR=${CUT(HEADERS,\n,1)})
exten => 1234,n,Set(HEADERS=${CUT(HEADERS,\n,2-)})
exten => 1234,n,Set(HEADER_NAME=${CUT(HEADER_PAIR,:,1)})
exten => 1234,n,GotoIf($["${HEADER_NAME:0:2}" != "X-"]?continue)
exten => 1234,n,Set(HEADER_VALUE=${CUT(HEADER_PAIR,:,2-)})
exten => 1234,n,Set(HEADER_VALUE=${STRIP(${HEADER_VALUE})})
exten => 1234,n,Set(PJSIP_HEADER(add,${HEADER_NAME})=${HEADER_VALUE})
exten => 1234,n(continue),EndWhile
exten => 1234,n,Dial(PJSIP/1234,10)
  • PJSIP_HEADER(all)获取入站INVITE的所有头部,格式为头部名: 值每行一个。
  • 通过CUT和While循环拆分每个头部对,判断前缀为X-后,将其添加到 outgoing 消息中。

注意事项

默认情况下Asterisk允许添加自定义头部,若你的PJSIP端点配置(pjsip.conf)有特殊限制,需确保配置未拦截自定义头部的传输。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:53:04