要在FreeSWITCH 对接钉钉

要在FreeSWITCH中使用IP限制并保存录音,并将通话转接到callgw.dingtalk.com:6789,并在请求头中添加X-access-number=被叫号码X-access-token=XXXXX,同时生成录音文件和话单,将话单记录到MySQL数据库中,您可以按以下步骤操作:

  1. 配置IP限制

首先,您需要编辑FreeSWITCH的配置文件(如sip_profiles/external.xml)来添加IP限制。找到或创建一个合适的context(上下文),并为该context设置IP地址过滤规则。例如:

<configuration name="ip_restrictions.conf" description="IP Address Restrictions">
  <network-lists>
    <network-list name="allowed_ips">
      <node type="allow" cidr="192.168.0.0/24"/>
    </network-list>
  </network-lists>
</configuration>

在上述示例中,我们创建了一个名为allowed_ips的网络列表,并允许CIDR为192.168.0.0/24的IP地址。

然后,在您想要应用IP限制的context(上下文)中添加以下代码来应用该网络列表:

<condition field="${sip_network_type}" expression="ipv4">
  <action application="set" data="sip_network_acl=${network_list(allowed_ips)}"/>
</condition>

这将使拥有允许的IP地址连接到该context。

  1. 配置录音

要保存录音文件,您需要在FreeSWITCH的配置文件中进行相应的设置。找到或创建一个合适的context(上下文),并添加以下代码:

<action application="record_session" data="/path/to/recordings/${uuid}.wav"/>

在上述代码中,将录音文件保存到/path/to/recordings目录下,并以通话的UUID作为文件名。

  1. 配置转接到callgw.dingtalk.com:6789

为了将通话转接到callgw.dingtalk.com:6789,您可以使用bridge或相关的Dialplan应用程序。根据您的需求选择合适的方法。

例如,如果您想要使用bridge应用程序将通话转接到该地址,可以添加以下代码:

<action application="bridge" data="{origination_caller_id_number=${caller_id_number}}sofia/gateway/callgw.dingtalk.com:6789"/>

这里使用了${caller_id_number}作为主叫号码变量。

  1. 在请求头中添加X-access-number和X-access-token

要在请求头中添加X-access-number=被叫号码X-access-token=XXXXX,您可以在Dialplan中使用SIP_HEADER应用程序。例如:

<action application="set" data="sip_h_X-access-number=${destination_number}"/>
<action application="set" data="sip_h_X-access-token=3e420ceaifd88fa6"/>

这将在呼叫发起时将请求头添加到SIP消息中。

  1. 生成录音文件和话单,并记录到MySQL数据库

为了生成录音文件和话单,您可以使用FreeSWITCH的事件处理程序(event handler)和Lua脚本。

通过配置event_socket.conf.xml文件,启用事件套接字,以便在通话结束时触发相应的事件。然后,可以编写一个Lua脚本来处理这些事件,并在其中生成录音文件和话单。

以下是一个示例Lua脚本:

-- 引入MySQL模块
local mysql = require("luasql.mysql")

-- 连接MySQL数据库
local env = mysql.mysql()
local conn = env:connect("freeswitch", "freeswitch", "password", "127.0.0.1")

-- 处理record_stop事件
function record_stop(event)
  local uuid = event:getHeader("Unique-ID")
  local filename = event:getHeader("Record-File-Path")
  local duration = event:getHeader("Record-Seconds")

  -- 将录音记录插入到MySQL表格中
  conn:execute(string.format([[INSERT INTO recordings(uuid, filename, duration) VALUES('%s', '%s', %d)]], uuid, filename, duration))
end

-- 注册事件处理程序
session:setHangupHook("record_stop")

-- 关闭数据库连接
conn:close()
env:close()

该脚本会在通话结束时触发record_stop事件,并从中获取唯一标识UUID、录音文件名和持续时间,并将其插入到MySQL数据库中。

需要确保您的FreeSWITCH已正确配置Lua脚本支持,并且已安装了相应的Lua库(如luasql.mysql)。

综上所述,这些是在FreeSWITCH中使用IP限制,保存录音并转接到callgw.dingtalk.com:6789以及生成录音文件和话单,最后记录到MySQL数据库的步骤。请根据您的具体需求和环境进行相应的配置。

posted @ 2023-06-14 11:34  孙同海  阅读(79)  评论(0编辑  收藏  举报