Setting Slots outside the Action Class when Using Rasa SDK

Hi everyone,

TL;DR: How do you set a Slot from Python when using the Actions SDK server?

Longer version with context:

I have been following the Rasa documentation to build my bot, but there is one section that I’m finding unclear. In Events the ´Note´ at the start of the page says that if you are running a Custom Action on the SDK you have to use rasa_sdk.events instead of the events from Core. But the two don’t seem interchangable and there is no further information on this. The Event from Core is an instance of a class, and the Event from the SKD is a Dict[Text, Any].

Ultimately, what I’m trying to do is to set a slot from Python, e.g. ‘username’, whilst running all of my actions from an Actions Server. I’m testing this by running:

  1. One script that starts the actions server
  2. Another script sets slot ‘username’ the value ‘Alex’ and then calls a greet intent.
  3. If it worked well, the Actions Server should return: ‘Hello Alex’ instead of the default username value (in this case ‘friend’).

Thank you in advance a lot! I hope you can help!

I solved my issue, for anybody that is interested in the answer, the code goes as follows:

from rasa.core.channels.channel import UserMessage
from rasa.core.events import SlotSet

dst = agent.tracker_store.get_or_create_tracker(UserMessage.DEFAULT_SENDER_ID)
ss = SlotSet('username', 'Alex')
dst.update(ss)
agent.tracker_store.save(dst)