FreeSWITCH 简单图形化界面55 - 拨号应用tansfer盲转/拨号计划跳转使用

FreeSWITCH 简单图形化界面55 - 拨号应用tansfer盲转/拨号计划跳转使用

  • [00、 一个fs的web配置界面预览](#00、 一个fs的web配置界面预览)
  • [01、 Web 配置界面预览](#01、 Web 配置界面预览)
  • [02、 Web界面安装参考](#02、 Web界面安装参考)
  • [1. 简介](#1. 简介)
  • [2. 核心区别(重要)](#2. 核心区别(重要))
  • [3. 用法](#3. 用法)
  • [4. 关键机制](#4. 关键机制)
  • [5. 示例](#5. 示例)
    • [示例 1:基础跳转(默认上下文)](#示例 1:基础跳转(默认上下文))
    • [示例 2:指定上下文的跳转](#示例 2:指定上下文的跳转)
    • [示例 3:桥接中转接对端/双腿](#示例 3:桥接中转接对端/双腿)
    • [示例 4:自定义跳转次数限制](#示例 4:自定义跳转次数限制)
    • [示例 5:lua脚本进行盲转](#示例 5:lua脚本进行盲转)
    • [示例 6:lua脚本进行拨号规则跳转](#示例 6:lua脚本进行拨号规则跳转)
  • [6. 注意事项](#6. 注意事项)

00、 一个fs的web配置界面预览

如果您想通过图形化界面管理 FreeSWITCH 的场景,可直接访问以下 Web 配置界面。

01、 Web 配置界面预览

界面地址 备用地址 登录信息
http://www.fspbx.cn/ http://myfs.f3322.net:8020/ 用户名:admin密码:admin

02、 Web界面安装参考

若需自行部署 FreeSWITCH 图形化界面,包含 Docker、脚本、ISO 镜像三种安装方式,适配不同系统环境:

  1. Docker 安装:快速部署;
  2. 脚本安装:适配 Almalinux、RockyLinux、Debian、Ubuntu 、欧拉等系统,提供一键安装命令,安装后需重启初始化;
  3. ISO 镜像安装:基于 Almalinux制作的镜像,刻录到 U 盘或光盘后可自动安装,适合全新服务器部署。

1. 简介

transfer 核心是拨号计划跳转(而非传统意义上的"通话转接"),会立即将当前呼叫通道切换到新的拨号计划上下文/分机:

  • 若目标分机有独立 XML 文件(如 1047.xml),直接跳转到该分机逻辑;
  • 若无独立文件,则遍历目标上下文的所有规则匹配分机;
  • 本质是修改呼叫的目标分机/上下文,重新解析拨号计划,而非真正的通话桥接转接。

2. 核心区别(重要)

transfer ≠ 传统通话转接(如 att_xfer):

  • transfer:拨号计划层面的逻辑跳转,可理解为"IVR菜单跳转""分机重定向";
  • att_xfer:通话媒体层面的专人转接,需要和第三方沟通后完成桥接。

3. 用法

xml 复制代码
transfer <destination_number> [<dialplan> [<context>]]
参数 说明 默认值
destination_number 目标分机号/号码 无(必填)
dialplan 拨号计划类型(如 XML/JSON) XML
context 拨号计划上下文(如 default/cntxt_a) default

特殊参数(桥接中使用)

格式 作用
-bleg <号码> 桥接状态下,仅转接通话的"对端(B腿)"
-both <号码> 桥接状态下,同时转接通话的A、B双腿

4. 关键机制

  • max_forwards 限制:默认值 70,每次调用 transfer 会减 1,减到 0 则挂断通话(防止无限循环);
  • max_session_transfers 覆盖 :若设置该通道变量(如 set max_session_transfers=200),则不再使用 max_forwards,改用此值计数;
  • RDNIS 填充:跳转后,RDNIS(被叫号码识别服务)会自动填充为跳转前的目标号码;
  • 兼容 mod_xml_curl:跳转时会重新请求动态拨号计划(如 XML CURL),逻辑与静态 XML 一致。

5. 示例

示例 1:基础跳转(默认上下文)

xml 复制代码
<!-- 跳转到默认上下文(default)的 500 分机 -->
<action application="transfer" data="500"/>

示例 2:指定上下文的跳转

xml 复制代码
<!-- 公网拨号计划中,将 1000-1099 分机跳转到 default 上下文的对应分机 -->
<extension name="public_extensions">
  <condition field="destination_number" expression="^(10[01][0-9])$">
    <action application="transfer" data="$1 XML default"/>
  </condition>
</extension>

示例 3:桥接中转接对端/双腿

xml 复制代码
<!-- 仅转接桥接的对端(B腿)到 2103 分机 -->
<action application="transfer" data="-bleg 2103"/>

<!-- 同时转接通话的 A、B 双腿到 2103 分机(如会议室) -->
<action application="transfer" data="-both 2103"/>

示例 4:自定义跳转次数限制

xml 复制代码
<!-- 先设置最大跳转次数,再跳转(避免 70 次限制) -->
<action application="set" data="max_session_transfers=200"/>
<action application="transfer" data="1047 XML cntxt_a"/>

示例 5:lua脚本进行盲转

lua 复制代码
#!/usr/bin/env lua
  
-- 2024年7月2日
-- 功能号码
-- 呼叫盲转
------------------打印日志-------------------
-- CONSOLE : console loglevel 0
-- ALERT   : console loglevel 1
-- CRIT    : console loglevel 2
-- ERR     : console loglevel 3
-- WARNING : console loglevel 4
-- NOTICE  : console loglevel 5
-- INFO    : console loglevel 6
-- DEBUG   : console loglevel 7
local flag = true
local level = "NOTICE"
local log = function(session, str)
    if (flag == true and session:ready()) then
        session:consoleLog(level, str)
    end
end

if (session:ready()) then
    local caller_id_name = session:getVariable("caller_id_name")
    local caller_id_number = session:getVariable("caller_id_number")
    local destination_number = session:getVariable("destination_number")
    local context = session:getVariable("context")

    log(session, "#======= start handle-blind-xfer.lua =======\r\n")
    log(session, string.format("# 主叫:%s,被叫:%s,开始盲转\r\n", caller_id_number, destination_number))

    -- 播放等待音
    session:execute("set", "transfer_ringback=$${hold_music}")
    -- 获取被叫
    local digits = session:playAndGetDigits(1, 12, 3, 5000, "#", "default/blind-xfer-start.gsm",
        "default/blind-xfer-error.gsm", "\\d+")
    if (digits == '') then
        session:execute("playback", "default/blind-xfer-end.gsm")
    else
        -- 设置转接号码变量
        -- session:execute("set", string.format("destination_number=%s", digits))
        -- 执行呼叫转接应用
        session:execute("transfer", string.format("-bleg %s  xml %s", digits, context))
    end
    log(session, "#=======  end handle-blind-xfer.lua  =======\r\n")
    return
end

示例 6:lua脚本进行拨号规则跳转

lua 复制代码
---呼叫入口
if (session:ready()) then
    -- 获取一堆变量
    local caller_id_name     = session:getVariable("caller_id_name")
    local caller_id_number   = session:getVariable("caller_id_number")
    local ani                = session:getVariable("ani") ~= "" and session:getVariable("ani") or session:getVariable("caller_id_number")
    local destination_number = session:getVariable("destination_number")
    local auto_answer        = session:getVariable("auto_answer")
    local trunk_name         = session:getVariable("trunk_name")
    local max_calls          = session:getVariable("max_calls") and session:getVariable("max_calls") or 100
    local context            = session:getVariable("context")
    local extension          = session:getVariable("extension") and session:getVariable("extension") or ''
    local rdnis              = session:getVariable("rdnis") ~= "" and session:getVariable("rdnis") or session:getVariable("destination_number")
     --- 转到context里的extension
    session:execute("transfer", string.format("%s xml %s", destination_number, context))
end

6. 注意事项

  1. transfer 会从拨号计划开头重新解析,需避免循环跳转(如 A→B→A);
  2. 若在桥接(bridge)中使用,默认转接对端(B腿),而非当前通道;
  3. 名称易混淆:transfer 是"拨号计划跳转",而非"通话转接",真正的通话转接需用 bridge/att_xfer;
  4. 支持内联拨号计划(inline dialplan),可直接指定跳转逻辑而非分机号。

💗 2026年

🐂 祝君成功,好运连连,牛气冲天

相关推荐
贾宝玉的玉宝贾5 小时前
FreeSWITCH 简单图形化界面54 - 拨号应用att_xfer协商转移使用
voip·freeswitch·ippbx·pbx·sip通信
REDcker5 天前
SIP 协议原理及应用精解
音视频·ims·sip·sdp·移动通信·volte·h323
REDcker7 天前
从 SS7 到 VoLTE:核心信令协议栈与移动网络演进详解
开发语言·网络·sip·移动网络·volte·ss7·七号信令
_OP_CHEN10 天前
【前端开发之JavaScript】(三)JS基础语法中篇:运算符 / 条件 / 循环 / 数组一网打尽
开发语言·前端·javascript·网页开发·图形化界面·语法基础·gui开发
顶顶通-FreeSWITCH二次开发接口14 天前
顶顶通SIP电话客户
sip
wMoqi16 天前
freeswitch接入E1/T1数据中继语音网关配置
freeswitch·数字中继网关
代码浪人1 个月前
Freeswitch-基础配置-wss-api简化-acl
freeswitch
贾宝玉的玉宝贾1 个月前
FreeSWITCH 简单图形化界面52 - 拨号应用 Answer 介绍
python·django·voip·freeswitch·sip·ippbx·jssip
_OP_CHEN2 个月前
【从零开始的Qt开发指南】(十三)Qt 窗口之菜单栏完全攻略:从入门到实战,打造专业级桌面应用菜单系统
开发语言·qt·前端开发·图形化界面·菜单栏·gui开发·qt窗口