配置FreeSWITCH+Elastic SIP Trunking遇No Route错误的问题求助
问题描述
通过Elastic SIP Trunking自定义配置FreeSWITCH处理呼叫,未使用mod_Signalwire,需实现多租户自定义路由。已成功创建Sofia配置文件和网关,两者状态均为Running且已注册,日志中能收到呼叫,但呼叫卡在拨号计划环节,出现错误:
switch_core_state_machine.c:312 No Route, Aborting
当前配置
Profile
<document type="freeswitch/xml"> <section name="configuration"> <configuration name="sofia.conf" description="sofia conf"> <profiles> <profile name="MY_PROFILE"> <aliases/> <gateways> <gateway name="MY_GATEWAY"> <param name="username" value="MY_USER"/> <param name="password" value="MY_PW"/> <param name="proxy" value="fjfhjhhhk.sip.signalwire.com"/> <param name="realm" value="ffjjhghjh.sip.signalwire.com"/> <param name="from-domain" value="bhjhkhkkj.sip.signalwire.com"/> <param name="register" value="true"/> <param name="sip-trace" value="no"/> <param name="sip-capture" value="no"/> <param name="context" value="public"/> <param name="extension" value="sip_uri"/> </gateway> </gateways> <domains name="all" alias="true" parse="true"/> <settings> <params name="ext-sip-ip" value="$${external_sip_ip}"/> <params name="ext-rtp-ip" value="$${external_rtp_ip}"/> <params name="sip-port" value="5060"/> <params name="auth-calls" value="true"/> </settings> </profile> </profiles> </configuration> </section> </document>
Directory
<document type="freeswitch/xml"> <section name="directory"> <domains> <domain name="ddsadaf.sip.signalwire.com"> <params> <param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})},${verto_contact(${dialed_user}@${dialed_domain})}"/> </params> <variables> <variable name="user_context" value="public"/> </variables> <groups> <group> <users> <user id="jssip"> <params> <param name="$${default_password}" value="Chits123"/> <param name="vm-password" value="MY_PASSWORD"/> </params> <variables> <variable name="toll_allow" value="domestic, international, local"/> <variable name="accountcode" value="jssip"/> <variable name="user_context" value="dsadasdsad.sip.signalwire.com"/> <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/> <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/> </variables> </user> </users> </group> </groups> </domain> </domains> </section> </document>
Dialplan
<document type="freeswitch/xml"> <section name="dialplan" description="Dial Plan For FreeSwitch"> <context name="public"> <extension name="sip_uri"> <condition field="destination_number" expression="^(MY_US_PHONE_NUMBER)$"> // ex 12345678901 - eleven US number with countr cde <action application="sleep" data="10000"/> <action application="bridge" data="sofia/gateway/GATEWAY_NAME/$1"/> <action application="answer"/> </condition> </extension> </context> </section> </document>
排查与修复步骤
1. 修复XML语法错误
XML不支持//格式的注释,当前拨号计划中的注释会破坏XML结构,导致拨号计划解析失败。将注释替换为合法的XML注释格式:
<!-- ex 12345678901 - 带国家码的11位美国号码 -->
2. 统一网关名称
拨号计划中bridge动作里的GATEWAY_NAME必须与Profile中配置的网关名称MY_GATEWAY完全一致,否则无法找到网关。修正后:
<action application="bridge" data="sofia/gateway/MY_GATEWAY/$1"/>
3. 调整拨号计划匹配规则
当前拨号计划仅匹配指定的MY_US_PHONE_NUMBER,如果呼入号码不匹配则会触发无路由错误。可以:
- 将
MY_US_PHONE_NUMBER替换为实际的SignalWire号码 - 添加通用匹配规则,处理所有E.164格式的呼入号码
修正后的拨号计划示例:
<document type="freeswitch/xml"> <section name="dialplan" description="Dial Plan For FreeSwitch"> <context name="public"> <extension name="sip_uri"> <!-- 匹配你的SignalWire实际号码 --> <condition field="destination_number" expression="^(12345678901)$"> <action application="answer"/> <action application="bridge" data="sofia/gateway/MY_GATEWAY/$1"/> </condition> </extension> <!-- 可选:添加通用规则处理所有数字号码呼入 --> <extension name="incoming_all"> <condition field="destination_number" expression="^\+?[0-9]+$"> <action application="answer"/> <action application="bridge" data="sofia/gateway/MY_GATEWAY/$1"/> </condition> </extension> </context> </section> </document>
4. 修正Directory中的context配置
Directory里用户的user_context值应为存在的拨号计划context名称(如public),而非域名,避免呼出时找不到路由:
<variable name="user_context" value="public"/>
5. 验证配置加载
执行以下命令重新加载配置并验证:
# 重新加载XML配置 fs_cli -x "reloadxml" # 查看public context下的拨号计划是否正确加载 fs_cli -x "dialplan show public" # 查看呼入呼叫的详细日志(开启debug级别) fs_cli -x "loglevel debug"
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

