Using Bayonne2 SIP
From GNU Telephony
|
Introduction
GNU Bayonne2 is the telecommunications application server of the GNU project. It's a powerful software that make it easy to develop IVR applications through a simple scripting language. GNU Bayonne2 supports various telephony hardware (VoiceTronix, Dialogic and more) and, since version 1.x it supports also VoIP based on the GNU oSIP stack.
In this mini-HowTo we'll address a basic configuration using SIP driver.
I'll suggest to read VoIP HOWTO before begin.
Software Required
In my test envirnoment, I used the following software compiled on x86-32bit architecture:
For Bayonne
- Gentoo GNU-Linux with kernel 2.6.16
- GNU Bayonne 2 1.5.0
- GNU Common C++ 1.3.26
- GNU RTP Stack 1.3.7
- GNU ccAudio '2' 0.9.0
- GNU ccScript '3' 1.0.8
- GNU oSIP Stack 2.2.2
- eXosip2 Library 2.2.2
For SIP Proxy
For testing, you can use any generic softphone. For this article, we'll use CounterPath X-Lite that is avaiable for Linux, Microsoft Windows® and Mac OSX®. You can get your free copy here: http://www.xten.com/index.php?menu=download
Software Installation
The software is quite simple to install.
The first step is to compile and install GNU Bayonne2. To complete this job, You can follow this tutorial: http://wiki.gnutelephony.org/index.php/Howto_Debian_Sarge_Install.
The second step is to compile and install PartySIP. On GNU/Linux Gentoo system You can give this command:
$ ACCEPT_KEYWORDS="~x86" emerge partysip
On other Linux distros, you can compile PartySIP following the steps from: http://www.nongnu.org/partysip/FAQ-partysip.html#compilation5
Once all the software are installed we can review the configuration files.
Software Configuration
The first thing we'll configure is PartySIP. A short introducion to PartySIP from the PartySIP F.A.Q.: "Partysip is a SIP proxy server. A proxy server have to find routes for SIP requests. In addition to the standard routing rules, partysip can get the routes from additional plugins. Partysip can also start services when a dedicated plugin has been built for this service.".
So, PartySIP we'll register our SoftPhone and Bayonne scripts assignig them a "Phone Number": then it'll route SoftPhone calls to Bayonne.
PartySIP is quite simple to configure: you've to edit a single configuration file, usually located in /etc/partysip/partysip.conf. Here my partysip.conf:
# partysip.conf file
serverip = 10.0.1.116 <- replace with your server ip address servername = telserver <- replace with your server hostname serverport_udp = 5060 transport = udp plugins = udp syntax auth filter rgstrar ls_localdb ls_sfull plugins_config = udp syntax auth filter_internal rgstrar ls_localdb ls_sfull serverrealm = "telserver" <- replace with your hostname or realm authentication = on <syntax> allowed_schemes sip,sips </syntax> <filter_internal> dialingplan internal mode statefull </filter_internal> <filter_external> dialingplan external mode statefull </filter_external> <ls_sfull> record-route off </ls_sfull> <ls_localdb> mode sf_forking mode sf_sequential record-route off </ls_localdb> <userinfo> # <user> <sip:NAME@DOMAINNAME> <auth_login> <auth_passwd> user sip:200@telserver 200 200 <- replace with your servername user sip:dtmf_say@telserver 202 202<- replace with your servername </userinfo>
Here some other useful informations. In the test I've made, I noticed that Bayonne will register on the SIP Proxy the scripts using their names. This means that if in /usr/share/bayonne/scripts you have two sip-enabled scripts script1.scr and script2.scr, Bayonne will register as sip:script1@yourrealm and sip:script2@yourrealm.
For SIP-enabled scripts I mean scripts that contain a SIP registration command like this:
register.sip proxy=10.0.1.116 uri=sip:201@telserver \
userid=201 secret=201 timeout=3600
In PartySIP, you see that <userinfo> section. We put two registration, one for a script named 201.scr and the other for a script named dtmf_say.scr. You can put as many registration you need using the right syntax.
Ok! Now you can start your PartySIP Proxy Server. On Gentoo GNU/Linux you can launch it from init with this command:
$ rc-config start partysip
On other system, you can start PartySIP with your init script or simply from the command line:
$ partysip -f /etc/partysip/partysip.conf &
Other command line switch (for verbose debug information or logging file) are avaiable.
Now, we'll proceed to configure GNU Bayonne2. Before to begin, be sure to have a group bayonne and a user bayonne on your system and that the user bayonne have the rights to access audio devices on your system. Now, edit the following configuration files:
1) /etc/bayonne/server.conf
[server] user = bayonne group = bayonne language = en_us voice = en/deborah [engine] driver = sip
2) /etc/bayonne/driver.conf
[sip] inband = true dtmf = 101 interface = 10.0.1.116:5070 <- replace this with your server ip address ;rtp = 5074
In this way, we put bayonne listening on port 5070/udp because we installed, on the same machine, also PartySIP that listens on port 5060/udp. Two SIP Stacks on a single machine made easy :)
For our purpose, you've to put the following script in /usr/share/bayonne/scripts/dtmf_say.scr (replace on the first line "telserver" with your realm:
register.sip proxy=10.0.1.116 uri=sip:dtmf_say@telserver \
userid=202 secret=202 timeout=3600
clear %session.digits
play o k
goto ::mytest
program mytest
sleep 15
goto ::mytest
^dtmf
string.1 %keyp
collect %keyp count=1
slog "DTMF %keyp detected"
play &number %keyp
goto ::mytest
Ok, now you can start Bayonne with the command:
$ bayonne -vvv
Please, check on the console if some error occurs. In this case, check and re-check your configuration files for errors or difference from what you read above.
Remember that in Bayonne2 you can also start your scripts directly with the soundcard driver for debugging:
$ bayonne -vvv -d soundcard /path/to/your/script.scr
SoftPhone Configuration
We assume that you've already successfully installed X-Lite, that your soundcard is properly configured. The first thing we've to configure is our accounting informations for successfully login on the PartySIP Proxy.
From the Preferences dialog, go in System Settings->SIP Proxy and double-click on the [Default] entry and change the following parameters:
Enabled: Yes Display Name: 200 Username: 200 <- match user@realm in partysip <userinfo> Authorization User: 200 <- match auth_login in partysiysip <userinfo> Password: 200 <- match auth_passwd in partysip.conf <userinfo> section Domain/Realm: telserver <- change with your realm SIP Proxy: 10.0.1.116 <- change with the address of your server
Now the X-Lite should make a successfull login on the PartySIP Proxy. You can check the new status from X-Lite main window when it says "Logged In - Enter Phone Number. Your number is: 200".
Now, go again in the Preferences Dialog, and then in Advanced System Settings -> DTMF Settings and change the following parameters:
DTMF Force Send In Band: Yes DTMF Tone Length in Samples: 2720 DTMF Magic Number: 101
From Advanced System Settings -> Codec Settings -> g711u change the following parameters:
Enabled: Yes Magic Number: 0 Samples Per Frame: 160 DTMF Samples Per Frame: 160
From Advanced System Settings -> SIP Settings change the following parameter:
Register Proxy (s): 3600
The settings ends with a Phonebook entry. Open the Phonebook and click on New Entry item and insert the following parameters:
Name: dtmf_say@telserver <- replace to match your realm Phone number or SIP URL: sip:dtmf_say@10.0.1.116 <- ip address of server Proxy ID: telserver <- change to the realm of your proxy Speed No.: 1 <- number of the speed dial
Final Test
Ok, let's go with the test. Check that PartySIP and Bayonne are in execution.
From the numerk keypad of X-Lite, press the "1" key and then click on the green call button. You should hear the simple dtmf_say script running.

