要在FreeSWITCH 对接钉钉
要在FreeSWITCH中使用IP限制并保存录音,并将通话转接到callgw.dingtalk.com:6789
,并在请求头中添加X-access-number=被叫号码
和X-access-token=XXXXX
,同时生成录音文件和话单,将话单记录到MySQL数据库中,您可以按以下步骤操作:
- 配置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。
- 配置录音
要保存录音文件,您需要在FreeSWITCH的配置文件中进行相应的设置。找到或创建一个合适的context(上下文),并添加以下代码:
<action application="record_session" data="/path/to/recordings/${uuid}.wav"/>
在上述代码中,将录音文件保存到/path/to/recordings
目录下,并以通话的UUID作为文件名。
- 配置转接到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}
作为主叫号码变量。
- 在请求头中添加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消息中。
- 生成录音文件和话单,并记录到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数据库的步骤。请根据您的具体需求和环境进行相应的配置。