FreeSwitch的mod_vmd模块【初步判定可以实现自动挂断,还没有实操】

FreeSWITCH 的 mod_vmd 模块

mod_vmd 是 FreeSWITCH 的一个模块,用于语音邮件检测(Voicemail Detection)。它能够实时检测通话中的语音邮件提示音,并根据检测结果执行相应操作,如挂断或转接。

主要功能
  1. 语音邮件检测

    • 实时分析通话音频,识别语音邮件系统的提示音。
    • 支持多种语音邮件系统的提示音。
  2. 自动处理

    • 检测到语音邮件后,可自动挂断或转接到其他号码。
    • 支持自定义处理逻辑。
  3. 配置灵活

    • 通过配置文件或 API 调整检测参数和处理方式。
配置示例
  1. 加载模块
    modules.conf.xml 中启用 mod_vmd

    <load module="mod_vmd"/>
    
  2. 配置参数
    autoload_configs/vmd.conf.xml 中设置参数:

    <configuration name="vmd.conf" description="Voicemail Detection">
        <settings>
            <!-- 启用语音邮件检测 -->
            <param name="enabled" value="true"/>
            <!-- 检测到语音邮件后的动作,如挂断 -->
            <param name="action" value="hangup"/>
            <!-- 自定义提示音文件路径 -->
            <param name="prompt-file" value="/path/to/prompt.wav"/>
        </settings>
    </configuration>
    
  3. 拨号计划中使用
    dialplan 中调用 mod_vmd

    <extension name="vmd_detection">
        <condition field="destination_number" expression="^1234$">
            <action application="answer"/>
            <action application="vmd_start"/>
            <action application="bridge" data="user/1000"/>
        </condition>
    </extension>
    
API 命令
  1. 启动检测

    uuid_vmd_start <uuid>
    
  2. 停止检测

    uuid_vmd_stop <uuid>
    
  3. 获取检测状态

    uuid_vmd_status <uuid>
    
使用场景
  • 呼叫中心:自动识别并处理语音邮件,提升效率。
  • 个人用户:自动过滤语音邮件,减少手动操作。
注意事项
  • 性能影响:实时音频分析可能增加系统负载,需合理配置。
  • 兼容性:不同语音邮件系统的提示音可能不同,需针对性调整。

总结

mod_vmd 是 FreeSWITCH 中用于语音邮件检测的模块,能够自动识别并处理语音邮件,提升通话管理效率。通过灵活配置和 API 调用,用户可以根据需求定制检测逻辑。


在路由处给出一个标记is_vmd,当等于true时进行检测 否则不进行检测


可以通过全局配置 mod_vmd 并结合 FreeSWITCH 的路由逻辑实现按需检测。具体来说,可以在全局启用 mod_vmd,然后在拨号计划(Dialplan)中根据路由信息(如通道变量)决定是否启动语音邮件检测。

以下是实现步骤:


1. 全局配置 mod_vmd

autoload_configs/vmd.conf.xml 中启用 mod_vmd,但不设置强制检测:

<configuration name="vmd.conf" description="Voicemail Detection">
    <settings>
        <!-- 启用模块 -->
        <param name="enabled" value="true"/>
        <!-- 默认不自动启动检测,由拨号计划控制 -->
        <param name="auto-start" value="false"/>
    </settings>
</configuration>

2. 在拨号计划中根据标记启动检测

在拨号计划中,通过通道变量(如 is_vmd)决定是否启动语音邮件检测。例如:

<extension name="conditional_vmd_detection">
    <condition field="destination_number" expression="^(\d+)$">
        <!-- 检查 is_vmd 变量是否为 true -->
        <action application="set" data="is_vmd=true" inline="true"/>
        <action application="answer"/>
        
        <!-- 如果 is_vmd 为 true,启动语音邮件检测 -->
        <action application="lua" data="vmd_control.lua"/>
        
        <!-- 正常桥接通话 -->
        <action application="bridge" data="user/1000"/>
    </condition>
</extension>

3. 使用 Lua 脚本控制检测

创建一个 Lua 脚本(如 vmd_control.lua),根据 is_vmd 变量决定是否启动检测:

-- vmd_control.lua
session = freeswitch.Session()

-- 获取 is_vmd 变量
local is_vmd = session:getVariable("is_vmd")

-- 如果 is_vmd 为 true,启动语音邮件检测
if is_vmd == "true" then
    freeswitch.consoleLog("INFO", "Starting VMD detection for call " .. session:get_uuid() .. "\n")
    session:execute("vmd_start")
else
    freeswitch.consoleLog("INFO", "Skipping VMD detection for call " .. session:get_uuid() .. "\n")
end

4. 设置 is_vmd 变量

is_vmd 变量可以通过以下方式设置:

  • 拨号计划中直接设置
    <action application="set" data="is_vmd=true"/>
    
  • 通过 API 设置
    在呼叫发起时,通过 originate API 设置变量:
    originate user/1000 &bridge(user/1001{is_vmd=true})
    
  • 通过外部系统设置
    如果呼叫由外部系统控制,可以在呼叫发起时通过 uuid_setvar 设置变量。

5. 处理检测结果

mod_vmd 检测到语音邮件后,会触发事件 VMD_DETECTED。可以在事件套接字(Event Socket)或 Lua 脚本中监听该事件并执行相应操作。例如:

-- 监听 VMD_DETECTED 事件
freeswitch.EventConsumer("VMD_DETECTED")

local event = freeswitch.EventConsumer():pop()
if event:getHeader("Event-Name") == "VMD_DETECTED" then
    local uuid = event:getHeader("Unique-ID")
    freeswitch.consoleLog("INFO", "Voicemail detected for call " .. uuid .. "\n")
    -- 执行挂断或转接操作
    session:execute("hangup")
end

6. 完整流程示例

  1. 呼叫进入 FreeSWITCH。
  2. 拨号计划检查 is_vmd 变量。
  3. 如果 is_vmdtrue,启动 mod_vmd 检测。
  4. 如果检测到语音邮件,触发 VMD_DETECTED 事件并执行相应操作(如挂断)。
  5. 如果未检测到语音邮件,继续正常通话。

总结

通过全局配置 mod_vmd 并结合拨号计划中的通道变量(如 is_vmd),可以实现按需启动语音邮件检测。这种方式灵活且易于扩展,适用于需要动态控制检测的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值