#!/usr/bin/env python # # Usage: # AGI(/etc/asterisk/agi/mqtt,/etc/asterisk/agi/mqtt.cfg,calls/missed) # or, to override the extension: # AGI(/etc/asterisk/agi/mqtt,/etc/asterisk/agi/mqtt.cfg,calls/missed,+43123456789) # import sys from ConfigParser import ConfigParser import paho.mqtt.client as paho import json from os import getpid,uname from pprint import pprint client_name='agi-'+uname()[1]+'-'+str(getpid()) print client_name conffile, topic = sys.argv[1:3] config = ConfigParser() config.add_section('mqtt') # set defaults for anonymous auth config.set('mqtt', 'username', '') config.set('mqtt', 'password', '') config.set('mqtt', 'port', '1883') config.read(conffile) mqtt_server = config.get('mqtt', 'server') mqtt_port = config.getint('mqtt', 'port') mqtt_username = config.get('mqtt', 'username') mqtt_password = config.get('mqtt', 'password') agi = [] while 1: line = sys.stdin.readline() if not line or line == "\n": break agi.append(line) agi = dict([line.rstrip('\n').replace('agi_', '', 1).split(': ', 1) for line in agi]) if len(sys.argv) > 3: agi['extension'] = sys.argv[3] def agi_exit(rc, *args): if rc != 0: print "VERBOSE rc=%s %s" % (rc, args) sys.exit(rc) def on_connect(mosq, rc, *args): if rc != 0: agi_exit(1, "Connection failed: %d" % rc) def on_publish(mosq, *args): # done agi_exit(0) client = paho.Client(client_name) client.username_pw_set(mqtt_username, mqtt_password) client.connect(mqtt_server, port=mqtt_port) client.on_connect = on_connect client.on_publish = on_publish client.publish(topic, payload=json.dumps(agi)) client.loop() agi_exit(1, "Message publish timed out")