我们在主机 A 上运行一个 FreeSwitch 实例,该实例使用 SOFIA 模块向在主机 B 上运行的 3CX 实例拨打外拨电话。
除挂断外,一切工作正常:主机 A 发送的 BYE 数据包未被 3CX 主机接受,并出现 404 用户未知错误。
在第一次(工作)呼叫之后,由于线路被占用,因此无法发起任何呼叫,直到我们重新启动整个 freeswitch 服务。
网关配置如下:
<include>
<gateway name="default">
<param name="realm" value="<host B>:5059"/>
<param name="username" value="59"/>
<param name="password" value="<the password>"/>
<param name="register-transport" value="udp"/>
<param name="extension" value="59"/>
<param name="from-user" value="59"/>
<param name="expire-seconds" value="800"/>
<param name="register" value="true"/>
<param name="register-transport" value="udp"/>
<param name="context" value="public"/>
<param name="caller-id-in-from" value="false“/>
<param name="extension-in-contact" value="true"/>
<param name="cid-type" value="rpid"/>
</gateway>
</include>
授权适用于除 BYE 之外的所有其他程序包。我们还打开了 SIP 跟踪并验证了 Proxy-Athorization 标头是否设置正确:
BYE sip:<destination number>@<host B>:5059 SIP/2.0
Via: SIP/2.0/UDP <host A>:5059;rport;branch=z9hG4bKpB6QZ9aU643pH
Max-Forwards: 70
From: "pi" <sip:59@<host B>:5059>;tag=jXU3S8avD9tQH
To: <sip:<dest number>@<host B>:5059>;tag=4442ed0d
Call-ID: fac6951d-4ab5-123a-0d9b-dca632517e68
CSeq: 37449519 BYE
User-Agent: FreeSWITCH-mod_sofia/1.10.6-release-7-1ff9d0a60e~32bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY
Supported: timer, path, replaces
Proxy-Authorization: Digest username="59", realm="3CXPhoneSystem", nonce="414d535960cc5fda38:061e13fce3696c0ade88da4c548cab3a", algorithm=MD5, uri="sip:<dest number>@<host B>:5059", response="9d75bd5d59cc7b2111e005259d04aa65"
Reason: Q.850;cause=16;text="NORMAL_CLEARING"
Content-Length: 0
检查 3CX 端的 SIP 包,我们被告知 BYE 包根本无需获得授权即可运行。
因此我们在使用的配置文件中添加了以下设置:
<param name="auth-all-packets" value="false"/>
但 Sofia (或 Freeswitch?) 仍然授权 BYE 包。
有人能帮我们吗?太好了!
答案1
对于我们的场景,该问题可以在 3CX 端解决:
我们的扩展点已配置为“传真端点”。将其切换为“通用 voip 端点”后,一切都按预期运行。(不确定这里的 3CX 术语是否正确)