【问题标题】:Voicemail detection on FreeSWITCHFreeSWITCH 上的语音邮件检测
【发布时间】:2023-03-08 16:12:01
【问题描述】:

我正在开发一个类似于预测拨号器的应用程序,我应该在该应用程序中检测呼叫是否被语音邮件接听。

我正在使用以下:

服务器:我使用的是 FreeSWITCH v1.6.11。我构建并配置了 AVMD 模块。

客户端:我正在使用通过 WSS 连接到 Freeswitch 的 sipml5。

这个想法是当 Freeswitch 检测到哔声时,它会触发一个名为 AVMD_EVENT_BEEP 的事件。

在以下日志中,我使用连接到 FreeSWITCH 套接字的 telnet 客户端。我通过套接字订阅了该事件,结果如下:

事件纯自定义 avmd::beep 内容类型:命令/回复 回复文本:+OK 事件侦听器已启用纯文本 内容长度:737 内容类型:文本/事件纯文本 事件子类:avmd%3A%3Abeep 事件名称:自定义 核心 UUID:1c8e8e58-8b46-11e6-99c3-238295cb19cb FreeSWITCH-主机名:debian FreeSWITCH-开关名称:debian FreeSWITCH-IPv4:176.58.104.114 FreeSWITCH-IPv6:2a01%3A7e00%3A%3Af03c%3A91ff%3Afeae%3Ad2d6 事件-日期-本地:2016-10-05%2022%3A47%3A21 事件-日期-GMT:星期三,%2005%20Oct%202016%2022%3A47%3A21%20GMT 事件日期时间戳:1475707641468562 事件调用文件:mod_avmd.c 事件调用函数:avmd_fire_event 事件调用行号:437 事件序列:2420 唯一 ID:a894fffc-8b4d-11e6-9aa3-238295cb19cb 调用命令:avmd 哔声状态:检测到 频率:1001.084123 频变:0.000203 幅度:12541.343475 幅度变化:33583.241944 检测时间:7320038

在 FreeSwitch 文档页面 https://freeswitch.org/confluence/display/FREESWITCH/mod_avmd 上,他们说“事件被传送到您的 ESL 套接字侦听器、命令提示符并写入日志。Avmd 还设置通道变量(请参阅“通道变量”)。”

好的,这很酷。但是如果没有办法让客户端检测到事件,目的是什么。

我希望客户端订阅此事件并通过 SIP 获得通知。

我尝试在 sipml5 上使用 subscribe Header 如下:

var onEvent = function(e){
  if(e.type == 'i_notify'){
    // process incoming NOTIFY request
    console.info('NOTIFY content = ' + e.getContentString());
    console.info('NOTIFY content-type = ' + e.getContentType());
  }
}
var session = this.newSession('subscribe', {
  expires: 200,
  events_listener: { events: '*', listener: onEvent },
  sip_headers: [
    { name: 'Event', value: 'AVMD_EVENT_BEEP' },
    { name: 'Accept', value: 'text/event-plain' }
  ],
  sip_caps: [
    { name: '+g.oma.sip-im', value: null },
    { name: '+audio', value: null },
    { name: 'language', value: '\"en,fr\"' }
  ]
});
session.subscribe('sip:xxxxx@mydomain');

但问题是,服务器以 BAD EVENT 状态响应。

知道如何检测客户端上的事件吗?也许在服务器上检测到它并向客户端触发 sip 通知?

【问题讨论】:

    标签: sip amd freeswitch subscribe voicemail


    【解决方案1】:

    好的,我解决了。因为没有直接的方法来做到这一点。我必须创建一个出站 esl 守护程序,如果触发事件,Freeswitch 会将数据发布到该守护程序。在我的拨号方案中,我告诉 Freeswitch 打开与守护程序的连接。

    现在,我从该守护进程打开一个新的入站套接字到 freeswitch,并使用来自 esl 的 sendEvent() 发送自定义通知事件。最后 Freeswitch 会将通知包传递给客户端。

    希望这对某人有所帮助。

    【讨论】:

    • 你有示例配置来展示如何实现这个吗?
    【解决方案2】:

    使用预测拨号器,您通常不会在拨号器之外发出这些事件的信号。拨号器将有多个目的地号码,并自行处理建立的呼叫。只有当呼叫建立并确认另一端有人时,代理才会与该呼叫桥接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多