转接参数:`blxferVariables`

快速阅读

blxferVariables 在盲转时把通道变量或 SIP 头带给下游。类型是 ChannelVariable[],最多 5 项。

  • 字段只有 name、value、type。type 取 1 到 4,含义见下表,不要改枚举。
  • type=2 时,头名称规则涉及 X-Asterisk-、P-Tinet-、P-User-。这是协议行为,按原文实现。
  • 结构与 类型 里的 ChannelVariable 一致。

阅读地图

  • 数据结构和示例:读「二」。
  • type 四种取值:读「三」。
  • 跨部门主叫、目标侧怎么读:读「四」「五」。
  • 盲转方法本身见 API(操作) 的 blxfer。

一、文档说明

本文说明盲转参数 blxferVariables 怎么填、下游怎么取。示例里的变量名(含 userFiled)保持原文。

二、数据结构

  • 类型:ChannelVariable[]
  • 最大项数:最多 5 个

示例:

[
  { "name": "mainUniqueId", "value": "${cdr_main_unique_id}", "type": 2 },
  { "name": "userFiled", "value": "${BASE64_ENCODE(${cdr_main_unique_id})}", "type": 2 }
]
字段含义
name变量名
value变量值(通道变量值或 SIP 头值)
type变量类型(见下文)

三、type 取值

type类别说明
1普通通道变量支持使用 ${} 引用现有通道变量
2SIP 头变量发起呼叫时,系统可能会在头名称前加上 X-Asterisk-;P-Tinet- 保留原前缀;P-User- 表示自定义头名称,并会自动移除该前缀
3普通变量(自动用 ${} 包裹 value)用于下游系统不接受输入中包含 ${} 的场景
4SIP 头(自动用 ${} 包裹 value,且按约定不加前缀)用于下游系统不接受输入中包含 ${} 的场景

3.1 type=1(通道变量)

[{ "name": "userFiled", "value": "111222", "type": 1 }]
[{ "name": "userFiled", "value": "${cdr_main_unique_id}", "type": 1 }]

3.2 type=2(SIP 头变量)

value 常见有两种写法:

// 方式 A:客户端自行进行 base64 编码
[{ "name": "userFiled", "value": "MTExMjIy", "type": 2 }]

// 方式 B:服务端表达式执行 BASE64_ENCODE(常用于跨部门传递本部门变量)
[{ "name": "userFiled", "value": "${BASE64_ENCODE(${cdr_main_unique_id})}", "type": 2 }]

头名称规则:

  • 名称为 abc → 实际头为 X-Asterisk-abc
  • 名称以 P-Tinet- 开头 → 保持头名称为 P-Tinet-xxx
  • 名称以 P-User- 开头 → 移除该前缀,并将头发送为 xxx

四、跨部门主叫号码

默认情况下,主叫号码可能是发起部门的外呼号码。若要使用客户真实号码作为主叫号码:

{ "name": "cust_callee_clid", "value": "${cdr_customer_number}", "type": 1 }

五、目标部门如何获取这些值

5.1 在 IVR 变量节点中读取 SIP 头

变量名:parent_unique_id
变量值:${PJSIP_HEADER(read,X-Asterisk-parent_unique_id)}
值类型:表达式

5.2 在 HTTP 交互 / 挂断推送中解码该值

parent_unique_id=${BASE64_DECODE(${parent_unique_id})}

Did this page help you?