Freeswitch学习笔记(三):配置

本文档详细介绍了Freeswitch的配置,包括默认配置的修改,CDR的存储方式、变量和处理,以及mod_cdr_csv和mod_xml_cdr模块的使用。此外,还探讨了录音功能,如声道变量、单腿和双腿录音的实现,以及会议Conference的相关配置和API应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考Configuration文档:

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Configuration/

1.默认配置

修改xml后reloadxml生效

快捷键F?

<cli-keybindings>
  <key name="1" value="help"/>
  <key name="2" value="status"/>
  <key name="3" value="show channels"/>
  <key name="4" value="show calls"/>
  <key name="5" value="sofia status"/>
  <key name="6" value="reloadxml"/>
  <key name="7" value="console loglevel 0"/>
  <key name="8" value="console loglevel 7"/>
  <key name="9" value="sofia status profile internal"/>
  <key name="10" value="sofia profile internal siptrace on"/>
  <key name="11" value="sofia profile internal siptrace off"/>
  <key name="12" value="version"/>
</cli-keybindings>

sofia loglevel设置

sofia loglevel all [0-9]

重载sofia(SIP模块)

reload mod_sofia

预设目录

方法:fs_cli下执行

eval $${base_dir}

docker方式安装的FreeSWITCH 用于某些文件的默认目录

base_dir
这定义了大多数其他目录设置的根目录
/usr

cache_dir
缓存目录
/var/cache/freeswitch

certs_dir
证书目录
/etc/freeswitch/tls

conf_dir
配置文件目录
/etc/freeswitch

db_dir
核心数据库目录
/var/lib/freeswitch/db

grammar_dir
语法目录
/usr/share/freeswitch/grammar

htdocs_dir
html网页或http api接口 文件目录
/usr/share/freeswitch/htdocs

log_dir
日志文件目录
/var/log/freeswitch

mod_dir
模块目录
/usr/lib/freeswitch/mod

recordings_dir
录音文件目录
/var/lib/freeswitch/recordings

run_dir
运行时目录
/var/run/freeswitch

script_dir
脚本目录
/usr/share/freeswitch/scripts

sounds_dir
声音文件目录
/usr/share/freeswitch/sounds

sound_prefix
词语的音频所在的目录前缀,以及默认情况下保存录音的位置。请参见mod_dptools:record、mod_dptools:record_session、mod_command 和 (FreeSWITCH API)suuid_record。
/usr/share/freeswitch/sounds/en/us/callie

storage_dir
/var/lib/freeswitch/storage

temp_dir
/tmp

core_uuid 
850415ed-7de8-4231-a319-46728bb6f0c3

switch_serial
c0a86364d6cc

local_mask_v4
此全局变量由 FreeSWITCH 核心动态设置,方法是在确定local_ip_v4时使用从底层操作系统接收的网络掩码。
255.255.255.0

zrtp_enabled
此全局变量由 FreeSWITCH 核心设置为 switch.conf.xml 中全局 rtp-enable-zrtp 设置的值。有关详细信息,请参阅 SIP TLS 页面。
true

hostname  此全局变量由 FreeSWITCH 核心动态设置,并设置为运行 FreeSWITCH 的服务器的主机名。不能通过设置来覆盖此变量的值。但是,如果更改服务器的主机名,则变量的值将更新。
dockerhub.local

local_ip_v4 和 local_ip_v6 string 这个全局变量由 FreeSWITCH 核心动态设置,通过向底层操作系统询问运行 FreeSWITCH 的服务器的 IP 地址。如果服务器有多个 IP 地址,则此地址将设置为操作系统返回的第一个 IP 地址。在默认配置中,有许多设置使用此全局变量。
您不能覆盖此全局变量的值,因为它将每分钟由 FreeSWITCH 核心重置一次。如果您的服务器有多个 IP 地址,并且您希望强制 FreeSWITCH 使用特定的 IP 地址,则可以创建一个force_local_ip_v4全局变量并将其设置为您喜欢的 IP 地址。您还必须将local_ip_v4变量设置为此IP地址,只需将local_ip_v4设置为使用force_local_ip_v4的值即可。ipv6同理

192.168.99.100
::1

2.CDR

参考CDR文档:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Configuration/CDR/

参考mod_cdr_csv文档:

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_cdr_csv_6587322/#legs

Call Detail Records呼叫详细记录,简称CDR,指的是每一次通话过程中记录的数据,CDR可能包含特定于每个呼叫会话的属性,并最终包含呼叫的每个leg(a,b,ab)
CDR包含发起呼叫和接收呼叫的电话号码、呼叫时间、呼叫持续时间和许多其他属性。

FreeSWITCH默认加载的模块是mod_cdr_cvs,mod_cdr_cvs模块提供的功能是把CDR写入本地的.cvs文件并插入数据库,这些csv文件以呼叫的分机号命名,
常规安装方式下,具体文件目录是/usr/local/freeswitch/log/cdr-csv
docker安装方式下,具体的文件目录是/var/log/freeswitch/cdr-csv/

root@93340caa8502:/etc/freeswitch# cd /var/log/freeswitch/cdr-csv/
1008.csv    Master.csv

举例CDR的CSV文件1008.csv

"1008","1008","1001","default","2023-01-17 02:50:31","2023-01-17 02:50:41","2023-01-17 02:50:42","11","1","NORMAL_CLEARING","14e4d428-8ac0-43bd-9cef-78b238c46008","","1008","PCMA","PCMA"

也可以使用mod_xml_cdr模块处理,默认存储在/usr/local/freeswitch/log/xml_cdr/
例如/usr/local/freeswitch/log/xml_cdr/a_80183ec8-d424-11e3-8fb2-65b6c3cdac7d.cdr.xml中的详细XML CDR示例

<?xml version="1.0"?>
<cdr core-uuid="b658d05e-c42c-11e3-bdcd-65b6c3cdac7d">
  <channel_data>
    <state>CS_REPORTING</state>
    <direction>inbound</direction>
    ...
  </channel_data>
  <variables>
    <direction>inbound</direction>
    <uuid>80183ec8-d424-11e3-8fb2-65b6c3cdac7d</uuid>
    <session_id>1600</session_id>
    <sip_from_user>8009</sip_from_user>
    <sip_from_uri>8009%40XX.XX.XXX.XXX</sip_from_uri>
    <sip_from_host>XX.XX.XXX.XXX</sip_from_host>
    <channel_name>sofia/external/8009%40XX.XX.XXX.XXX</channel_name>
    ...
  </variables>
  <app_log>
    ...
    <caller_profile>
      <username>8009</username>
      <dialplan>XML</dialplan>
      <caller_id_name>8009</caller_id_name>
      <caller_id_number>8009</caller_id_number>
      <callee_id_name></callee_id_name>
      <callee_id_number></callee_id_number>
      ...
    </caller_profile>
    <times>
      <created_time>1399273898421766</created_time>
      <profile_created_time>1399273898421766</profile_created_time>
      ...
    </times>
  </callflow>
</cdr>

CDR存储

Freeswitch下的CDR存储有多种方式

存储CDR的最好方式是将所有数据字段都写入磁盘或者RAM驱动器上的临时区域,然后编写脚本扫描该区域,以便将它们长期存储到数据库中。
这样的处理方式可以避免一种结果的发生:http或db服务器意外关闭时,不会导致Freeswitch语音调用线程的挂起。

警告:不要在dialplan或ESL脚本中编写CDR脚本,因为这将延迟语音线程的终止
原则是允许语音线程只处理语音;离线单独处理后端业务流程

有以下10种方式可以保存或者获取CDR信息

  • mod_cdr_csv:保存一个CSV文件,其中包含模板中指定的变量。
  • mod_cdr_mongodb:将详细的CDR数据保存到MongoDB数据库中,格式类似于mod_json_cdr。
  • mod_odbc_cdr :保存从调用到您选择的ODBC数据库的任何通道变量。
  • mod_cdr_pg_csv:Asterisk与PostgreSQL接口兼容的CDR模块。
  • mod_cdr_sqlite:使用模板中指定的变量直接保存到sqlite DB。
  • mod_json_cdr:保存到文件或post通道变量和callflow的JSON表示。它可以直接发布到CouchDB。
  • mod_xml_cdr:保存到文件或提交通道变量和调用流的XML表示。Xmlcdrd或JavaCDRLogger可以帮助您保存结果。
  • mod_radius_cdr: RADIUS CDR模块。
  • CDR via ESL: 通过ESL的CDR ,在ESL事件中检索CDR
  • tiny_cdr:来自github作者bougyman的https://github.com/rubyists/tiny%5Fcdr ,是Ruby脚本语言开发

常用的两种方式mod_cdr_csv和mod_xml_cdr

mod_cdr_csv配置文件

mod_cdr_csv的配置文件在/freeswitch/a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彼岸花@开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值