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)
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
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
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()
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
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
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
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