Web Messaging Guest API: Typing indicators not triggering in Genesys Cloud

Stuck on implementing real-time typing indicators for our migrated web chat flow. We are rebuilding the Five9 engagement layer using the Genesys Cloud Web Messaging Guest API. The basic message send/receive works fine via the /api/v2/conversations/messaging/messages endpoint, but we cannot get the typing state to sync.

I am attempting to send a typing event payload as defined in the documentation, but the agent console never shows the ‘user is typing’ status. Here is the JSON payload I am POSTing to the messaging endpoint:

{
 "to": { "id": "conversation-id-here" },
 "type": "typing",
 "from": { "id": "guest-id-here" },
 "text": ""
}

The API returns a 201 Created response with a message ID, so the request is syntactically valid. However, the text field being empty might be causing the backend to ignore it, or perhaps I need to use a different endpoint for state updates versus message content. Is there a specific flag or separate event stream I should be pushing to for typing indicators in the Guest API? We need this parity with the old Five9 setup where keystrokes triggered the status immediately.

Thanks for the help.

make sure you are hitting the correct endpoint and payload structure because the guest api is picky. i was stuck on this too while building a laravel wrapper. the issue is usually not the http method but the content inside the json body. you need to send a post to /api/v2/conversations/messaging/contacts/{contactId}/messages with a specific action type.

here is the guzzle setup i use in php:

$client->post("contacts/{$contactId}/messages", [
 'json' => [
 'action' => 'typing',
 'content' => [
 'type' => 'text',
 'text' => ''
 ]
 ]
]);

note that the action field must be explicitly set to typing. also ensure your oauth token has the messaging:contact scope. if you just send a standard message payload with an empty body, it might get ignored by the platform. i found that adding a small delay between rapid typing events helps avoid rate limiting on the websocket channel.