# 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"