Genesys Cloud Guest WebSocket: Handling auth handshake and message sending

We are building a custom chat UI and decided to bypass the standard widget in favor of the raw Guest WebSocket API. The initial connection to the endpoint works, but the authentication handshake seems fragile. We send the token in the first message, yet subsequent text payloads fail with a 400 error. The payload structure is:

{"type": "message", "content": "hello"}

Is there a specific sequence required after the auth step? The docs are vague on the state transition.