Asterisk : 打通第一个电话,播放Hello world 语音

用户如果成功安装好了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账号步骤:

  1. 打开Zoiper,点击设置。
  2. 点击"Add new SIP account"
  3. 输入账号6001,点击 OK
  4. Domain 中输入Asterisk的IP地址
  5. Username 中输入6001
  6. Password 栏输入SIP账号中的密码
  7. 在 Caller ID Name 输入一个自己想显示的名称,或者留空
  8. 点击 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的呼叫功能说明,用户需要根据此文档进行一步步配置说明。