Esempio n. 1
0
 def test_hget_config_on_redis(self):
     chave = 'teste1'
     field = 'teste1'
     self.assertEqual(config_redis.hget_config_on_redis(chave, field), None)
     chave = 'teste2'
     field = 'teste2'
     self.assertEqual(config_redis.hget_config_on_redis(chave, field), None)
Esempio n. 2
0
    def replace_variables(self, audio_id, msisdn_reclamado):
        data = hget_config_on_redis(msisdn_reclamado, 'evento_datapromessa')
        entire_date = data.split()[0]
        entire_date = datetime.strptime(entire_date, '%d/%m/%Y')
        tomorrow = datetime.today() + timedelta(days=1)
        if audio_id == 'telefone':
            telefone = hget_config_on_redis(msisdn_reclamado,
                                            'msisdn_reclamado')
            self.phone_audios(telefone)

        elif audio_id == 'protocolo':
            protocolo = hget_config_on_redis(msisdn_reclamado, 'protocolo')
            self.protocolo_audios(protocolo)

        elif audio_id == 'data_normalizacao':
            if entire_date > tomorrow:
                return self.response_audio
            else:
                self.date_audios(data)

        elif audio_id == 'hora_normalizacao':
            if entire_date > tomorrow:
                return self.date_audios(data)
            else:
                self.hour_audios(data)

        return self.response_audio
Esempio n. 3
0
 def next_step(self, outbound_message, msisdn_reclamado):
     #TODO: ajustar esse if
     if outbound_message.etapa == 'transferir_atendente' or (
             outbound_message.intent == 'SolicitarProtocolo'
             and not hget_config_on_redis(
                 msisdn_reclamado, 'protocolo')) or hget_config_on_redis(
                     msisdn_reclamado,
                     "faltando_dados") == "Y" or hget_config_on_redis(
                         msisdn_reclamado, "data_maior_48hrs") == "Y":
         action = 'transfer'
     elif outbound_message.etapa == 'hang-up':
         action = 'hangup'
     else:
         action = 'ask'
     return action
Esempio n. 4
0
    def __init__(self, inbound_message, outbound_message, context_manager):
        self.session = inbound_message.session_verbio
        self.datetime_inicio = context_manager.datetime_inicio
        self.datetime_final = context_manager.datetime_final
        self.msisdn_reclamado = inbound_message.msisdn_reclamado
        self.retida = inbound_message.retida
        self.tempo_total = context_manager.tempo_total
        self.ultima_etapa = outbound_message.etapa
        self.repetida = hget_config_on_redis(self.msisdn_reclamado, "repetida")
        self.msisdn_binado = inbound_message.msisdn_binado
        self.nome_arquivo = inbound_message.nome_arquivo
        self.reaprazada = hget_config_on_redis(self.msisdn_reclamado,
                                               "reaprazada")
        self.protocolo = hget_config_on_redis(self.msisdn_reclamado,
                                              "protocolo")
        self.cpf = hget_config_on_redis(self.msisdn_reclamado, "cpf")
        self.nome_reclamante = hget_config_on_redis(self.session,
                                                    "nome_reclamante")
        self.timestamp = self.datetime_inicio

        self.save_chamada()
Esempio n. 5
0
    def create_register_note(self, session, outbound_message):
        last_etapa = hget_config_on_redis(session,
                                          "etapa")  #TODO: pegar do REDIS
        register_note = get_config_on_redis('registro-campo-nota', last_etapa)

        if last_etapa in ['motivo_contato', 'evento', 'instrucoes_finais']:
            note = register_note + self.create_intent_note(outbound_message)
        elif last_etapa == 'hang-up':
            note = register_note
        else:
            note = ''
        return note
Esempio n. 6
0
 def replace_variables_transcript(self, transcript, msisdn_reclamado,
                                  outbound_message):
     #TODO: adicionar variáveis conforme forem identificadas
     data_evento = hget_config_on_redis(msisdn_reclamado,
                                        'evento_datapromessa').split()
     data_normalizacao = data_evento[0]
     hora_evento = data_evento[1][:5]
     transcript = transcript.replace(
         "<telefone>",
         hget_config_on_redis(msisdn_reclamado, 'msisdn_reclamado'))
     transcript = transcript.replace(
         "<protocolo>", hget_config_on_redis(msisdn_reclamado, 'protocolo'))
     transcript = transcript.replace("<data_normalizacao>",
                                     data_normalizacao)
     transcript = transcript.replace("<hora_normalizacao>", hora_evento)
     if ('<' or '>') in transcript:
         self.logger.info(
             "[%s] VERBIO RESPONSE: O input:'" + transcript +
             "' retornou variáveis que não foram identificadas.",
             outbound_message.conversation_id)
         transcript = 'Não entendi, você pode repetir?|EntendParcial_Excecao_PodeRepetir'  #TODO: verificar como tratar
     return transcript
Esempio n. 7
0
    def get_output_data(self, msisdn_reclamado, outbound_message,
                        inbound_message):
        #TODO: pegar dados do REDIS
        msisdn_context = redis_con.hgetall(msisdn_reclamado)
        self.logger = logging.getLogger('output oi')
        self.terminal_reclamado = msisdn_context['msisdn_reclamado']
        self.nome_reclamante = hget_config_on_redis(
            inbound_message.session_verbio, 'nome_reclamante')
        self.telefone_contato = inbound_message.msisdn_binado
        self.tipo_registro = self.set_tipo_registro(msisdn_reclamado)
        self.evento_fixo_numero = msisdn_context[
            'id_evento']  #TODO: como tratar?
        self.evento_fixo_promessa = msisdn_context[
            'evento_datapromessa']  #TODO: como tratar?
        self.evento_velox_numero = msisdn_context[
            'id_evento']  #TODO: como tratar?
        self.evento_velox_datapromessa = msisdn_context[
            'evento_datapromessa']  #TODO: como tratar
        self.nota = self.create_register_note(inbound_message.session_verbio,
                                              outbound_message)
        self.flag_anatel = redis_con.hget(inbound_message.session_verbio,
                                          'flag_anatel')

        output = {
            "Terminal_Reclamado": self.terminal_reclamado,
            "Nome_reclamante": self.nome_reclamante,
            "Telefone_Contato": self.telefone_contato,
            "Tipo_Registro": self.tipo_registro,
            "Evento_Fixo_Numero": self.evento_fixo_numero,
            "Evento_Fixo_DataPromessa": self.evento_fixo_promessa,
            "Evento_Velox_Numero": self.evento_velox_numero,
            "Evento_Velox_DataPromessa": self.evento_velox_datapromessa,
            "Nota": self.nota,
            "Flag_Anatel": self.flag_anatel
        }
        return output
Esempio n. 8
0
    def construct_response(self, outbound_message, msisdn_reclamado):
        text_output = outbound_message.output_text[
            len(outbound_message.output_text) - 1]
        watson_transcript_audios = text_output.split("|")
        transcript = watson_transcript_audios[0]
        split_audios = watson_transcript_audios[1:]

        if hget_config_on_redis(
                msisdn_reclamado,
                "faltando_dados") == "Y" or hget_config_on_redis(
                    msisdn_reclamado, "data_maior_48hrs") == "Y":
            self.response_audio = [{
                "type": "tts",
                "transcript":
                "Tive dificuldade em encontrar seus dados, vou transferir para outro atendente para que ele possa te atender melhor.",
                "id": "ID_11_1"
            }]
            self.logger.info(
                "[%s] Ligação transferida para atendente, não achamos as informações de terminal reclamado, data promessa ou tipo de evento ou o prazo de normalização é maior que 48 horas.",
                outbound_message.conversation_id)
            return self.response_audio, transcript

        if len(watson_transcript_audios) == 1:
            self.logger.info(
                "[%s] Os IDs dos áudios não foram informados, a resposta será passada em tts",
                outbound_message.conversation_id)
            transcript = self.replace_variables_transcript(
                transcript, msisdn_reclamado, outbound_message)
            self.response_audio = [{
                "type": "tts",
                "transcript": transcript,
                "id": "ID_11_1"
            }]
        else:
            i = 0
            while i < len(split_audios):
                audio_id = split_audios[i]
                i += 1

                if audio_id not in [
                        'telefone', 'protocolo', 'data_normalizacao',
                        'hora_normalizacao'
                ]:
                    self.response_audio.append({
                        "type": "recording",
                        "transcript": "",
                        "id": audio_id
                    })

                elif audio_id in [
                        'telefone', 'protocolo', 'data_normalizacao',
                        'hora_normalizacao'
                ]:
                    self.replace_variables(audio_id, msisdn_reclamado)

                else:
                    transcript = self.replace_variables_transcript(
                        transcript, msisdn_reclamado, outbound_message)
                    self.response_audio = [{
                        "type": "tts",
                        "transcript": transcript,
                        "id": "ID_11_1"
                    }]
                    self.logger.info(
                        "[%s] VERBIO RESPONSE: A variável informada não pôde ser encontrada.",
                        outbound_message.conversation_id)
                    break

        return self.response_audio, transcript