[Freeswitch-users] Persistence BLFs (or: Dear PBX please remember the BLF state)

Patrick Plattes patrick.plattes at niemann-frey.info
Wed Jan 26 11:33:47 MSK 2011


Hi List :-),

I'm currently switching from Asterisk to FreeSWITCH. It's really hard
work for an Asterisk user, but using Asterisk becomes more and more
painful even for small installations (less than 100 sip users). I know
FreeSWITCH is not a drop-in replacement for the Asterisk PBX, but I
don't want to change the behaviour of the PBX for the users.

It's a preconception in Germany that the American people like
(especially for the X-mas time) kitsch. Everyone here know the
American houses with a hole bunch of blinking lights. But those
decorated hoses are nothing against our offices! Our phones have up to
136 lights (BLFs). You often have to wear sunglasses at the office ;-)

A typical usage of BLFs is to check if an agent is a member of the
queue. I've build a simple extension to add and delete a member. I can
user "presence in" and "presence out" to enable or disable the BLF,
but there is one big issue. After a reboot of the phone the the user
is still a member of the queue, but the BLF is off. We are using hints
at Asterisk to show the user if he is a member and it works even after
a reboot - with "presence" at FreeSWITCH it works (of cause) not. Does
anyone have an idea how to implement it?

My current extension is just for testing and so I use mod_fifo. It
shouldn't be a problem to use mod_callcenter. The phone calls
"queue-the_name_of_the_queue-the_name_of_the_user at pbxdomain" eg.
"queue-sales_de-1000 at freeswitch.cust"

So how implement BLF persistence?

Thanks,
 Patrick


Colourized version: http://pastebin.com/ufJ7U930



<extension name="Queue Management">

 <condition field="destination_number"
expression="^queue-(\w+)-(\d+)$" break="on-false">
   <action application="set"
data="queue_name=${regex(${destination_number}|^queue-(\w+)-(\d+)$|$1)}"
inline="true"/>
   <action application="set"
data="queue_user=${regex(${destination_number}|^queue-(\w+)-(\d+)$|$2)}"
inline="true"/>
 </condition>

 <condition field="${fifo(list ${queue_name}@${domain_name})}"
expression="${queue_user}">
   <action application="answer"/>
   <action application="set" data="result=${fifo_member(del
${queue_name}@${domain_name}
{fifo_member_wait=nowait}user/${queue_user} )}"/>
   <action application="log" data="INFO Delete FIFO agent result: ${result}"/>
   <action application="log" data="INFO User Logout: ${user_name}"/>
   <action application="sleep" data="600"/>
   <action application="playback" data="ivr/ivr-you_are_now_logged_out.wav"/>
   <action application="set" data="result=${presence(out
queue-${queue_name}-${queue_user}@${domain_name} inuse inuse)}"/>
   <action application="log" data="INFO Presence OUT ${result}"/>
   <action application="hangup"/>

   <anti-action application="answer"/>
   <anti-action application="set" data="result=${fifo_member(add
${queue_name}@${domain_name}
{fifo_member_wait=nowait}user/${queue_user} )}"/>
   <anti-action application="log" data="INFO Add FIFO agent result: ${result}"/>
   <anti-action application="log" data="INFO User Login: ${user_name}"/>
   <anti-action application="sleep" data="600"/>
   <anti-action application="playback"
data="ivr/ivr-you_are_now_logged_in.wav"/>
   <anti-action application="set" data="result=${presence(in
queue-${queue_name}-${queue_user}@${domain_name} inuse inuse)}"/>
   <anti-action application="log" data="INFO Presence IN ${result}"/>
   <anti-action application="hangup"/>
 </condition>
</extension>



More information about the FreeSWITCH-users mailing list