Consultme/app/dialog_flow/graph_definition.py
2025-06-23 07:03:40 +00:00

238 lines
10 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Consultme/app/dialog_flow/graph_definition.py
from typing import Dict, Any, List
# --- DEFINIÇÃO DOS ESTADOS DO SEU CHATBOT (O GRAFO) ---
DIALOG_GRAPH: Dict[str, Dict[str, Any]] = {
"INICIO": {
"message": "",
"expected_input_type": "text",
"transitions": {
"default": "MENU_PRINCIPAL"
}
},
"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": {
# 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
}
},
"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_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"
}
},
"RESPOSTA_NAO_ENTENDIDA": {
"message": "Desculpe, não entendi sua última mensagem. Por favor, digite 'menu' para ver as opções ou 'ajuda'.",
"expected_input_type": "text",
"transitions": {
"menu": "MENU_PRINCIPAL",
"ajuda": "MENU_PRINCIPAL",
"default": "RESPOSTA_NAO_ENTENDIDA"
}
},
# --- 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"}
},
"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"}
},
"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": {
"default": "PROCESSAR_ID_LOJA_ANO" # Leva ao processamento do ID da loja
}
},
# 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"}
},
"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 ---
INITIAL_STATE_ID = "INICIO"