Is it possible to validate the X-Genesys-Signature header inside a Genesys Cloud Data Action before processing the payload?
Background
We route outbound event notifications to a custom endpoint via EventBridge. The payload contains sensitive PII, so replay protection is mandatory. I wrote a Node.js middleware that computes HMAC-SHA256 over the raw body using a shared secret.
Issue
Verification works locally. When deployed, the Data Action consistently drops the request with a 401 Unauthorized. The incoming header format looks like t=1716234567,v1=a8f5f167f44f4964e6c998dee827110c. I strip the timestamp and compare the hash, but it never matches. The retry pattern in the orchestrator fires three times before dead-lettering.
Troubleshooting
I logged the raw buffer and the computed digest. They diverge immediately. Could the platform be URL-encoding the body before signing? Here is the verification snippet:
const hmac = crypto.createHmac('sha256', process.env.GC_SECRET);
hmac.update(`t=${req.headers['x-request-timestamp']}&${rawBody}`);
const digest = hmac.digest('hex');
Any idea why the hash mismatch occurs in production?