def handle_Bridge(self, event, manager): """ Event: Bridge Privilege: call,all Bridgestate: Link Bridgetype: core Channel1: SIP/101-00000058 Channel2: SIP/104-00000059 Uniqueid1: 1309443548.88 Uniqueid2: 1309443548.89 CallerID1: 101 CallerID2: 104 {'Uniqueid2': '1309506586.133', 'Uniqueid1': '1309506586.132', 'CallerID2': '104', 'Bridgestate': 'Link', 'CallerID1': '101', 'Channel2': 'SIP/104-00000085', 'Channel1': 'SIP/101-00000084', 'Bridgetype': 'core', 'Privilege': 'call,all', 'Event': 'Bridge'} """ message = ChannelMessage() message.set_event(ChannelMessage.EVENT_LINK) message.set_id(event[Asterisk11.HEADER_UNIQUEID2]) message.set_extension(event[Asterisk11.HEADER_CALLERID2]) message.set_caller(event[Asterisk11.HEADER_CALLERID1]) send_message(manager.destination, message.dump_data_json(), get_local_number(event[Asterisk11.HEADER_CHANNEL2]))
def _handle_newstate_ringing(self, event, destination): print "handle_newstate_ringing" channel = event[Asterisk11.HEADER_CHANNEL] if channel == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_RINGING) message.set_id(event[Asterisk11.HEADER_UNIQUEID]) try: parent_event = AsteriskEvent.selectBy(event = Asterisk11.EVENT_DIAL, uniqueid = event[Asterisk11.HEADER_UNIQUEID])[0] except Exception as e: print e parent_event = None if parent_event != None: raw = eval(parent_event.raw) else: raw = None if raw != None: caller = raw[Asterisk11.HEADER_CALLERIDNUM] extension = event[Asterisk11.HEADER_CALLERIDNUM] else: caller = AsteriskCommandHandler.CALLERID_UNKNOWN extension = AsteriskCommandHandler.CALLERID_UNKNOWN message.set_extension(extension) message.set_caller(caller) send_message(destination, message.dump_data_json(), get_local_number(channel))
def handle_newstate_ringing(event, stomp): channel = event['Channel'] if channel == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_RINGING) message.set_id(event['Uniqueid']) try: parent_event = AsteriskEvent.selectBy(event='Dial', uniqueid=event['Uniqueid'])[0] except Exception as e: parent_event = None if parent_event != None: raw = eval(parent_event.raw) else: raw = None if raw != None: caller = raw['CallerID'] else: caller = 'unknown' extension = event['CallerID'] message.set_extension(extension) message.set_caller(caller) send_message(stomp, message.dump_data_json(), getLocalNumber(channel))
def handle_Bridge(event, manager=None): if not isinstance(event, dict): event = event.headers """ Event: Bridge Privilege: call,all Bridgestate: Link Bridgetype: core Channel1: SIP/101-00000058 Channel2: SIP/104-00000059 Uniqueid1: 1309443548.88 Uniqueid2: 1309443548.89 CallerID1: 101 CallerID2: 104 {'Uniqueid2': '1309506586.133', 'Uniqueid1': '1309506586.132', 'CallerID2': '104', 'Bridgestate': 'Link', 'CallerID1': '101', 'Channel2': 'SIP/104-00000085', 'Channel1': 'SIP/101-00000084', 'Bridgetype': 'core', 'Privilege': 'call,all', 'Event': 'Bridge'} """ message = ChannelMessage() message.set_event(ChannelMessage.EVENT_LINK) message.set_id(event['Uniqueid2']) message.set_extension(event['CallerID2']) message.set_caller(event['CallerID1']) send_message(manager.stomp, message.dump_data_json(), getLocalNumber(event['Channel2']))
def handle_QueueMemberPaused(self, event, manager): location = event[Asterisk.HEADER_LOCATION] if location == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_QUEUE_MEMBER_PAUSED) send_message(manager.destination, message.dump_data_json(), get_local_number(location))
def handle_hangup_clearing(event, stomp): channel = event['Channel'] if channel == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_HANGUP_CLEANUP) message.set_id(event['Uniqueid']) send_message(stomp, message.dump_data_json(), getLocalNumber(channel))
def _handle_hangup_clearing(self, event, destination): print "handle_hangup_clearing" channel = event[Asterisk11.HEADER_CHANNEL] if channel == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_HANGUP_CLEANUP) message.set_id(event[Asterisk11.HEADER_UNIQUEID]) send_message(destination, message.dump_data_json(), get_local_number(channel))
def handle_Link(self, event, manager): """ {'Uniqueid2': '1306914758.6999', 'Uniqueid1': '1306914726.6994', 'Channel1': 'SIP/430913-19be0080', 'Channel2': 'SIP/1313-19ba26d0', 'CallerID2': '380352407040', 'Privilege': 'call,all', 'CallerID1': '430913', 'Event': 'Link'} """ message = ChannelMessage() message.set_event(ChannelMessage.EVENT_LINK) message.set_id(event[Asterisk10.HEADER_UNIQUEID1]) message.set_extension(event[Asterisk10.HEADER_CALLERID1]) message.set_caller(event[Asterisk10.HEADER_CALLERID2]) send_message(manager.destination, message.dump_data_json(), get_local_number(event[Asterisk10.HEADER_CHANNEL1]))
def handle_Link(event, manager=None): if not isinstance(event, dict): event = event.headers """ {'Uniqueid2': '1306914758.6999', 'Uniqueid1': '1306914726.6994', 'Channel1': 'SIP/430913-19be0080', 'Channel2': 'SIP/1313-19ba26d0', 'CallerID2': '380352407040', 'Privilege': 'call,all', 'CallerID1': '430913', 'Event': 'Link'} """ message = ChannelMessage() message.set_event(ChannelMessage.EVENT_LINK) message.set_id(event['Uniqueid1']) message.set_extension(event['CallerID1']) message.set_caller(event['CallerID2']) send_message(manager.stomp, message.dump_data_json(), getLocalNumber(event['Channel1']))
def handle_QueueMemberAdded(event, manager): if not isinstance(event, dict): event = event.headers location = event['Location'] if location == None: return None message = ChannelMessage() message.set_event(ChannelMessage.EVENT_QUEUE_MEMBER_ADDED) send_message(manager.stomp, message.dump_data_json(), getLocalNumber(location))
print 'Stomp queue:', stomp_queue print '='*80 ami_host = config.get('AMI', 'host') ami_username = config.get('AMI', 'username') ami_password = config.get('AMI', 'password') stomp = Client(stomp_host) stomp.connect(stomp_username, stomp_password) stomp.subscribe(stomp_queue) while True: message = stomp.get() channel_message = ChannelMessage() logging.debug(message.body) data = channel_message.load_data_json(message.body) if data['type'] == channel_message.TYPE_AGENT_STATUS: manager = asterisk.manager.Manager() manager.connect(ami_host) manager.login(ami_username, ami_password) if data['statusId'] == 'available': response = queue_add(manager, data['agent']) elif data['statusId'] == 'offline': response = queue_remove(manager, data['agent']) elif data['statusId'] == 'away':