238 lines
10 KiB
Python
238 lines
10 KiB
Python
# 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" |