Asterisk Jabber

Jabber is a common name for XMPP-based instant-messaged and communication.

Native jabber support in Asterisk

The Jabber module in Asterisk (res_jabber) is available starting from the 1.4 series. Therefore, you can connect Asterisk as a client (or component) to your Jabber server after you've upgraded to 1.4.

Example 1

Here is a macro that takes a look at the user’s presence and routes the call accordingly : if he is online or chatty the call goes to his desk phone and alerts him over IM - otherwise it goes his mobile phone.



[macro-reach_user_with_presence]
; ${ARG1} is a destination such as SIP/jml-senecio
; ${ARG2} is a jabber address such as jim@jabber.grabeuh.com
; ${ARG3} is a destination such as SIP/whatever
exten => s,1,jabberstatus(asterisk,${ARG2},STATUS)
;presence in will be 1-6.
;In order : Online, Chatty, Away, XAway, DND, Offline
;If not in roster variable will = 7 
exten => s,2,gotoif($[$[${STATUS}]<3]?available:unavailable)
;GotoIf(condition?label_if_true:label_if_false) 
exten => s,3(available),jabbersend(asterisk,${ARG2},"Call from ${CALLERID(name)} at number ${CALLERID(num)} on ${STRFTIME(,GMT-1,%A %B %d %G at %l:%M:%S %p)}")
exten => s,4,Dial(${ARG1})
exten => s,5(unavailable),Dial(${ARG3})



Since we have declared a macro, we have to call it in the context of our choice and assign the relevant values to the macro’s variables:



[whatever_context]
; ${ARG1} is the destination when at desk such as SIP/jim-senecio
; ${ARG2} is a jabber address used at desk such as jim@jabber.grabeuh.com
; ${ARG3} is the destination when not at desk such as SIP/freephonie-out/0666758747
exten => 05600047590,1,Macro(reach_user_with_presence,SIP/jml-senecio,jim@jabber.grabeuh.com,SIP/freephonie-out/0666758747);



That’s all folks ! That is all it takes to have your calls routed to the right phone according to your presence status. It is really that easy.

Example 2

You don't need to run Asterisk as a jabber client, there's also the component way of things: Here's a snippte from the jabber.conf file that allows our Asterisk server to connect to our local XMPP server (jabberd2), as
a component.

[asterisk-component]
type=component
serverhost=jabber.inria.fr
username=asterisk
secret=*******
port=5347

Depending on your XMPP server, the port number may be different.

PHP script for sending jabber messages

I wrote the following PHP script to send a message via the jabber IM service to inform about an incoming call. This can be used for e.g. Asterisk 1.2 that doesn't yet come with native Jabber support.

To get it running you need:


To use it in extensions.conf:
exten=>s,1,AGI,jabber.php;Notifyviajabber
exten=>s,n,Wait,30;Waitthirtysecond
exten=>s,n,Answer;Answertheline

Have fun,
-mat-



 #!/usr/bin/php -q
 <?php
 //error_reporting(E_ALL);
 ini_set('display_errors', 0 );
 ini_set('include_path', '.:/usr/share/pear');
 require_once('class.jabber.php');

 ob_implicit_flush(true);
 set_time_limit(0);

 $err=fopen("php://stderr","w");
 $in = fopen("php://stdin","r");
 while (!feof($in)) {
     $temp = str_replace("/n","",fgets($in,4096));
     $s = split(":",$temp);
     $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
     if (($temp == "") || ($temp == "/n")) {
         break;
     }
 }

 $JABBER = new Jabber;

 $JABBER->server   = 'jabber.de.cw.net';
 $JABBER->port     = 5222;
 $JABBER->username = 'asterisk';
 $JABBER->password = 'xxxx';
 $JABBER->resource = 'ClassJabberPHP';

 $JABBER->Connect() or die('Could not connect!');
 $JABBER->SendAuth() or die('Could not authenticate!');

 $JABBER->SendPresence(NULL,NULL,'online');

// $JABBER->SendMessage('xxx@jabber.de.cw.net', 'chat', NULL, array( 'body' => 'Call from '.$agi['callerid'].' on '.$agi['dnid'] ));
 $JABBER->SendMessage('xxx@jabber.de.cw.net', 'chat', NULL, array( 'body' => 'Call from '.htmlspecialchars($agi['callerid']).' on '.$agi['dnid'] ));






 $JABBER->Disconnect();
 fclose($in);
 fclose($err);
 ?>



app_jabber - jabber client as asterisk application

This 3rd party (out-of-tree) asterisk application is a jabber client for use in the dialplan (extensions.conf). It supports multiple jabber accounts, SSL, message send and receive.

sample extensions.conf:
exten=>8013,1,Set(jid=arbeitszimmer/bef@arbeitszimmer)
exten=>8013,2,Set(JABBER_ACK_MSG=youarebeingcalledby${CALLERIDNUM}.)
exten=>8013,3,JabberReceive(${jid},${JABBER_ACK_MSG})
exten=>8013,4,agi(speak.tcl,${JABBER_MSG})
exten=>8013,5,Set(JABBER_ACK_MSG="${JABBER_MSG}"read.pleasegoahead.)
exten=>8013,6,Goto(3)
exten=>8013,7,Hangup

arbeitszimmer is the name of the configuration section in jabber.conf and also the name of the jabber server (and as such the domain part of the JID).
This configuration is periodically trying to receive a message, which is then acknowledged after it has been read aloud by the festival spech synthesizer.

URL: http://fuhrmannek.de/projects/asterisk/app_jabber.bef

jabber.agi in Python


I've written a Jabber AGI script in Python. It is very simple, using sendxmpp to actually send the Jabber message. You also need pyst for this, which is an AGI interface Python module.

URL: http://www.stuvel.eu/asterisk

OpenFire and Asterisk-IM

The Openfire XMPP server (http://www.igniterealtime.org/) has an asterisk plugin called Asterisk-IM (readme)which uses the manager interface to send 'On the phone' status to XMPP clients. It also has the capability to Pause and Unpause queue members depending on idle status, but that can quickly become. At this moment only the Spark client appears to support this.

Ejabberd modules for Asterisk

mod_asterisk

If you have Asterisk & ejabberd inside your company, make voice calls to a contact you chatting with, by sending special message in chat, e.g. '+'. You don't need to remember contact's phone number, it will be retrieved from contact's vcard, and command Originate sent to AMI.
download http://www.powerpbx.ru/mod_asterisk.erl

mod_client_asterisk

April 2010 we started an Ejabberd module which connect through the Asterisk Manager Interface. This module is looking for call events and updates the status of a known Jabber User. It sort of synchronize jabber users presence based on the phone status. Check it out :

Comments are welcome, please use LaunchPad to submit bugs and ask questions.

See also

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值