Example #1
0
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_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))
Example #3
0
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(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]))
Example #5
0
    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))
Example #6
0
    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_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]))
Example #8
0
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))
Example #9
0
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']))
Example #10
0
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))
Example #11
0
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))
Example #13
0
def handle_newstate_ringing(event, stomp, protocol_version):
    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:
        print e
        parent_event = None

    if parent_event != None:
        raw = eval(parent_event.raw)
    else:
        raw = None

    if raw != None and protocol_version == PROTOCOL_VERSION_1_1:
        caller = raw["CallerIDNum"]
        extension = event["CallerIDNum"]
    elif raw != None and protocol_version == PROTOCOL_VERSION_1_0:
        caller = raw["CallerID"]
        extension = event["CallerID"]
    else:
        caller = "unknown"
        extension = "unknown"

    message.set_extension(extension)
    message.set_caller(caller)

    send_message(stomp, message.dump_data_json(), getLocalNumber(channel))
Example #14
0
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):
        channel = event[Asterisk10.HEADER_CHANNEL]

        if channel == None:
            return None

        message = ChannelMessage()

        message.set_event(ChannelMessage.EVENT_HANGUP_CLEANUP)
        message.set_id(event[Asterisk10.HEADER_UNIQUEID])

        send_message(destination, message.dump_data_json(), get_local_number(channel))
Example #16
0
    def _handle_newstate_ringing(self, event, destination):
        #Newstate {
        # 'ConnectedLineNum': '102',
        # 'ChannelState': '5',
        # 'CallerIDNum': '',
        # 'ConnectedLineName': '',
        # 'Uniqueid': '1330721579.25',
        # 'CallerIDName': '',
        # 'Privilege': 'call,all',
        # 'Event': 'Newstate',
        # 'Channel': 'SIP/101-00000019',
        # 'ChannelStateDesc': '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)

#        queue name??? or extension???
#        caller number???

        send_message(destination, message.dump_data_json(), get_local_number(channel))
    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]))
Example #18
0
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)
        elif data['statusId'] == 'offline':
            response = queue_remove(manager, data)
        elif data['statusId'] == 'away':
Example #19
0
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']))
Example #20
0
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_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]))
Example #22
0
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_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))
Example #24
0
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':