Cognigy webhook payload missing intent data for CXone routing

Trying to get dynamic routing working between Cognigy and CXone. The idea is simple: Cognigy handles the chat, determines the intent, then sends a webhook to CXone to route the user to the right queue.

The issue is the payload. When CXone receives the webhook, the intent field is null. I’ve checked the Cognigy side, the variable session.intent is populated correctly before the webhook action fires. I’m using the standard webhook action in Cognigy with the CXone endpoint.

Here is the JSON body I’m sending:

{
 "contactId": "{{session.contactId}}",
 "intent": "{{session.intent}}",
 "priority": 1
}

On the CXone side, I have a flow listening for this webhook. I’m using the GetRESTProxy to parse the incoming payload. The code looks like this:

ASSIGN result = GetRESTProxy.ParseJSON(request.body);
ASSIGN intentVal = result.intent;

When I log intentVal, it’s empty. If I hardcode the intent in the Cognigy payload, it works fine. So the CXone side can read the JSON, but the dynamic variable substitution seems to be stripping the value or sending it as an empty string.

I’ve tried:

  1. Escaping the double quotes in the Cognigy variable string. No change.
  2. Sending the payload as application/x-www-form-urlencoded. The variable comes through, but CXone rejects it because it expects JSON.
  3. Checking the CXone webhook subscription config. It’s set to POST and Content-Type: application/json.

Is there a specific way Cognigy formats these variables that CXone’s parser doesn’t like? Or am I missing a step in the webhook action configuration? The logs show the request hits CXone, but the body is malformed or empty regarding the intent field.

Any ideas on how to debug the actual payload received by CXone? I don’t have access to the raw HTTP headers on the CXone side right now.