-
Does anyone know how to correctly parse the nested JSON structure when a Genesys Cloud webhook triggers a Node.js Lambda function? I am experiencing consistent failures in my CI pipeline where the Terraform apply succeeds, but the downstream Lambda handler throws a runtime error due to unexpected payload formatting.
-
I have configured a webhook in Genesys Cloud to POST to my AWS API Gateway endpoint. The webhook is triggered by a conversation event. The Lambda function is deployed via our GitHub Actions pipeline using the Terraform CX as Code provider. The goal is to extract the
conversation_idandevent_typefrom the payload. -
The Lambda handler code is as follows:
exports.handler = async (event, context) => {
try {
console.log('Received event:', JSON.stringify(event, null, 2));
const body = JSON.parse(event.body);
const conversationId = body.conversationId;
const eventType = body.eventType;
if (!conversationId) {
throw new Error('Missing conversationId in payload');
}
// Process conversation...
return {
statusCode: 200,
body: JSON.stringify({ message: 'Processed successfully' })
};
} catch (error) {
console.error('Error processing webhook:', error);
return {
statusCode: 500,
body: JSON.stringify({ error: error.message })
};
}
};
-
The error returned by CloudWatch Logs is:
TypeError: Cannot read properties of undefined (reading 'conversationId'). This indicates thatbodyis not an object withconversationId. However, when I inspect the logs,event.bodyis a stringified JSON object. I am usingJSON.parse(event.body)to convert it. Why isconversationIdundefined after parsing? -
I have verified the webhook configuration in Genesys Cloud. The payload sent by Genesys Cloud is:
{
"id": "12345678-1234-1234-1234-123456789012",
"eventType": "conversation:updated",
"conversationId": "87654321-4321-4321-4321-210987654321",
"timestamp": "2023-10-27T10:00:00Z"
}
-
Is there a specific header or content type issue that prevents proper parsing? I am using the default Lambda runtime settings. The Terraform configuration for the API Gateway stage is set to
passthrough_behaviorasWHEN_NO_MATCH. Could this affect the body parsing? -
I have also tried using
event.bodydirectly without parsing, but that results in a string, which does not haveconversationIdas a property. I need to access the properties as an object. How can I ensure the body is correctly parsed into an object with the expected properties?