Hey folks. I’m working on a .NET backend service that injects structured messages into Genesys Cloud web chat sessions using the Open Messaging API. The goal is to send a card with quick reply buttons to guide the guest through a troubleshooting flow.
I’m hitting the endpoint POST /api/v2/conversations/webmessaging/contacts/{conversationId}/messages with a JSON payload that looks like this:
{
"type": "message",
"content": {
"text": "Select an option below:",
"actions": [
{
"type": "quick_reply",
"label": "Check Order",
"payload": "check_order"
},
{
"type": "quick_reply",
"label": "Speak to Agent",
"payload": "agent_transfer"
}
]
},
"from": {
"id": "bot_user_id",
"name": "Bot"
}
}
The API returns a 201 Created status, and I can see the message in the conversation history via the GET /api/v2/conversations/webmessaging/contacts/{conversationId}/messages endpoint. The JSON structure seems correct based on the docs. However, when I look at the actual web chat widget from the guest’s perspective, the buttons don’t render. Instead, the guest just sees the plain text “Select an option below:”.
I’ve tried changing the type field to action_card as well, but that results in a 400 Bad Request saying the content type is invalid. I’m using the latest version of the .NET SDK for authentication, but I’m making the REST calls directly for the message injection.
Is there a specific capability flag I need to enable on the widget configuration? Or am I missing a required field in the action definition? The payload field feels like it might be the issue, but the docs are vague on whether it needs to match a specific schema.
Here’s the exact error I get when I try action_card:
{
"code": "bad_request",
"message": "Invalid message content type",
"status": 400
}
Any ideas? I’ve been staring at this for two days.