Hello, everyone.
I’m still new to Rasa. I figured I should run an actions server for any custom actions I create. I then proceeded to make a FormAction custom action to ask several questions each time I find a specific intent.
The answer to these questions would be fixed buttons. By the end, I want to generate an answer (via my custom action) if certain slots were checked during this procedure.
I did specify which slots I want the form to fill. However, I’m getting this error in my actions prompt:
Exception occurred while handling uri: 'http://localhost:5055/webhook'
Traceback (most recent call last):
File "c:\anaconda3\envs\redflagv1\lib\site-packages\sanic\app.py", line 942, in handle_request
response = await response
File "c:\anaconda3\envs\redflagv1\lib\site-packages\rasa_sdk\endpoint.py", line 86, in webhook
result = await executor.run(action_call)
File "c:\anaconda3\envs\redflagv1\lib\site-packages\rasa_sdk\executor.py", line 280, in run
events = action(dispatcher, tracker, domain)
File "c:\anaconda3\envs\redflagv1\lib\site-packages\rasa_sdk\forms.py", line 511, in run
events = self._activate_if_required(dispatcher, tracker, domain)
File "c:\anaconda3\envs\redflagv1\lib\site-packages\rasa_sdk\forms.py", line 452, in _activate_if_required
for slot_name in self.required_slots(tracker):
File "c:\anaconda3\envs\redflagv1\lib\site-packages\rasa_sdk\forms.py", line 34, in required_slots
"A form must implement required slots that it has to fill"
NotImplementedError: A form must implement required slots that it has to fill
Here’s my actions file:
from typing import Dict, Text, Any, List, Union, Optional
from rasa_sdk import ActionExecutionRejection
from rasa_sdk import Tracker
from rasa_sdk.events import SlotSet
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.forms import FormAction, REQUESTED_SLOT
class FormDorToracica(FormAction):
def name(self) -> Text:
return "form_dor_toracica"
@staticmethod
def required_slots(tracker: Tracker) -> List[Text]:
return ["slot_tempo", "slot_tipo", "slot_irradiacao", "slot_fatores_piora", "slot_outros_sintomas"]
def submit(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any],
) -> List[Dict]:
"""Define what the form has to do
after all required slots are filled"""
if tracker.get_slot('slot_tempo') == 'minutos':
return [SlotSet("dor_toracica_final","pronto_atendimento")]
dispatcher.utter_message(template="utter_dor_toracica_resposta_pronto_atendimento")
This is my domain:
intents:
- tchau
- oi
- cardiovasc_dor_toracica
- cardiovasc_dor_toracica_tempo
- cardiovasc_dor_toracica_tipo
- cardiovasc_dor_toracica_irradiacao
- cardiovasc_dor_toracica_fatores_piora
- cardiovasc_dor_toracica_outros_sintomas
- negacao
- afirmacao
entities:
- sintoma
- quem
- topografia
- slot_tipo
- slot_tempo
- slot_irradiacao
- slot_fatores_piora
- slot_outros_sintomas
slots:
dor_toracica_final:
type: categorical
values:
- pronto_atendimento
- ambulatorio
slot_fatores_piora:
type: unfeaturized
slot_irradiacao:
type: unfeaturized
slot_outros_sintomas:
type: unfeaturized
slot_tempo:
type: unfeaturized
slot_tipo:
type: unfeaturized
templates:
utter_oi:
- text: Olá! Diga o que você está sentindo e vou te ajudar a descobrir onde você
deve procurar atendimento médico.
utter_tchau:
- text: Até mais!
utter_inicio_questoes:
- text: Certo. Eu vou fazer algum as perguntas sobre este sintoma para entender
melhor.
utter_ask_slot_tempo:
- text: Há quanto tempo essa dor começou?
buttons:
- title: Há alguns minutos
payload: '/cardiovasc_dor_toracica_tempo{"slot_tempo": "minutos"}'
- title: Há algumas horas
payload: '/cardiovasc_dor_toracica_tempo{"slot_tempo": "horas"}'
- title: Mais de um dia
payload: '/cardiovasc_dor_toracica_tempo{"slot_tempo": "mais_de_um_dia"}'
- title: Mais de um mês
payload: '/cardiovasc_dor_toracica_tempo{"slot_tempo": "mais_de_um_mes"}'
utter_ask_slot_tipo:
- text: Qual o tipo da sua dor?
buttons:
- title: Queimação
payload: '/cardiovasc_dor_toracica_tipo{"slot_tipo": "queimacao"}'
- title: Há algumas horas
payload: '/cardiovasc_dor_toracica_tipo{"slot_tipo": "aperto"}'
- title: Mais de um dia
payload: '/cardiovasc_dor_toracica_tipo{"slot_tipo": "pontada"}'
utter_ask_slot_irradiacao:
- text: A dor irradia (corre) para algum lugar?
buttons:
- title: Sim, para a mandíbula
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "mandibula"}'
- title: Sim, para o braço esquerdo
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "braco_esquerdo"}'
- title: Sim, para o braço direito
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "braco_direito"}'
- title: Sim, para as costas
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "costas"}'
- title: Sim, para o abdôme
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "abdome"}'
- title: Sim, para outro lugar
payload: '/cardiovasc_dor_toracica_irradiacao{"slot_irradiacao": "outro"}'
utter_ask_slot_fatores_piora:
- text: A dor piora com alguma ação destas abaixo?
buttons:
- title: Aos esforços
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "esforcos"}'
- title: Ao movimento
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "movimento"}'
- title: Quando puxo o ar
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "puxoar"}'
- title: Quando solto o ar
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "soltoar"}'
- title: Quando tosse
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "tosse"}'
- title: Quando deita
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "deita"}'
- title: A dor não piora com nenhuma destas ações
payload: 'cardiovasc_dor_toracica_fatores_piora{"slot_fatores_piora": "nenhum"}'
utter_dor_toracica_resposta_pronto_atendimento:
- text: Você precisa ir para o pronto atendimento!
utter_ask_slot_outros_sintomas:
- text: Além da dor, você tem algum outro desses sintomas?
buttons:
- title: Falta de ar
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "falta_ar"}'
- title: Tontura
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "tontura"}'
- title: Sonolência
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "sonolencia"}'
- title: Náuseas ou vômitos
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "nauseas_vomitos"}'
- title: Desmaios
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "desmaios"}'
- title: Sonolência
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "sonolencia"}'
- title: Sudorese (suor frio)
payload: 'cardiovasc_dor_toracica_outros_sintomas{"slot_outros_sintomas": "sudorese"}'
actions:
- utter_oi
- utter_tchau
- utter_entendi
- utter_inicio_questoes
- action_dor_toracica_PA
- utter_ask_slot_tempo
- utter_ask_slot_tipo
- utter_ask_slot_irradiacao
- utter_ask_slot_fatores_piora
- utter_ask_slot_outros_sintomas
- utter_dor_toracica_resposta_pronto_atendimento
forms:
- form_dor_toracica
Can anyone help me figuring out what’s going on? Thanks!