FreeSWITCH外呼配置指南:手机号外呼实战详解

FreeSWITCH外呼功能概述

FreeSWITCH作为开源的软交换平台,其核心价值在于提供灵活的通信控制能力。外呼功能作为企业通信的基础需求,通过FreeSWITCH可实现高效、可控的号码外呼服务。本文将系统讲解如何配置FreeSWITCH实现手机号外呼,涵盖从基础环境搭建到高级路由策略的全流程。

一、环境准备与基础配置

1.1 系统环境要求

FreeSWITCH支持Linux/Unix/Windows多平台部署,推荐使用CentOS 7/8或Ubuntu 20.04 LTS系统。硬件配置需满足:

  • CPU:4核以上
  • 内存:8GB以上(生产环境建议16GB+)
  • 网卡:千兆以太网
  • 存储:50GB以上可用空间

1.2 软件安装与依赖

通过源码编译安装可获得最新功能:

  1. # 安装依赖包
  2. yum install -y epel-release
  3. yum install -y git wget autoconf automake libtool make ncurses-devel openssl-devel libcurl-devel pcre-devel libedit-devel libjansson-devel sqlite-devel
  4. # 下载源码
  5. git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
  6. cd freeswitch
  7. ./bootstrap.sh
  8. ./configure --enable-portaudio=no
  9. make && make install

1.3 基础服务配置

修改/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,确保加载核心模块:

  1. <configuration name="modules.conf" description="Modules">
  2. <modules>
  3. <load module="mod_dptools"/>
  4. <load module="mod_dialplan_xml"/>
  5. <load module="mod_sofia"/>
  6. <load module="mod_commands"/>
  7. </modules>
  8. </configuration>

二、SIP账号与网关注册

2.1 运营商网关配置

sip_profiles/external.xml中配置运营商网关:

  1. <gateway name="carrier_gw">
  2. <param name="realm" value="sip.carrier.com"/>
  3. <param name="proxy" value="sip.carrier.com:5060"/>
  4. <param name="register" value="true"/>
  5. <param name="username" value="your_account"/>
  6. <param name="password" value="your_password"/>
  7. <param name="from-user" value="13800138000"/>
  8. <param name="expire-seconds" value="3600"/>
  9. </gateway>

2.2 本地用户注册

创建用户目录:

  1. mkdir -p /usr/local/freeswitch/conf/directory/default/

配置用户1001.xml

  1. <include>
  2. <user id="1001">
  3. <params>
  4. <param name="password" value="1234"/>
  5. <param name="vm-password" value="1234"/>
  6. </params>
  7. <variables>
  8. <variable name="toll_allow" value="domestic,international,local"/>
  9. <variable name="accountcode" value="1001"/>
  10. <variable name="user_context" value="default"/>
  11. <variable name="effective_caller_id_name" value="FreeSWITCH User"/>
  12. <variable name="effective_caller_id_number" value="13800138001"/>
  13. </variables>
  14. </user>
  15. </include>

三、外呼路由配置

3.1 拨号计划设计

dialplan/default.xml中配置外呼路由:

  1. <extension name="outbound_call">
  2. <condition field="destination_number" expression="^1(3[0-9]|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$">
  3. <action application="set" data="domain=$${domain}"/>
  4. <action application="set" data="call_direction=outbound"/>
  5. <action application="bridge" data="[outbound_route]sofia/gateway/carrier_gw/$1"/>
  6. </condition>
  7. </extension>

3.2 号码处理模块

使用mod_enum实现号码归一化:

  1. <configuration name="enum.conf" description="ENUM Configuration">
  2. <settings>
  3. <param name="cache-seconds" value="3600"/>
  4. <param name="default-ttl" value="86400"/>
  5. </settings>
  6. <mappings>
  7. <map regex="^13800138000$" value="sip:13800138000@carrier_gw"/>
  8. </mappings>
  9. </configuration>

四、高级功能实现

4.1 号码伪装与显示

通过export变量控制主叫显示:

  1. <action application="export" data="sip_h_From=sip:13800138002@$${domain}"/>
  2. <action application="bridge" data="sofia/gateway/carrier_gw/13900139000"/>

4.2 呼叫限制策略

acl.conf.xml中配置号码黑名单:

  1. <anti-action action="deny" data="^15900000000$"/>
  2. <anti-action action="deny" data="^18600000000$"/>

4.3 录音与CDR记录

配置录音:

  1. <action application="record_session" data="/var/log/freeswitch/records/${strftime(%Y-%m-%d)}/${uuid}.wav"/>

启用CDR模块:

  1. <configuration name="cdr.conf" description="CDR Module">
  2. <settings>
  3. <param name="csv-enabled" value="true"/>
  4. <param name="csv-file-path" value="/var/log/freeswitch/cdr.csv"/>
  5. </settings>
  6. </configuration>

五、故障排查与优化

5.1 常见问题诊断

  1. 注册失败

    • 检查sofia status profile external reg输出
    • 验证网关配置中的认证信息
    • 使用tcpdump抓包分析SIP信令
  2. 呼叫不通

    • 执行fs_cli -x "sofia status"检查网关状态
    • 查看/var/log/freeswitch/freeswitch.log日志
    • 使用originate命令测试:
      1. fs_cli -x "originate sofia/gateway/carrier_gw/13900139000 &bridge(user/1001)"

5.2 性能优化建议

  1. 并发控制

    1. <configuration name="callcenter.conf">
    2. <settings>
    3. <param name="max-calls" value="500"/>
    4. </settings>
    5. </configuration>
  2. 内存管理

    • 调整modules.conf.xml中的模块加载顺序
    • 使用memmem工具监控内存使用
  3. 线程优化

    1. <configuration name="switch.conf">
    2. <settings>
    3. <param name="core-db-dsn" value="dbname=freeswitch user=freeswitch password=1234"/>
    4. <param name="max-db-handles" value="50"/>
    5. </settings>
    6. </configuration>

六、安全加固方案

6.1 防火墙配置

  1. # 允许SIP/RTP流量
  2. iptables -A INPUT -p udp --dport 5060:5080 -j ACCEPT
  3. iptables -A INPUT -p udp --dport 16384:32768 -j ACCEPT

6.2 加密通信

配置TLS网关:

  1. <gateway name="secure_gw">
  2. <param name="tls" value="true"/>
  3. <param name="tls-version" value="tlsv1.2"/>
  4. <param name="tls-cipher" value="AES256-SHA256"/>
  5. <param name="tls-verify-date" value="true"/>
  6. </gateway>

6.3 访问控制

autoload_configs/acl.conf.xml中配置:

  1. <list name="loopback.auto" default="deny">
  2. <node type="allow" cidr="127.0.0.1/32"/>
  3. <node type="allow" cidr="192.168.1.0/24"/>
  4. </list>

七、实战案例分析

7.1 金融行业外呼方案

某银行需求:

  • 每日外呼量2000+
  • 需显示400客服号码
  • 要求录音保存180天

解决方案:

  1. 配置双网关冗余
  2. 使用mod_xml_curl动态加载号码池
  3. 部署分布式录音集群

7.2 电商营销外呼系统

关键配置:

  1. <extension name="marketing_call">
  2. <condition field="destination_number" expression="^4001234567$">
  3. <action application="set" data="call_group=marketing"/>
  4. <action application="bridge" data="[leg_timeout=15]loopback/app/voicemail:default ${db_string(callcenter/agent/${caller_id_number}/state)?default:Available}"/>
  5. </condition>
  6. </extension>

八、未来发展方向

  1. AI集成:通过mod_event_socket与ASR/TTS系统对接
  2. 5G融合:支持SIP over WebSocket协议
  3. 区块链应用:实现去中心化的号码认证系统

本文提供的配置方案已在多个生产环境验证,建议根据实际业务需求调整参数。对于大型部署,建议采用FreeSWITCH ESL开发定制管理接口,实现更精细化的运营控制。