Comitando flow_respose_without_one_store

This commit is contained in:
Joao Monezi
2025-06-23 07:03:40 +00:00
parent 53d57e4fa3
commit 897b3b11ac
6 changed files with 873 additions and 206 deletions
+193 -96
View File
@@ -13,28 +13,73 @@ DIALOG_GRAPH: Dict[str, Dict[str, Any]] = {
},
"MENU_PRINCIPAL": {
"message": "*Olá você inicou o Consultme!:*",
"action_to_perform": "send_main_menu", # Ação para enviar um menu interativo (botões)
"expected_input_type": "button_click",
"MENU_PRINCIPAL": {
"message": "*Olá, você iniciou o Consultme!:*",
"action_to_perform": "send_main_menu", # Ação para enviar o menu principal (lista)
"expected_input_type": "list_reply", # Espera um clique em um item da lista
"transitions": {
"OPTION_AGENDAR": "MENU_PRINCIPAL_STORE",
"OPTION_CADASTRO_FLOW": "MENU_PRINCIPAL_STORE",
"OPTION_STATUS": "MENU_PRINCIPAL_STORE",
"OPTION_FALAR_ATENDENTE": "MENU_PRINCIPAL_STORE",
"default": "MENU_PRINCIPAL_STORE" # Volta para o menu se a opção não for reconhecida
# Transições para os estados intermediários de tempo/período
"OPTION_ANO": "MENU_PRINCIPAL_ANO",
"OPTION_MES": "MENU_PRINCIPAL_MES",
"OPTION_ONTEM": "MENU_PRINCIPAL_ONTEM",
"OPTION_HOJE": "MENU_PRINCIPAL_HOJE",
"OPTION_SAIR": "ENCERRAR_CONVERSA",
"default": "RESPOSTA_NAO_ENTENDIDA" # Volta para o menu se a opção não for reconhecida
}
},
"MENU_PRINCIPAL_STORE": {
"action_to_perform": "send_main_store", # Ação para enviar um menu interativo (botões)
"ENCERRAR_CONVERSA": {
"message": "Você encerrou o Chat, digite algo caso precise consultar novamente.",
"action_to_perform": "saindo_da_sessao" # Ação para enviar o menu principal (lista)
},
# --- ESTADOS INTERMEDIÁRIOS APÓS ESCOLHA DO PERÍODO (MANDAM O SEGUNDO MENU) ---
"MENU_PRINCIPAL_ANO": {
"message": "Você escolheu o *Ano*. Agora, qual indicador deseja visualizar?",
"action_to_perform": "send_main_store",
"expected_input_type": "button_click",
"transitions": {
"OPTION_AGENDAR": "AGENDAMENTO_INICIO",
"OPTION_CADASTRO_FLOW": "INICIAR_FLOW_CADASTRO",
"OPTION_STATUS": "PEDIR_NUMERO_PEDIDO",
"OPTION_FALAR_ATENDENTE": "ENCAMINHAR_ATENDENTE",
"default": "MENU_PRINCIPAL" # Volta para o menu se a opção não for reconhecida
"OPTION_TOTAL_CP": "RESPOSTA_ANO_TOTAL_CP", # Combinação final
"OPTION_TOTAL_LOJAS": "RESPOSTA_ANO_TOTAL_LOJAS",
"OPTION_TOTAL_UMA_LOJA": "RESPOSTA_ANO_UMA_LOJA",
"OPTION_SAIR": "ENCERRAR_CONVERSA",
"default": "RESPOSTA_NAO_ENTENDIDA" # Se não reconhecer, não entendi
}
},
"MENU_PRINCIPAL_MES": {
"message": "Você escolheu o *Mês*. Agora, qual indicador deseja visualizar?",
"action_to_perform": "send_main_store",
"expected_input_type": "button_click",
"transitions": {
"OPTION_TOTAL_CP": "RESPOSTA_MES_TOTAL_CP",
"OPTION_TOTAL_LOJAS": "RESPOSTA_MES_TOTAL_LOJAS",
"OPTION_TOTAL_UMA_LOJA": "RESPOSTA_MES_UMA_LOJA",
"OPTION_SAIR": "ENCERRAR_CONVERSA",
"default": "RESPOSTA_NAO_ENTENDIDA"
}
},
"MENU_PRINCIPAL_ONTEM": {
"message": "Você escolheu *Ontem*. Agora, qual indicador deseja visualizar?",
"action_to_perform": "send_main_store",
"expected_input_type": "button_click",
"transitions": {
"OPTION_TOTAL_CP": "RESPOSTA_ONTEM_TOTAL_CP",
"OPTION_TOTAL_LOJAS": "RESPOSTA_ONTEM_TOTAL_LOJAS",
"OPTION_TOTAL_UMA_LOJA": "RESPOSTA_ONTEM_UMA_LOJA",
"OPTION_SAIR": "ENCERRAR_CONVERSA",
"default": "RESPOSTA_NAO_ENTENDIDA"
}
},
"MENU_PRINCIPAL_HOJE": {
"message": "Você escolheu *Hoje*. Agora, qual indicador deseja visualizar?",
"action_to_perform": "send_main_store",
"expected_input_type": "button_click",
"transitions": {
"OPTION_TOTAL_CP": "RESPOSTA_HOJE_TOTAL_CP",
"OPTION_TOTAL_LOJAS": "RESPOSTA_HOJE_TOTAL_LOJAS",
"OPTION_TOTAL_UMA_LOJA": "RESPOSTA_HOJE_UMA_LOJA",
"OPTION_SAIR": "ENCERRAR_CONVERSA",
"default": "RESPOSTA_NAO_ENTENDIDA"
}
},
@@ -44,97 +89,149 @@ DIALOG_GRAPH: Dict[str, Dict[str, Any]] = {
"transitions": {
"menu": "MENU_PRINCIPAL",
"ajuda": "MENU_PRINCIPAL",
"default": "RESPOSTA_NAO_ENTENDIDA" # Continua não entendendo
"default": "RESPOSTA_NAO_ENTENDIDA"
}
},
# --- FLUXO DE CADASTRO (com Flow) ---
"INICIAR_FLOW_CADASTRO": {
"action_to_perform": "send_flow_cadastro", # Ação para enviar o Flow
"flow_id": "COLOQUE_AQUI_O_FLOW_ID_DO_SEU_CADASTRO_PUBLICADO", # ID do seu Flow publicado
"flow_cta": "Abrir Cadastro",
"expected_input_type": "flow_nfm_reply", # Espera a resposta do Flow
"transitions": {
"success": "CADASTRO_CONCLUIDO", # Se o Flow for concluído com sucesso
"failure": "CADASTRO_FALHA" # Se houver um problema no Flow (ou o usuário não preencher)
}
},
"CADASTRO_CONCLUIDO": {
"message": "Obrigado por se cadastrar, ${nome_completo}! Seu e-mail é: ${email}. Já pode explorar nossos serviços!",
"action_to_perform": "process_cadastro_data", # Ação para salvar no BD/CRM
"expected_input_type": "any", # Qualquer coisa leva ao menu
"transitions": {
"default": "MENU_PRINCIPAL"
}
},
"CADASTRO_FALHA": {
"message": "Não foi possível completar seu cadastro. Por favor, tente novamente ou digite 'ajuda'.",
"expected_input_type": "text",
"transitions": {
"default": "MENU_PRINCIPAL"
}
},
# --- FLUXO DE AGENDAMENTO (Exemplo Básico) ---
"AGENDAMENTO_INICIO": {
"message": "Certo! Para agendar, qual serviço você precisa?",
"expected_input_type": "text",
"transitions": {
"default": "AGENDAMENTO_CONFIRMAR_SERVICO"
}
},
"AGENDAMENTO_CONFIRMAR_SERVICO": {
"message": "Você precisa de *${servico_agendado}*. Qual data e horário você prefere?",
"expected_input_type": "text",
"transitions": {
"default": "AGENDAMENTO_FINALIZAR"
},
"action_to_perform": "save_temp_service" # Ação para guardar o serviço temporariamente
},
"AGENDAMENTO_FINALIZAR": {
"message": "Seu agendamento para *${servico_agendado}* em *${data_horario_agendado}* foi confirmado! Te vejo lá!",
"action_to_perform": "confirm_appointment", # Ação para agendar no sistema real
# --- ESTADOS FINAIS COMBINATÓRIOS (12 ESTADOS) ---
# Período: ANO
"RESPOSTA_ANO_TOTAL_CP": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_ano_cp", # Ação para buscar e formatar dados
"expected_input_type": "any",
"transitions": {
"default": "MENU_PRINCIPAL"
}
"transitions": {"default": "MENU_PRINCIPAL"}
},
# --- FLUXO DE STATUS DO PEDIDO ---
"PEDIR_NUMERO_PEDIDO": {
"message": "Por favor, digite o número do seu pedido para consultar o status:",
"expected_input_type": "text",
"transitions": {
"default": "CONSULTAR_STATUS_API"
}
},
"CONSULTAR_STATUS_API": {
"message": "Consultando o status do pedido *${numero_pedido}*...",
"action_to_perform": "call_external_status_api", # Ação para chamar um sistema externo (API futura)
"expected_input_type": "api_response", # A resposta vem de uma API, não do usuário
"transitions": {
"success": "STATUS_EXIBIR",
"failure": "STATUS_NAO_ENCONTRADO"
}
},
"STATUS_EXIBIR": {
"message": "O status do pedido *${numero_pedido}* é: *${status_retornado}*.",
"RESPOSTA_ANO_TOTAL_LOJAS": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_ano_lojas",
"expected_input_type": "any",
"transitions": {
"default": "MENU_PRINCIPAL"
}
"transitions": {"default": "MENU_PRINCIPAL"}
},
"STATUS_NAO_ENCONTRADO": {
"message": "Não consegui encontrar o pedido *${numero_pedido}*. Verifique e digite novamente, ou 'menu'.",
"RESPOSTA_ANO_UMA_LOJA": {
"message": "Você escolheu o Total de uma Loja do *Ano*. Por favor, digite o ID da loja.",
"action_to_perform": "set_context_for_store_id_input_ano_loja", # Ação para guardar o contexto de "Ano" e esperar o ID da loja
"expected_input_type": "text",
"transitions": {
"menu": "MENU_PRINCIPAL",
"default": "PEDIR_NUMERO_PEDIDO"
"default": "PROCESSAR_ID_LOJA_ANO" # Leva ao processamento do ID da loja
}
},
# --- FLUXO DE ATENDENTE ---
"ENCAMINHAR_ATENDENTE": {
"message": "Encaminhando você para um de nossos atendentes. Por favor, aguarde.",
"terminal": True # Indica que a conversa termina aqui (até o atendente assumir)
# Período: MÊS
"RESPOSTA_MES_TOTAL_CP": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_mes_cp",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
# ... Adicione mais estados conforme a complexidade da sua conversa ...
"RESPOSTA_MES_TOTAL_LOJAS": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_mes_lojas",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"RESPOSTA_MES_UMA_LOJA": {
"message": "Você escolheu o Total de uma Loja do *Mês*. Por favor, digite o ID da loja.",
"action_to_perform": "set_context_for_store_id_input_mes_loja",
"expected_input_type": "text",
"transitions": {
"default": "PROCESSAR_ID_LOJA_MES"
}
},
# Período: ONTEM
"RESPOSTA_ONTEM_TOTAL_CP": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_ontem_cp",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"RESPOSTA_ONTEM_TOTAL_LOJAS": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_ontem_lojas",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"RESPOSTA_ONTEM_UMA_LOJA": {
"message": "Você escolheu o Total de uma Loja de *Ontem*. Por favor, digite o ID da loja.",
"action_to_perform": "set_context_for_store_id_input_ontem_loja",
"expected_input_type": "text",
"transitions": {
"default": "PROCESSAR_ID_LOJA_ONTEM"
}
},
# Período: HOJE
"RESPOSTA_HOJE_TOTAL_CP": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_hoje_cp",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"RESPOSTA_HOJE_TOTAL_LOJAS": {
"message": " Consulta realizada com sucesso! \n\n💰 O realizado da Receita em GMV é: *${receita}* e o Boleto Médio é: *${boleto}*",
"action_to_perform": "get_combined_indicator_data_hoje_lojas",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"RESPOSTA_HOJE_UMA_LOJA": {
"message": "Você escolheu o Total de uma Loja de *Hoje*. Por favor, digite o ID da loja.",
"action_to_perform": "set_context_for_store_id_input_hoje_loja",
"expected_input_type": "text",
"transitions": {
"default": "PROCESSAR_ID_LOJA_HOJE"
}
},
# --- ESTADOS PARA PROCESSAR O ID DA LOJA (PARA 'UMA LOJA') ---
"PROCESSAR_ID_LOJA_ANO": {
"message": "Consultando indicador da loja ${id_loja} para o *Ano*...",
"action_to_perform": "get_store_indicator_ano",
"expected_input_type": "api_response", # Ação para pegar o ID digitado e consultar a API
"transitions": {
"success": "EXIBIR_INDICADOR_LOJA_ANO",
"failure": "LOJA_NAO_ENCONTRADA_ANO"
}
},
"PROCESSAR_ID_LOJA_MES": {
"message": "Consultando indicador da loja ${id_loja} para o *Mês*...",
"action_to_perform": "get_store_indicator_mes",
"expected_input_type": "api_response",
"transitions": {
"success": "EXIBIR_INDICADOR_LOJA_MES",
"failure": "LOJA_NAO_ENCONTRADA_MES"
}
},
"PROCESSAR_ID_LOJA_ONTEM": {
"message": "Consultando indicador da loja ${id_loja} para *Ontem*...",
"action_to_perform": "get_store_indicator_ontem",
"expected_input_type": "api_response",
"transitions": {
"success": "EXIBIR_INDICADOR_LOJA_ONTEM",
"failure": "LOJA_NAO_ENCONTRADA_ONTEM"
}
},
"PROCESSAR_ID_LOJA_HOJE": {
"message": "Consultando indicador da loja ${id_loja} para *Hoje*...",
"action_to_perform": "get_store_indicator_hoje",
"expected_input_type": "api_response",
"transitions": {
"success": "EXIBIR_INDICADOR_LOJA_HOJE",
"failure": "LOJA_NAO_ENCONTRADA_HOJE"
}
},
# --- ESTADOS PARA EXIBIR INDICADOR DE LOJA ESPECÍFICA (COMBINAÇÕES) ---
"EXIBIR_INDICADOR_LOJA_ANO": {
"message": "O indicador da loja *${id_loja}* do *Ano* é: *${indicador_loja}*.",
"expected_input_type": "any",
"transitions": {"default": "MENU_PRINCIPAL"}
},
"LOJA_NAO_ENCONTRADA_ANO": {
"message": "Loja *${id_loja}* não encontrada para o *Ano*. Digite novamente ou 'menu'.",
"expected_input_type": "text",
"transitions": {"default": "RESPOSTA_ANO_UMA_LOJA", "menu": "MENU_PRINCIPAL"} # Volta para pedir a loja para o Ano
},
}
# --- ESTADO INICIAL ---