FreeSWITCH配置外呼全攻略:从基础到进阶
一、外呼配置核心概念解析
FreeSWITCH的外呼功能本质是通过SIP协议与运营商网关或第三方SIP中继建立连接,实现号码拨出与媒体流传输。其核心组件包括:
- SIP Profile:定义SIP协议参数(如端口、编码格式),通常使用
internal(内部分机)和external(外部中继)两种配置 - 网关配置:指定运营商提供的SIP服务器地址、认证信息及编码参数
- 拨号计划(Dialplan):定义号码路由规则,使用正则表达式匹配被叫号码并触发外呼动作
- ACL控制:通过IP白名单限制可发起外呼的源地址
典型外呼流程:分机发起呼叫→SIP Profile接收请求→拨号计划匹配路由→通过网关转发至PSTN网络→返回通话状态。
二、基础配置四步法
1. 网关配置
在autoload_configs/sip_profiles/external.xml中添加网关定义:
<gateway name="carrier_gateway"><param name="proxy" value="sip.carrier.com:5060"/><param name="register" value="true"/><param name="username" value="your_account"/><param name="password" value="your_pass"/><param name="realm" value="carrier.com"/><param name="from-user" value="13800000000"/><variables><variable name="caller_id_number" value="13800000000"/></variables></gateway>
关键参数说明:
register:是否向网关注册(动态IP需设为true)from-user:显示的主叫号码(需与运营商备案一致)caller_id_number:强制覆盖的主叫号码(用于号码伪装)
2. 拨号计划设计
在dialplan/default.xml中添加外呼路由规则:
<extension name="outbound_call"><condition field="destination_number" expression="^9(1\d{10})$"><action application="set" data="effective_caller_id_number=13800000000"/><action application="bridge" data="[outbound_route]sofia/gateway/carrier_gateway/$1"/></condition></extension>
正则表达式解析:
^9:匹配前缀9(可选,用于区分内外线)(1\d{10}):捕获11位手机号码$1:引用捕获组作为被叫号码
3. ACL权限控制
在autoload_configs/acl.conf.xml中配置:
<list name="outbound_allow" default="deny"><node type="allow" cidr="192.168.1.0/24"/></list>
通过fs_cli执行reloadacl生效,限制仅内网IP可发起外呼。
4. 编码格式优化
在网关配置中添加:
<param name="codec-prefs" value="PCMU,PCMA,G729,OPUS"/><param name="inbound-codec-prefs" value="PCMU,PCMA"/>
建议优先使用G.711(PCMU/PCMA)保证音质,G.729用于带宽受限场景。
三、进阶配置技巧
1. 动态路由选择
通过Lua脚本实现根据被叫号码选择最优网关:
local number = argv[1]local gatewayif string.sub(number, 1, 2) == "01" thengateway = "carrier_gateway_beijing"elsegateway = "carrier_gateway_shanghai"endfreeswitch.consoleLog("INFO", "Selecting gateway: " .. gateway .. "\n")session:execute("bridge", "sofia/gateway/" .. gateway .. "/" .. number)
2. 呼叫限制策略
在拨号计划中添加计费限制:
<extension name="limited_call"><condition field="${limit_db}" expression="^user/(\d+)$"><action application="set" data="limit_database=calls"/><action application="limit" data="execute !user_$1 !outbound 1800"/></condition></extension>
该配置限制每个用户每日外呼时长不超过1800秒。
3. 失败重试机制
在网关配置中添加:
<param name="fail-route" value="fallback_gateway"/><param name="retry-seconds" value="30"/><param name="max-retries" value="3"/>
当主网关故障时自动切换至备用网关。
四、常见问题排查
1. 407 Proxy Authentication Required
- 原因:网关认证失败
- 解决方案:
- 检查
username/password参数 - 确认
realm与运营商要求一致 - 使用
sofia profile external siptrace on抓包分析
- 检查
2. 486 Busy Here
- 原因:被叫忙或号码错误
- 解决方案:
- 检查被叫号码格式
- 在拨号计划中添加
^9(1\d{10})$严格匹配 - 启用
<param name="debug" value="9"/>查看详细日志
3. 单向语音问题
- 原因:NAT穿透失败或编码不匹配
- 解决方案:
- 网关侧配置
ext-rtp-ip和ext-sip-ip为公网IP - 确认双方支持相同编码
- 关闭SIP ALG功能(路由器设置)
- 网关侧配置
五、性能优化建议
-
连接池管理:对高频外呼场景,在网关配置中添加:
<param name="contact-params" value="transport=udp;expire=3600"/><param name="register-ttl" value="3600"/>
减少重复注册开销
-
媒体处理优化:
- 禁用视频支持:
<param name="disable-video" value="true"/> - 启用Jitter Buffer:
<param name="jitterbuffer-msec" value="20"/>
- 禁用视频支持:
-
监控告警:
fs_cli -x "show channels" | grep OUTBOUND_fs_cli -x "sofia status profile external reg"
设置cron任务定期检查注册状态
通过系统化的配置管理,FreeSWITCH可实现稳定高效的外呼服务。建议配置完成后使用sngrep工具监控SIP信令流程,确保各环节正常通信。对于企业级部署,建议结合FusionPBX等管理界面简化运维操作。