# Insert slot value without return\[SlotSet()\]

**URL:** <https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359>\
**Category:** Rasa Open Source\
**Created:** [November 1, 2018, 9:50am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359 "2018-11-01T09:50:44Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [November 1, 2018, 9:50am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/1 "2018-11-01T09:50:44Z")

</div>

Hi, I want to insert slot value without using `return[SlotSet(' ',..)]`. How can I do that between the code?

Is there something like **`tracker.set_slot()`**

---

<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:** [November 2, 2018, 3:15pm UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/2 "2018-11-02T15:15:44Z")

</div>

you should do it with returning events as you mentioned

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [November 5, 2018, 4:01am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/3 "2018-11-05T04:01:26Z")

</div>

yeah I know it is in good practice but for setting that slot value I have to create a new custom action which don’t have any other work except setting slot value. That’s why I am searching for new method to setting slot.

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [January 4, 2019, 4:48am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/4 "2019-01-04T04:48:22Z")

</div>

Resolved!!! `tracker.slots[update_slot] = None`

Checked with print slot is set but having an issue that it does not save slot in stories, stories have old slot values. Will try to resolve later.

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [January 4, 2019, 3:10pm UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/5 "2019-01-04T15:10:05Z")

</div>

It should be `return [SlotSet(update_slot, None)]`

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [January 7, 2019, 4:47am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/6 "2019-01-07T04:47:46Z")

</div>

@Ghostvv Yeah that’s the another and popular method but there are some people who need to fix the slots using `tracker.slots[]` method because they want to update slot in the middle of **custom\_action**. I am trying to help those people.

P.S. Resolved my issue by using **SlotSet** method. Saw other posts so trying to help them.

---

<div class="post-metadata">

**Author:** ![gsagarvarma](https://avatars.discourse-cdn.com/v4/letter/g/b2d939/32.png) [@gsagarvarma](https://forum.rasa.com/u/gsagarvarma)\
**Post date:** [January 7, 2019, 6:17am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/7 "2019-01-07T06:17:09Z")

</div>

I am trying to update the slots in the middle of custom\_action, i have tried as you mentions above but i am facing the below error “TypeError: Object of type SlotSet is not JSON serializable” . Please help to resolve this issue. complete error as follows:

ERROR:flask.app:Exception on /webhook [POST] Traceback (most recent call last): File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\app.py”, line 2292, in wsgi\_app response = self.full\_dispatch\_request() File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\app.py”, line 1815, in full\_dispatch\_request rv = self.handle\_user\_exception(e) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\_cors\extension.py”, line 161, in wrapped\_function return cors\_after\_request(app.make\_response(f(\*args, \*\*kwargs))) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\app.py”, line 1718, in handle\_user\_exception reraise(exc\_type, exc\_value, tb) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\_compat.py”, line 35, in reraise raise value File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\app.py”, line 1813, in full\_dispatch\_request rv = self.dispatch\_request() File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\app.py”, line 1799, in dispatch\_request return self.view\_functionsrule.endpoint File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\_cors\decorator.py”, line 128, in wrapped\_function resp = make\_response(f(\*args, \*\*kwargs)) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\rasa\_core\_sdk\endpoint.py”, line 91, in webhook return jsonify(response) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\json\__init_\_.py”, line 321, in jsonify dumps(data, indent=indent, separators=separators) + ‘\n’, File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\json\__init_\_.py”, line 179, in dumps rv = _json.dumps(obj, \*\*kwargs) File "C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\simplejson\_init_.py", line 399, in dumps \*\*kw).encode(obj) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\simplejson\encoder.py”, line 296, in encode chunks = self.iterencode(o, \_one\_shot=True) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\simplejson\encoder.py”, line 378, in iterencode return _iterencode(o, 0) File "C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\flask\json\_init_.py", line 81, in default return \_json.JSONEncoder.default(self, o) File “C:\ProgramData\Miniconda2\envs\advchatbot\lib\site-packages\simplejson\encoder.py”, line 273, in default o. **class**. **name** ) TypeError: Object of type SlotSet is not JSON serializable.

Please help me, Thanks in advance.

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [January 7, 2019, 6:31am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/8 "2019-01-07T06:31:49Z")

</div>

Can you send me your code line like what you typed?

---

<div class="post-metadata">

**Author:** ![gsagarvarma](https://avatars.discourse-cdn.com/v4/letter/g/b2d939/32.png) [@gsagarvarma](https://forum.rasa.com/u/gsagarvarma)\
**Post date:** [January 7, 2019, 9:45am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/9 "2019-01-07T09:45:21Z")

</div>

Thank you for your response, when I am trying to update slots in middle of functions I got the above issue, now issue is resolved when I replace the return step as follows - return[SlotSet(’ ',…)]. Thank You.

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [January 7, 2019, 3:15pm UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/10 "2019-01-07T15:15:57Z")

</div>

so, when you update `tracker.slots`, you change the local copy of tracker, that is passed to the custom action, in order to notify `rasa_core` that the slot has changed, you need to return `SlotSet` event

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [January 8, 2019, 4:38am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/11 "2019-01-08T04:38:19Z")

</div>

Yeah, Thanx @Ghostvv for clarifying it.

---

<div class="post-metadata">

**Author:** ![abhishakskilrock](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/abhishakskilrock/32/4039_2.png) [@abhishakskilrock](https://forum.rasa.com/u/abhishakskilrock)\
**Post date:** [January 8, 2019, 4:38am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/12 "2019-01-08T04:38:32Z")

</div>

Resolved!!!

---

<div class="post-metadata">

**Author:** ![zaowad](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/zaowad/32/13245_2.png) [@zaowad](https://forum.rasa.com/u/zaowad)\
**Post date:** [February 11, 2021, 6:19am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/13 "2021-02-11T06:19:18Z")

</div>

@abhishakskilrock need to store some information as slots which are not actually part of required\_slots for my form. That’s why i was trying to update those slots using tracker.slots[‘slot\_name’]=slot\_value . I was doing it inside a slot validation method that needs to return the value of that particular slot. So, i can’t return anything but that slot inside that validation method. As you said i can see those slots being set just after using tracker.slots(). But if i call tracker.get\_slot() for those slots from a different method than it shows that the slots were not set. How did you resolve this? P.S : i can’t return SlotSet() event as the validation method should only return the particular slot the validation method was created for. Here is my code:

```auto
def validate_bank_account_number(
        self,
        value: Text,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> Dict[Text, Any]:
        """Validate cuisine value."""
        intent_found=tracker.get_intent_of_latest_message()
        #print(intent_found)
        if intent_found=="last_two_transaction":
            #raise ActionExecutionRejection(self.name(),f"Failed to extract slot with action {self.name()}",deactivate_form=True)
            #raise ActionExecutionRejection(self.name(),f"Failed to extract slot with action {self.name()}")
            #return self._deactivate()
            #dispatcher.utter_message(template="utter_wrong_bank_account_number")
            FollowupAction(name="validate_last_two_transaction_form") 
        list_valid=["জিরো","ওয়ান","টু","থ্রি","ফোর","ফাইভ","সিক্স","সেভেন","এইট","নাইন"]
        dict_word_to_digit={"জিরো":'0',"ওয়ান":'1',"টু":'2',"থ্রি":'3',"ফোর":'4',"ফাইভ":'5',"সিক্স":'6',"সেভেন":'7',"এইট":'8',"নাইন":'9'}
        print("i am from bank account section and my value is ",value)
        if type(value)==str:
            if len(value.split())==13:
                 return {"bank_account_number": value}
        if type(value)!=list:
            dispatcher.utter_message(template="utter_wrong_bank_account_number")
            return {"bank_account_number": None}
        if len(value)!=3:
            dispatcher.utter_message(template="utter_wrong_bank_account_number")
            return {"bank_account_number": None}
        else:
            if len(value[0].split())!=13 and len(value[1].split())!=13 and len(value[2].split())!=13:
                dispatcher.utter_message(template="utter_wrong_bank_account_number")
                return {"bank_account_number": None}
            else:
                get_value=value[2]
            bank_id=''
            for i in get_value.split():
                bank_id=bank_id+dict_word_to_digit[i]
            show_df=pd.read_csv('/home/zaowad/Desktop/rasa/bank_bot_v6/actions/demo_dataset.csv')
            try:
                val_collection=list(show_df[show_df['Bank ID']==int(bank_id)].values[0])
            except:
                dispatcher.utter_message(template="utter_wrong_bank_account_number")
                return {"bank_account_number": None}
            print(bank_id)
            print(val_collection)
            tracker.slots["temp_name"]=val_collection[3]  
            tracker.slots["temp_date_of_birth"]=val_collection[2]
            tracker.slots["temp_ballance"]=val_collection[4]    
            tracker.slots["temp_transaction"]= val_collection[5]
            print(tracker.get_slot("temp_name"))
            print(tracker.get_slot("temp_date_of_birth"))
            print(tracker.get_slot("temp_ballance"))
            print(tracker.get_slot("temp_transaction"))  
        return {"bank_account_number": bank_id}

```

---

<div class="post-metadata">

**Author:** ![zaowad](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/zaowad/32/13245_2.png) [@zaowad](https://forum.rasa.com/u/zaowad)\
**Post date:** [February 11, 2021, 6:20am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/14 "2021-02-11T06:20:02Z")

</div>

@akelad can you suggest any shorts of workaround?

---

<div class="post-metadata">

**Author:** ![Rifat](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/rifat/32/17305_2.png) [@Rifat](https://forum.rasa.com/u/Rifat)\
**Post date:** [October 11, 2021, 12:16pm UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/16 "2021-10-11T12:16:07Z")

</div>

I know it’s a bit late, However, you can try something

```auto
return [SlotSet("temp_name", val_collection[3]),
        SlotSet(["temp_date_of_birth", val_collection[2]),
        SlotSet("temp_ballance", val_collection[4]),
        SlotSet("temp_transaction", val_collection[5]),
        SlotSet("bank_account_number", bank_id),
]

```

should work. try

---

<div class="post-metadata">

**Author:** ![Adheesh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/adheesh/32/19150_2.png) [@Adheesh](https://forum.rasa.com/u/Adheesh)\
**Post date:** [January 27, 2022, 9:34am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/17 "2022-01-27T09:34:14Z")

</div>

Still looking for a way to set a slot without using `return [SlotSet(slot_name, slot_value)]` statement.

I am trying to set the slot from another slot’s validation method and hence I can’t use the return statement method

---

<div class="post-metadata">

**Author:** ![starmissw](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/starmissw/32/20858_2.png) [@starmissw](https://forum.rasa.com/u/starmissw)\
**Post date:** [August 1, 2022, 7:58am UTC](https://forum.rasa.com/t/insert-slot-value-without-return-slotset/2359/18 "2022-08-01T07:58:38Z")

</div>

Hello, I have the same problem, that is, I want to save the slot value without returning it. How do you finally solve this problem?

Looking forward to your reply, thank you very much!
