Jabber Call Notification
I can't believe I never thought of this before. It's the ultimate in couch potatoism.
We don't use the phone much. When it rings, the house fills with moaning and groaning because nobody wants to answer it, but we often don't dare ignore it because we don't know who it is. As I usually have my laptop with me, or at least in sight, I realized (with the idea coming from a client who wants me to do some Jabber integration) that the perfect solution is to have Asterisk send me a notification via Jabber with the caller ID.
It's very simple. I use the sendxmpp program to do the heavy lifting. Here's the Batphone script:
#!/usr/bin/ruby
## Configuration
# sendxmpp config file has to be mode 600 and owned by the asterisk user
CONFIG="~fugalh/telephony/.sendxmpprc"
RESOURCE="Asterisk"
RECIPIENTS="hans@fugal.net erin@fugal.net"
require 'agi'
agi = AGI.new
IO.popen("sendxmpp -r #{RESOURCE} -f #{CONFIG} #{RECIPIENTS}", "w") {|f|
f.puts "Incoming call from #{agi.env['callerid']}"
}
As much as I love Batphone, it's almost as easy to do with a shell script:
#!/bin/sh
# sendxmpp config file needs to be mode 600 and owned by the asterisk user
CONFIG=~fugalh/telephony/.sendxmpprc
RESOURCE=Asterisk
RECIPIENTS="hans@fugal.net erin@fugal.net"
# this snippet from http://yakko.cs.wmich.edu/~drclaw/asterisk/cidname/
declare -a array
while read -e ARG && [ "$ARG" ] ; do
array=(` echo $ARG | sed -e 's/://'`)
export ${array[0]}=${array[1]}
done
echo "Incoming call from $agi_callerid" | \
sendxmpp -r $RESOURCE -f $CONFIG $RECIPIENTS
If you are lucky enough to get agi_calleridname set as well, you obviously
might like to integrate that information into your message too. Here's the Asterisk dialplan snippet:
exten => s,1,AGI(/home/fugalh/telephony/jabber.agi)
exten => s,n,Dial(SIP/sipura&SIP/hans,30)
; ...
5 days later:
It occurs to me that I could use the System application instead of AGI, and pass the parameters on the command line instead. That would simplify the shell script because you don't have to deal with reading stdin one line at a time and recognize when the environment is done being sent.