Skip to content

Conversation

@Aviatorscode2
Copy link
Contributor

@Aviatorscode2 Aviatorscode2 commented Dec 3, 2025

Summary by CodeRabbit

  • Documentation
    • Updated Microsoft Teams integration guide to a full Azure AD-based, multi-tenant bot flow using Client ID, Client Secret and App Tenant ID (optional Redirect URL). Adds step-by-step onboarding: app registration, secret and redirect URI management, Microsoft Graph permissions, Azure Bot creation, Teams app publishing, admin-consent onboarding, and tenant-specific connection. Emphasizes channel/user routing via Microsoft Graph IDs and app tokens. Retains webhook-based approach as an optional fallback.

✏️ Tip: You can customize this high-level summary in your review settings.

@linear
Copy link

linear bot commented Dec 3, 2025

MRK-1164 MS teams

@netlify
Copy link

netlify bot commented Dec 3, 2025

Deploy Preview for docs-novu failed. Why did it fail? →

Name Link
🔨 Latest commit bd240e9
🔍 Latest deploy log https://app.netlify.com/projects/docs-novu/deploys/693c97bfaea3be00082285b1

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 3, 2025

Walkthrough

Replaces a webhook-centric MS Teams provisioning guide with an Azure AD multi‑tenant bot flow: App Registration, client secret and redirect URI management, Microsoft Graph permissions, Azure Bot resource and Teams app creation/publishing, and tenant onboarding; retains webhook as an optional fallback.

Changes

Cohort / File(s) Summary
MS Teams integration doc
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx
Complete rewrite: removed webhook-first provisioning; introduced Azure AD multi-tenant bot flow (App Registration, Client ID/Secret, Redirect URI, Graph permissions), Azure Bot resource setup, Teams app creation/publishing, admin-consent onboarding, updated Novu configuration to use bot credentials (Client ID, Client Secret, App Tenant ID, optional Redirect URL); preserved webhook path as an optional fallback.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant User
    participant NovuUI as Novu UI
    participant AzureAD as Azure AD / App Registration
    participant AzureBot as Azure Bot Service
    participant MSGraph as Microsoft Graph
    participant Teams as Teams Tenant

    User->>NovuUI: Click "Connect Teams"
    NovuUI->>AzureAD: Redirect to OAuth (client_id, redirect_uri, scopes)
    AzureAD->>User: Admin consent prompt
    User->>AzureAD: Grants consent
    AzureAD->>NovuUI: Redirect with auth code
    NovuUI->>AzureAD: Exchange code for tokens (client_secret)
    NovuUI->>AzureAD: Obtain app-only token (client credentials) 
    NovuUI->>MSGraph: Use token to call Graph (create connection, map Team/Channel/User IDs)
    MSGraph->>NovuUI: Return Team/Channel/User IDs
    NovuUI->>AzureBot: Configure bot endpoints / enable Teams channel
    AzureBot->>Teams: Bot registered in tenant (app installation/publishing)
    Teams->>NovuUI: Tenant-specific connection established
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review accuracy of step-by-step Azure AD App Registration and OAuth flows in the doc.
  • Verify stated Microsoft Graph permission scopes and app-only token guidance.
  • Confirm Novu configuration fields and sample OAuth/redirect values match implementation.
  • Ensure the webhook fallback is clearly separated and not conflated with bot flow.

Suggested reviewers

  • ChmaraX
  • DianaHackmamba
  • jainpawan21

Poem

🐇 I hopped through Azure fields so wide,
I planted keys and watched bots glide,
I jingled Graph with joyful tunes,
Now Teams wake up with brighter moons,
Webhooks nap — the bot’s my guide.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding/updating documentation content for MS Teams chat integration, which aligns with the file modification (ms-teams.mdx) and the comprehensive overhaul of the integration setup process.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch MRK-1164

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6648ba1 and 6907826.

⛔ Files ignored due to path filters (11)
  • public/images/channels-and-providers/chat/msteams/add-permissions.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/add-redirect-uri.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/app-registrations.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/azure-bot.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/certificates-and-secret.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/client-secret.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/create-app.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/create-azure-bot.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/create-incoming-webhook.gif is excluded by !**/*.gif
  • public/images/channels-and-providers/chat/msteams/go-to-resource.png is excluded by !**/*.png
  • public/images/channels-and-providers/chat/msteams/register-application.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~72-~72: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 4. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~112-~112: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ssection, click Microsoft Teams. 5. In the menu that appears, accept the terms...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~113-~113: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~128-~128: Ensure spelling is correct
Context: ...ication” 9. Enable scopes based on your usecase: - team (for channel messages) - `personal...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~136-~136: The adverb “publically” isn’t commonly used. Consider using the shorter “publicly”.
Context: ...p to a Teams store, if you want the app publically available in the store or publish to or...

(PUBLICALLY)

⏰ 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

Aviatorscode2 and others added 3 commits December 4, 2025 12:06
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (3)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (3)

111-111: Fix typo: "channelssection" → "channels section".

-4. In the available channelssection, click **Microsoft Teams**.
+4. In the available channels section, click **Microsoft Teams**.

128-128: Fix spelling: "usecase" → "use case".

-9. Enable scopes based on your usecase:
+9. Enable scopes based on your use case:

86-86: Fix double comma in step.

-1. In the Azure portal left menu,, click **Create a resource**.
+1. In the Azure portal left menu, click **Create a resource**.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6907826 and 8ff940b.

⛔ Files ignored due to path filters (1)
  • public/images/channels-and-providers/chat/msteams/novu-msteams-integration.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~72-~72: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 5. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~112-~112: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ssection, click Microsoft Teams. 5. In the menu that appears, accept the terms...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~113-~113: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~128-~128: Ensure spelling is correct
Context: ...ication” 9. Enable scopes based on your usecase: - team (for channel messages) - `personal...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~162-~162: Use a hyphen to join words.
Context: ...messages, they must grant your app a one time admin consent. This authorizes your...

(QB_NEW_EN_HYPHEN)


[style] ~196-~196: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...onsent page listing the permissions. 4. They clicks Accept. When this is done, ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~207-~207: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...st be installed in the specific Team. - For direct messages (DMs): The app must be ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

⏰ 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). (1)
  • GitHub Check: Build and Lint
🔇 Additional comments (5)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (5)

284-284: Remove stray comma after integrationIdentifier.

 {
   "identifier": "msteams-main-notifications",
   "integrationIdentifier": "ms-teams-bot-1",
-  "providerId": "msteams",
+  "providerId": "msteams",

Actually, looking more carefully, this appears to be valid JSON. Let me verify the structure by checking line 284:

   "integrationIdentifier": "ms-teams-bot-1",
   "providerId": "msteams",

This is correct JSON.


1-50: Comprehensive bot-based integration setup is well-structured.

The introduction and Azure AD app registration steps are clear and logically sequenced. Multi-tenant setup, client secret management, redirect URI configuration, and Graph permissions are thoroughly documented. Good use of images and field explanations.


142-198: Novu configuration and customer tenant authorization flow is comprehensive.

The OAuth consent flow, bot installation instructions, and distinction between admin consent and app installation are explained well. The section on channel vs. DM delivery contexts is helpful.


219-354: Channel and user endpoint registration is detailed and accurate.

The guidance on discovering Team/Channel IDs via Microsoft Graph, registering endpoints in Novu, and using the Bot Framework API for user roster lookups is thorough. The JSON examples for ms_teams_channel and ms_teams_user endpoint creation are clear.


356-389: Webhook fallback workflow for simplified Teams integration is a good addition.

Providing users with a simplified webhook-based alternative for channel-only scenarios without app registration is practical and lowers the barrier to entry for simpler use cases.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (8)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (8)

72-79: Fix duplicate step numbering.

Line 79 repeats step 5 when it should be step 6.

4. Click **Application permissions**.
5. Search for and check the following permissions:
    - `Team.ReadBasic.All`
    - `Channel.ReadBasic.All`
    - `AppCatalog.Read.All`
    - `TeamsAppInstallation.ReadWriteSelfForTeam.All` (optional, for automation)
    - `TeamsAppInstallation.ReadWriteSelfForUser.All` (optional, for automation)
-5. Click **Add permissions**.
+6. Click **Add permissions**.

111-111: Fix typo: "channelssection" → "channels section".

-4. In the available channelssection, click **Microsoft Teams**.
+4. In the available channels section, click **Microsoft Teams**.

128-128: Fix spelling: "usecase" → "use case".

-9. Enable scopes based on your usecase:
+9. Enable scopes based on your use case:

162-162: Hyphenate compound modifier: "one time" → "one-time".

-Before you can send them messages, they must grant your app a one time admin consent.
+Before you can send them messages, they must grant your app a one-time admin consent.

249-251: Replace incomplete comment with descriptive text.

The comment // this is unclear. Replace it with a meaningful description.

    "workspace": {
-      "id": "e6633b86-ef94-4416-863f-f0f409700ca0" // this
+      "id": "e6633b86-ef94-4416-863f-f0f409700ca0" // the customer's tenant workspace ID
    },

20-20: Use imperative voice: "we need" → "you need".

Technical documentation should use "you" to address the reader directly.

-First, we need to create a multi-tenant identity for your bot.
+First, create a multi-tenant identity for your bot.

Or alternatively:

-First, we need to create a multi-tenant identity for your bot.
+You need to create a multi-tenant identity for your bot.

85-86: Remove double comma.

Line 86 contains a double comma that should be corrected.

-1. In the Azure portal left menu,, click **Create a resource**.
+1. In the Azure portal left menu, click **Create a resource**.

47-47: Improve sentence clarity.

The first sentence (line 47) is a sentence fragment and could be more complete.

-After your customers go through the admin consent page. Microsoft must know where to send the result (Novu).
+After your customers go through the admin consent page, Microsoft must know where to send the result (Novu).
🧹 Nitpick comments (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

111-114: Vary sentence structure to improve readability.

Multiple consecutive steps begin with "In the...". Rephrase to reduce repetition.

4. In the available channels section, click **Microsoft Teams**.
-5. In the menu that appears, accept the terms of services.
-6. In the **Messaging** section, choose the appropriate environment (typically **Microsoft Teams Commercial**).
+5. Accept the terms of services in the menu that appears.
+6. Choose the appropriate environment (typically **Microsoft Teams Commercial**) in the **Messaging** section.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8ff940b and 6e1ded7.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~72-~72: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 5. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~112-~112: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ssection, click Microsoft Teams. 5. In the menu that appears, accept the terms...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~113-~113: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~128-~128: Ensure spelling is correct
Context: ...ication” 9. Enable scopes based on your usecase: - team (for channel messages) - `personal...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~162-~162: Use a hyphen to join words.
Context: ...messages, they must grant your app a one time admin consent. This authorizes your...

(QB_NEW_EN_HYPHEN)


[style] ~196-~196: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...onsent page listing the permissions. 4. They clicks Accept. When this is done, ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~207-~207: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...st be installed in the specific Team. - For direct messages (DMs): The app must be ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

⏰ 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 (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

142-156: Configuration section is now complete.

The previously missing content has been properly added with clear setup instructions.

@jainpawan21 jainpawan21 marked this pull request as draft December 7, 2025 11:13
@Aviatorscode2 Aviatorscode2 marked this pull request as ready for review December 10, 2025 10:22
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (3)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (3)

104-114: Fix typo and duplicate step numbering.

Line 111 contains a typo: "channelssection" should be "channels section". Additionally, lines 124–126 have duplicate step numbering (step 6 appears twice); the second occurrence should be step 7, with subsequent steps renumbered accordingly.

-4. In the available channelssection, click **Microsoft Teams**.
+4. In the available channels section, click **Microsoft Teams**.
 6. In the left menu, select **App feature**.
-6. Add a **Bot** and choose "Enter a bot ID"
-7. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
-8. Enable "What can your bot do?" to "Only send notification" as the least option.
-9. Enable scopes based on your use case:
+7. Add a **Bot** and choose "Enter a bot ID"
+8. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
+9. Enable "What can your bot do?" to "Only send notification" as the least option.
+10. Enable scopes based on your use case:

162-162: Hyphenate "one time" to "one-time".

-Before you can send them messages, they must grant your app a one time administrator consent.
+Before you can send them messages, they must grant your app a one-time administrator consent.

15-16: Use consistent capitalization for "portal".

Both instances should use lowercase "portal" for consistency:

 - **Azure portal**: To create the identity (App Registration) and infrastructure (Bot Service).
-- **Teams Developer Portal**: To create the app package that your customers can install.
+- **Teams developer portal**: To create the app package that your customers can install.
🧹 Nitpick comments (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

69-80: Consider rewording repeated sentence beginnings for readability.

The Microsoft Graph permissions section (lines 69–72) has three successive sentences beginning with "Click." While this is common in procedural documentation, varying the phrasing can improve readability. Consider restructuring:

 1. Click **API permissions**.
-2. Click **Add a permission**.
-3. Click **Microsoft Graph**.
+2. Select **Add a permission**.
+3. In the panel that appears, click **Microsoft Graph**.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6e1ded7 and ebd55c6.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~71-~71: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ns**. 2. Click Add a permission. 3. Click Microsoft Graph. ![Add permission...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~73-~73: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 5. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~113-~113: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~162-~162: Use a hyphen to join words.
Context: ...messages, they must grant your app a one time administrator consent. This authori...

(QB_NEW_EN_HYPHEN)


[style] ~196-~196: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...onsent page listing the permissions. 4. They click Accept. Once the user comple...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~207-~207: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...stall the app in the specific Team. - For direct messages: Install the app for ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

⏰ 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 (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

142-210: LGTM – Novu configuration and customer integration flow.

The sections covering Novu configuration, customer tenant connection, and the OAuth flow are well-structured and comprehensive. The distinction between the bot-based approach and the webhook-style workflows is clear.

Copy link
Contributor

@DianaHackmamba DianaHackmamba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few minor suggestions, then g2g!

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (3)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (3)

112-112: Fix typo: "channelssection" → "channels section".

The word is split; add a space between "channels" and "section."

-4. In the available channelssection, click **Microsoft Teams**.
+4. In the available channels section, click **Microsoft Teams**.

163-163: Hyphenate "one time" to "one-time".

Use a hyphen to join the compound adjective modifying "administrator consent."

-Before you can send them messages, they must grant your app a one time administrator consent.
+Before you can send them messages, they must grant your app a one-time administrator consent.

126-128: Fix duplicate step numbering in the Teams app creation section.

Step 6 is repeated on lines 126 and 127. Renumber line 127 and subsequent steps to continue the sequence.

 6. Select **App feature**.
-6. Add a **Bot** and then select **Enter a bot ID**.
-7. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
-8. Enable "What can your bot do?" to "Only send notification" as the least option.
-9. Enable scopes based on your use case:
+7. Add a **Bot** and then select **Enter a bot ID**.
+8. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
+9. Enable "What can your bot do?" to "Only send notification" as the least option.
+10. Enable scopes based on your use case:
🧹 Nitpick comments (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

16-16: Fix inconsistent portal capitalization.

Line 16 uses a capital "P" in "Teams Developer Portal," but line 15 uses lowercase "p" in "Azure portal." Standardize to lowercase for consistency.

-- **Teams Developer Portal**: To create the app package that your customers can install.
+- **Teams developer portal**: To create the app package that your customers can install.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ebd55c6 and 209d56e.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~71-~71: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ns**. 2. Click Add a permission. 3. Click Microsoft Graph. ![Add permission...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~73-~73: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 5. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~114-~114: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~123-~123: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~163-~163: Use a hyphen to join words.
Context: ...messages, they must grant your app a one time administrator consent. This authori...

(QB_NEW_EN_HYPHEN)


[style] ~197-~197: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...onsent page listing the permissions. 4. They click Accept. Once the user comple...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~208-~208: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...stall the app in the specific Team. - For direct messages: Install the app for ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

⏰ 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). (1)
  • GitHub Check: Build and Lint

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (5)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (5)

73-81: Fix duplicate step numbering in Graph permissions. (Step “5.” repeats)
Line 80 should be step 6.

-5. Click **Add permissions**.
+6. Click **Add permissions**.

108-115: Fix typo: “channelssection” → “channels section”.

-4. In the available channelssection, click **Microsoft Teams**.
+4. In the available channels section, click **Microsoft Teams**.

119-132: Fix duplicate step numbering in “Create a Teams app”. (Step “6.” repeats)
Line 126 should be 7, and the rest should shift by +1.

 6. Select **App feature**.
-6. Add a **Bot** and then select **Enter a bot ID**.
-7. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
-8. Enable “What can your bot do?” to “Only send notification” as the least option.
-9. Enable scopes based on your use case:
+7. Add a **Bot** and then select **Enter a bot ID**.
+8. Set the **Bot ID** to your `BOT_APP_ID`, the same App ID you used for the Azure Bot.
+9. Enable “What can your bot do?” to “Only send notification” as the least option.
+10. Enable scopes based on your use case:

161-164: Hyphenate “one-time”.

-... they must grant your app a one time administrator consent.
+... they must grant your app a one-time administrator consent.

14-16: Make “portal” casing consistent (and align with style guidance).
Line 16 uses Teams Developer Portal while Line 15 uses Azure portal; pick one casing (typically lowercase “portal”) for both bullets.

-- **Teams Developer Portal**: To create the app package that your customers can install.
+- **Teams developer portal**: To create the app package that your customers can install.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 209d56e and bd240e9.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx

[style] ~71-~71: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ns**. 2. Click Add a permission. 3. Click Microsoft Graph. ![Add permission...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~73-~73: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...rs/chat/msteams/add-permissions.png) 4. Click Application permissions. 5. Search ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~114-~114: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pears, accept the terms of services. 6. In the Messaging section, choose the a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~123-~123: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ New app and then enter a name. 4. Click Add. 5. In the basic information pa...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~163-~163: Use a hyphen to join words.
Context: ...messages, they must grant your app a one time administrator consent. This authori...

(QB_NEW_EN_HYPHEN)


[style] ~199-~199: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...onsent page listing the permissions. 4. They click Accept. Once the user comple...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~210-~210: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...stall the app in the specific Team. - For direct messages: Install the app for ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

⏰ 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 (1)
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx (1)

169-179: The SDK import and method name in the snippet are correct. The @novu/api package and novu.integrations.generateChatOAuthUrl() method are both valid and match the current Novu SDK documentation. No changes needed.

Comment on lines +145 to +156
Now that you’ve configured your Azure Bot, provide Novu with the credentials to integrate it.

1. Log in to the Novu dashboard.
2. In the sidebar, click Integrations Store.
3. Click **Connect Provider**.
4. Select **Chat** and click **MSTeams**.
5. Enter the credentials you saved from the Azure Portal:
- **Client ID**: Enter your `BOT_APP_ID`.
- **Client Secret**: Enter your `BOT_APP_SECRET`.
- **App Tenant ID**: Enter your `APP_TENANT_ID`. This value identifies the tenant where you registered the app.
- **Redirect URL** (Optional): If you want to control where your users land after they grant administrator consent, then enter that URL here. If you leave it empty, then the consent window closes automatically.
![Novu integration](/images/channels-and-providers/chat/msteams/novu-msteams-integration.png)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Normalize identifiers across examples (integrationIdentifier/providerId/connectionIdentifier).
Right now the doc mixes ms-teams-bot, ms-teams-bot-1, msteams, and ms-teams-workflow across API calls and payloads. This is likely to cause user copy/paste failures unless you explicitly explain which values are “examples” vs “must match exactly”.

Concrete fixes to consider:

  • Use one consistent integrationIdentifier everywhere for the bot path (and another for the webhook path), and ensure it matches what users actually create in the Novu UI.
  • Keep providerId consistent (msteams vs ms-teams), or explicitly document the exact expected enum/string.

Also applies to: 174-178, 244-299, 334-355, 381-392

🤖 Prompt for AI Agents
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx lines ~145-156
(also apply to 174-178, 244-299, 334-355, 381-392): The document mixes multiple
identifiers (e.g., ms-teams-bot, ms-teams-bot-1, msteams, ms-teams-workflow)
causing copy/paste and runtime errors; choose and use one consistent
integrationIdentifier for the bot path (and one for the webhook path if
separate) and a single providerId value (either "msteams" or "ms-teams")
throughout the file, update all code blocks, API examples and narrative text to
match those exact identifiers, and add a brief note where an example value is
used (marked “example: <identifier>”) to distinguish from values that must match
the Novu UI.

Comment on lines +244 to +259
```bash
GET /v1/channel-connections
{
"identifier": "chconn-eeybt4",
"integrationIdentifier": "msteams",
"providerId": "msteams",
"channel": "chat",
"subscriberId": "689c4a87c5bdaa96aaef0cfd",
"workspace": {
"id": "e6633b86-ef94-4416-863f-f0f409700ca0" // the customer's tenant workspace ID
},
"auth": {
"accessToken": "app-only"
},
"subscriberId"
);
}
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Clarify GET /v1/channel-connections example is a response, and fix workspace.id description.
A GET example followed by a JSON block reads like a request body. Also, “workspace.id” being “the customer's tenant workspace ID” sounds incorrect/misleading (it’s presumably the Novu workspace id, not an M365 tenant id).

-```bash
-GET /v1/channel-connections
-{
+```bash
+GET /v1/channel-connections
+```
+
+Example response:
+```json
+{
   ...
-    "id": "e6633b86-ef94-4416-863f-f0f409700ca0" // the customer's tenant workspace ID
+    "id": "e6633b86-ef94-4416-863f-f0f409700ca0" // Novu workspace ID
   },
   ...
 }
🤖 Prompt for AI Agents
content/docs/platform/integrations/chat/(providers)/ms-teams.mdx lines 244-259:
the example block is misleading (a GET shown as a request body) and the
workspace.id comment is incorrect; update the markdown so the GET line is fenced
as bash, add an "Example response:" label, fence the JSON response as json, and
change the workspace.id comment to read "Novu workspace ID" instead of "the
customer's tenant workspace ID".

@Aviatorscode2 Aviatorscode2 merged commit 6849894 into main Dec 13, 2025
2 of 6 checks passed
@Aviatorscode2 Aviatorscode2 deleted the MRK-1164 branch December 13, 2025 00:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants