Sending custom data with dispatch.utter_message()

So when we do dispatch.utter_message(text="Hello");

It sends {text:"Hello"}

But i wanted to send one more parameter, like {text:“Hello”, param:“data”} when doing dispatch.utter_message()

How can I do that ?


You can just use python built-in string format or rasa text format:

dispatcher.utter_message(template="utter_template", ph="jack")

The result will be my name is Jack. Rasa replace placeholder variable ph, you could define more than one placeholders.

  - text: my name is {ph}

Thanks :), But I wanted to “receive” data on client side, Like

dispatcher.utter_message(text=“Hello”, id=“2”) should send an object {text:“hello”, id:“2”}

You can do

utter_message(text = 'Hello', json_message = {'id': 2})

Ref: Dispatcher

Hi, json message is still not there

Thank you for your reply. Actually what I was looking for is ability to pass more arbitary fields to the front end along with the text attribute So e.g.

instead of dispatcher.utter_message(text=“Hello”)

I wanted to send something like below all the way to frontend dispatcher.utter_message(text=“Hello”, field1=“imp_val_1”, field2=“imp_val_2”) and I want my web frontend to get all the 3 fields, viz., text, field1 and field2

So template does not solve my problem.

I did find something of interest, which was dispatcher.utter_message( json_message = {text: “Hello”, field1: “imp_val_1”, field2: “imp_val_2”})

However using this, what I receive on frontend is a blank message, so basically the response from RASA received by my web front end is blank :frowning:

Can you help me understand, this issue

dispatcher.utter_message(json_message={…}) is not sending anything on my socketio channel , to my frontend, can someone help me?

Can you share the code that sends and receives the message?

class ActionMiniStatement(Action):

    """Executes after restart of a session"""

    def name(self) -> Text:

        """Unique identifier of the action"""

        return "action_mini_statement"

    async def run(


        dispatcher: CollectingDispatcher,

        tracker: Tracker,

        domain: Dict[Text, Any],

    ) -> List[EventType]:

        """Executes the custom action"""

        transactions = profile_db.get_mini_statement(tracker.sender_id)


        dispatcher.utter_message(text="Here are your five recent transactions 😊")


        for k in transactions:

            statement = statement+(f'{date.fromisoformat(str(k.timestamp)[0:10]).strftime("%b %d, %Y")}     **₹{k.amount}**     to A/C: **XX{k.to_account_number[len(k.to_account_number)-4:len(k.to_account_number)]}**    \n.   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .     \n')

        dispatcher.utter_message(text = 'Hello', json_message = {'id': 2})

        return []

Following is the screenshot of bwoser console which shows that it doesnt sends json_message at all, as you can see it only sends text, have tried multiple times

Weird. Try adding buttons just to see what happens:

utter_message(text = 'Hello', buttons = [
    {"payload": "/affirm", "title": "Yes"},
    {"payload": "/deny", "title": "No"},

Yea sure, buttons are working, even the carousels and other payloads like attachments and generic templates

How are you sending carousels?

This is how i am sending, only json_message is never sent image

You can join this meet if u want,

Show me the format of the attachment message please, and how the front-end app receives it (by code and in the console)

it receives

socket.on(“bot_uttered”, data=>{


On front end which works but only in case of json_message its null

How is it being sent in the action?

message = {

            "type": "template",

            "payload": {

                "template_type": "generic",

                "elements": [


                        "title": "Health Insurance",

                        "image_url": "",

                        "buttons": [


                                "title": "Apply",

                                "url": "",

                                "type": "web_url"



                                "title": "Learn more",

                                "url": "",

                                "type": "web_url"








Okay, then just send {'id': 2} in attachment :slight_smile:

i was actually doing that, but i thought of finding a better way

I remember using attachment as well, I never used json_message. They’re the way to go :slight_smile:

If you want send a messaje with websocket as json used attachment message

dispatcher.utter_message(text = “Hi”, attachment = { “payload”:“location”})

and with rest send messaje used json_message dispatcher.utter_message(“Hi”,json_message={“payload”:“location”})