FreeSWITCH dialplan检查终端用户是否已为WebRTC注册到SIP

FreeSWITCH dialplan检查终端用户是否已为WebRTC注册到SIP,webrtc,sip,freeswitch,Webrtc,Sip,Freeswitch,我正试着和米祖一起使用。 如果被叫用户已注册到Freeswitch,则应将呼叫路由到该用户。否则,呼叫应路由到出站SIP服务器 问题是,我无法从Freeswitch拨号计划中确定用户当前是否已注册。默认拨号计划中有以下内容: <!-- If the user doesn't exist, forward to outbound SIP --> <extension name="check_user"> <condition field="${user_exi

我正试着和米祖一起使用。 如果被叫用户已注册到Freeswitch,则应将呼叫路由到该用户。否则,呼叫应路由到出站SIP服务器

问题是,我无法从Freeswitch拨号计划中确定用户当前是否已注册。默认拨号计划中有以下内容:

<!-- If the user doesn't exist, forward to outbound SIP -->
<extension name="check_user">
    <condition field="${user_exists(id ${destination_number} $${domain})}" expression="false">
        <action application="bridge" data="sofia/gateway/asterisk/${destination_number}"/>
    </condition>
</extension>

<!-- If the user is registered, forward the call to them -->
<extension name="check_user_registered">
    <condition field="${sofia_contact(profile/${destination_number}@$${domain})}" expression="(.+)">
        <action application="bridge" data="$1" />
    </condition>
</extension>

<!-- Otherwise forward to outbound SIP -->
<extension name="outbound">
    <condition field="destination_number" expression="^.*$">
        <action application="bridge" data="sofia/gateway/asterisk/${destination_number}"/>
    </condition>
</extension>

您知道从Freeswitch dialplan查询用户注册状态的可靠方法吗?

sofia\u contact
如果用户未注册,则返回字符串
error/user\u not\u registed
。在您的条件下,根据
+
正则表达式检查返回值。当然,错误字符串也会匹配


您需要一个与
^error
匹配的条件,然后定义操作和反操作。

sofia\u contact
如果用户未注册,则返回字符串
error/user\u not\u registed
。在您的条件下,根据
+
正则表达式检查返回值。当然,错误字符串也会匹配


您需要一个与
^error
匹配的条件,然后定义动作和反动作。

使用
sofia\u contact
了解被叫人是否已注册

例如:

  • sofia\u联系1001
    把这个还给我 索非亚/内部/高级督察:1001@myip_address:52573;冲洗度=a1b0a9cfddc6a8c3;传输=TCP

  • sofia\u联系1002
    错误/用户未注册


另一种选择是将注册用户存储到数据库中,并使用odbc查询获取结果并进行比较。(这将是一个绝妙的主意)

使用
sofia\u contact
来了解被叫人是否已注册

例如:

  • sofia\u联系1001
    把这个还给我 索非亚/内部/高级督察:1001@myip_address:52573;冲洗度=a1b0a9cfddc6a8c3;传输=TCP

  • sofia\u联系1002
    错误/用户未注册


另一种选择是将注册用户存储到数据库中,并使用odbc查询获取结果并进行比较。(这将是一个非常好的主意)

我已经使用odbc\u查询完成了,如果您愿意,我可以为您完成。回复:我正在尝试使用我的“检查用户注册”规则执行此操作,但没有按预期工作。如果用户实际上没有注册,也许你可以将该规则修改为不通过(现在,即使用户没有注册,规则也会通过)。最终,正如你所建议的那样,使用regexp解决了…也许这里的主要问题是我对regexp的了解不够。如果你愿意,我可以使用odbc_查询来完成。回复:我正在从我的“check\u user\u registered”规则,但未按预期工作。如果用户实际未注册,可能可以将该规则修复为不通过(现在,即使用户未注册,该规则也会通过).最终按照您的建议使用regexp解决了…可能这里的主要问题是我对regexp的了解不够也许我要求太多了,但是您能修改我的“check\u user\u registered”吗“要检查此错误字符串的拨号计划规则?我对regexp非常不熟悉。好吧,您需要学习regexp才能有效地使用FreeSWITCH。有大量的文档和教程,这并不是一个复杂的主题。另外,我实际上给了你上面匹配的字符串。也许我要求的太多了,但是你能修改我的“check\u user\u registered”拨号计划规则来检查这个错误字符串吗?我对regexp非常不熟悉。好吧,您需要学习regexp才能有效地使用FreeSWITCH。有大量的文档和教程,这并不是一个复杂的主题。我还给了你上面匹配的字符串。
Dialplan: sofia/internal/2233@81.12.74.77 Regex (PASS) [check_user_registered] ${sofia_contact(profile/${destination_number}@rtc.mizu-voip.com)}(error/user_not_registered) =~ /(.+)/ break=on-false
Dialplan: sofia/internal/2233@81.12.74.77 Action bridge(error/user_not_registered)
Freeswitch hangup with 480 Temporarily Unavailable / USER_NOT_REGISTERED