# List Slot - Append instead of override

**URL:** <https://forum.rasa.com/t/list-slot-append-instead-of-override/11645>\
**Category:** Rasa Open Source\
**Created:** [June 18, 2019, 10:18am UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645 "2019-06-18T10:18:10Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![tograssm](https://avatars.discourse-cdn.com/v4/letter/t/f475e1/32.png) [@tograssm](https://forum.rasa.com/u/tograssm)\
**Post date:** [June 18, 2019, 10:18am UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/1 "2019-06-18T10:18:10Z")

</div>

Hello!

When I started working on our bot, the List Slot could only store one entry, now I’m trying to change my code to use a List Slot instead of multiple slots with true/false values.

I got the following code to test the behavior of the List-Slot.

Domain:

```
intents:
  - start
  - greet
  - goodbye
  - affirm
  - deny
  - mood_great
  - mood_unhappy

actions:
- utter_greet
- utter_cheer_up
- utter_did_that_help
- utter_happy
- utter_goodbye
- action_show_list

slots:
   cats:
      type: list

entities:
  - cats

templates:
  utter_greet:
  - text: "Gib mir Keywords!"

  utter_cheer_up:
  - text: "Here is something to cheer you up:"
    image: "https://i.imgur.com/nGF1K8f.jpg"

  utter_did_that_help:
  - text: "Did that help you?"

  utter_happy:
  - text: "Great carry on!"

  utter_goodbye:
  - text: "Bye"

```

Story:

## happy path

```
* start
  - utter_greet
* mood_great
  - action_show_list

## happy path
* start
  - utter_greet
* mood_great
  - action_show_list
* mood_great
  - action_show_list
* mood_great
  - action_show_list

## happy path
* start
  - utter_greet
* mood_great
  - action_show_list
* mood_great
  - action_show_list

```

NLU:

```
## intent:mood_great
- Wir Fünf wollen uns ersteinmal [Kennenlernen](cats:kat_kennenlernen)
- Unser Projekt benötigt [Geld](cats:kat_finanzierungsideen) um zu starten.
- Es gibt [neue](cats:kat_neue_integrieren) Mitglieder in der Gruppe, die wir erst noch [kennenlernen](cats:kat_kennenlernen) müssen.
- Unser [Bürgermeister](cats:kat_beziehung_politik) stellt sich uns in den Weg.
- Wie können wir unser [Vorhaben](cats:kat_vision) [nachhaltig](cats:kat_nachhaltigkeit) gestalten?
- Wie können wir unser [Vorhaben](cats:kat_vision) im Einklang mit der [Umwelt](cats:kat_nachhaltigkeit) umsetzen?
- Es gibt so [viel zu tun](cats:kat_aufgabenverteilung), wie sollen wir wissen, [welches Problem](cats:kat_themenauswahl) wir zu erst angehen sollen?
- Wie sollen wir die [Aufgaben](cats:kat_aufgabenverteilung) verteilen?
- Wie sollen wir die [Aufgaben verteilen](cats:kat_aufgabenverteilung) ?
- [Welchen](cats:kat_entscheidungen_optionen) Weg sollen wir gehen?
- Wie finde ich [neue](cats:kat_neue_integrieren) Unterstützer für unser Projekt?
- Wie finde ich [neue Unterstützer](cats:kat_neue_integrieren) in unserer [Gemeinde](cats:kat_beziehung_politik)?
- Wie finde ich [neue Unterstützer](cats:kat_neue_integrieren) für unser Projekt?
- Wie finde ich neue [Unterstützer](cats:kat_beziehung_politik) für unser Projekt?
- Die Strukturen in der [Gemeindeverwaltung](cats:kat_beziehung_politik) machen es uns schwer, [Konsensentscheidungen](cats:kat_entscheidungen_optionen) zu finden
- Wir brauchen [Ideen](cats:kat_vision) um unsere [Gemeindevertreter](cats:kat_beziehung_politik) zu überzeugen.
- Wie ziehen wir [Entscheidungsträger](cats:kat_beziehung_politik) auf unsere Seite?
- Wie gewinnen wir die [Politik](cats:kat_beziehung_politik) Politik für unser Anliegen?
- Wie gewinnen wir den [Gemeinderat](cats:kat_beziehung_politik) Politik für unser Anliegen?
- Wir brauchen Hilfe bei der [Ideenfindung](cats:kat_vision)
- Wie kommen wir zu einer [Entscheidung](cats:kat_entscheidungen_optionen)
- Wie können wir unsere [Abstimmung](cats:kat_entscheidungen_optionen) optimal vorbereiten?
- [Verein](cats:kat_beziehung_politik)
- Wie lassen sich Stärken und [Ideen](cats:kat_vision) aller [Gemeindevertreter](cats:kat_beziehung_politik) bündeln
- Wie kann ich [Mitstreiter](cats:kat_kennenlernen) gewinnen?
- Wie können wir [Konflikte](cats:kat_entscheidungen_optionen) bewältigen?
- Wie bekommen wir [Geld](cats:kat_finanzierungsideen) für unser [Vorhaben](cats:kat_vision)?
- Wie können wir [Geld erwirtschaften](cats:kat_finanzierungsideen) ?
- Wie können wir [Geld](cats:kat_finanzierungsideen) erwirtschaften?
- Wie können wir Geld [erwirtschaften](cats:kat_finanzierungsideen) ?
- wie können wir neue [Businesspläne](cats:kat_finanzierungsideen) entwickeln?
- Wir wollen die [Umwelt](cats:kat_nachhaltigkeit) retten
- unsere [Dorfgemeinschaft](cats:kat_themenauswahl) braucht Hilfe
- wir wollen [Feste](cats:kat_aufgabenverteilung) feiern
- Wie können wir [Veranstaltungen](cats:kat_aufgabenverteilung) organisieren
- Wie können wir Veranstaltungen [organisieren](cats:kat_aufgabenverteilung)
- Wie [strukturieren](cats:kat_themenauswahl) wir die [Versammlung](cats:kat_aufgabenverteilung)?

```

Custom Action:

```
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import pprint
# This files contains your custom actions which can be used to run
# custom Python code.
#
# See this guide on how to implement these action:
# https://rasa.com/docs/rasa/core/actions/#custom-actions/

# This is a simple example for a custom action which utters "Hello World!"

class ActionShowList(Action):
    def name(self) -> Text:
        return "action_show_list"

    def run(self, dispatcher: CollectingDispatcher,
                     tracker: Tracker,
                      domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
         dispatcher.utter_message(pprint.pformat(tracker.get_slot("cats"), indent=4))

         return []

```

I started the bot and had following conversation:

 ![grafik](https://europe1.discourse-cdn.com/flex013/uploads/rasa/original/2X/8/8195b52e4ca31b81751b60380c31c358418d7e07.png)

My Questions are:

- is it right, that the List Slot only represents entities extracted from the last user message?
- is there a way to change the behavior, to append the entities instead of overriding?

---

<div class="post-metadata">

**Author:** ![akelad](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/akelad/32/69_2.png) [@akelad](https://forum.rasa.com/u/akelad)\
**Post date:** [June 27, 2019, 3:06pm UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/2 "2019-06-27T15:06:16Z")

</div>

Slots in general get filled with only the latest user message. If you want to append entities to your slot, then you should do this in a custom action by naming your slot differently to your entities

---

<div class="post-metadata">

**Author:** ![JialiuXu](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/jialiuxu/32/4529_2.png) [@JialiuXu](https://forum.rasa.com/u/JialiuXu)\
**Post date:** [August 11, 2019, 11:19pm UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/3 "2019-08-11T23:19:21Z")

</div>

Hi, I am having the same problem, is there another way to do that now?

---

<div class="post-metadata">

**Author:** ![akelad](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/akelad/32/69_2.png) [@akelad](https://forum.rasa.com/u/akelad)\
**Post date:** [August 16, 2019, 10:20am UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/4 "2019-08-16T10:20:45Z")

</div>

no, you still have to do this in a custom action atm i believe

---

<div class="post-metadata">

**Author:** ![argideritzalpea](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/argideritzalpea/32/7528_2.png) [@argideritzalpea](https://forum.rasa.com/u/argideritzalpea)\
**Post date:** [May 13, 2020, 5:05am UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/5 "2020-05-13T05:05:24Z")

</div>

Has this been changed in recent updates?

---

<div class="post-metadata">

**Author:** ![boristhescot](https://avatars.discourse-cdn.com/v4/letter/b/f0a364/32.png) [@boristhescot](https://forum.rasa.com/u/boristhescot)\
**Post date:** [April 1, 2021, 9:45pm UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/6 "2021-04-01T21:45:54Z")

</div>

Has anybody implemented the custom action solution and willing to share code?

---

<div class="post-metadata">

**Author:** ![rahma](https://avatars.discourse-cdn.com/v4/letter/r/ee59a6/32.png) [@rahma](https://forum.rasa.com/u/rahma)\
**Post date:** [July 17, 2021, 11:43am UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/7 "2021-07-17T11:43:14Z")

</div>

@akelad may you share the action code for appending slots ?

---

<div class="post-metadata">

**Author:** ![Gehova](https://avatars.discourse-cdn.com/v4/letter/g/2acd7d/32.png) [@Gehova](https://forum.rasa.com/u/Gehova)\
**Post date:** [September 23, 2021, 7:04pm UTC](https://forum.rasa.com/t/list-slot-append-instead-of-override/11645/8 "2021-09-23T19:04:04Z")

</div>

I had a similar problem where inside a form if a had the same intent that triggered the form without any entity it override my slot with an empty list. I fixed this with a custom mapping and two slots:

```auto
async def extract_slotform(self, dispatcher, tracker, domain):
    val = tracker.get_slot("slotform")
    nval = tracker.get_slot("slotentity")
    if val is None:
        val = []
    for n in nval:
        if n not in val:
            val.append(n)
    if not val:
        return {'slotform': None}
    return {'slotform': val}

```
