DEV Community

loading...
Cover image for RASA - requested_slot

RASA - requested_slot

Petr Janik
I'm a student of applied informatics at Masaryk University in Brno. I love coding, especially in React, Java and Python.
Updated on ・2 min read

requested_slot is a special slot that is automatically added to the domain with type text. Its value is the name of the next slot that will be filled during the form loop. This value will be ignored during conversations by default.

If you want to change this behavior, you need to add the requested_slot to your domain file as a categorical slot with influence_conversation set to true.

# domain.yml
# ... previous content ...
slots:
# ... previous slots ...
  requested_slot:
    type: categorical
    influence_conversation: true
    values:
      - email
      - frequency
Enter fullscreen mode Exit fullscreen mode

Here we are also declaring what values we expect this slot to have.

You might want to do this if you want to handle your unhappy paths differently, depending on what slot is currently being asked from the user. For example, if the user responds to one of the chatbot's questions with another question, like "Why do you need to know that?", the response to this explain intent depends on where we are in the story.

Let's create the explain intent.

# data/nlu.yml
# ... previous content ..
  - intent: explain
    examples: |
      - why
      - why do you need to know that
      - why should i give you this information
      - why are you asking?
      - why is this needed?
Enter fullscreen mode Exit fullscreen mode

And add it to domain.yml.

# domain.yml
# ... previous content ..
intents:
  # ... previous intents ..
  - explain
Enter fullscreen mode Exit fullscreen mode

Now, let's create responses explaing to the user why the chatbot needs certain information.

# domain.yml
# ... previous content ...
  utter_explain_email:
    - text: So that I know where to send it.
  utter_explain_frequency:
    - text: So that I know how often to send it.
Enter fullscreen mode Exit fullscreen mode

Create three new stories:

# data/stories.yml
# ... previous content ...
  - story: explain email
    steps:
      - intent: subscribe
      - action: newsletter_form
      - active_loop: newsletter_form
      - slot_was_set:
          - requested_slot: email
      - intent: explain
      - action: utter_explain_email
      - action: newsletter_form

  - story: explain frequency
    steps:
      - intent: subscribe
      - action: newsletter_form
      - active_loop: newsletter_form
      - slot_was_set:
          - requested_slot: email
      - slot_was_set:
          - requested_slot: frequency
      - intent: explain
      - action: utter_explain_frequency
      - action: newsletter_form

  - story: explain both email and frequency
    steps:
      - intent: subscribe
      - action: newsletter_form
      - active_loop: newsletter_form
      - slot_was_set:
          - requested_slot: email
      - intent: explain
      - action: utter_explain_email
      - action: newsletter_form
      - slot_was_set:
          - requested_slot: frequency
      - intent: explain
      - action: utter_explain_frequency
      - action: newsletter_form
Enter fullscreen mode Exit fullscreen mode

Let's try our assistant: rasa train && rasa shell.

Chat with explaining email and frequency

So cool!

You can learn more about requested_slot in the documentation.

In the next chapter, we will look at sessions.

Repository for this tutorial:

You can checkout the state of the repository at the end of this tutorial by running:

git clone --branch 10-requested-slot git@github.com:petr7555/rasa-dev-tutorial.git
Enter fullscreen mode Exit fullscreen mode

Discussion (0)