用户如果成功安装好了Asterisk以后,已经获得了基本的配置知识以后,可以开始尝试打通第一个Asterisk电话。现在,我们通过一个最简单的配置环境来演示如何打通第一个Asterisk电话。
在asterisk的SIP呼叫中播放Hello World语音
测试要求
测试呼叫需要安装一些其他的辅助工具,此文档假设用户已经具备以下条件:
- 用户已经在公司内网安装好了一个SIP软电话,注意,此软电话必须和Asterisk的网络环境是同一网络环境,如果IP地址段不同,可能导致NAT问题。简单来说,至少这两个地址是可以互相ping通状态。以前SIP软电话不是很多,现在网络上有很多免费开源的SIP软电话,用户可以下载任意一个都能实现基本的电话呼叫。这里测试的软电话是Zoiper。
- 如果用户有购买的SIP物理电话,也可以直接和asterisk进行注册呼叫,也要确认,物理电话必须和Asterisk在同一子网中,全部无防火墙或者NAT问题。
- 当用户在安装Asterisk时,必须确保已经成功安装了SIP通道驱动,特别是最新的SIP通道驱动PJSIP。最新的Asterisk版本已经不再继续维护chan_sip,开始启用chan_pjsip。所以,用户一定要确保chan_pjsip是安装成功的。如果没有安装成功的话,用户需要从其他文章中检查或者通过官方文档来检查Installing pjproject 。因为在安装pjsip时,asterisk需要从pjsip官方网站下载pjsip,如果链接出现错误的话,可能会导致安装失败,因此用户必须检查这个安装步骤。或者参考中文网站:www.freepbx.org.cn的源代码安装方式。
配置所需基本文件
如果用户在Asterisk源代码路径下安装Asterisk的话,用户应该已经运行过命令 "make samples"。这个命令会自动生成一些asterisk的默认配置文件。必须运行此命令,否则用户系统不会生成默认配置文件。
如果用户没有在默认安装路径 /etc/asterisk/ 下找到默认配置文件的话,用户可以再通过源代码安装路径再次执行这个命令"make samples"来生成默认配置文件。注意,这个命令会覆盖以前生成的默认配置文件,用户执行此命令前提前备份自己的配置文件。备份文件,使用cp 命令来执行。
以下是几个需要使用的配置文件,用户需要重点去注意的。
- asterisk.conf
- modules.conf
- extensions.conf
- sip.conf 或 pjsip.conf(如果编译时使用的pjsip),最好选择两种通道驱动其中之一,或者直接使用pjsip通道。
用户可以直接使用默认的asterisk.conf 和modules.conf,我们仅需要修改extensions.conf文件和sip.conf 或者pjsip.conf。
用户需要首先执行以下命令,切换到配置文件的路径下:
cd /etc/asterisk
配置extensions.conf
配置前首先备份此文件,创建一个新文件:
mv extensions.conf extensions.sample vim extensions.conf
这里,编辑器使用的是vim,或者使用vi。编辑器取决于用户自己的喜好。
因为是一个非常简单的测试示例,因此,我们使用最简单的拨号规则。关于拨号规则配置用户可以参考其他的文档(公众号:asterisk-cn 有非常完整的介绍)来进行进一步学习。这里不再涉及太多细节。
修改拨号规则文件extensions.conf,按照以下示例进行修改:
[from-internal] exten = 100,1,Answer() same = n,Wait(1) same = n,Playback(hello-world) same = n,Hangup()
在以上示例中,电话终端如果拨打100号码时,会进入到asterisk系统中的这个拨号规则,然后通知Asterisk 使用命令 Answer (应答呼叫)呼叫,然后等待一秒钟(执行 Wait),然后对呼叫方播放一个语音文件 (Playback),这里的playback是一个系统的语音文件,安装在默认语音文件的安装路径,播放完语音文件后,对这个通道执行Hangup, 最后挂机。当然,如果用户熟悉了以上这些设置后,可以随便替换其他的语音文件来播放,比如IVR等。具体的高级设置功能,读者需要做进一步研究学习。
配置一个SIP通道的驱动程序
用户使用chan_sip或者chan_pjsip完全取决于用户自己的选择。当然,官方已经开始启用pjsip的模块,因此,毫无疑问,建议用户还是使用pjsip来进行测试。具体的分水岭版本提示如下:
- Asterisk 11 和以前的版本: chan_sip是基本选项。
- Asterisk 12,13,15,17,18等后期版本:建议用户使用chan_pjsip,但是,用户仍然可以选择使用chan_sip,但是官方已不再进行维护支持(除了安全问题以外)。
用户需要根据以下配置来配置呼叫测试。
配置 chan_sip
同样,用户还是需要备份自己的配置文件sip.conf。
在sip.conf 文件中添加一个用户帐户6001:
[general] context=default [6001] type=friend context=from-internal host=dynamic secret=unsecurepassword // 可以自己设置一个密码,用来通过SIP软电话或者其他物理终端注册SIP账号 disallow=all allow=ulaw
这是一个基本的配置文件,完全可以实现默认环境下asterisk的SIP呼叫。当然,如果修改了一些配置的话,用户需要根据其修改环境的要求做相应修改,例如支持了更多语音编码,例如,G.729等。另外,注意 "type=friend",这是大部分SIP端支持的配置,一般不用轻易修改,除非用户知道这些权限设置的作用。
配置chan_pjsip
用户也可以使用pjsip通道实现呼叫。用户还是需要备份自己的配置文件 pjsip.conf。
然后在配置文件pjsip.conf中添加以下内容:
[transport-udp] type=transport protocol=udp // 使用UDP。 bind=0.0.0.0 [6001] type=endpoint context=from-internal disallow=all allow=ulaw auth=6001 aors=6001 [6001] type=auth auth_type=userpass password=unsecurepassword // 可以自己设置一个密码,用来通过SIP软电话或者其他物理终端注册SIP账号 username=6001 [6001] type=aor max_contacts=1
配置SIP软电话或者物理终端
我们前面已经说过,用户可以使用任何一种SIP软电话来进行呼叫测试,这里我们使用Zoiper作为一个演示终端。
Zoiper发布了很多版本,用户可以访问其网站查看最新版本。首先启动你的软电话,然后登录配置界面配置SIP账号和密码。
配置SIP账号步骤:
- 打开Zoiper,点击设置。
- 点击"Add new SIP account"
- 输入账号6001,点击 OK
- 在Domain 中输入Asterisk的IP地址
- 在Username 中输入6001
- 在Password 栏输入SIP账号中的密码
- 在 Caller ID Name 输入一个自己想显示的名称,或者留空
- 点击 OK
用户根据自己的配置,对照以上示例检查。
启动 Asterisk
登录到linux系统环境中,如果用户还没有启动Asterisk的话,启动asterisk服务,使用的命令如下,这里的打印级别是(vvvvv),5个v。v越多输出的日志级别越高,日志会更丰富详细。更多关于打印信息的设置,用户可以查看logger.conf 配置文件。这里先不再介绍。
asterisk -cvvvvv
如果asterisk已经启动,用户也可以使用 -r 连接这个服务。如果asterisk启动失败的话,一般来说Asterisk会显示错误信息,用户需要根据其错误信息的具体内容排查问题,问题解决以后,再重新启动asterisk。确保Asterisk成功启动,才能开始呼叫测试。
asterisk -rx "core restart now" asterisk -rvvvvv
开始呼叫测试
用户现在可以通过软电话界面拨号进行测试。但是拨号测试前,必须确认SIP账号成功注册到了Asterisk端。如果注册失败的话,需要用户检查账号是否正确,防火墙是否关闭,或者其他安全问题。
确认注册成功以后,用户在软电话呼叫输入栏可以输入100,然后点击 Dial按钮。呼叫就会被执行,软电话会听到系统播放的hello world 语音。如果登录到Asterisk CLI 后台的话,用户可以看到以下log日志:
到此为止,用户就已经成功实现了第一个Asterisk电话呼叫测试,可以成功注册SIP电话,可以播放一个语音流程。更多关于asterisk的呼叫功能说明,用户需要根据此文档进行一步步配置说明。