Looking for advice on WebRTC Softphone Integration via ServiceNow Data Actions

Looking for advice on handling the WebRTC softphone initialization sequence when triggering it through a ServiceNow Data Action. The current implementation attempts to establish a WebSocket connection to the Genesys Cloud platform immediately upon ticket creation, but the handshake fails intermittently with a 403 Forbidden error. The OAuth2 token is valid, as verified by direct API calls to /api/v2/users/me, yet the /api/v2/user/softphone endpoint rejects the connection request.

The environment is a standard EU-West-1 deployment, running the latest patch level for Genesys Cloud. The ServiceNow instance is London-based, which introduces negligible latency, so network timing issues are unlikely. The Data Action payload includes the userId, organizationId, and token in the header, matching the schema outlined in the Genesys Cloud WebRTC documentation. However, the response body returns a cryptic message: "error": "invalid_grant", "error_description": "The provided grant is invalid or has expired." This is perplexing because the token was generated less than 60 seconds prior to the request.

Is there a specific scope requirement beyond softphone:read and softphone:write that might be overlooked? The token exchange logic in ServiceNow uses the standard client credentials flow, but perhaps the WebRTC endpoint requires an additional assertion or a specific header configuration that is not explicitly documented. The issue is highly reproducible when the Data Action is triggered by a high-volume webhook event, suggesting a potential race condition or token caching issue within the ServiceNow integration framework.

We have also attempted to use the conversationId in the initial handshake, but the error persists. The logs indicate that the token is being passed correctly, yet the platform rejects it as if it were expired. This is critical for our real-time agent assist workflow, as the softphone connection must be established before the screen pop occurs. Any insights into the token validation logic for the WebRTC endpoint would be appreciated. Has anyone encountered similar issues with token expiration during rapid-fire Data Action executions?