blob: c2eefd6d1d26ebf3a480a2e1e8f6f3968973e8e0 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
<properties>
<title>VoIP and SIP Integration</title>
<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
</properties>
<body>
<section name="Not implemented">
<div class="bd-callout bd-callout-danger">
Please NOTE: this functionality is not yet implemented in 5.0.x
</div>
</section>
<section name="VoIP and SIP Integration">
<p>
There are multiple ways to integrate with VoIP and or SIP.
OpenMeetings does not provide out of the box a ready to run VoIP
integration / integration to cell phone or usual land lane.
The
nature of such integrations is that it depends heavily on the
infrastructure that you are using and where you would like to
integrate OpenMeetings into.
<br />
<br />
It also depends on a number of factors of which OpenMeetings is
impossible to set up for you, for example setting up your VoIP
server or provide you with a range of telephone numbers reserved for
conference calls in your national phone network.
Such an integration
project is likely to become a consulting job for a
telecommunications consultant.
<br />
<br />
To get help on the integration you can contact the
<a href="mailing-lists.html">mailing lists</a>
or for example somebody from the list of
<a href="commercial-support.html">commercial support</a>.
<br/><br/>
</p>
</section>
<section name="SIP-Transport Integration">
<p>You need Apache OpenMeetings <strong>version 4.0+</strong> to apply this guide!</p>
<p>You need Asterisk <strong>version 13+</strong> to apply this guide!</p>
<p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 16.04.</p>
</section>
<section name="Prerequisites">
<div>
Run the commands
<source>
<![CDATA[
sudo apt update && sudo apt upgrade
]]>
</source>
</div>
</section>
<section name="Building and setting up Asterisk">
<div>
Run the commands
<source>
<![CDATA[
sudo mkdir /usr/src/asterisk && cd /usr/src/asterisk
sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-13.17.0.tar.gz
sudo tar -xvzf asterisk-13.17.0.tar.gz
cd ./asterisk-13.17.0
sudo make clean
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuconfig
]]>
</source>
Make sure you have selected <tt>Add-ons -> res_config_mysql</tt>, Press F12 to save
<source>
<![CDATA[
sudo make
sudo make install
sudo make samples
sudo make config
sudo service asterisk start
]]>
</source>
</div>
</section>
<section name="Configure Asterisk">
<div>
Enable asterisk MySQL module:<br /><br />
Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
<strong>Add/uncomment the following lines</strong>
<source>
<![CDATA[
preload => res_config_mysql.so
]]>
</source>
</div><br />
<div>
Configure MySQL module:<br /><br />
Set valid data for MySQL in <tt>/etc/asterisk/res_config_mysql.conf</tt> :<br />
<strong>Example</strong>
<source>
<![CDATA[
[general]
dbhost = 127.0.0.1
dbname = openmeetings
dbuser = root
dbpass =
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock
dbcharset = utf8
requirements=warn
]]>
</source>
</div><br />
<div>
Modify <tt>/etc/asterisk/sip.conf</tt><br />
<strong>Add/uncomment the following line</strong>:<br />
<source>
<![CDATA[
videosupport=yes
rtcachefriends=yes
]]>
</source>
<strong>Increase maxexpiry value to 43200</strong>:<br />
<source>
<![CDATA[
maxexpiry=43200
]]>
</source>
<strong>Add user for the "SIP Transport"</strong>:<br />
<source>
<![CDATA[
[red5sip_user]
type=friend
secret=12345
disallow=all
allow=ulaw
allow=h263
host=dynamic
nat=force_rport,comedia
context=rooms-red5sip
]]>
</source>
</div><br />
<div>
Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
<source>
<![CDATA[
[settings]
sippeers => mysql,general,sipusers
]]>
</source>
</div><br />
<div>
Modify <tt>/etc/asterisk/extensions.conf</tt><br />
<strong>Add the following section</strong>:<br />
<source>
<![CDATA[
; *****************************************************
; The below dial plan is used to dial into a Openmeetings Conference room
; The first line DB_EXISTS(openmeetings/room/ does not belong to the openmeetings application but is the name of astDB containing the astDB family/key pair and values
; To Check if your astDB has been created do the following in a terminal window type the following:
; asterisk –rx “database show”
; If you do not receive an output with that resembles openmeetings/rooms/400## where “##” will equal the extension assigned when you created your room
; If you do not receive the above output check your parameters in /opt/om/webapps/openmeetings/WEB-INF/classes/applicationContext.xml
; Go back into the Administrator Panel and remove the PIN number in each room save the record with no PIN number and then re-enter the pin again resave the record.
; *****************************************************
[rooms]
exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)
exten => _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})
exten => _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)
exten => _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})
exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)
exten => _400X!,n,Hangup
exten => _400X!,n(notavail),Answer()
exten => _400X!,n,Playback(invalid)
exten => _400X!,n,Hangup
[rooms-originate]
exten => _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)
exten => _400X!,n,Hangup
[rooms-out]
; *****************************************************
; Extensions for outgoing calls from Openmeetings room.
; *****************************************************
[rooms-red5sip]
exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)
exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)
exten => _400X!,n(notavail),Hangup
]]>
</source>
</div><br />
<div>
Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
<strong>Add/Modify the following secions</strong>:<br />
<source>
<![CDATA[
[general]
[red5sip_user]
type=user
marked=yes
dsp_drop_silence=yes
denoise=true
[sip_user]
type=user
end_marked=yes
wait_marked=yes
music_on_hold_when_empty=yes
dsp_drop_silence=yes
denoise=true
[default_bridge]
type=bridge
video_mode=follow_talker
]]>
</source>
</div><br />
<div>
To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
<strong>Add/Modify the following sections</strong>:<br />
<source>
<![CDATA[
[general]
enabled = yes
webenabled = no
port = 5038
bindaddr = 127.0.0.1
[openmeetings]
secret = 12345
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = all
write = all
]]>
</source>
</div><br />
<div>
Update OpenMeetings with credentials for Asterisk manager.
Modify <tt>/opt/om/webapps/openmeetings/WEB-INF/classes/applicationContext.xml</tt><br />
find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao"&gt;</strong>
uncomment its parameters and set it to your custom values.<br/>
set value for <tt>uid</tt> property to unique secret value (can be generated here <a href="https://www.uuidtools.com">https://www.uuidtools.com</a>)
and sync it with <tt>settings.properties</tt> of red5sip (see below)
<p style="font-size: larger; color: blue;">
IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
otherwise all SIP related room information will be lost
</p>
</div><br />
<div>
Restart asterisk:
<source>
<![CDATA[
service asterisk restart
]]>
</source>
</div><br />
</section>
<section name="Setup red5sip transport">
<ul>
<li>Download red5sip from <tt>https://github.com/openmeetings/red5sip</tt>
<source>
<![CDATA[
git clone https://github.com/openmeetings/red5sip.git
]]>
</source>
</li>
<li>Build with Apache Maven
<source>
<![CDATA[
cd red5sip
mvn clean package
]]>
</source>
</li>
<li>All necessary files will be available in <tt>target</tt> folder, copy/move it to /opt/red5sip/</li>
<li>Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
<source>
<![CDATA[
red5.host=127.0.0.1 # red5 server address
om.context=openmeetings # Openmeetings context
red5.codec=asao
red5.codec.rate=22 # should correlate with mic setting in Admin->Config `flash.mic.rate`
sip.obproxy=127.0.0.1 # asterisk adderss
sip.phone=red5sip_user # sip phone number
sip.authid=red5sip_user # sip auth id
sip.secret=12345 # sip password
sip.realm=asterisk # sip realm
sip.proxy=127.0.0.1 # address of sip proxy
rooms.forceStart=no # TBD
uid=87dddad4-9ca5-475b-860f-2e0825d02b76 #can be generated here: https://www.uuidtools.com/
rooms=1 # TBD (not in use)
]]>
</source>
</li>
<li>Set correct permissions on red5sip files:
<source>
<![CDATA[
sudo chown -R nobody:nogroup /opt/red5sip
]]>
</source>
</li>
<li>Add red5sip to autostart:
<source>
<![CDATA[
sudo cp /opt/red5sip/red5sip /etc/init.d/
sudo chmod a+x /etc/init.d/red5sip
sudo update-rc.d red5sip defaults
]]>
</source>
</li>
<li>Start openmeetings
<source>
<![CDATA[
service red5 start
]]>
</source>
</li>
<li>
Enable <tt>SIP</tt> in openmeetings: <br/>
<tt>Administration->Configuration->red5sip.enable == yes</tt>
</li>
<li>
Enable SIP for particular room(s): <br/>
<tt>Administration->Conference rooms->Room->Enable SIP transport in the room == checked</tt><br/>
(SIP number will be assigned to room if everything is OK)
</li>
<li>Start red5sip
<source>
<![CDATA[
service red5sip start
]]>
</source>
</li>
</ul>
</section>
</body>
</document>