KeyError in RASA while using custom payload

Hello,

From requirement side :- When user want to place an order, user will be shown two options to select as given below :-

veg_non_veg

Let’s say user selected Vegetarian as option, again from the veg menu options will be listed for user like below :-

veg_options

Finally user selected something from menu and then using custom action we are displaying it back to user like below :-

veg_options_done

If I look at from functionality point of view, my chatbot is working as expected, but on CMD I can see some error, can someone please help me to fix these errors and here is the screenshots of errors :-

I have mention my domain.yml, stories.yml, rules.yml, nlu.yml and custom action action_show_order_items.

domain.yml

version: "2.0"

intents:
  - place_order
  - vegetarian_order
  - non_vegetarian_order
  - order_items

entities:
  - food_choice

slots:
  food_choice:
    type: text
    influence_conversation: true

actions:
- action_show_order_items

responses:
  utter_place_order:
  - text: "What would you prefer :"
    buttons:
    - title: "Vegetarian"
      payload: /vegetarian_order
    - title: "Non-Vegetarian"
      payload: /non_vegetarian_order

  utter_vegetarian_order:
  - text: "What would you like to eat :"
    buttons:
    - title: "Mix veg"
      payload: '/order_items{"food_choice": "Mix veg"}'
    - title: "Paneer butter masala"
      payload: 'order_items{"food_choice": "Paneer butter masala"}'
    - title: "Mushroom masala"
      payload: '/order_items{"food_choice": "Mushroom masala"}'

  utter_non_vegetarian_order:
  - text: "What would you like to eat :"
    buttons:
    - title: "Egg curry"
      payload: '/order_items{"food_choice": "Egg curry"}'
    - title: "Chicken butter masala"
      payload: '/order_items{"food_choice": "Chicken butter masala"}'
    - title: "Fish curry"
      payload: '/order_items{"food_choice": "Fish curry"}'

  utter_order_items:
  - text: "Your {food_item} order has been confirmed."

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true

stories.yml

version: "2.0"

stories:
- story: place an vegetarian order
  steps:
  - intent: place_order
  - action: utter_place_order
  - intent: vegetarian_order
  - action: utter_vegetarian_order
  - intent: order_items
  - action: action_show_order_items

- story: place an non-vegetarian order
  steps:
  - intent: place_order
  - action: utter_place_order
  - intent: non_vegetarian_order
  - action: utter_non_vegetarian_order
  - intent: order_items
  - action: action_show_order_items

rules.yml

version: "2.0"

rules:

- rule: Place order
  steps:
  - intent: place_order
  - action: utter_place_order

nlu.yml

version: "2.0"

nlu:

- intent: place_order
  examples: |
    - want to order food
    - order food
    - food order
    - order food for me
    - food order for me
    - can you please order food for me
    - food for me
    - can you please place an order for me

custom action action_show_order_items

class ActionShowOrderItems(Action):
    def name(self) -> Text:
        return "action_show_order_items"

    def run(self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]
            ) -> List[Dict[Text, Any]]:

        food_item = tracker.get_slot('food_choice')
        print('User selected item : ', food_item)
        dispatcher.utter_message(response="utter_order_items", food_item=food_item)

        return[]

Thanks in Advanced :slightly_smiling_face:

Add double curly brackets as shown in the above examples and make necessary changes in other Ref:Responses

If still do let me tag, please. Good Luck!

1 Like

Thank you so much @nik202 for the solution, it’s working as expected without any error.

@naveensiwas no worries, please close this thread, and good luck!!