SIP网关怎样拨打外部电话

简介: SIP网关怎样拨打外部电话

如果你在某个运营商拥有SIP账号,你就可以配置上拨打外部电话了。该SIP账号(或提供该账号的设备)在 FreeSWITCH 中称为SIP网关(Gateway)。添加一个网关只需要在 conf/sip_profiles/external/ 创建一个XML文件,名字可以随便起,如gw1.xml。


<gateway name="gw1">

   <param name="realm" value="SIP服务器地址,可以是IP或IP:端口号"/>

   <param name="username" value="SIP用户名"/>

   <param name="password" value="密码"/>

   <param name="register" value="true" />


如果你的SIP网关还需要其它参数,可以参阅同目录下的 example.xml,但一般来说上述参数就够了。你可以重启 FreeSWITCH,或者执行以下命令使用之生效。


FS> sofia profile external rescan reloadxml


然后显示一下状态:


FS> sofia status


如果显示 gateway gw1 的状态是 REGED ,则表明正确的注册到了网关上。你可以先用命令试一下网关是否工作正常:


FS> originate sofia/gateway/myDefaultGateway/015005600327 &echo()

以上命令会通过网关 gw1 呼叫号码 xxxxxx(可能是你的手机号),被叫号码接听电话后,FreeSWITCH 会执行 echo() 程序,你应该能听到自己的回音。


从某一分机上呼出


如果网关测试正常,你就可以配置从你的SIP软电话或portaudio呼出了。由于我们是把 FreeSWITCH 当作 PBX 用,我们需要选一个出局字冠。常见的 PBX 一般是内部拨小号,打外部电话就需要加拨 0 或先拨 9 。当然,这是你自己的交换机,你可以用任何你喜欢的数字(甚至是字母)。 继续修改拨号计划,创建新XML文件: conf/dialplan/default/call_out.xml :

 <extension name="call out">

   <condition field="destination_number" expression="^0(\d+)$">

     <action application="bridge" data="sofia/gateway/gw1/$1"/>

   

 

其中,(\d+)为正则表达式,匹配 0 后面的所有数字并存到变量 $1 中。然后通过 bridge 程序通过网关 gw1 打出该号码。当然,建立该XML后需要在Fs-Con中执行 reloadxml 使用之生效。

Authentication AND  Authorization

Authentication is the process of  identifying a user.

Authorization is the process of determining the level of access of a user.

Freeswitch 添加用户步骤:

1), \conf\directory\default 添加一个xml文件,拷贝其他作为参考。

2),修改\conf\dialplan\default.xml 找到 Local_Extension,修改正则表达式

<condition field="destination_number" expression="^(10[01][0-9]|1100)$">

使得新添加的用户立即生效,

Reloadxml

Freeswitch查看目前有哪些分机已经注册:

sofia status  profile internal reg

Freeswitch 拨打分机,当被叫分机不在线时,按键#号,可以跳过语音提示,直接留言。

用户如果需要听语音留言,可以拨号 4000, 按照语音提示输入 分机号和 密码,通过认证后即可收听语音留言。

配置Freeswitch的group,当用户拨打组的分机号时, 组内所有的分机都会ringing,

其中一个用户接听后,其他的用户都会stop ringing。同一个用户可以属于多个group

示例:\conf\dialplan\default.xml 配置信息;

  <extension name="group_dial_billing">

     <condition field="destination_number" expression="^2002$">

<action application="bridge" data="group/billing@${domain_name}"/>

     

Group的配置信息:\conf\directory\default.xml

     <group name="billing">

 <user id="1005" type="pointer"/>

 <user id="1006" type="pointer"/>

 <user id="1007" type="pointer"/>

 <user id="1008" type="pointer"/>

 <user id="1009" type="pointer"/>

     

重新加载外部SIP账户信息:

Sofia profile External restart ReloadXml    (该操作会中断所有正在进行的通话)

查看外部SIP账户注册状态:

Sofia Status

仅重新加载指定的外部SIP账户信息,而不是全部:

Sofia profile  rescan ReloadXML

dialplan 中可以使用的条件变量:condition

condition就是决定当然呼叫是否要在这个extension中处理的一个模式匹配标签。

语法:

<condition field="[{field_name}|variablename∣{variable_name}|variablename{api_func(api_args ${var_name})}]" expression="{expression}" break="[on-true|on-false|always|never]">

  <action application="app name" data="app arg"/>

  <anti-action application="app name" data="app arg"/>

condition>fileld和expression是必须的,break是可选的。

有一些内部变量可以用:

•context Why can we use the context as a field? Give us examples of usages please.

•rdnis Redirected Number, the directory number to which the call was last presented.

•destination_number Called Number, the number this call is trying to reach (within a given context)

•dialplan Name of the dialplan module that are used, the name is provided by each dialplan module. Example: XML

•caller_id_name Name of the caller (provided by the User Agent that has called us).

•caller_id_number Directory Number of the party who called (caller) -- can be masked (hidden)

•ani Automatic Number Identification, the number of the calling party (caller) -- cannot be masked

•aniii The type of device placing the call ANI2

•uuid Unique identifier&nb, sp;of the current call? (looks like a GUID)

•source Name of the FreeSWITCH module that received the call (e.g. PortAudio)

•chan_name Name of the current channel (Example: PortAudio/1234). Give us examples when this one can be used.

•network_addr IP address of the signaling source for a VoIP call.

•year Calendar year, 0-9999

•yday Day of year, 1-366

•mon Month, 1-12 (Jan = 1, etc.)

•mday Day of month, 1-31

•week Week of year, 1-53

•mweek Week of month, 1-6

•wday Day of week, 1-7 (Sun = 1, Mon = 2, etc.)

•hour Hour, 0-23

•minute Minute (of the hour), 0-59

•minute-of-day Minute of the day, (1-1440) (midnight = 1, 1am = 60, noon = 720, etc.)

除了上面的变量外,还可以使用自定义的变量variable,以及一些api函数{variable},以及一些api函数variableapi{api(args)}

这些变量可以在field及expression里。

condition是不能嵌套的,但可以将多个condition堆在一起,并设置break为on-false(默认值),这样的效果与嵌套一样。

示例1,利用cond API函数:

<condition field="{cond({my_var} > 12 ? YES : NO)}" expression="^YES$">

   <action application="log" data="INFO ${my_var} is indeed greater than 12"/>

   <anti-action application="log" data="INFO ${my_var} is not greater than 12"/>

condition>示例2, 嵌套效果:

<extension name="To PSTN">

 <condition field="fdnis" expression="9541231234"/>

 <condition field="destination_number" expression="(.*)">


相关文章
使用vos3000时sip O 口网关注册成对接网关作为 ivr 接入,主叫号码如何设置
在VOS3000系统中,将SIP终端作为IVR接入点涉及配置SIP网关指向IVR应用,注册SIP设备并设定含用户名和域名的SIP账户。主叫号码设置可在注册时通过 Caller-ID 头部或拨号计划完成。拨号规则用于控制主叫号码传递,例如根据来源自动调整。配置后需测试主叫号码及IVR接入。不同版本可能有差异,欢迎交流学习。
|
1月前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
145 1
|
7月前
|
负载均衡 应用服务中间件 API
微服务技术系列教程(25) - SpringCloud- 接口网关服务Zuul
微服务技术系列教程(25) - SpringCloud- 接口网关服务Zuul
78 0
|
1月前
|
缓存 安全 API
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
公司对外开放的OpenAPI-Server服务,作为核心内部系统与外部系统之间的重要通讯枢纽,每天处理数百万次的API调用、亿级别的消息推送以及TB/PB级别的数据同步。经过多年流量的持续增长,该服务体系依然稳固可靠,展现出强大的负载能力。
100 9
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
|
6月前
|
负载均衡 Cloud Native Java
【云原生】Spring Cloud Alibaba 之 Gateway 服务网关实战开发
【云原生】Spring Cloud Alibaba 之 Gateway 服务网关实战开发
811 0
|
1月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
181 0
|
2天前
|
监控 Java API
4.服务网关之Spring Cloud Gateway
4.服务网关之Spring Cloud Gateway
13 0
|
1月前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。