Custom Agent Desktop Embedded Client Not Receiving Web Messaging Typing Indicators

Building a custom agent desktop using the Genesys Cloud Platform SDK (JavaScript) and the embedded client framework. Voice interactions work perfectly. Web messaging interactions route correctly and agents can send and receive messages. But we cannot get typing indicators to display.

When the customer is typing in the Messenger widget, the standard Genesys Cloud agent desktop shows “Customer is typing…” in real time. Our custom desktop receives nothing.

We are subscribing to conversation events via the notification API:

const channel = await notificationsApi.postNotificationsChannels();
const ws = new WebSocket(channel.connectUri);

await notificationsApi.putNotificationsChannelSubscriptions(channel.id, [
 { id: `v2.users.${userId}.conversations` },
 { id: `v2.users.${userId}.conversations.messages` }
]);

ws.onmessage = (event) => {
 const data = JSON.parse(event.data);
 console.log('Event:', data.topicName, data.eventBody);
};

We receive message events (new messages arriving) but never a typing indicator event. Is there a separate topic subscription required for typing indicators? The documentation does not mention one.

Typing indicators for web messaging are not delivered through the Notification API WebSocket. They use a completely different transport mechanism.

For web messaging conversations, typing indicators are delivered through the Guest API WebSocket that is part of the web messaging session. The agent-side typing indicator is available through the Conversations API but it requires polling, not a push subscription.

To get customer typing indicators in your custom desktop, you need to poll this endpoint for each active messaging conversation:

GET /api/v2/conversations/messages/{conversationId}/communications/{communicationId}/typing

This returns { "typing": { "type": "On" } } when the customer is actively typing, and { "typing": { "type": "Off" } } when they stop. Poll every 2-3 seconds per active conversation.

During our Zendesk migration, we handled this by maintaining a polling loop for each active messaging conversation and clearing it when the conversation disconnects. It is not elegant but it is the only way to get typing indicators in a custom desktop currently.

Polling approach works but has scale issues. If your agents handle 3 concurrent chats each, and you have 50 agents, that is 150 polling requests every 2-3 seconds. You will hit rate limits quickly.

The alternative is to use the Genesys Cloud Embedded Client library (gc-embedded-client) instead of building the messaging UI from scratch. The embedded client handles typing indicators natively through an internal WebSocket channel that is separate from the Notification API.

<script src="https://apps.mypurecloud.com/embedded-client/latest/embedded-client.min.js"></script>
<script>
 const client = new window.purecloud.apps.EmbeddedClient();
 client.initialize({
 environment: 'mypurecloud.com',
 conversationId: activeConversationId
 });
</script>

The embedded client fires typing.start and typing.stop events that you can listen to in your custom desktop. This is how Genesys intends custom desktops to handle messaging interactions. The trade-off is less UI customization flexibility compared to building everything from the raw API.