参考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