将Openfire XMPP聊天服务器与Asterisk PBX集成

时间:2020-02-23 14:30:56  来源:igfitidea点击:

在成功安装Asterisk PBX服务器和安装Openfire XMPP Chat服务器之后,是时候将两者集成在一起了,这样我们的Chat服务器就可以在Asterisk构建的VOIP基础架构中使用了。

前提条件已安装Asterisk PBX服务器已安装Openfire XMPP服务器Asterisk和Openfire已联网,以便它们都能成功通信.Linux的基本知识和文件编辑已编译res_xmpp.so和res_jabber.so Asterisk模块。

首先安装Asterisk和Openfire

安装Openfire XMPP聊天服务器:

  • 有关如何在CentOS 7上安装Openfire XMPP的完整指南

  • 在Ubuntu 18.04/Ubuntu16.04上安装Openfire XMPP聊天服务器

Asterisk PBX的安装:

  • 如何在CentOS 8/RHEL 8上安装Asterisk

  • 在Ubuntu上安装Asterisk

安装完Asterisk和Openfire之后,启动Openfire并登录到Web配置界面。使用ip 127.0.0.1. 如果我们在主机上安装了Openfire,并且在远程系统或者虚拟机上安装了Openfire服务器的IP地址。

http://127.0.0.1:9090
http://your_ip_address:9090

使用在安装过程中配置的用户名和密码登录。在"菜单"部分,转到"插件>>可用插件",然后搜索名为Asterisk-IM和SIP电话插件的插件。通过单击插件名称部分右上角的+(加号)来安装插件。如果我们在"可用插件"子菜单下似乎找不到上述插件,则可以手动下载插件并将其放在Openfire插件目录中。
在Openfire XMPP服务器上执行以下操作。

输入root密码,然后

su 
cd /opt/openfire/plugins/
wget http://www.igniterealtime.org/projects/openfire/plugins/sip.jar
wget http://suse.mes.edu.cu/Utiles/Jabber/Openfire-3.8.x/Plugins/2013/asterisk-im.jar

为了让Openfire能够识别添加的插件,请使用以下命令重新启动它:

sudo  service openfire restart

重新启动Openfire之后,我们应该在openfire仪表板菜单上看到Asterisk-IM菜单。单击它进行配置。在Asterisk-IM>常规设置下,确保已启用Asteris-IM插件。
在配置电话管理器上,添加Asterisk上下文,我的名为test。如果Asterisk Server中已经配置了上下文,请在此处添加它。如果我们没有任何上下文,请使用test并在以后添加它。

现在该添加Asterisk Server了。只需单击"常规"设置下的"添加服务器"选项即可。然后提供以下信息
服务器名称:星号服务器的别名。可以是任何名称
服务器IP:Asterisk服务器的IP地址
端口:用于连接到Asterisk服务器的连接端口,默认为5038
用户名:将连接到星号管理器的用户名。下一步,将其添加到Asterisk manager.conf文件中。保存配置。
密码:将用于连接到Asterisk PBX服务器的用户密码。
有关我的配置,请参见下面的屏幕截图。 >转到Asterisk Server,然后将上一步中指定的用户添加到/etc/asterisk/manager.conf文件中。

启动Asterisk PBX服务器,然后:

su 
nano /etc/asterisk/manager.conf
nano /etc/asterisk/manager.conf

确保常规部分具有以下配置选项。

[general] 
enabled = yes 
webenabled = yes 
port = 5038; This is the Asterisk AMI Port number
httptimeout = 120
bindaddr = 0.0.0.0 
allowmultiplelogin = yes 
displayconnects = yes 
timestampevents = yes

添加我们在中指定的用户和密码。

[openfire] 
secret =password-that-you'll-set-on-next-step
displayconnects = yes 
read = system, call, log, verbose, agent, user, config, DTMF,reporting
write = system, call, agent, user, config, comman, reporting

添加将连接到Asterisk Server的用户,转到"用户和组",然后添加用户。
用户名:openfire
名称:开火
密码:openfire

重新启动星号。

service asterisk restart

或者

/etc/init.d/asterisk reload

让我们在Asterisk上创建上下文测试。

nano /etc/asterisk/extensions.conf

转到文件末尾并添加以下行。

[test] 
exten => _XXX,1,Answer
exten => _XXX,n,No0p ( This-is-a-sample-context) 
exten => _XXX,n,Dial(SIP/${EXTEN},10,r)
exten => _XXX,n,Hangup

_XXX:这是一种模式匹配,表示具有三位数的任何扩展名。
${EXTEN}是一个变量,保留拨打的分机号。

添加要映射到XMPP聊天帐户的SIP用户。

 nano /etc/asterisk/sip.conf

在常规部分添加以下行:

callevents = yes

然后在文件末尾添加以下行。

[101] ; Account name
context=test ; default context for incoming calls
type=friend ;Access type
secret=password ; a secure password for this device 
usernam=kim
nat=no ;Disabled NAT for LAN
bindport=5060 ; UDP port for Asterisk
disallow=all ;Disallow all Call Codecs
allow=ulaw
language=en
host=dynamic ;use DHCP to get ip address
qualify=yes 
allowguest=no ; disable unauthenticated calls
dtmfmode=auto ; accept touch-tones from the devices, negotiated automatically

[102] ; Account name
context=test ; default context for incoming calls
type=friend ; Access type
secret=password ; a secure password for this device 
username=val
nat=no ;Disabled NAT for LAN
bindport=5060 ; UDP port for Asterisk
disallow=all ;Disallow all Call Codecs
allow= ulaw
language=en
host=dynamic ; use DHCP to get ip address
qualify=yes 
allowguest=no ; disable unauthenticated calls
dtmfmode=auto ; accept touch-tones from the devices, negotiated automatically

现在让我们回到Openfire并添加用户以映射到我们添加的SIP帐户。我们将配置:
用户名:用户名
姓名:全名
电子邮件:电子邮件地址

在Asterisk-IM >>电话映射>>添加用户/星号电话映射下,指定:*用户名:jose *设备:SIP/101 *分机:101呼叫者ID:jose主要:是

保存设置,我们已成功完成配置。

在开始向XMPP好友发送消息之前,我们需要连接到启用XMPP的服务器。将以下配置添加到xmpp.conf文件。

 nano /etc/asterisk/xmpp.conf

加:

[asterisk]
type=client
serverhost=192.168.1.105 ; ip addresss of XMPP server(Openfire)
theitroad@localhost 
secret=openfire
priority=1
usetls=yes
port=5222
usesasl=yes
status=available 
statusmessage="Asterisk Server"
endtodialplan=yes
context=from_xmpp
keepalive=yes

要安装res_xmpp,我们需要iksemel开发库。如果安装了OpenSSL开发库,则res_xmpp还将利用该库进行安全连接。首先,安装iksemel和OpenSSL库。
对于基于Ubuntu和Debian的系统:

sudo apt-get install libiksemel-dev libssl-dev

对于CentOS 7和RedHat Bases系统:

sudo yum install iksemel-devel openssl-devel

重新启动Asterisk服务器,然后如下安装res_xmpp。

安装res_xmpp
安装依赖项后,我们需要在Asterisk源代码中运行./configure并进行menuselect。然后进入"资源模块"菜单,并确保启用了res_xmpp。之后,运行make install获得新模块。

cd asterisk-source-directory
./configure
make menuselect

然后进入"资源模块"菜单,并确保启用了res_xmpp。之后,进行安装。

make install

测试。

测试以确认Sip用户已成功添加到星号

service asterisk restart
asterisk -rvvvvvv 
sip show peers

在Asterisk CLI类型上测试以确认Asterisk和Openfire XMPP服务器正在通信:

manager reload
manager show connected

现在,我们可以安装Sparkweb,它是针对企业和组织而优化的开源,基于Web的IM客户端以及Spark IM客户端。我们将能够通过我们添加到Asterisk的SIP帐户接听电话。