docs(platform): Document new webhook vendor connectors fixes DOC-343#1123
Conversation
Add documentation for ClickHouse, Snowflake, Redshift, SQS, and SNS webhook connectors powered by Svix. Update the webhooks overview to reference connector endpoints alongside standard HTTP webhooks. Co-authored-by: Pawan Jain <jainpawan21@users.noreply.github.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughA new Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Co-authored-by: Pawan Jain <jainpawan21@users.noreply.github.com>
✅ Deploy Preview for docs-novu ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for docs-novu ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Updated the webhook connectors guide to include details on Svix transformations, added specific instructions for data warehouse and message connectors, and clarified the setup process. Improved the structure and clarity of the content, including a new section on writing transformations and examples for better user guidance.
| ``` | ||
|
|
||
| Check out the <a href="https://docs.svix.com/receiving/verifying-payloads/how" target="_blank" rel="noopener noreferrer">Svix webhook verification documentation</a>, for more instructions and examples of how to verify signatures. | ||
| See the library documentation for more instructions and examples of how to verify signatures in other languages. |
There was a problem hiding this comment.
Restore verification reference
Both this page and content/docs/platform/developer/webhooks/webhooks.mdx still show the svix Webhook verifier, but the follow-up prose now points readers only to unspecified “library documentation” without naming or linking that library. Users setting up verification in another language, or trying to install and use the shown package correctly, lose the concrete verification docs path and can end up skipping or misimplementing signature checks.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/index.mdx
Line: 82
Comment:
**Restore verification reference**
Both this page and `content/docs/platform/developer/webhooks/webhooks.mdx` still show the `svix` `Webhook` verifier, but the follow-up prose now points readers only to unspecified “library documentation” without naming or linking that library. Users setting up verification in another language, or trying to install and use the shown package correctly, lose the concrete verification docs path and can end up skipping or misimplementing signature checks.
How can I resolve this? If you propose a fix, please make it concise.| | Private key | Yes | The private key for key-pair authentication. | | ||
| | Database name | No | The Snowflake database where events are stored. | | ||
| | Schema name | No | The schema containing the target table. | | ||
| | Table name | No | The table where events are stored. | |
There was a problem hiding this comment.
The Snowflake and Redshift connector sections describe inserting rows into a destination table, but both configuration tables mark Table name as optional. If a user follows the docs and leaves this blank, the connector has no target table to write transformed rows into, so setup cannot complete or deliveries can fail at insert time. Please mark Table name as required for both Snowflake and Redshift.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 165
Comment:
**Require target tables**
The Snowflake and Redshift connector sections describe inserting rows into a destination table, but both configuration tables mark `Table name` as optional. If a user follows the docs and leaves this blank, the connector has no target table to write transformed rows into, so setup cannot complete or deliveries can fail at insert time. Please mark `Table name` as required for both Snowflake and Redshift.
How can I resolve this? If you propose a fix, please make it concise.|
|
||
| In addition to standard HTTP webhook endpoints, Novu supports webhook connectors that deliver events directly to third-party services. Use them to route Novu events to data warehouses, analytics databases, and AWS messaging services without building a custom receiver. | ||
|
|
||
| Novu webhook delivery is powered by [Svix](https://docs.svix.com/introduction). Connector endpoints use Svix [transformations](https://docs.svix.com/transformations) to shape each event before it is written to your destination. |
There was a problem hiding this comment.
The surrounding webhook pages were changed to remove direct Svix brand references, but this new connectors page introduces a prominent Svix mention and link in the opening section. If the product-facing docs are meant to avoid vendor branding, the webhooks section now gives conflicting guidance across pages.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 10
Comment:
**Keep branding consistent**
The surrounding webhook pages were changed to remove direct Svix brand references, but this new connectors page introduces a prominent Svix mention and link in the opening section. If the product-facing docs are meant to avoid vendor branding, the webhooks section now gives conflicting guidance across pages.
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| | Cluster identifier | No | The Redshift cluster identifier. Required for provisioned clusters. | | ||
| | Workgroup name | No | The Redshift Serverless workgroup name. Required for serverless deployments. | | ||
| | Database user | No | The database user for provisioned clusters. | | ||
| | Database name | No | The Redshift database where events are stored. | | ||
| | Schema name | No | The schema containing the target table. | | ||
| | Table name | No | The table where events are stored. | |
There was a problem hiding this comment.
This table marks all Redshift target fields as optional, while the callout below says provisioned clusters require Cluster identifier and Database user, and serverless requires Workgroup name. A user can follow the table, omit all of these fields, and end up with an invalid Redshift connector configuration. Please mark the Redshift fields as conditionally required based on provisioned versus serverless setup.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 188-193
Comment:
**Mark conditional requirements**
This table marks all Redshift target fields as optional, while the callout below says provisioned clusters require `Cluster identifier` and `Database user`, and serverless requires `Workgroup name`. A user can follow the table, omit all of these fields, and end up with an invalid Redshift connector configuration. Please mark the Redshift fields as conditionally required based on provisioned versus serverless setup.
How can I resolve this? If you propose a fix, please make it concise.| function handler(webhook) { | ||
| switch (webhook.eventType) { | ||
| case "message.sent": | ||
| webhook.payload = { | ||
| event_type: webhook.eventType, | ||
| message_id: webhook.payload.id, | ||
| subscriber_id: webhook.payload.subscriberId, | ||
| channel: webhook.payload.channel, | ||
| created_at: webhook.payload.createdAt, | ||
| raw_payload: JSON.stringify(webhook.payload), | ||
| }; | ||
| break; | ||
| // Add a case for each subscribed event type | ||
| } | ||
| return webhook; |
There was a problem hiding this comment.
This sample only maps message.sent. For any other subscribed event type, the switch falls through and returns the original webhook payload, so a copied transformation can try to insert a raw event shape into the warehouse table and fail schema validation or create bad rows.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 89-103
Comment:
**Handle unmatched events**
This sample only maps `message.sent`. For any other subscribed event type, the `switch` falls through and returns the original webhook payload, so a copied transformation can try to insert a raw event shape into the warehouse table and fail schema validation or create bad rows.
How can I resolve this? If you propose a fix, please make it concise.| webhook.payload = { | ||
| eventType: webhook.eventType, | ||
| data: webhook.payload, | ||
| receivedAt: new Date().toISOString(), |
There was a problem hiding this comment.
new Date() records when the transformation runs, not when the Novu event happened. During retries or recovery, old events can be republished with a fresh receivedAt, so downstream workers or analytics can treat replayed events as new current events.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 120
Comment:
**Avoid replay timestamps**
`new Date()` records when the transformation runs, not when the Novu event happened. During retries or recovery, old events can be republished with a fresh `receivedAt`, so downstream workers or analytics can treat replayed events as new current events.
How can I resolve this? If you propose a fix, please make it concise.| 5. Enter a **Description** to identify this endpoint. | ||
| 6. Configure the connector-specific connection settings described in the sections below. | ||
| 7. For **data warehouse connectors** (ClickHouse, Snowflake, Redshift): define the **table schema** and write a **transformation** that maps Novu webhook payloads to rows matching that schema. See [Data warehouse connectors](#data-warehouse-connectors). | ||
| 8. For **message connectors** (Amazon SQS, Amazon SNS): review and customize the **transformation** that shapes the message body sent to the queue or topic. See [Message connectors](#message-connectors). | ||
| 9. Select the [event types](/platform/developer/webhooks/event-types) you want this endpoint to subscribe to. |
There was a problem hiding this comment.
These steps tell users to write the connector schema and transformation before selecting event types, but the transformation must handle every subscribed event type. That ordering encourages users to configure a transformation before they know the complete set of event shapes it must map, which can leave subscribed events unhandled.
Prompt To Fix With AI
This is a comment left during a code review.
Path: content/docs/platform/developer/webhooks/connectors.mdx
Line: 21-25
Comment:
**Select events first**
These steps tell users to write the connector schema and transformation before selecting event types, but the transformation must handle every subscribed event type. That ordering encourages users to configure a transformation before they know the complete set of event shapes it must map, which can leave subscribed events unhandled.
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Summary
Documents the newly available webhook connectors in the Novu dashboard: ClickHouse, Snowflake, Amazon Redshift, Amazon SQS, and Amazon SNS. These connectors let users route Novu webhook events directly to data warehouses and AWS messaging services.
Changes
Linear Issue: DOC-343
Summary by CodeRabbit
Greptile Summary
Confidence Score: 3/5
The changes are documentation-only, but several connector setup instructions can lead users to incomplete or invalid webhook configurations.
The review focused on the changed webhook documentation and identified concrete places where required configuration, event handling, timestamp semantics, and verification guidance are misleading or incomplete.
content/docs/platform/developer/webhooks/connectors.mdx, content/docs/platform/developer/webhooks/index.mdx
What T-Rex did
Prompt To Fix All With AI
Reviews (1): Last reviewed commit: "docs(webhooks): enhance webhook connecto..." | Re-trigger Greptile