-
Notifications
You must be signed in to change notification settings - Fork 111
Channels providers integration #1004
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Content for SMS home page
✅ Deploy Preview for docs-novu ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
WalkthroughRestructures integration docs into provider-centric, stepwise workflows for Email, SMS, Push, and Chat; introduces provider galleries and "target a specific provider" guidance; expands Integrations overview with Provider vs Integration and override scopes; adds demo integration page and updates navigation/meta files. No public API changes. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
content/docs/platform/integrations/sms/index.mdx(5 hunks)content/docs/platform/integrations/sms/meta.json(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.
Applied to files:
content/docs/platform/integrations/sms/index.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
🔇 Additional comments (3)
content/docs/platform/integrations/sms/meta.json (1)
1-4: Metadata update aligns with the new documentation structure.The change to reference
(providers)reflects the shift toward a provider-centric navigation structure, consistent with the restructured index.mdx documentation.content/docs/platform/integrations/sms/index.mdx (2)
75-101: Override SMS settings section is well-structured.The code example clearly demonstrates SMS overrides for
to,from, andcontentfields, with proper annotations for documentation highlighting. The example is correct and helpful.
103-133: "Target a specific provider" section is well-designed.This new section effectively explains the
integrationIdentifieruse case with a practical example (transactional vs. security SMS), and the code example correctly demonstrates the feature. The feature is clearly documented.
| The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations. | ||
|
|
||
| With the SMS channel, you can: | ||
| ## How SMS delivery works in Novu | ||
|
|
||
| - **Switch Providers Effortlessly:** Integrate popular services like Twilio, Nexmo, or a custom provider | ||
| - **Deliver at Scale:** Handle high-volume messaging with confidence | ||
| - **Customize and Track:** Tailor SMS content dynamically and monitor delivery status in real time | ||
| Here’s the typical flow for sending an email notification through Novu: | ||
|
|
||
| ## Key Features | ||
| <Steps> | ||
| <Step> | ||
|
|
||
| - **Dynamic Messaging:** Inject user-specific data into messages for personalization | ||
| - **Multi-Provider Support:** Switch or combine providers to maximize reliability | ||
| - **Delivery Insights:** Track message delivery, failures, and user engagement | ||
| - **Fallback Mechanisms:** Ensure reliable messaging with backup providers | ||
| - **Template Management:** Simplify content creation with reusable SMS templates | ||
| - **Streamlined API Integration:** Easily connect your backend for automated messaging workflows | ||
| ### Add an email provider | ||
|
|
||
| ## Common Use Cases | ||
| Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers. | ||
|
|
||
| - **Transactional Notifications:** Send OTPs, receipts, or order updates instantly | ||
| - **Marketing Campaigns:** Deliver promotional offers and updates to your audience | ||
| - **Critical Alerts:** Notify users of urgent events, like security breaches or system outages | ||
| - **Reminders and Scheduling:** Automate reminders for appointments, events, or deadlines | ||
| To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider. | ||
|
|
||
| </Step> | ||
| <Step> | ||
| ### Add the email channel to your workflow | ||
|
|
||
| Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow. | ||
| </Step> | ||
| <Step> | ||
| ### Define the SMS content | ||
|
|
||
| ## Sending SMS overrides | ||
| Within the Email step editor, write the message body. The editor supports dynamic data for personalized content. | ||
|
|
||
| The overrides field supports a `sms` property and `from`, `to`, `content` field overrides. This allows you to send a message to a different recipient, from a different sender, or with a different content. | ||
| </Step> | ||
| <Step> | ||
| ### Store subscriber phone number | ||
|
|
||
| Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails. You can store subscribers phone number using the Novu API, or SDK. | ||
| </Step> | ||
| <Step> | ||
| ### Trigger the workflow | ||
|
|
||
| [Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu. | ||
| Novu automatically: | ||
| - Resolves the subscriber. | ||
| - Selects the correct provider. | ||
| - Renders the email template. | ||
| - Delivers the message through the configured email integration. | ||
| </Step> | ||
| </Steps> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix systematic copy-paste errors: "email" should be "SMS" throughout the workflow steps.
The step-by-step workflow structure is excellent, but multiple instances incorrectly reference "email" instead of "SMS." These appear to be copy-paste errors from email integration documentation:
- Line 12: "sending an email notification" → should be "SMS notification"
- Line 17: "Add an email provider" → should be "SMS provider"
- Line 25: "Add the email channel" → should be "SMS channel"
- Line 32: "Within the Email step editor" → should be "SMS step editor"
- Line 38: "receive emails" → should be "receive SMS"
- Line 47: "Renders the email template" → should be "SMS template"
- Line 48: "through the configured email integration" → should be "SMS integration"
Apply this diff to correct all references:
-Here's the typical flow for sending an email notification through Novu:
+Here's the typical flow for sending an SMS notification through Novu:
-### Add an email provider
+### Add an SMS provider
-### Add the email channel to your workflow
+### Add the SMS channel to your workflow
-Within the Email step editor, write the message body.
+Within the SMS step editor, write the message body.
-Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails.
+Novu automatically sends the notification to the phone number stored on the subscriber's profile. You must ensure that this field is set for any subscriber who needs to receive SMS.
-Renders the email template.
-Delivers the message through the configured email integration.
+Renders the SMS template.
+Delivers the message through the configured SMS integration.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations. | |
| With the SMS channel, you can: | |
| ## How SMS delivery works in Novu | |
| - **Switch Providers Effortlessly:** Integrate popular services like Twilio, Nexmo, or a custom provider | |
| - **Deliver at Scale:** Handle high-volume messaging with confidence | |
| - **Customize and Track:** Tailor SMS content dynamically and monitor delivery status in real time | |
| Here’s the typical flow for sending an email notification through Novu: | |
| ## Key Features | |
| <Steps> | |
| <Step> | |
| - **Dynamic Messaging:** Inject user-specific data into messages for personalization | |
| - **Multi-Provider Support:** Switch or combine providers to maximize reliability | |
| - **Delivery Insights:** Track message delivery, failures, and user engagement | |
| - **Fallback Mechanisms:** Ensure reliable messaging with backup providers | |
| - **Template Management:** Simplify content creation with reusable SMS templates | |
| - **Streamlined API Integration:** Easily connect your backend for automated messaging workflows | |
| ### Add an email provider | |
| ## Common Use Cases | |
| Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers. | |
| - **Transactional Notifications:** Send OTPs, receipts, or order updates instantly | |
| - **Marketing Campaigns:** Deliver promotional offers and updates to your audience | |
| - **Critical Alerts:** Notify users of urgent events, like security breaches or system outages | |
| - **Reminders and Scheduling:** Automate reminders for appointments, events, or deadlines | |
| To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider. | |
| </Step> | |
| <Step> | |
| ### Add the email channel to your workflow | |
| Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow. | |
| </Step> | |
| <Step> | |
| ### Define the SMS content | |
| ## Sending SMS overrides | |
| Within the Email step editor, write the message body. The editor supports dynamic data for personalized content. | |
| The overrides field supports a `sms` property and `from`, `to`, `content` field overrides. This allows you to send a message to a different recipient, from a different sender, or with a different content. | |
| </Step> | |
| <Step> | |
| ### Store subscriber phone number | |
| Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails. You can store subscribers phone number using the Novu API, or SDK. | |
| </Step> | |
| <Step> | |
| ### Trigger the workflow | |
| [Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu. | |
| Novu automatically: | |
| - Resolves the subscriber. | |
| - Selects the correct provider. | |
| - Renders the email template. | |
| - Delivers the message through the configured email integration. | |
| </Step> | |
| </Steps> | |
| The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations. | |
| ## How SMS delivery works in Novu | |
| Here’s the typical flow for sending an SMS notification through Novu: | |
| <Steps> | |
| <Step> | |
| ### Add an SMS provider | |
| Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers. | |
| To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider. | |
| </Step> | |
| <Step> | |
| ### Add the SMS channel to your workflow | |
| Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow. | |
| </Step> | |
| <Step> | |
| ### Define the SMS content | |
| Within the SMS step editor, write the message body. The editor supports dynamic data for personalized content. | |
| </Step> | |
| <Step> | |
| ### Store subscriber phone number | |
| Novu automatically sends the notification to the phone number stored on the subscriber's profile. You must ensure that this field is set for any subscriber who needs to receive SMS. You can store subscribers phone number using the Novu API, or SDK. | |
| </Step> | |
| <Step> | |
| ### Trigger the workflow | |
| [Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu. | |
| Novu automatically: | |
| - Resolves the subscriber. | |
| - Selects the correct provider. | |
| - Renders the SMS template. | |
| - Delivers the message through the configured SMS integration. | |
| </Step> | |
| </Steps> |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 8 to 50,
multiple copy-paste references to "email" should be replaced with "SMS": change
"sending an email notification" to "sending an SMS notification", "Add an email
provider" to "Add an SMS provider", "Add the email channel" to "Add the SMS
channel", "Within the Email step editor" to "Within the SMS step editor",
"receive emails" to "receive SMS", "Renders the email template" to "Renders the
SMS template", and "through the configured email integration" to "through the
configured SMS integration" so all step text consistently refers to SMS rather
than email.
| ## Configuring SMS providers | ||
|
|
||
| To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers. | ||
|
|
||
| ### Default sender settings | ||
|
|
||
| The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect. You can override this field during trigger if necessary. | ||
|
|
||
| ### Provider authentication | ||
|
|
||
| You must provide credentials specific to your email provider, such as: | ||
| - API key | ||
| - Auth token | ||
| - Account SID | ||
| - Username | ||
| - Password. | ||
|
|
||
| Each provider has different requirements. | ||
|
|
||
| <Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix copy-paste errors in configuration section: "email" should be "SMS".
Additional instances of "email" incorrectly used in the configuration section:
- Line 56: "specific to that email providers" → should be "SMS providers"
- Line 60: "any email provider that you connect" → should be "SMS provider"
- Line 64: "your email provider" → should be "SMS provider"
Apply this diff:
-To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers.
+To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that SMS provider.
-The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect.
+The **From** field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect.
-You must provide credentials specific to your email provider, such as:
+You must provide credentials specific to your SMS provider, such as:📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ## Configuring SMS providers | |
| To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers. | |
| ### Default sender settings | |
| The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect. You can override this field during trigger if necessary. | |
| ### Provider authentication | |
| You must provide credentials specific to your email provider, such as: | |
| - API key | |
| - Auth token | |
| - Account SID | |
| - Username | |
| - Password. | |
| Each provider has different requirements. | |
| <Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout> | |
| ## Configuring SMS providers | |
| To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that SMS provider. | |
| ### Default sender settings | |
| The **From** field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect. You can override this field during trigger if necessary. | |
| ### Provider authentication | |
| You must provide credentials specific to your SMS provider, such as: | |
| - API key | |
| - Auth token | |
| - Account SID | |
| - Username | |
| - Password. | |
| Each provider has different requirements. | |
| <Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout> |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 54 to 73, there
are copy-paste errors using "email" instead of "SMS"; update the text to read:
"specific to that SMS provider" (line ~56), "any SMS provider that you connect"
(line ~60), and "your SMS provider" (line ~64), and adjust surrounding wording
for correct singular/plural agreement if needed.
| ## Supported providers | ||
|
|
||
| Here are the SMS providers that are currently supported by Novu. Select any provider to see its detailed setup guide. | ||
|
|
||
| <Cards> | ||
| <Card title="46elks" href="/platform/integrations/sms/46elks"> Learn how to use the 46elks provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Africa's Talking" href="/platform/integrations/sms/africas-talking"> Learn how to use the Africa's Talking provider to send SMS notifications using Novu.</Card> | ||
| <Card title="AWS SNS" href="/platform/integrations/sms/aws-sns"> Learn how to use the AWS SNS provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Azure SMS" href="/platform/integrations/sms/azure-sms"> Learn how to use the Azure SMS provider to send SMS notifications using Novu.</Card> | ||
| <Card title="BulkSMS" href="/platform/integrations/sms/bulksms"> Learn how to use the BulkSMS provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Clickatell" href="/platform/integrations/sms/clickatell"> Learn how to use the Clickatell provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Clicksend" href="/platform/integrations/sms/clicksend"> Learn how to use the Clicksend provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Firetext" href="/platform/integrations/sms/firetext"> Learn how to use the Firetext provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Gupshup" href="/platform/integrations/sms/gupshup"> Learn how to use the Gupshup provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Infobip - SMS" href="/platform/integrations/sms/infobip"> Learn how to use the Infobip - SMS provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Kannel" href="/platform/integrations/sms/kannel"> Learn how to use the Kannel provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Kudosity" href="/platform/integrations/sms/kudosity"> Learn how to use the Kudosity provider to send SMS notifications using Novu.</Card> | ||
| <Card title="MessageBird" href="/platform/integrations/sms/messagebird"> Learn how to use the MessageBird provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Nexmo" href="/platform/integrations/sms/nexmo"> Learn how to use the Nexmo provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Plivo" href="/platform/integrations/sms/plivo"> Learn how to use the Plivo provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Sendchamp" href="/platform/integrations/sms/sendchamp"> Learn how to use the Sendchamp provider to send SMS notifications using Novu.</Card> | ||
| <Card title="SimpleTexting" href="/platform/integrations/sms/simpletexting"> Learn how to use the SimpleTexting provider to send SMS notifications using Novu.</Card> | ||
| <Card title="SMS Central" href="/platform/integrations/sms/sms-central"> Learn how to use the SMS Central provider to send SMS notifications using Novu.</Card> | ||
| <Card title="SMS77" href="/platform/integrations/sms/sms77"> Learn how to use the SMS77 provider to send SMS notifications using Novu.</Card> | ||
| <Card title="SNS" href="/platform/integrations/sms/sns"> Learn how to use the SNS provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Telnyx" href="/platform/integrations/sms/telnyx"> Learn how to use the Telnyx provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Termii" href="/platform/integrations/sms/termii"> Learn how to use the Termii provider to send SMS notifications using Novu.</Card> | ||
| <Card title="Twilio" href="/platform/integrations/sms/twilio"> Learn how to use the Twilio provider to send SMS notifications using Novu.</Card> | ||
| </Cards> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Supported providers gallery is comprehensive and well-organized.
The Cards component provides an excellent visual showcase of 25+ SMS providers with clear navigation. The consistent description format and href links create a usable provider directory.
Verify that all provider documentation pages linked in the href attributes (e.g., /platform/integrations/sms/46elks, /platform/integrations/sms/twilio) exist and are correctly named.
🏁 Script executed:
#!/bin/bash
# Description: Verify that all SMS provider documentation pages exist
# Extract all hrefs from the Supported providers section
provider_paths=$(grep -oP '(?<=href="/platform/integrations/sms/)[^"]+' content/docs/platform/integrations/sms/index.mdx)
# Check which provider pages exist
echo "Checking provider documentation pages..."
for provider in $provider_paths; do
provider_file="content/docs/platform/integrations/sms/${provider}.mdx"
if [ -f "$provider_file" ]; then
echo "✓ Found: $provider"
else
echo "✗ Missing: $provider"
fi
doneLength of output: 495
Looking at the verification results, I need to check if the provider documentation pages exist under a different directory structure or naming convention before finalizing the assessment.
Critical issue: All 23 SMS provider documentation pages are missing from the repository.
The Novu documentation includes all listed providers (46elks, Africa's Talking, AWS SNS, Azure SMS, BulkSMS, Clickatell, Clicksend, Firetext, Gupshup, Kannel, MessageBird, Nexmo, Plivo, Sendchamp, SimpleTexting, SMS Central, SMS77, SNS, Telnyx, Termii, Twilio, and others), however the corresponding .mdx source files do not exist in the content/docs/platform/integrations/sms/ directory. The index page contains href links to these provider pages, but the pages themselves need to be created or sourced from the main documentation repository.
Either:
- Create all missing provider documentation files, OR
- Remove the provider cards from index.mdx until the documentation pages are ready, OR
- Confirm these files are built/generated separately in the CI/CD pipeline
🏁 Script executed:
#!/bin/bash
# Search for any SMS provider documentation files in the codebase
# Check different possible locations and naming patterns
echo "Searching for provider documentation files..."
echo ""
# Check if provider pages exist in content/docs/platform/integrations/sms/ directory
echo "Files in content/docs/platform/integrations/sms/:"
if [ -d "content/docs/platform/integrations/sms/" ]; then
find content/docs/platform/integrations/sms/ -type f -name "*.mdx" | sort
else
echo "Directory not found"
fi
echo ""
echo "Searching for any files with provider names (case-insensitive):"
# Search for files containing provider names
for provider in "twilio" "nexmo" "aws-sns" "plivo"; do
echo "Searching for '$provider'..."
find content/docs -type f -name "*${provider}*" 2>/dev/null || echo " (no matches)"
doneLength of output: 2078
Looking at the new results, the provider files exist in a (providers) subdirectory. I need to verify if the href links in index.mdx correctly match the actual provider filenames.
🏁 Script executed:
#!/bin/bash
# Extract all hrefs from index.mdx and compare with actual provider filenames
echo "Comparing index.mdx href links with actual provider files..."
echo ""
# Get hrefs from index.mdx
echo "href links from index.mdx:"
grep -oP '(?<=href="/platform/integrations/sms/)[^"]+' content/docs/platform/integrations/sms/index.mdx > /tmp/hrefs.txt
cat /tmp/hrefs.txt
echo ""
echo "Actual provider filenames (without .mdx extension):"
find content/docs/platform/integrations/sms/\(providers\)/ -type f -name "*.mdx" -exec basename {} .mdx \; | sort > /tmp/files.txt
cat /tmp/files.txt
echo ""
echo "Mismatches between href links and filenames:"
# Compare the two lists
comm -23 <(sort /tmp/hrefs.txt) <(sort /tmp/files.txt) | sed 's/^/ href link not found: /'
comm -13 <(sort /tmp/hrefs.txt) <(sort /tmp/files.txt) | sed 's/^/ file exists but not linked: /'Length of output: 676
Fix 2 broken provider links in the Cards component.
Two href links in the index.mdx file do not match the actual provider documentation filenames:
- Line ~145 – Change
href="/platform/integrations/sms/azure-sms"tohref="/platform/integrations/sms/azure"(file isazure.mdx, notazure-sms.mdx) - Line ~148 – Change
href="/platform/integrations/sms/bulksms"tohref="/platform/integrations/sms/bulk-sms"(file isbulk-sms.mdx, notbulksms.mdx)
All other 21 provider links match their corresponding .mdx files correctly.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 135–163, two
Card hrefs point to incorrect filenames: update the Card with title "Azure SMS"
to use href="/platform/integrations/sms/azure" (file is azure.mdx) and update
the Card with title "BulkSMS" to use href="/platform/integrations/sms/bulk-sms"
(file is bulk-sms.mdx); change those two href attributes accordingly and leave
the other Card links unchanged.
* Content for the overview page * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/overview.mdx Co-authored-by: DianaHackmamba <[email protected]> --------- Co-authored-by: DianaHackmamba <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
public/images/channels-and-providers/integrationidentifier.pngis excluded by!**/*.pngpublic/images/channels-and-providers/primary-active-integrations.pngis excluded by!**/*.png
📒 Files selected for processing (1)
content/docs/platform/integrations/overview.mdx(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
🔇 Additional comments (5)
content/docs/platform/integrations/overview.mdx (5)
8-12: Well-written introductory narrative.The opening section clearly establishes the value proposition and explains the provider abstraction layer. This sets a good foundation for the detailed sections that follow.
30-45: Clear and well-structured primary vs. active integrations explanation.The section effectively differentiates between active and primary integrations, clearly outlines channel-specific behavior, and explains the auto-promotion fallback logic. The visual diagram reference adds helpful context.
47-51: Environment scoping explanation is clear and well-justified.The section effectively explains why integrations are environment-scoped and the practical benefits (test isolation, per-environment configuration). Good cross-reference to the environments concept page.
53-60: Override settings section is concise and well-exemplified.The examples provide concrete use cases (SendGrid headers, Slack blocks, FCM sounds) that help readers understand when and why overrides are needed. Good callout to detailed documentation.
62-82: Integration guides cards are well-organized and consistent.The channel-specific cards provide a clear, scannable entry point for users. Descriptions are appropriately concise and action-oriented. The structure aligns well with the provider-centric restructuring.
Please verify that all linked resources exist and have been updated to reflect the provider-centric approach:
/platform/integrations/email/platform/integrations/sms(mentioned as restructured in the PR cross-file context)/platform/integrations/push/platform/integrations/chat/platform/inbox/overview
| pageTitle: 'Novu Integration Hub' | ||
| title: 'Overview' | ||
| description: 'Discover how to integrate Novu with your tech stack including delivery providers, content frameworks, and validation libraries.' | ||
| description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo in meta description.
"Chant" should be "Chat".
-description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.'
+description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chat channels, and how to integrate them to send notifications and receive events.'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.' | |
| description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chat channels, and how to integrate them to send notifications and receive events.' |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 4, the meta
description contains a typo: the word "Chant" should be "Chat"; update the
description string to replace "Chant" with "Chat" so it reads "...for Email,
Push, SMS and Chat channels..." and save the file.
|
|
||
| - **Integration**: An integration is your specific, configured instance of that provider. It's the provider plus your unique credentials and settings. When creating an integration, you are required to assign it a name and identifier. | ||
|
|
||
| While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo: "changged" → "changed".
- While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
+ While the name can be changed, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`. | |
| While the name can be changed, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`. |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 22, fix the typo
"changged" to "changed" in the sentence so it reads: "While the name can be
changed, the identifier cannot be changed after creation. This identifier is
called the `integrationIdentifier`." Replace the misspelled word only,
preserving the rest of the sentence and formatting.
|
|
||
|  | ||
|
|
||
| This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clarify sentence grammar.
The sentence is incomplete. Consider: "you can have one provider but multiple separate integrations for that particular provider" or "you can have the same provider but two separate integrations."
-This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
+This means that you can have one provider but multiple separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently. | |
| This means that you can have one provider but multiple separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently. |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 26, the sentence
"This means that you can have provider but two separate integrations for that
particular provider." is grammatically incorrect and incomplete; update it to a
clear form such as "This means that you can have one provider but multiple
separate integrations for that particular provider." or "This means that you can
have the same provider but two separate integrations for that provider." Replace
the existing sentence with one of these corrected alternatives to fix grammar
and clarity.
* Minor update to the Trigger overrides page * Update content/docs/platform/integrations/trigger-overrides.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/trigger-overrides.mdx Co-authored-by: DianaHackmamba <[email protected]> --------- Co-authored-by: DianaHackmamba <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
content/docs/platform/integrations/trigger-overrides.mdx(4 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
🔇 Additional comments (6)
content/docs/platform/integrations/trigger-overrides.mdx (6)
7-8: LGTM – imports appropriate for documentation components.The lucide-react icons and fumadocs card components are well-suited for structured documentation layouts.
13-30: LGTM – new Channel overrides section is well-placed and clearly scoped.Clear introduction with a callout that limits scope to Email and SMS, and the card links provide good navigation to channel-specific documentation.
48-52: LGTM – reorganized provider override structure improves clarity.Renaming "Override structure" to "Provider override scopes" and explicitly distinguishing workflow-level vs. step-level overrides makes the documentation more approachable and the precedence hierarchy clearer.
62-101: LGTM – workflow-level override example is clear and practical.The SendGrid example demonstrates template_id and trackingSettings usage well, and the note at line 103 correctly explains the scope and precedence rules.
131-183: LGTM – step-level override example is comprehensive and well-documented.The FCM example effectively demonstrates platform-specific overrides (Android and iOS) with sound and notification settings, and the walkthrough of use cases is practical and clear.
185-187: LGTM – concluding guidance is accurate and helpful.The callout correctly identifies the step identifier target, and the final sentence accurately summarizes what the example demonstrates without ambiguity.
| #### Sending extra fields supported by provider SDK | ||
|
|
||
| You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field. | ||
|
|
||
| ```json | ||
| "overrides": { | ||
| "providers" : { | ||
| "sendgrid": { | ||
| "_passthrough": { | ||
| "headers": { | ||
| "Authorization": "Bearer my-api-key" | ||
| } | ||
| } | ||
| }, | ||
| }, | ||
| }, | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical error in introductory sentence.
Line 107 has a grammatical issue: "if you want to send a headers" should be "if you want to send headers" (remove the article "a" since "headers" is plural).
The _passthrough JSON example itself is clear and well-structured.
-You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field.
+You can also send extra fields supported by the provider SDK. For example, if you want to send headers to the provider SDK, you could use the `_passthrough` field.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #### Sending extra fields supported by provider SDK | |
| You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field. | |
| ```json | |
| "overrides": { | |
| "providers" : { | |
| "sendgrid": { | |
| "_passthrough": { | |
| "headers": { | |
| "Authorization": "Bearer my-api-key" | |
| } | |
| } | |
| }, | |
| }, | |
| }, | |
| ``` | |
| #### Sending extra fields supported by provider SDK | |
| You can also send extra fields supported by the provider SDK. For example, if you want to send headers to the provider SDK, you could use the `_passthrough` field. | |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/trigger-overrides.mdx around lines 105 to
121, the introductory sentence contains a grammatical error: change "if you want
to send a headers" to "if you want to send headers" (remove the extraneous
article "a") so the sentence reads correctly while leaving the JSON _passthrough
example unchanged.
* Docs for Email home page * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update based on feedback * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Add link * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update contet * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/email/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content * Fix email channel capitaliation inconsistencies --------- Co-authored-by: DianaHackmamba <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
content/docs/platform/integrations/email/index.mdx (1)
238-238: Clarify where users can find the integrationIdentifier.Line 238 shows
integrationIdentifier: "brevo-abcdef"as an example. The surrounding text (line 218) states users can "find theintegrationIdentifierfor each provider in provider page in the Integration Store". This is helpful context, though the phrasing could be slightly clearer (consider "on the provider's configuration page").Consider minor refinement to line 218:
-You can find the `integrationIdentifier` for each provider in provider page in the **Integration Store**. +You can find the `integrationIdentifier` for each provider on its configuration page in the **Integration Store**.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
content/docs/platform/integrations/email/index.mdx(4 hunks)content/docs/platform/integrations/email/meta.json(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Build and Lint
- GitHub Check: Pages changed - docs-novu
🔇 Additional comments (5)
content/docs/platform/integrations/email/meta.json (1)
3-3: Verify that the "(providers)" reference resolves correctly.The pages array now includes a
(providers)entry which appears to be a special reference. Confirm this is a valid pattern in your documentation system (e.g., dynamic folder reference or component placeholder) and that it points to existing provider documentation structure.content/docs/platform/integrations/email/index.mdx (4)
30-30: Verify that internal anchor links to "#supported-providers" are correct.Lines 30 and 78 both reference
/platform/integrations/email#supported-providers, which anchors to the "Supported providers" section starting at line 246. Confirm this anchor ID is properly generated by your documentation system for the section heading.Also applies to: 78-78
251-269: Verify that all provider setup guide links exist.The Supported providers section references individual provider setup guides (e.g.,
/platform/integrations/email/sendgrid,/platform/integrations/email/amazon-ses, etc.). Confirm that all 19 referenced provider documentation pages exist and are accessible.
23-57: Steps component structure looks correct.The Steps/Step component nesting and usage for the "How email works in Novu" flow is properly structured with clear step headings and descriptions.
99-167: Code examples are well-structured with appropriate language tabs.The Tabs/Tab component usage across the attachments, email overrides, and provider targeting sections is consistent and clear. Code examples use proper
// [!code ++:N]highlighting syntax to emphasize payload changes.Also applies to: 180-210, 220-244
| <Step> | ||
| ### Store subscriber email addresses | ||
|
|
||
| Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical error in subscriber profile sentence.
Line 46 contains "is update" which should be "is updated".
-Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API.
+Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is updated either using the Novu dashboard or API.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API. | |
| Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is updated either using the Novu dashboard or API. |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/email/index.mdx around line 46, the
sentence contains a grammatical mistake "is update"; change it to "is updated"
so the line reads "This profile is updated either using the Novu dashboard or
API." Ensure only the verb is corrected and punctuation/spelling of the rest of
the sentence remains unchanged.
* Content for Push provider integration page * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content * Addressed Diana's suggestions * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * make key features sentence case --------- Co-authored-by: DianaHackmamba <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
public/images/channels-and-providers/push/integration-identifier.pngis excluded by!**/*.png
📒 Files selected for processing (2)
content/docs/platform/integrations/push/adding-push.mdx(0 hunks)content/docs/platform/integrations/push/index.mdx(2 hunks)
💤 Files with no reviewable changes (1)
- content/docs/platform/integrations/push/adding-push.mdx
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.
Applied to files:
content/docs/platform/integrations/push/index.mdx
🪛 LanguageTool
content/docs/platform/integrations/push/index.mdx
[grammar] ~72-~72: Use a hyphen to join words.
Context: ...lly. #### Add device tokens during just in time You can pass the device tokens ...
(QB_NEW_EN_HYPHEN)
[grammar] ~72-~72: Use a hyphen to join words.
Context: .... #### Add device tokens during just in time You can pass the device tokens in ...
(QB_NEW_EN_HYPHEN)
[style] ~107-~107: This phrase is redundant. Consider using “outside”.
Context: ...ful when you manage device registration outside of your workflow triggers, for example, af...
(OUTSIDE_OF)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
🔇 Additional comments (4)
content/docs/platform/integrations/push/index.mdx (4)
109-148: Code examples look good.Both the Node.js and cURL implementations are consistent, correctly structured, and demonstrate proper API usage. The examples clearly show how to update device tokens for a subscriber.
150-200: Multi-integration guidance is clear and well-exemplified.The section effectively explains how to target specific integrations using
integrationIdentifierand both code examples are syntactically correct and consistent with the simpler examples above.
202-268: Token removal documentation is comprehensive and secure.Both the specific token removal and remove-all flows are well-explained with accurate code examples. The Callout about server-side handling is an important security note. The fetch-filter-update pattern is a good practice for safe token management.
270-296: Provider cards section is well-structured and comprehensive.The Cards component provides a good visual index of all supported push providers. Each card follows a consistent structure with a clear, action-oriented description and a link to provider-specific documentation. The link patterns are consistent with the documentation structure.
| #### Add device tokens during just in time | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix hyphenation in section header.
"Just-in-time" should be hyphenated as it is a compound adjective.
-#### Add device tokens during just in time
+#### Add device tokens during just-in-time🧰 Tools
🪛 LanguageTool
[grammar] ~72-~72: Use a hyphen to join words.
Context: ...lly. #### Add device tokens during just in time You can pass the device tokens ...
(QB_NEW_EN_HYPHEN)
[grammar] ~72-~72: Use a hyphen to join words.
Context: .... #### Add device tokens during just in time You can pass the device tokens in ...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
content/docs/platform/integrations/push/index.mdx around lines 72 to 73: the
section header "Add device tokens during just in time" uses "just in time"
without hyphens; change it to the compound adjective form by updating the header
to "Add device tokens during just-in-time" so the phrase is correctly
hyphenated.
| This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in. | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove redundant preposition.
"Outside of" is redundant; use "outside" instead.
-This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in.
+This method is useful when you manage device registration outside your workflow triggers, for example, after a user logs in.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in. | |
| This method is useful when you manage device registration outside your workflow triggers, for example, after a user logs in. |
🧰 Tools
🪛 LanguageTool
[style] ~107-~107: This phrase is redundant. Consider using “outside”.
Context: ...ful when you manage device registration outside of your workflow triggers, for example, af...
(OUTSIDE_OF)
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/index.mdx around lines 107 to 108,
the phrase "outside of your workflow triggers" uses a redundant preposition;
change it to "outside your workflow triggers" so the sentence reads: "This
method is useful when you manage device registration outside your workflow
triggers, for example, after a user logs in."
* Update content for demo integration * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update based on feedback * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/demo-integration.mdx Co-authored-by: DianaHackmamba <[email protected]> * Fixed content for demo integration based on feedback --------- Co-authored-by: DianaHackmamba <[email protected]>
…roviders-integration
* fix: change dotnet sdk from community to official * Update content for Chat provider integration * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/chat/index.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content based on Diana's feedback --------- Co-authored-by: Pawan Jain <[email protected]> Co-authored-by: DianaHackmamba <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
content/docs/platform/integrations/chat/index.mdx (1)
99-134: Use the same provider in both code examples for consistency.The Node.js example (line 111) uses
Discordas the provider, while the cURL example (line 128) usesslack. This inconsistency may confuse developers who expect both examples to demonstrate the same integration pattern. Additionally, the payload structure and field names should be identical across both examples.Update the cURL example to use Discord (to match the Node.js example):
- "providerId": "slack", + "providerId": "discord", "credentials": { "webhookUrl": "<WEBHOOK_URL>" }, - "integrationIdentifier": "slack-MnGLxp8uy" + "integrationIdentifier": "discord-MnGLxp8uy"Alternatively, update both examples to use the same provider consistently.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
content/docs/platform/integrations/chat/index.mdx(2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.
Applied to files:
content/docs/platform/integrations/chat/index.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
| You may need to provide credentials specific to your chat provider, such as an API key, Client ID, or Client Secret. However, some providers, like Discord, may not require any global credentials to be set in the Integration Store. | ||
|
|
||
| Each provider has different requirements. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
cat -n content/docs/platform/integrations/chat/index.mdx | head -150Repository: novuhq/docs
Length of output: 6478
🏁 Script executed:
find . -name "*discord*" -type f | grep -E "\.(mdx|md)$"Repository: novuhq/docs
Length of output: 120
🏁 Script executed:
cat -n ./content/docs/platform/integrations/chat/\(providers\)/discord.mdx | head -100Repository: novuhq/docs
Length of output: 3448
Fix inconsistent provider in cURL example and typo on line 95.
The cURL code example (lines 128–132) uses the slack provider while the Node.js example uses Discord, creating confusion about which provider to follow. Update the cURL example to use discord for consistency. Additionally, line 95 has a typo: "Checkout" should be "Check out".
🤖 Prompt for AI Agents
content/docs/platform/integrations/chat/index.mdx lines ~95 and 128–132: fix the
typo on line 95 by changing "Checkout" to "Check out", and update the cURL
example (lines 128–132) to use the discord provider instead of slack — also
adjust any provider-specific fields/headers in that cURL snippet so they match
the Discord example used in the Node.js sample (token/header names, endpoint,
and payload keys) to keep both examples consistent.
|
|
||
| Use the `subscribers.credentials.update` method to store the `webhookUrl` for a specific subscriber and provider. | ||
|
|
||
| Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor: Fix phrasal verb.
"Checkout" should be "Check out" (two words) when used as a phrasal verb.
-Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
+Check out the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details. | |
| Check out the [API reference](/api-reference/subscribers/update-provider-credentials) for more details. |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/chat/index.mdx around line 95, the text
uses the single-word "Checkout" incorrectly; change it to the phrasal verb
"Check out" so the sentence reads "Check out the [API
reference](/api-reference/subscribers/update-provider-credentials) for more
details." Keep punctuation and link unchanged.
* Update content for APNS push guide * Update content for OneSignal guide * Update content for Push webhook guide * Update Apns docs based on feedback * Update the links on the page * Update the docs * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update push webhook guide * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * update push webhook content * Remove "how to" in heading * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content for onesignal * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update APNS content * Update content based on Diana feedback * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * implement changes based on feedback * Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/onesignal.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/apns.mdx Co-authored-by: DianaHackmamba <[email protected]> * Add sdk link * Update content for Pusher beams provider guide (#991) * Update content for Pusher beams provider guide * Update pusher beams docs * Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update base on feedback * Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx Co-authored-by: DianaHackmamba <[email protected]> --------- Co-authored-by: DianaHackmamba <[email protected]> * Update docs for the FCM guide (#986) * Update docs for the FCM guide * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Add content for Expo push guide * Update links * Add image * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Add link to create workflow * Fix typo * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix type error * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Diana's feedback * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/expo-push.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/fcm.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update base on Diana's feedback * Update FCM and expo push guide with info on invalid token auto removal --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: DianaHackmamba <[email protected]> * Update content on Pushpad guide (#992) * Update content on Pushpad guide * Update docs for pushpad * Update docs * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update based on feedback * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update pushpad content * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> * Update content/docs/platform/integrations/push/(providers)/pushpad.mdx Co-authored-by: DianaHackmamba <[email protected]> --------- Co-authored-by: DianaHackmamba <[email protected]> Co-authored-by: Pawan Jain <[email protected]> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: DianaHackmamba <[email protected]> Co-authored-by: Pawan Jain <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
content/docs/platform/integrations/push/(providers)/pushpad.mdx (1)
85-94: Fix JSON syntax error in cURL example.Line 91 has invalid JSON syntax:
['user123']uses single quotes, but JSON requires double quotes. Additionally, the cURL payload structure differs from the Node.js example above it.The cURL body should match the structure and formatting of the Node.js example. Apply this correction:
curl -L -X PUT 'https://api.novu.co/v1/subscribers/<SUBSCRIBER_ID>/credentials' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: ApiKey <NOVU_SECRET_KEY>' \ -d '{ "providerId": "pushpad", - "deviceTokens": ['user123'], + "deviceTokens": ["user123"], "integrationIdentifier": "pushpad-MnGLxp8uy" }'content/docs/platform/integrations/push/(providers)/push-webhook.mdx (2)
173-202: Verify comment accuracy in authentication example.Line 182 contains a comment referencing "step 3", but reviewing the documentation structure, there is no Step 3 in the earlier "Configure Push Webhook with Novu" section (only Steps 1–2). The secret key is mentioned in Step 1 (line 14–22). Update the comment to reference the correct step.
// secret key added in step 3 +// secret key added in Step 1
47-85: Fix Tab component attribute naming.The cURL tab uses
title="cURL"(line 72) while the Node.js tab usesvalue="Node.js"(line 57). Throughout the codebase, all Tab components consistently use thevalueattribute. Changetitletovaluefor consistency.content/docs/platform/integrations/push/(providers)/fcm.mdx (1)
332-332: Replace incomplete self-hosted placeholder URL with valid API endpoint pattern.The cURL example uses an incomplete placeholder URL
https://url.to.our.selfhosted.novuthat lacks the required API path. For cloud instances, use the correct trigger endpoint; for self-hosted instances, use the same path with your domain.-curl --location --request POST 'https://url.to.our.selfhosted.novu' \ +curl --location --request POST 'https://api.novu.co/v1/events/trigger' \For self-hosted deployments, replace the domain with your instance URL:
https://<your-self-hosted-domain>/v1/events/trigger
🧹 Nitpick comments (5)
content/docs/platform/integrations/push/(providers)/onesignal.mdx (2)
64-64: Clarify placeholder value forintegrationIdentifier.The examples use
"string"as a placeholder forintegrationIdentifier. This should be replaced with clearer guidance (e.g., a comment or note) explaining where to obtain this value—typically a user-defined integration name or ID from the Novu dashboard integration settings.Consider updating the examples to include a comment or note like:
- integrationIdentifier: "string", + integrationIdentifier: "your-onesignal-integration-key", // or ID from Novu dashboardAlternatively, add a note before the code block explaining that users should replace "string" with their actual integration identifier from the Novu Integration Store.
Also applies to: 86-86
153-161: Remove redundant explanation of External User ID behavior.Lines 155 and 157 both introduce the same concept: "By default, Novu uses player_id" and "By default, Novu uses player IDs." This creates unnecessary repetition. Consolidate into a single, clear explanation.
Apply this diff to eliminate redundancy:
-By default, Novu uses `player_id` to send notifications, but you can select the `External ID` option in the OneSignal integration settings in Novu. If `External ID` option is selected, then `deviceTokens` stored in subscriber credentials for the OneSignal provider, are used as external user IDs. - -By default, Novu uses player IDs to send notifications. If your OneSignal integration uses external user IDs, then you can switch this behavior in the OneSignal integration settings in Novu. +By default, Novu uses player IDs to send notifications. However, if your OneSignal integration uses external user IDs, you can switch this behavior in the OneSignal integration settings in Novu.content/docs/platform/integrations/push/(providers)/pusher-beams.mdx (2)
65-65: Clarify integrationIdentifier placeholder across code examples.The integration identifier is hardcoded as
"pusher-beams-MnGLxp8uy"in the Node.js example (line 65) and cURL example (line 83). To improve clarity for users, consider using a more explicit placeholder format (e.g.,<INTEGRATION_IDENTIFIER>) so it's immediately obvious that this value must be replaced with their actual integration identifier from the Novu dashboard.Apply this diff to clarify the placeholder:
- integrationIdentifier: "pusher-beams-MnGLxp8uy", + integrationIdentifier: "<INTEGRATION_IDENTIFIER>",- "integrationIdentifier": "pusher-beams-MnGLxp8uy" + "integrationIdentifier": "<INTEGRATION_IDENTIFIER>"Also applies to: 83-83
82-82: Improve clarity of device token placeholder in cURL example.The device token placeholder
'userId-from-pusher-beams'is a string literal, which is correct, but wrapping it in descriptive angle brackets (e.g.,<PUSHER_USER_ID>) would make it more consistent with other placeholders in the examples and clearer that it must be replaced with an actual value.Apply this diff to improve clarity:
- "deviceTokens": ['userId-from-pusher-beams'], + "deviceTokens": ["<PUSHER_USER_ID>"],content/docs/platform/integrations/push/(providers)/apns.mdx (1)
69-69: Remove Markdown link syntax from code example comment.The commented serverURL contains Markdown link syntax
[https://eu.api.novu.co](...)which is confusing in a code block. Simplify to plain URL text.- // serverURL: "[https://eu.api.novu.co](https://eu.api.novu.co)", + // serverURL: "https://eu.api.novu.co",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (22)
public/images/channels-and-providers/push/apns/apns-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/confirmation-menu.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/expo-push/copy-token.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/expo-push/create-token.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/expo-push/expo-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/expo-push/generate-token.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/fcm-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/firebase-project-settings.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/firebase-service-accounts.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/integrationidentifier.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/onesignal/onesignal-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/onesignal/select-external-id-option.gifis excluded by!**/*.gifpublic/images/channels-and-providers/push/push-webhook/push-webhook-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pusher-beams/create-instance.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pusher-beams/instance-credentials.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pusher-beams/pusher-beams-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pushpad/access-token.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pushpad/add-token.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pushpad/new-project.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pushpad/project-id.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/pushpad/pushpad-integration.pngis excluded by!**/*.pngpublic/images/channels-and-providers/push/select-firebase-project.pngis excluded by!**/*.png
📒 Files selected for processing (8)
content/docs/platform/integrations/push/(providers)/apns.mdx(2 hunks)content/docs/platform/integrations/push/(providers)/expo-push.mdx(3 hunks)content/docs/platform/integrations/push/(providers)/fcm.mdx(3 hunks)content/docs/platform/integrations/push/(providers)/onesignal.mdx(4 hunks)content/docs/platform/integrations/push/(providers)/push-webhook.mdx(4 hunks)content/docs/platform/integrations/push/(providers)/pusher-beams.mdx(3 hunks)content/docs/platform/integrations/push/(providers)/pushpad.mdx(3 hunks)content/docs/platform/meta.json(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.
Applied to files:
content/docs/platform/integrations/push/(providers)/onesignal.mdxcontent/docs/platform/integrations/push/(providers)/pusher-beams.mdxcontent/docs/platform/integrations/push/(providers)/apns.mdxcontent/docs/platform/integrations/push/(providers)/expo-push.mdxcontent/docs/platform/integrations/push/(providers)/pushpad.mdxcontent/docs/platform/integrations/push/(providers)/push-webhook.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Redirect rules - docs-novu
- GitHub Check: Header rules - docs-novu
- GitHub Check: Pages changed - docs-novu
- GitHub Check: Build and Lint
🔇 Additional comments (9)
content/docs/platform/meta.json (1)
26-26: Navigation label updated to reflect provider-centric restructuring.The header label change from "---Channels---" to "---Integrate Channels Providers---" appropriately emphasizes the provider-focused documentation organization introduced in this PR.
content/docs/platform/integrations/push/(providers)/onesignal.mdx (1)
99-100: Verify SDK import consistency.Line 100 imports from
@novu/node, while line 51 imports from@novu/apifor the same trigger operation. Confirm this is intentional (e.g., different SDK versions) or if both examples should use the same import.Are both
@novu/apiand@novu/nodevalid for thetriggeroperation, or should these examples be aligned to use the same package?content/docs/platform/integrations/push/(providers)/pusher-beams.mdx (2)
1-114: Overall structure and quality look good.The documentation has been well-restructured from a generic overview to a concrete, stepwise integration guide. The progression is logical: configuration credentials → Novu integration setup → subscriber setup → sending notifications. Code examples are provided in multiple languages (Node.js SDK, cURL, TypeScript), which improves accessibility for different use cases. External links are secured with proper attributes, and references to Pusher and Novu resources are well-placed.
41-114: Internal documentation link is valid.Line 92 references
/platform/workflow/build-a-workflowwhich correctly maps to an existing documentation file in the repository. No action needed.content/docs/platform/integrations/push/(providers)/pushpad.mdx (1)
72-72: No changes needed—the Node.js and cURL examples are correctly formatted for their respective APIs.The Node.js example correctly uses
ChatOrPushProviderEnum.PushPadfrom the@novu/apiSDK, while the cURL example correctly uses the lowercase string"pushpad"for the REST API. This is the consistent pattern across all Novu provider documentation. The two formats serve different purposes and are both valid.content/docs/platform/integrations/push/(providers)/push-webhook.mdx (2)
61-61: Verify enum value consistency with string equivalent.Line 61 uses
ChatOrPushProviderEnum.PushWebhook, while line 79 in the cURL example uses the string"push-webhook". Confirm thatChatOrPushProviderEnum.PushWebhookresolves to"push-webhook"to ensure consistency across examples.
59-69: The SDK method signature is correct.The
novu.subscribers.credentials.update()method accepts two parameters: the credentials object and the subscriber ID. The second positional parameter"subscriberId"is the correct pattern used consistently across all Novu SDK documentation examples (Discord, Pusher Beams, FCM, and other providers). The literal string"subscriberId"should be replaced with an actual subscriber identifier value at implementation time.Likely an incorrect or invalid review comment.
content/docs/platform/integrations/push/(providers)/expo-push.mdx (1)
38-150: Well-structured provider guide with clear workflows.The Expo Push documentation follows the new provider-centric, step-based format effectively. The progression from credential setup through device token registration to sending notifications is clear and logical. The overrides section provides a comprehensive example with all supported Expo Message Request fields.
content/docs/platform/integrations/push/(providers)/fcm.mdx (1)
73-81: Align providerId usage with other examples in the file.Line 73 uses the enum
ChatOrPushProviderEnum.Fcm, but lines 92 and 144 use the string"fcm". Ensure consistent usage throughout the documentation. Either always use the enum (preferred for type safety) or always use strings.Clarify whether the Novu SDK enforces enum or accepts string values for
providerId. If both are accepted, add a comment explaining the equivalence.
| overrides: { | ||
| apns: { | ||
| payload: { | ||
| aps: { | ||
| notification: { | ||
| title: 'Test', | ||
| body: 'Test push', | ||
| }, | ||
| data: { | ||
| key: 'value', | ||
| }, | ||
| }, | ||
| }, | ||
| }, | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, find the APNS documentation file
find . -type f -name "apns.mdx" 2>/dev/nullRepository: novuhq/docs
Length of output: 117
🏁 Script executed:
# Find other provider documentation files
find . -type f -path "*/platform/integrations/push/*" -name "*.mdx" 2>/dev/null | head -20Repository: novuhq/docs
Length of output: 644
🏁 Script executed:
# Read the APNS file around lines 142-156
wc -l "./content/docs/platform/integrations/push/(providers)/apns.mdx"Repository: novuhq/docs
Length of output: 121
🏁 Script executed:
# Read APNS file with line numbers around the specified range
sed -n '130,165p' "./content/docs/platform/integrations/push/(providers)/apns.mdx"Repository: novuhq/docs
Length of output: 603
🏁 Script executed:
# Search for override examples in Expo Push documentation
grep -n -A 20 "overrides" "./content/docs/platform/integrations/push/(providers)/expo-push.mdx" | head -50Repository: novuhq/docs
Length of output: 1309
🏁 Script executed:
# Search for override examples in FCM documentation
grep -n -A 20 "overrides" "./content/docs/platform/integrations/push/(providers)/fcm.mdx" | head -50Repository: novuhq/docs
Length of output: 2415
🏁 Script executed:
# Search for override patterns in all provider files
for file in ./content/docs/platform/integrations/push/\(providers\)/*.mdx; do
echo "=== $(basename "$file") ==="
grep -n "overrides:" "$file" | head -5
grep -A 15 "overrides:" "$file" | head -20
echo ""
doneRepository: novuhq/docs
Length of output: 1787
🏁 Script executed:
# Check if there's a trigger-overrides documentation that explains the pattern
find . -type f -name "*trigger*override*" -o -name "*override*trigger*" 2>/dev/nullRepository: novuhq/docs
Length of output: 113
🏁 Script executed:
# Read the trigger-overrides documentation
cat "./content/docs/platform/integrations/trigger-overrides.mdx"Repository: novuhq/docs
Length of output: 6770
🏁 Script executed:
# Check FCM more carefully - find all override examples
sed -n '188,250p' "./content/docs/platform/integrations/push/(providers)/fcm.mdx"Repository: novuhq/docs
Length of output: 1531
🏁 Script executed:
# Check the second FCM override example
sed -n '230,290p' "./content/docs/platform/integrations/push/(providers)/fcm.mdx"Repository: novuhq/docs
Length of output: 1555
Fix APNS overrides structure to follow the documented provider override pattern.
APNS overrides do not follow the canonical pattern documented in trigger-overrides.mdx. Per the documentation, provider overrides should wrap the provider configuration under a providers object.
Current structure (incorrect):
overrides: {
apns: {
payload: { ... }
}
}Correct structure:
overrides: {
providers: {
apns: {
payload: { ... }
}
}
}Apply this diff:
overrides: {
- apns: {
+ providers: {
+ apns: {
payload: {
aps: {
notification: {
title: 'Test',
body: 'Test push',
},
data: {
key: 'value',
},
},
},
+ }
- },
+ }
},🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/apns.mdx around lines 142
to 156, the overrides block places the apns config directly under overrides
which is incorrect; update the structure to nest the apns configuration under a
providers object so overrides: { providers: { apns: { payload: { ... } } } }
rather than overrides: { apns: { ... } } ensuring the content keys are moved
exactly under providers to match the documented provider override pattern.
| fcm: { | ||
| // For a data-only notification (silent push) | ||
| type: 'data', | ||
| data: { | ||
| custom_key: 'custom_value', | ||
| }, | ||
| // Platform-specific overrides | ||
| android: { | ||
| // See FCM AndroidConfig options | ||
| }, | ||
| apns: { | ||
| // See FCM ApnsConfig options | ||
| }, | ||
| webPush: { | ||
| // See FCM WebpushConfig options | ||
| }, | ||
| fcmOptions: { | ||
| // See FCM FcmOptions | ||
| } | ||
| }, | ||
| }, | ||
| "subscriberId" | ||
| ); | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix overrides structure to match documentation pattern.
The overrides example at lines 189–210 uses overrides: { fcm: { ... } }, but the later example at lines 235–255 uses overrides: { providers: { fcm: { ... } } }. This inconsistency within the same file will confuse users about the correct API structure.
Align both examples to use the providers wrapper for consistency with Expo and other providers. Apply this diff to lines 189–210:
overrides: {
- fcm: {
+ providers: {
+ fcm: {
// For a data-only notification (silent push)
type: 'data',
data: {
custom_key: 'custom_value',
},
// Platform-specific overrides
android: {
// See FCM AndroidConfig options
},
apns: {
// See FCM ApnsConfig options
},
webPush: {
// See FCM WebpushConfig options
},
fcmOptions: {
// See FCM FcmOptions
}
+ }
- },
+ }
},Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/fcm.mdx around lines 189
to 210, the example uses overrides: { fcm: { ... } } which is inconsistent with
the later example that uses overrides: { providers: { fcm: { ... } } }; update
the earlier example to wrap the fcm config inside a providers object (i.e.,
change overrides: { fcm: { ... } } to overrides: { providers: { fcm: { ... } }
}) so both examples use the same providers wrapper and reflect the documented
API shape.
| OneSignal supports sending messages via both <a href="https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server" target="_blank" rel="noopener noreferrer">Apple Push Notification Service</a> (APNs) and <a href="https://firebase.google.com/docs/cloud-messaging" target="_blank" rel="noopener noreferrer">Firebase Cloud Messaging</a> (FCM). | ||
|
|
||
| To configure the OneSignal integration, you will need an active account which has credentials for APNs, FCM or both, and have access to the `OneSignal App ID` and `Rest API Key` available via your [application's settings page](https://documentation.onesignal.com/docs/keys-and-ids). | ||
| ## Configure Onesignal with Novu |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correct inconsistent branding in section headings.
Lines 10 and 36 use "Onesignal" instead of "OneSignal" (the official spelling established in the title and opening paragraphs). Additionally, line 33 contains "Onesignal Integration" in the alt text.
Apply this diff to fix the inconsistencies:
-## Configure Onesignal with Novu
+## Configure OneSignal with Novu-## Using Onesignal with Novu
+## Using OneSignal with Novu- 
+ Also applies to: 36-36
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/onesignal.mdx around
lines 10, 33 and 36, update inconsistent branding: change the heading text on
line 10 from "Onesignal" to "OneSignal", change the alt text on line 33 from
"Onesignal Integration" to "OneSignal Integration", and change the heading or
any occurrence on line 36 from "Onesignal" to "OneSignal" so all instances match
the official casing used in the title and opening paragraphs.
| @@ -1,26 +1,48 @@ | |||
| --- | |||
| title: 'Push Webhook' | |||
| description: 'Learn how to use the Push Webhook provider to send notifications using Novu' | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix double space in description.
Line 3 contains a double space before "notifications".
-description: 'Learn how to use the Push Webhook provider to send notifications using Novu'
+description: 'Learn how to use the Push Webhook provider to send notifications using Novu'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: 'Learn how to use the Push Webhook provider to send notifications using Novu' | |
| description: 'Learn how to use the Push Webhook provider to send notifications using Novu' |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/push-webhook.mdx around
line 3, the frontmatter description contains a double space before the word
"notifications"; remove the extra space so the sentence reads "...to send
notifications using Novu" (ensure only a single space after "send") and save the
file.
| ```jsx | ||
| import { Novu } from '@novu/node'; | ||
|
|
||
| const novu = new Novu('YOUR_NOVU_API_KEY'); | ||
|
|
||
| await novu.trigger('your-workflow-id', { | ||
| to: { | ||
| subscriberId: 'SUBSCRIBER_ID', | ||
| }, | ||
| payload: { | ||
| // This payload data will be included | ||
| // in the webhook request | ||
| custom_message: "This is custom message from payload.", | ||
| }, | ||
| }); | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incorrect code block language declaration.
The code block is marked as jsx (line 93) but contains Node.js code using @novu/node SDK, not JSX. This should be typescript or javascript to reflect the actual content.
-```jsx
+```typescript
import { Novu } from '@novu/node';🤖 Prompt for AI Agents
content/docs/platform/integrations/push/(providers)/push-webhook.mdx around
lines 93 to 108: the fenced code block is labeled as `jsx` but contains Node.js
usage of the `@novu/node` SDK; change the code block language token to
`typescript` (or `javascript`) so syntax highlighting matches the code, i.e.,
replace the opening fence marker from ```jsx to ```typescript and leave the code
content unchanged.
|
|
||
| ## Using Pushpad with Novu | ||
|
|
||
| Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammatical error in introductory sentence.
Line 48 has "in other to send" which should be "in order to send".
-Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following:
+Once your integration is configured, in order to send push notifications using the PushPad provider, you must do the following:📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following: | |
| Once your integration is configured, in order to send push notifications using the PushPad provider, you must do the following: |
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/pushpad.mdx around line
48, fix the grammatical error in the introductory sentence by changing "in other
to send push notification using the PushPad provider, you must do the
following:" to use "in order to send push notifications using the PushPad
provider, you must do the following:"—also pluralize "notification" to
"notifications" for correctness and ensure punctuation/capitalization remains
consistent.
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.