• Freeswitch学习笔记(三):配置


    参考Configuration文档:

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

    1.默认配置

    修改xml后reloadxml生效

    快捷键F?

    
      
      
      
      
      
      
      
      
      
      
      
      
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    sofia loglevel设置

    sofia loglevel all [0-9]
    
    • 1

    重载sofia(SIP模块)

    reload mod_sofia
    
    • 1

    预设目录

    方法:fs_cli下执行

    eval $${base_dir}
    
    • 1

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    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
    
    • 1
    • 2

    举例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"
    
    • 1

    也可以使用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示例

    
    
      
        CS_REPORTING
        inbound
        ...
      
      
        inbound
        80183ec8-d424-11e3-8fb2-65b6c3cdac7d
        1600
        8009
        8009%40XX.XX.XXX.XXX
        XX.XX.XXX.XXX
        sofia/external/8009%40XX.XX.XXX.XXX
        ...
      
      
        ...
        
          8009
          XML
          8009
          8009
          
          
          ...
        
        
          1399273898421766
          1399273898421766
          ...
        
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    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/autoload_configs/cdr_csv.conf.xml
    默认情况下,它只记录a-leg, 要把完整的CDR记录下来,需要把legs设为ab

    
    
      
      CSV文件将写入的目录
      默认值:/log/cdr-csv(或/var/log/freeswitch/)
      该值可以被cdr_csv_base通道变量覆盖。