我们将VoIP GSM网关Yeastar TG100泵送到PBX

绝大多数现成的IP-PBX都是为员工人数为10人或以上的公司设计的。实际上,在俄罗斯,有很多公司拥有2至5名员工,并且他们还需要组织电话通讯。现成的IP-PBX的功能对其来说是多余的,并且成本太高。您可以使用常规计算机和Asterisk建立自己的电话交换机。您可以连接到VoIP服务提供商并使用服务“ cloud PBX”。您可以采用另一种方法-拿一台已经预装了Asterisk的廉价设备,例如Yeastar TG100,然后稍微增加一下其功能。对于那些不喜欢简单方法的人,欢迎光临。



Yeastar TG100是用于一张SIM卡的VoIP GSM网关,通常用于使用SIP协议将蜂窝线路连接到IP-PBX。我们将尝试不将Yeastar TG100与IP-PBX一起使用。为什么我们选择GSM网关作为测试对象?许多公司在活动开始时就使用固定的手机号码与世界进行通信已不是什么秘密。在增长的过程中,通信需求增加了,但我也想保留旧的数字-从这个意义上讲,在计算机或虚拟IP-PBX上,使用VoIP GSM网关的选项看起来比Asterisk好。

为什么是Yeastar?首先,我们认为,这些是我们市场上质量最高的VoIP GSM网关。其次,这些网关提供了访问安装在其上的Asterisk并修改配置文件的能力(对此工程师应表示特别的感谢)。第三,制造商自己声称Yeastar VoIP GSM网关支持“用于注册IP电话的SIP服务器”,这常常会误导最终用户,他们认为他们可以将网关用作完整的IP-PBX。此类用户可能只对本文感兴趣。

最后,为什么我们选择最年轻的Yeastar TG100?这里的一切都很简单-因为我们在谈论最小的自动电话交换,所以我们选择了最便宜的网关。如果需要,可以使用TG200(用于两张SIM卡),TG400(用于四张)甚至TG800(用于八张)代替TG100,它们的设置不会发生根本变化。

我们想得到什么?


首先,我们将确定未来的IP-PBX应该具有的最小功能集。
  1. 对讲机 在网关上注册的用户的IP电话或软电话应能够拨打电话和转接电话
  2. 来电。来电应转到交互式语音菜单,该菜单将为呼叫者提供几个与公司员工联系的选项
  3. SIP-. GSM- – , , , VoIP-
  4. . – SIP GSM, , . – GSM-, – SIP

?


我们将尝试通过使用标准配置工具(即Web界面)的配置文件来最大限度地减少网关的配置。例如,使用它,我们可以创建将用户连接到IP电话网关所需的SIP帐户数量。转到“ 网关-VoIP线路”部分,然后单击“ 添加VoIP线路”



线路类型: VoIP帐户
类型: SIP
名称:任何名称
帐户:内部电话号码
密码:复杂密码

我们会根据需要多次重复执行此操作,以获取电话。不幸的是,即使创建了所有SIP帐户,内部通信也将无法正常工作,要启用该功能,我们将需要使用配置文件。

我们将Yeastar TG100连接到VoIP服务提供商,因为网络界面可提供所有可能。在同一部分的“ 网关-VoIP线路”中,再次单击“ 添加VoIP线路”,然后在“线路类型”字段中选择“ VoIP线路”。每个电信运营商都有自己的注册要求,但是,可用字段足以成功连接其中的大多数。



线路类型: VoIP线路的
:类型的SIP
名称:任意名称
主机/ IP:SIP服务器的IP地址或域名及其端口。
域: SIP服务器的IP地址或域名
用户:操作员发出的SIP ID
标识名:操作员发出的SIP ID
密码:操作员提供的密码
从(从“高级”选项卡):操作员发出的SIP ID

通过Web-创建交互式语音菜单该界面当然将不起作用。但是无论如何,对于他来说,您都需要语音问候,以便我们可以使用Web界面进行下载。在“ 系统-音频文件” 部分中单击“ 下载文件”。该文件必须为wav格式,并且大小不得超过1.8 Mb。允许以下编码:

gsm 6.10 8kHz,单声道,1Kb / s
律/律法8kHz,单声道,1Kb / s
pcm 8kHz,单声道,16Kb / s

这是Web界面终止的地方。我们将自行配置内部,传出和传入路由。

连接到Yeastar TG100


要进行连接,我们将使用SSH协议,该协议必须首先在网关上激活。在“ 系统”“网络设置”“局域网设置”部分中,启用“ 启用S​​SH”选项,保存并应用更改。



使用您喜欢的SSH客户端连接到网关。缺省情况下,连接端口为8022,登录名为root,密码为ys123456。通过连接,您将进入Linux OS的环境。

星号配置文件位于通常的位置-/ etc /星号,但是,您不能直接在其中进行任何更改,否则在Web界面中对设置进行任何应用后,配置文件中的所有设置都将丢失。要添加或更改Asterisk配置文件的设置,提供了一个特殊目录-/ persistent / custom-cfg。它包含gncustom.conf文件,其中包含所有星号配置文件的名称,您可以对其进行修改或向其中添加新的内容。

cat /persistent/custom-cfg/gncustom.conf :
[modifyfile]
/etc/asterisk/extensions.conf
/etc/asterisk/sip.conf
/etc/asterisk/users.conf
/etc/asterisk/iax.conf
/etc/asterisk/queues.conf
/etc/asterisk/features.conf
/etc/asterisk/voicemail.conf
/etc/asterisk/meetme.conf
/etc/asterisk/rc_org.conf
/etc/asterisk/rtp.conf
/etc/asterisk/http.conf
/etc/asterisk/musiconhold.conf
/etc/asterisk/followme.conf
/etc/asterisk/logger.conf
/etc/asterisk/manager.conf
/etc/asterisk/chan_dahdi.conf
/etc/asterisk/digital-channel.conf
[replacefile]
/etc/asterisk/dahdi-channels.conf

因此,[modifyfile]部分中的文件是允许对现有设置进行更改或添加的文件。[replacefile]部分中的文件-完全由您的设置替换的文件。
为了更改星号配置文件中的任何设置,您需要知道三个参数:
  1. 位于/ etc / asterisk文件夹中的Asterisk配置文件的名称
  2. 方括号[section]中指示的节名称,将在其中更改相应的选项
  3. 期权本身的名称

接下来,在/ persistent / custom-cfg目录中创建一个名为<name> _custom.conf格式的文件。其中,<name>是/ etc / asterisk目录中配置文件的名称,不以“ .conf”结尾。例如,如果要更改/etc/asterisk/users.conf文件,则具有更改的文件将称为users_custom.conf。带有更改内容的文件以及您要更改的原始文件中均带有方括号的部分,并且下面的行用等号后的新值更改了选项。一个例子:
[new-context]
parameter1=value1
parameter2=value2

如果在设置更改文件中指定的部分不在原始配置文件中,则将仅添加该部分。对配置文件进行更改后,必须应用它们。最简单的方法是在Web界面中-在“任何设置”部分中,单击“ 保存”,然后单击“ 应用”

内部通话


稍早些时候,我们使用Web界面创建了SIP帐户,分别是401、402和403。这些SIP设备的配置位于文件/etc/asterisk/users.conf中。每个设备使用其自己的拨号计划上下文-上下文参数。对于401,它是Voip-Account-401;对于402,它是Voip-Account-402;对于403,它是Voip-Account-403。
在设置计划文件/etc/asterisk/extensions.conf中,我们可以看到以下条目:
[Voip-Account-401] 
[Voip-Account-402] 
[Voip-Account-403] 

从本质上讲,这意味着我们创建的每个设备都在其自己且完全为空的拨号计划上下文中。这解释了以下事实:默认情况下,网关中的内部呼叫不起作用,必须对此进行修复。

  1. 让我们为拨号计划创建一个特殊的上下文,在该上下文中我们将处理来自SIP电话的拨出电话。原始的拨号计划文件称为extensions.conf-因此,在目录/ persistent / custom-cfg中创建一个名为extensions_custom.conf的文件,其内容如下:
    [from-internal]
    ;internal routes
    exten => _4XX,1,NoOp(Internal Call)
    exten => _4XX,n,Dial(${trunk-${EXTEN}},30,Ttr)
    exten => _4XX,n,Hangup()
    

    该条目的本质是,任何以数字4开头的三位数的呼叫都将使用网关的Web界面中先前创建的相应号码呼叫设备。
  2. 我们还需要允许我们的电话在拨打电话时使用此拨号计划上下文。为此,请在以下相同的extensions_custom.conf文件中添加以下行:
    [Voip-Account-401]	
    include => from-internal
    
    [Voip-Account-402]
    include => from-internal
    
    [Voip-Account-403]
    include => from-internal
    

  3. 使用网络界面应用更改
  4. 我们查看文件/etc/asterisk/extensions.conf,并确保我们所做的更改已出现
  5. 我们会进行实际检查-我们尝试从一部内部电话拨打另一部内部电话

来电


所有通过GSM线路和SIP中继线传入的呼叫,我们都将发送到具有以下结构的交互式语音菜单:
  1. 播放先前下载的带有语音问候的声音文件。我们上传的文件位于/ var / lib / asterisk / sounds / record文件夹中
  2. 我们正在等待订户拨打该号码。输入数字“ 1”时,呼叫号码为401的用户;输入数字“ 2”时,呼叫被发送到拨号组,电话401、402、403依次振铃
  3. 如果用户没有拨打任何电话,则呼叫也会转到同一个拨号组,但其中的电话不会依次响铃,而是同时响铃

要实现此功能,请将以下内容添加到extensions_custom.conf文件:

[arttel-ivr]                                                             
exten => _.,1,NoOp(Custom IVR by ArtTel)                                 
exten => _.,n,Set(CDR(userfield)=SIP_TRUNK->IP)                          
exten => _.,n,Answer()                                                   
exten => _.,n,Set(TIMEOUT(digit)=2)                                                 
exten => _.,n,Background(record/arttel_ivr_alaw) ;                                   
exten => _.,n,WaitExten(3) ; 3                                                             
                                                                                    
exten => t,1,NoOp(Goto by Timeout) ;   ,                                                   
exten => t,n,Macro(arttel-ringgroup,ringall,402-403-401,15,2) ;                              
exten => t,n,Hangup()                                                               
                                                                                    
exten => 1,1,NoOp(Goto by pressed 1)                                                
exten => 1,n,Dial(${trunk-401},30,T) ;  «1»,   401                                                
exten => 1,n,Hangup()                                                               
                                                                                    
exten => 2,1,NoOp(Goto by pressed 2)                                                
exten => 2,n,Macro(arttel-ringgroup,linear,402-403-401,15,2) ;  «2»,  402, 403  404                               
exten => 2,n,Hangup()

[macro-arttel-ringgroup]                                                            
;ARG1 - Type: linear, ringall                                                                                
;ARG2 - Numbers separated dash: 401-402-403                                         
;ARG3 - Time Dial for Dial app                                                      
;ARG4 - Repeat Count for linear                                                     
                                                                                    
exten => s,1,Set(RG_Type=${ARG1})                                                            
exten => s,n,Set(RG_Nums=${ARG2})                                                   
exten => s,n,NoOp(Macro RingGroup type: ${RG_Type} for numbers: $RG_Nums)           
exten => s,n,GotoIf($[ "${RG_Type}" = "linear" ]?linear,1:ringall,1)               
exten => s,n,Hangup()                                                               
                                                                                    
exten => ringall,1,Set(COUNT=1)                                                     
exten => ringall,n,Set(REPEAT_COUNT=1)                                               
exten => ringall,n,Set(Repeat=${ARG4})                                               
exten => ringall,n,Set(TimeDial=${ARG3})                                             
exten => ringall,n(loop),Set(RG_Dial=${RG_Dial}&${trunk-${CUT(RG_Nums,-,${COUNT})}})
exten => ringall,n,NoOp(RG_Dial=${RG_Dial})                                         
exten => ringall,n,Set(COUNT=$[${COUNT} + 1])                                       
exten => ringall,n,GotoIf(${CUT(RG_Nums,-,${COUNT})}?loop)                          
exten => ringall,n(repeat),Dial(${RG_Dial:1},${TimeDial},T)                                
exten => ringall,n,Set(REPEAT_COUNT=$[${REPEAT_COUNT} + 1])                          
exten => ringall,n,GotoIf($[ ${REPEAT_COUNT} <= ${Repeat} ]?repeat)                    
exten => ringall,n,Hangup()                                                         
                                                                                    
exten => linear,1,Set(COUNT=1)                                                      
exten => linear,n,Set(REPEAT_COUNT=1)                                               
exten => linear,n,Set(Repeat=${ARG4})                                               
exten => linear,n,Set(TimeDial=${ARG3})                                             
exten => linear,n(loop),Dial(${trunk-${CUT(RG_Nums,-,${COUNT})}},${TimeDial},T)    
exten => linear,n,Set(COUNT=$[${COUNT} + 1])                                        
exten => linear,n,GotoIf(${CUT(RG_Nums,-,${COUNT})}?loop)                           
exten => linear,n,Set(COUNT=1)                                                      
exten => linear,n,Set(REPEAT_COUNT=$[${REPEAT_COUNT} + 1])                          
exten => linear,n,GotoIf($[ ${REPEAT_COUNT} <= ${Repeat} ]?loop)                    
exten => linear,n,Hangup()

我们的语音问候语上下文已经创建,现在有必要从GSM通道和SIP中继发送所有来电。为此,请在/ persistent / custom-cfg文件夹中使用以下内容创建users_custom.conf文件:

[gsm_1]
context=arttel-ivr

[trunk-arttel_telecom]
context=arttel-ivr

我们保存并接受通过Web界面进行的更改。

拨出电话


我们要做的最后一件事是配置拨出呼叫的逻辑。她将是下一个:
  1. 呼叫从89 ...开始的所有手机号码将通过GSM频道发出
  2. 俄罗斯的电话,其号码由10个字符组成,以83 ...,84 ...或88 ...开头,我们将通过SIP提供商发出
  3. 从810开始拨打国际电话...我们还将通过GSM频道发布电话

为此,将以下内容添加到我们已经创建的extensions_custom.conf文件的[from-internal]部分中:

;outbound routes
;STRATEGY: 0 - default(first free), 1 - linear(linear with memories), 2- balance
exten => _89XX.,1,NoOp(Outbound dial to Mobile)
exten => _89XX.,n,Set(CDR(userfield)=IP->MOBILE)
exten => _89XX.,n,Set(STRATEGY=0)                                                                                                  
exten => _89XX.,n,Macro(trunkdial-failover-0.4,1,,${EXTEN:0},trunk-GSM1,)
exten => _89XX.,n,Hangup()
                                                                                             
exten => _8[348]XXXXXXXXX,1,NoOp(Outbound dial to Russia)
exten => _8[348]XXXXXXXXX,n,Set(CDR(userfield)=IP->SIP_TRUNK)
exten => _8[348]XXXXXXXXX,n,Set(STRATEGY=0)
exten => _8[348]XXXXXXXXX,n,Macro(trunkdial-failover-0.4,1,,${EXTEN:0},trunk-arttel_telecom,)
exten => _8[348]XXXXXXXXX,n,Hangup()
                                                                                    
exten => _810XX.,1,NoOp(Outbound dial to International)
exten => _810XX.,n,Set(CDR(userfield)=IP->MOBILE)
exten => _810XX.,n,Set(STRATEGY=0)
exten => _810XX.,n,Macro(trunkdial-failover-0.4,1,,${EXTEN:0},trunk-GSM1,) ; 1 trunk
exten => _810XX.,n,Hangup()

通过分机号码模式不难理解哪些规则负责哪个方向:_89XX。-手机号码,_8 [348] XXXXXXXXX-俄罗斯境内的电话,_810XX。-拨打国际电话。trunkdial-failover-0.4宏负责通过特定的中继发送呼叫。第一个参数指示用于拨出呼叫的线路数。最后一个参数列出可以通过其发出呼叫的中继。例如,如果我们使用的是四端口网关Yeastar TG400而不是单端口Yeastar TG100,则该行:
exten => _89XX.,n,Macro(trunkdial-failover-0.4,1,,${EXTEN:0},trunk-GSM1,)  

应替换为:
exten => _89XX.,n,Macro(trunkdial-failover-0.4,4,,${EXTEN:0},trunk-GSM1,trunk-GSM2,trunk-GSM3,trunk-GSM4,)

我们保存并应用所做的更改。

结论


由于进行了这些更改,我们获得了功能全面的解决方案,准备完全平静地为2至10人的办公室提供服务。是的,它不支持诸如录制和收听对话,呼叫寄存,电话会议,语音信箱等功能。但是,实际上,对于最小的公司,并不需要所有这些功能。但是该解决方案紧凑,功耗低并且支持GSM线路。如果您有时间,渴望和想象力,可以使用更多有趣的功能来补充Yeastar TG100 VoIP GSM网关

Source: https://habr.com/ru/post/zh-CN396481/


All Articles