Newer
Older
asterisk_agi-bin / telepest.py
#!/usr/bin/python

import sys
import re
import urllib2
import json
import syslog

env = {}
tests = 0;

while 1:
   line = sys.stdin.readline().strip()

   if line == '':
      break
   key,data = line.split(':')
   if key[:4] <> 'agi_':
      #skip input that doesn't begin with agi_
      sys.stderr.write("Did not work!\n");
      sys.stderr.flush()
      continue
   key = key.strip()
   data = data.strip()
   if key <> '':
      env[key] = data

def checkresult (params):
   params = params.rstrip()
   if re.search('^200',params):
      result = re.search('result=(\d+)',params)
      if (not result):
         sys.stderr.write("FAIL ('%s')\n" % params)
         sys.stderr.flush()
         return -1
      else:
         result = result.group(1)
         #debug("Result:%s Params:%s" % (result, params))
         sys.stderr.write("PASS (%s)\n" % result)
         sys.stderr.flush()
         return result
   else:
      sys.stderr.write("FAIL (unexpected result '%s')\n" % params)
      sys.stderr.flush()
      return -2

if env.has_key('agi_callerid'):
   match = re.match('^(0)(44)?([0-9]{10})$', env['agi_callerid'])
   if match:
      num = '0' + match.group(3)
      res = json.load(urllib2.urlopen('http://www.telepest.co.uk/%s?f=json' % num, timeout=3))
      syslog.syslog(syslog.LOG_INFO | syslog.LOG_DAEMON,
                    "telepest results: %s" % str(res))
      telepest = res.has_key('status') and (res['status'] == 1)
      caller_name = None
      if res.has_key('callers') and len(res['callers']) > 0:
         caller_name = res['callers'][0]
      if telepest and (caller_name != None):
         sys.stdout.write('SET CALLERID "TP: %s"<%s>' % (caller_name, num))
      elif telepest:
         sys.stdout.write('SET CALLERID "Telepest"<%s>' % num)
      elif caller_name != None:
         sys.stdout.write('SET CALLERID "%s"<%s>' % (caller_name, num))
      sys.stdout.flush()