Skip to content

Commit 2ce56d4

Browse files
committed
remove dicas e integra recomendações com o site
1 parent 426e971 commit 2ce56d4

File tree

5 files changed

+191
-142
lines changed

5 files changed

+191
-142
lines changed

actions/actions.py

Lines changed: 101 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from rasa_sdk import Action
1+
from rasa_sdk import Action, Tracker
22
from rasa_sdk.events import UserUtteranceReverted, SlotSet
33
import requests
44
import json
@@ -12,13 +12,14 @@
1212
import sys
1313
from whatsapp_connector import WhatsAppOutput
1414
import pytz
15-
from typing import Any, Text, Dict, List
15+
from typing import Any, Text, Dict, List, Optional
1616
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
1717
logging.basicConfig(level=logging.DEBUG) # Força o nível global de debug
1818
logger = logging.getLogger(__name__)
1919
logger.setLevel(logging.DEBUG)
2020
from .utils import *
2121
import re
22+
from rasa_sdk.types import DomainDict
2223

2324
class ActionFallbackButtons(Action):
2425
def name(self):
@@ -83,13 +84,13 @@ def run(self, dispatcher, tracker, domain):
8384
return [
8485
FollowupAction("action_listen")
8586
]
86-
if last_action == "utter_menu_dicas":
87-
logger.debug(f"Fallback de menu_dicas")
88-
logger.debug(f"user_message: {user_message}")
89-
dispatcher.utter_message(text="Não consegui entender. Por favor aperte um dos botões.")
90-
return [
91-
FollowupAction("utter_menu_dicas")
92-
]
87+
# if last_action == "utter_menu_dicas":
88+
# logger.debug(f"Fallback de menu_dicas")
89+
# logger.debug(f"user_message: {user_message}")
90+
# dispatcher.utter_message(text="Não consegui entender. Por favor aperte um dos botões.")
91+
# return [
92+
# FollowupAction("utter_menu_dicas")
93+
# ]
9394
# Caso contrário, volta ao fallback padrão
9495
last_bot_message = None
9596
for event in reversed(tracker.events):
@@ -883,6 +884,62 @@ def run(self, dispatcher, tracker, domain):
883884

884885
return []
885886

887+
888+
889+
890+
class ActionPrecisoDeAjuda(Action):
891+
def name(self) -> Text:
892+
return "action_preciso_de_ajuda"
893+
894+
def _formata_itens(self, itens: List[Any]) -> Optional[str]:
895+
bullets = [str(x).strip() for x in itens if str(x).strip()]
896+
if not bullets:
897+
return None
898+
return "Recomendamos que você:\n \n" + "".join(f"• {b}\n" for b in bullets) + " \n⚠️ Em caso de urgência, ligue para a *Defesa Civil: 199*."
899+
900+
def run(
901+
self,
902+
dispatcher: CollectingDispatcher,
903+
tracker: Tracker,
904+
domain: DomainDict,
905+
) -> List[Dict[Text, Any]]:
906+
logger.debug("rodando action: action_preciso_de_ajuda")
907+
908+
FALLBACK_TEXTO = (
909+
"Recomendamos que você:\n\n"
910+
"• Separe agora mesmo um kit de sobrevivência com documentos, remédios e itens essenciais.\n\n"
911+
"• Tenha cuidado com fios caídos ou locais com risco de choque elétrico.\n\n"
912+
"• Evite contato com a água de enchentes, pois pode estar contaminada.\n\n"
913+
"⚠️ Em caso de urgência, ligue para a *Defesa Civil: 199*."
914+
)
915+
wordpress_url = os.getenv("WORDPRESS_URL")
916+
endpoint = f"{wordpress_url}/wp-json/dcp/v1/dicas?active=1"
917+
918+
texto_final: Optional[str] = None
919+
920+
if endpoint:
921+
try:
922+
# aceita JSON ou texto puro
923+
headers = {"Accept": "application/json, text/plain;q=0.5"}
924+
resp = requests.get(endpoint, headers=headers, timeout=8)
925+
resp.raise_for_status()
926+
927+
ctype = resp.headers.get("content-type", "")
928+
if "application/json" in ctype:
929+
data = resp.json()
930+
recomendacoes = data[0].get("recomendacoes")
931+
if recomendacoes:
932+
texto_final = self._formata_itens(recomendacoes)
933+
934+
except Exception as e:
935+
logger.error(f"[action_preciso_de_ajuda] erro consultando {endpoint}: {e}")
936+
937+
if not texto_final:
938+
texto_final = FALLBACK_TEXTO
939+
940+
dispatcher.utter_message(text=texto_final)
941+
return []
942+
886943
class ActionListarAbrigos(Action):
887944
def name(self):
888945
return "action_listar_abrigos"
@@ -957,44 +1014,43 @@ def run(self, dispatcher, tracker, domain):
9571014

9581015
return []
9591016

960-
class ActionBuscarDicas(Action):
961-
def name(self):
962-
return "action_buscar_dicas"
963-
964-
def run(self, dispatcher, tracker, domain):
965-
logger.debug("rodando action: action_buscar_dicas")
966-
tipo_dica = tracker.get_slot("dicas")
967-
if not tipo_dica:
968-
dispatcher.utter_message(text="Desculpe, não entendi o tipo de dica que você deseja. Por favor aperte em um dos botões.")
969-
return []
970-
971-
wordpress_url = os.getenv("WORDPRESS_URL")
972-
if not wordpress_url:
973-
dispatcher.utter_message(text="Erro: URL do WordPress não configurada.")
974-
return []
975-
976-
endpoint = f"{wordpress_url}/wp-json/dcp/v1/dicas?tipo={tipo_dica}"
977-
try:
978-
response = requests.get(endpoint, timeout=5)
979-
response.raise_for_status()
980-
dicas = response.json()
981-
982-
if not dicas:
983-
dispatcher.utter_message(text=f"Não encontrei dicas para '{tipo_dica}'.")
984-
return []
985-
986-
mensagem = f"Dicas para {tipo_dica}:\n"
987-
for dica in dicas:
988-
mensagem += f"- {dica}\n"
989-
990-
dispatcher.utter_message(text=mensagem)
991-
except requests.RequestException as e:
992-
dispatcher.utter_message(text="Desculpe, ocorreu um erro ao buscar as dicas.")
993-
# Aqui você pode adicionar um log do erro, se desejar
994-
return []
1017+
# class ActionBuscarDicas(Action):
1018+
# def name(self):
1019+
# return "action_buscar_dicas"
1020+
1021+
# def run(self, dispatcher, tracker, domain):
1022+
# logger.debug("rodando action: action_buscar_dicas")
1023+
# tipo_dica = tracker.get_slot("dicas")
1024+
# if not tipo_dica:
1025+
# dispatcher.utter_message(text="Desculpe, não entendi o tipo de dica que você deseja. Por favor aperte em um dos botões.")
1026+
# return []
1027+
1028+
# wordpress_url = os.getenv("WORDPRESS_URL")
1029+
# if not wordpress_url:
1030+
# dispatcher.utter_message(text="Erro: URL do WordPress não configurada.")
1031+
# return []
1032+
1033+
# endpoint = f"{wordpress_url}/wp-json/dcp/v1/dicas?tipo={tipo_dica}"
1034+
# try:
1035+
# response = requests.get(endpoint, timeout=5)
1036+
# response.raise_for_status()
1037+
# dicas = response.json()
1038+
1039+
# if not dicas:
1040+
# dispatcher.utter_message(text=f"Não encontrei dicas para '{tipo_dica}'.")
1041+
# return []
1042+
1043+
# mensagem = f"Dicas para {tipo_dica}:\n"
1044+
# for dica in dicas:
1045+
# mensagem += f"- {dica}\n"
1046+
1047+
# dispatcher.utter_message(text=mensagem)
1048+
# except requests.RequestException as e:
1049+
# dispatcher.utter_message(text="Desculpe, ocorreu um erro ao buscar as dicas.")
1050+
# # Aqui você pode adicionar um log do erro, se desejar
1051+
# return []
9951052

9961053

997-
from rasa_sdk import Action
9981054

9991055
class ActionPerguntaNotificacoes(Action):
10001056
def name(self) -> str:

data/nlu.yml

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -499,27 +499,27 @@ nlu:
499499
- Preciso sair de casa, pra onde vou?
500500
501501
502-
- intent: menu_dicas
503-
examples: |
504-
- dicas_de_seguranca
505-
- /dicas_de_seguranca
506-
- dicas de segurança
507-
- Como ficar em segurança
508-
509-
- intent: dicas_de
510-
examples: |
511-
- /dicas{"dicas": "enchente"}
512-
- /dicas{"dicas": "lixo"}
513-
- /dicas{"dicas": "calor"}
514-
- {"dicas": "enchente"}
515-
- {"dicas": "lixo"}
516-
- {"dicas": "calor"}
517-
- dicas de Calor
518-
- dicas de lixo
519-
- dicas de enchente
520-
- O que fazer quando tem enchente {"dicas": "enchente"}
521-
- O que fazer quando tem lixo {"dicas": "lixo"}
522-
- O que fazer quando tem calor {"dicas": "calor"}
502+
# - intent: menu_dicas
503+
# examples: |
504+
# - dicas_de_seguranca
505+
# - /dicas_de_seguranca
506+
# - dicas de segurança
507+
# - Como ficar em segurança
508+
509+
# - intent: dicas_de
510+
# examples: |
511+
# - /dicas{"dicas": "enchente"}
512+
# - /dicas{"dicas": "lixo"}
513+
# - /dicas{"dicas": "calor"}
514+
# - {"dicas": "enchente"}
515+
# - {"dicas": "lixo"}
516+
# - {"dicas": "calor"}
517+
# - dicas de Calor
518+
# - dicas de lixo
519+
# - dicas de enchente
520+
# - O que fazer quando tem enchente {"dicas": "enchente"}
521+
# - O que fazer quando tem lixo {"dicas": "lixo"}
522+
# - O que fazer quando tem calor {"dicas": "calor"}
523523

524524
- intent: sair
525525
examples: |

data/rules.yml

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ version: "3.1"
33
rules:
44
- rule: menu inicial
55
steps:
6-
- intent: menu_inicial
7-
- action: utter_menu_inicial
6+
- intent: menu_inicial
7+
- action: utter_menu_inicial
88

99
- rule: informar_risco
1010
steps:
11-
- intent: informar_risco
12-
- action: action_request_location
11+
- intent: informar_risco
12+
- action: action_request_location
1313

1414
- rule: Tentar novamente
1515
steps:
1616
- intent: tentar_novamente
1717
- action: action_repeat_last_message
18-
18+
1919
- rule: Processar localização e confirmar endereço
2020
steps:
2121
- intent: informar_localizacao
@@ -25,8 +25,8 @@ rules:
2525
steps:
2626
- intent: informar_endereco_texto
2727
- action: action_buscar_endereco_texto
28-
29-
- rule: Processar endereço localização
28+
29+
- rule: Processar endereço localização
3030
steps:
3131
- intent: informar_localizacao
3232
- action: action_buscar_endereco
@@ -60,7 +60,7 @@ rules:
6060
- action: action_corrigir_midias
6161
- action: utter_perguntar_por_midia
6262
- action: action_listen
63-
63+
6464
- rule: como está minha área
6565
steps:
6666
- intent: como_ta_minha_area
@@ -75,7 +75,7 @@ rules:
7575
- rule: O que fazer
7676
steps:
7777
- intent: preciso_de_ajuda
78-
- action: utter_preciso_de_ajuda
78+
- action: action_preciso_de_ajuda
7979
- action: utter_ajuda
8080

8181
- rule: Encontrar Abrigo
@@ -90,16 +90,16 @@ rules:
9090
- action: action_listar_contatos_emergencia
9191
- action: utter_pos_ajuda
9292

93-
- rule: Menu dicas
94-
steps:
95-
- intent: menu_dicas
96-
- action: utter_menu_dicas
93+
# - rule: Menu dicas
94+
# steps:
95+
# - intent: menu_dicas
96+
# - action: utter_menu_dicas
9797

98-
- rule: Menu dicas
99-
steps:
100-
- intent: dicas_de
101-
- action: action_buscar_dicas
102-
- action: utter_pos_ajuda_dicas
98+
# - rule: Menu dicas
99+
# steps:
100+
# - intent: dicas_de
101+
# - action: action_buscar_dicas
102+
# # - action: utter_pos_ajuda_dicas
103103

104104
- rule: Agendar verificação de inatividade (via conector)
105105
steps:
@@ -113,6 +113,7 @@ rules:
113113
- action: action_inatividade_timeout
114114
- action: action_listen
115115

116+
116117
- rule: Alterar nome
117118
steps:
118119
- intent: alterar_nome
@@ -150,7 +151,7 @@ rules:
150151
- rule: Pular descrição do risco sem correção
151152
condition:
152153
- slot_was_set:
153-
- contexto_classificacao_corrigida: false
154+
- contexto_classificacao_corrigida: false
154155
steps:
155156
- intent: pular_descricao_risco
156157
- action: utter_perguntar_por_midia
@@ -169,7 +170,7 @@ rules:
169170
- rule: Salvar descrição do risco sem correção
170171
condition:
171172
- slot_was_set:
172-
- contexto_classificacao_corrigida: false
173+
- contexto_classificacao_corrigida: false
173174
steps:
174175
- action: action_salvar_classificacao_risco
175176
- action: utter_perguntar_por_midia
@@ -190,30 +191,30 @@ rules:
190191
- intent: corrigir_endereco
191192
- action: action_corrigir_endereco
192193

193-
- rule: aceitar endereço
194+
- rule: aceitar endereço
194195
condition:
195196
- slot_was_set:
196197
- contexto_endereco_corrigido: false
197198
steps:
198-
- intent: affirm_address
199-
- action: utter_classificar_risco
199+
- intent: affirm_address
200+
- action: utter_classificar_risco
200201
- action: action_listen
201202

202203
- rule: aceitar endereço na correção
203204
condition:
204205
- slot_was_set:
205206
- contexto_endereco_corrigido: true
206207
steps:
207-
- intent: affirm_address
208-
- action: action_confirmar_relato
208+
- intent: affirm_address
209+
- action: action_confirmar_relato
209210
- action: action_confirmar_relato_pos_midia
210211
- action: action_listen
211212

212213
- rule: previnir ações do evento externo de agendamento
213214
steps:
214215
- intent: just_listen
215216
- action: action_listen
216-
217+
217218
- rule: listen apos action_agendar_inatividade
218219
steps:
219220
- action: action_agendar_inatividade
@@ -224,6 +225,7 @@ rules:
224225
- intent: agradecimento
225226
- action: action_agradecimento
226227

228+
227229
- rule: fallback texto
228230
steps:
229231
- intent: fallback_texto
@@ -239,3 +241,6 @@ rules:
239241
steps:
240242
- action: utter_saida_riscos
241243
- action: action_listen
244+
245+
246+

0 commit comments

Comments
 (0)