Пример #1
0
    def test_assemble_caller_id_with_extension(self):
        fullname = 'User 1'
        number = '2345'

        result = caller_id.assemble_caller_id(fullname, number)

        assert_that(result, equal_to('"%s" <%s>' % (fullname, number)))
Пример #2
0
    def test_assemble_caller_id_without_extension(self):
        fullname = 'User 1'
        number = None

        result = caller_id.assemble_caller_id(fullname, number)

        assert_that(result, equal_to('"%s"' % fullname))
Пример #3
0
    def answer_queued_call(self, switchboard_uuid, queued_call_id, user_uuid):
        if not Switchboard(switchboard_uuid, self._confd).exists():
            raise NoSuchSwitchboard(switchboard_uuid)

        try:
            queued_channel = self._ari.channels.get(channelId=queued_call_id)
        except ARINotFound:
            raise NoSuchCall(queued_call_id)

        endpoint = User(user_uuid, self._confd).main_line().interface()
        caller_id = assemble_caller_id(
            queued_channel.json['caller']['name'],
            queued_channel.json['caller']['number']).encode('utf-8')

        channel = self._ari.channels.originate(
            endpoint=endpoint,
            app=DEFAULT_APPLICATION_NAME,
            appArgs=[
                'switchboard', 'switchboard_answer', switchboard_uuid,
                queued_call_id
            ],
            callerId=caller_id,
            originator=queued_call_id,
        )

        return channel.id
Пример #4
0
    def originate_recipient(self, initiator_call, context, exten, transfer_id, variables, timeout):
        initiator_channel = self.ari.channels.get(channelId=initiator_call)
        caller_id = assemble_caller_id(initiator_channel.json['caller']['name'], initiator_channel.json['caller']['number']).encode('utf-8')
        recipient_endpoint = 'Local/{exten}@{context}'.format(exten=exten, context=context)
        app_args = ['transfer', 'transfer_recipient_called', transfer_id]
        originate_variables = dict(variables)
        originate_variables['XIVO_TRANSFER_ROLE'] = 'recipient'
        originate_variables['XIVO_TRANSFER_ID'] = transfer_id
        originate_variables['CHANNEL(language)'] = initiator_channel.getChannelVar(variable='CHANNEL(language)')['value']
        try:
            originate_variables['XIVO_USERID'] = initiator_channel.getChannelVar(variable='XIVO_USERID')['value']
        except ARINotFound:
            pass
        try:
            originate_variables['XIVO_USERUUID'] = initiator_channel.getChannelVar(variable='XIVO_USERUUID')['value']
        except ARINotFound:
            pass
        timeout = -1 if timeout is None else timeout

        new_channel = self.ari.channels.originate(endpoint=recipient_endpoint,
                                                  app=DEFAULT_APPLICATION_NAME,
                                                  appArgs=app_args,
                                                  callerId=caller_id,
                                                  variables={'variables': originate_variables},
                                                  timeout=timeout,
                                                  originator=initiator_call)
        recipient_call = new_channel.id

        try:
            ari_helpers.set_bridge_variable(self.ari, transfer_id, 'XIVO_HANGUP_LOCK_SOURCE', recipient_call)
        except ARINotFound:
            raise TransferCreationError('bridge not found')

        return recipient_call
Пример #5
0
    def originate_recipient(self, initiator_call, context, exten, transfer_id, variables):
        try:
            app_instance = self.call_states.get(initiator_call).app_instance
        except KeyError:
            raise TransferCreationError('{call}: no app_instance found'.format(call=initiator_call))
        initiator_channel = self.ari.channels.get(channelId=initiator_call)
        caller_id = assemble_caller_id(initiator_channel.json['caller']['name'], initiator_channel.json['caller']['number']).encode('utf-8')
        recipient_endpoint = 'Local/{exten}@{context}'.format(exten=exten, context=context)
        app_args = [app_instance, 'transfer_recipient_called', transfer_id]
        originate_variables = dict(variables)
        originate_variables['XIVO_TRANSFER_ROLE'] = 'recipient'
        originate_variables['XIVO_TRANSFER_ID'] = transfer_id
        new_channel = self.ari.channels.originate(endpoint=recipient_endpoint,
                                                  app=APPLICATION_NAME,
                                                  appArgs=app_args,
                                                  callerId=caller_id,
                                                  variables={'variables': originate_variables})
        recipient_call = new_channel.id

        try:
            ari_helpers.set_bridge_variable(self.ari, transfer_id, 'XIVO_HANGUP_LOCK_SOURCE', recipient_call)
        except ARINotFound:
            raise TransferCreationError('bridge not found')

        return recipient_call
Пример #6
0
    def originate_recipient(self, initiator_call, context, exten, transfer_id,
                            variables):
        try:
            app_instance = self.call_states.get(initiator_call).app_instance
        except KeyError:
            raise TransferCreationError(
                '{call}: no app_instance found'.format(call=initiator_call))
        initiator_channel = self.ari.channels.get(channelId=initiator_call)
        caller_id = assemble_caller_id(
            initiator_channel.json['caller']['name'],
            initiator_channel.json['caller']['number']).encode('utf-8')
        recipient_endpoint = 'Local/{exten}@{context}'.format(exten=exten,
                                                              context=context)
        app_args = [app_instance, 'transfer_recipient_called', transfer_id]
        originate_variables = dict(variables)
        originate_variables['XIVO_TRANSFER_ROLE'] = 'recipient'
        originate_variables['XIVO_TRANSFER_ID'] = transfer_id
        new_channel = self.ari.channels.originate(
            endpoint=recipient_endpoint,
            app=APPLICATION_NAME,
            appArgs=app_args,
            callerId=caller_id,
            variables={'variables': originate_variables})
        recipient_call = new_channel.id

        try:
            ari_helpers.set_bridge_variable(self.ari, transfer_id,
                                            'XIVO_HANGUP_LOCK_SOURCE',
                                            recipient_call)
        except ARINotFound:
            raise TransferCreationError('bridge not found')

        return recipient_call
Пример #7
0
    def answer_queued_call(self,
                           tenant_uuid,
                           switchboard_uuid,
                           queued_call_id,
                           user_uuid,
                           line_id=None):
        logger.debug(
            'Answering queued call %s in tenant %s for switchboard %s with user %s line %s',
            queued_call_id,
            tenant_uuid,
            switchboard_uuid,
            user_uuid,
            line_id,
        )
        if not SwitchboardConfd(tenant_uuid, switchboard_uuid,
                                self._confd).exists():
            raise NoSuchSwitchboard(switchboard_uuid)

        try:
            queued_channel = self._ari.channels.get(channelId=queued_call_id)
        except ARINotFound:
            raise NoSuchCall(queued_call_id)

        try:
            user = User(user_uuid, self._confd, tenant_uuid=tenant_uuid)
            if line_id:
                line = user.line(line_id)
            else:
                line = user.main_line()
            endpoint = line.interface_autoanswer()
        except InvalidUserUUID as e:
            raise NoSuchConfdUser(e.details['user_uuid'])

        caller_id = assemble_caller_id(
            queued_channel.json['caller']['name'],
            queued_channel.json['caller']['number'],
        ).encode('utf-8')

        channel = self._ari.channels.originate(
            endpoint=endpoint,
            app=DEFAULT_APPLICATION_NAME,
            appArgs=[
                'switchboard',
                'switchboard_answer',
                tenant_uuid,
                switchboard_uuid,
                queued_call_id,
            ],
            callerId=caller_id,
            originator=queued_call_id,
            variables={'variables': AUTO_ANSWER_VARIABLES},
        )

        return channel.id
Пример #8
0
def update_caller_id(main_user, line, extension=None):
    exten = extension.exten if extension else None
    line.callerid = caller_id.assemble_caller_id(main_user.fullname, exten)
    line_dao.edit(line)
Пример #9
0
def update_caller_id(main_user, line, extension=None):
    exten = extension.exten if extension else None
    line.callerid = caller_id.assemble_caller_id(main_user.fullname, exten)
    line_dao.edit(line)