diff --git a/_snippets/contact-support.mdx b/_snippets/contact-support.mdx new file mode 100644 index 00000000..61904bad --- /dev/null +++ b/_snippets/contact-support.mdx @@ -0,0 +1,3 @@ + +If your question is not answered here, feel free to reach out us at support@novu.co + \ No newline at end of file diff --git a/additional-resources/posts-videos-and-articles.mdx b/additional-resources/posts-videos-and-articles.mdx index 91317350..720d6c75 100644 --- a/additional-resources/posts-videos-and-articles.mdx +++ b/additional-resources/posts-videos-and-articles.mdx @@ -10,10 +10,9 @@ description: 'Blog posts, articles, and videos' - [Creating A Hot New Food Delivery App with Novu](https://dev.to/novu/creating-a-hot-new-food-delivery-app-with-novu-2e75) ## Videos - - [How to add In-App Notifications to your Web app with Novu](https://www.youtube.com/watch?v=KD8zoUb132k) - - [Subscriber (User) Management & Bulk Import Guide](https://www.youtube.com/watch?v=m5nhYEuz86I&t=92s) - - [Workflow Optimization with Delay Actions](https://www.youtube.com/watch?v=kCMB-WdbzJo) - - [Workflow Optimization with Delay Actions](https://www.youtube.com/watch?v=kCMB-WdbzJo) + - [How to add In-App Notifications to your Web app with Novu](https://www.youtube.com/watch?v=KD8zoUb132k) + - [Subscriber (User) Management & Bulk Import Guide](https://www.youtube.com/watch?v=m5nhYEuz86I&t=92s) + - [Workflow Optimization with Delay Actions](https://www.youtube.com/watch?v=kCMB-WdbzJo) ## External Resources - [Simplify configuration management with Novu and Configu](https://configu.com/blog/video-first-steps-with-configu/) diff --git a/channels-and-providers/chat/overview.mdx b/channels-and-providers/chat/overview.mdx index 80e78dfa..d16f41bc 100644 --- a/channels-and-providers/chat/overview.mdx +++ b/channels-and-providers/chat/overview.mdx @@ -6,7 +6,7 @@ description: 'Learn the process of configuring and using chat providers with Nov Novu can be used to deliver chat messages to your customers using a unified delivery API. You can easily integrate your favorite chat provider using the built-in integration store. - + ## Configuring chat providers diff --git a/channels-and-providers/email/overview.mdx b/channels-and-providers/email/overview.mdx index 89534bd9..0cd3742f 100644 --- a/channels-and-providers/email/overview.mdx +++ b/channels-and-providers/email/overview.mdx @@ -5,7 +5,7 @@ description: 'Learn the process of configuring email providers with Novu' Novu can be used to deliver email messages to your customers using a unified delivery API. You can easily integrate your favorite email provider using the built-in integration store. - + ## Configuring email providers diff --git a/channels-and-providers/in-app/introduction.mdx b/channels-and-providers/in-app/introduction.mdx index 34f8e169..54ad8ed1 100644 --- a/channels-and-providers/in-app/introduction.mdx +++ b/channels-and-providers/in-app/introduction.mdx @@ -23,7 +23,7 @@ In-app notifications are messages or alerts that appear within a mobile app or w ## In-app notifications using Novu - + Novu provides a pre built component to display in-app notifications for almost all web frameworks. You can use this component to display in-app notifications in your web app. If you don't want to use the pre built component, you can use the headless component to build your own in-app notification center. Read more about notification center [here](/notification-center/introduction). diff --git a/channels-and-providers/push/fcm.mdx b/channels-and-providers/push/fcm.mdx index cd2400e7..aff2db57 100644 --- a/channels-and-providers/push/fcm.mdx +++ b/channels-and-providers/push/fcm.mdx @@ -63,7 +63,7 @@ import { const novu = new Novu(""); await novu.subscribers.setCredentials('subscriberId', PushProviderIdEnum.FCM, { -deviceTokens: ['token1', 'token2'], + deviceTokens: ['token1', 'token2'], }); ```` @@ -76,7 +76,12 @@ curl -L -X PUT 'https://api.novu.co/v1/subscribers//credentials' -H 'Authorization: ApiKey ' \ -d '{ "providerId": "fcm", - "deviceTokens": ["token1", "token2"], + "credentials": { + "deviceTokens" : [ + "token1", + "token2" + ] + }, "integrationIdentifier": "fcm-MnGLxp8uy" }' ```` diff --git a/channels-and-providers/sms/overview.mdx b/channels-and-providers/sms/overview.mdx index 2c443f56..d0b181b7 100644 --- a/channels-and-providers/sms/overview.mdx +++ b/channels-and-providers/sms/overview.mdx @@ -6,7 +6,7 @@ description: "Learn the process of configuring and using sms providers with Novu Novu can be used to deliver sms messages to your customers using a unified delivery API. You can easily integrate your favorite sms provider using the built-in integration store. - + ## Configuring SMS providers diff --git a/community/code-of-conduct.mdx b/community/code-of-conduct.mdx index 99241020..52e219ce 100644 --- a/community/code-of-conduct.mdx +++ b/community/code-of-conduct.mdx @@ -1,5 +1,5 @@ --- -title: "Code of conduct" +title: "Novu Community Code of conduct" description: "The set of rules and guidelines that govern interaction among community members" --- @@ -26,7 +26,6 @@ It's crucial to keep in mind that our community members are from all kinds of ba - Accept responsibility and apologise to those affected by mistakes, and learn from such experiences - Focus on what is best not just for us as individuals, but for the overall community! - ### Patience @@ -50,7 +49,7 @@ Avoid assumptions about others' backgrounds. Maintain a positive and professiona We encourage our users to ask early and ask often. Rather than asking whether you can ask a question (the answer is always yes!), instead, simply ask your question. You are encouraged to provide as many specifics as possible. -Code snippets in the form of images are bad practice. Instead, use text formatted as code (using backticks) on Discord or simply send a gist. Refrain from pasting multiple lines of code directly into the chat channels - instead use [gists](http://gist.github.com/) or some other tool to provide code snippets. +Code snippets in the form of images are bad practice. Instead, use text formatted as code (using backticks) on Discord or simply send a gist. Refrain from pasting multiple lines of code directly into the chat channels - instead use [gist.github.com](http://gist.github.com/) or another paste site to provide code snippets. ### Helpful @@ -60,7 +59,7 @@ Avoid sarcastic responses and prioritize useful information. Everyone should rea ### Anti-harassment policy -Harassment includes (but is not limited to) all of the following behaviours: +Harassment includes (but is not limited to) all of the following behaviors: - Offensive comments related to gender (including gender expression and identity), age, sexual orientation, disability, physical appearance, body size, race, and religion. - Derogatory terminology including words commonly known to be slurs @@ -78,7 +77,7 @@ Continuing inappropriate behaviour after being asked to stop constitutes harassm ### Reporting policy violations -Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported to anyone with administrative power in the community (Admins or Moderators on Discord, members of the ‘DevRel’* role), or to the local organizers of an event or to [support@novu.co](mailto:support@novu.co). Meetup organizers are encouraged to prominently display points of contact for reporting unacceptable behaviour at local events. +Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported to anyone with administrative power in the community (Admins or Moderators on Discord, members of the ‘DevRel’ role), or to the local organizers of an event or to [support@novu.co](mailto:support@novu.co). Meetup organizers are encouraged to prominently display points of contact for reporting unacceptable behaviour at local events. If a participant engages in harassing behaviour, the meetup organizers may take any action they deem appropriate. These actions may include but are not limited to warning the offender, expelling the offender from the event, and barring the offender from future community events. @@ -90,31 +89,33 @@ We expect all participants, organizers, speakers, and attendees to follow these Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: -1. Correction -- Community Impact: Use of inappropriate language or other behaviour deemed unprofessional or unwelcome in the community. -- Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behaviour was inappropriate. A public apology may be requested. -2. Warning -- Community Impact: A violation through a single incident or series of actions. -- Consequence: A warning with consequences for continued behaviour. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. -3. Temporary Ban -- Community Impact: A serious violation of community standards, including sustained inappropriate behaviour. -- Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. -4. Permanent Ban -- Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behaviour, harassment of an individual, or aggression toward or disparagement of classes of individuals. -- Consequence: A permanent ban from any sort of public interaction within the community. +1. **Correction** +- `Community Impact`: Use of inappropriate language or other behaviour deemed unprofessional or unwelcome in the community. +- `Consequence`: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behaviour was inappropriate. A public apology may be requested. +2. **Warning** +- `Community Impact`: A violation through a single incident or series of actions. +- `Consequence`: A warning with consequences for continued behaviour. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. +3. **Temporary Ban** +- `Community Impact`: A serious violation of community standards, including sustained inappropriate behaviour. +- `Consequence`: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. +4. **Permanent Ban** +- `Community Impact`: Demonstrating a pattern of violation of community standards, including sustained inappropriate behaviour, harassment of an individual, or aggression toward or disparagement of classes of individuals. +- `Consequence`: A permanent ban from any sort of public interaction within the community. The Novu Community Code of Conduct is licensed under the Creative Commons Attribution-Share Alike 3.0 license. Our Code of Conduct was adapted from Codes of Conduct of other open-source projects, including: -- Contributor Covenant -- Elastic -- The Fedora Project -- OpenStack -- Ansible -- Puppet Labs -- Ubuntu +- **Contributor Covenant** +- **Elastic** +- **The Fedora Project** +- **OpenStack** +- **Ansible** +- **Puppet Labs** +- **Ubuntu** Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder. -For answers to common questions about this code of conduct, see the FAQ [here.](https://www.contributor-covenant.org/faq)
Translations are [also available here.](https://www.contributor-covenant.org/translations) \ No newline at end of file +For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. + +Translations are available at https://www.contributor-covenant.org/translations. \ No newline at end of file diff --git a/community/get-involved.mdx b/community/get-involved.mdx index 54884f2e..a8266992 100644 --- a/community/get-involved.mdx +++ b/community/get-involved.mdx @@ -1,5 +1,5 @@ --- -title: "Get involved" +title: "Get involved with the Novu Community" description: "Your guide for engaging with the Novu community" --- @@ -10,10 +10,12 @@ At Novu, we're a vibrant, open-source community driven by passion, collaboration ## Join the conversation - Read our [code of conduct](/community/code-of-conduct) -- Say “Hi!” in our [Discord Server]((https://discord.gg/novu?ref=docs-community-introduction)) -- Explore our [open issues]([link](https://github.com/novuhq/novu/issues)) +- Say “Hi!” in our [Discord Server](https://discord.gg/novu?ref=docs-community-introduction) +- Explore our [open issues](https://github.com/novuhq/novu/issues) +- Subscribe to our newsletter [to stay in the know](https://novu.co/novu-community-2-0/?utm_campaign=Community%202.0&utm_source=Docs) ## Getting help + Our fellow community members are always ready to help you get past a blocker. However, you can take a few things into consideration to help them help you: - Share as many details as you can share. It will help us in debugging the issue. @@ -24,33 +26,48 @@ Our fellow community members are always ready to help you get past a blocker. Ho Community self-host option includes only community support. Checkout [commercial self host](/self-hosting-novu/commerical-self-host) for priority support. Intercome is suitable if you're using Novu cloud or [commercial self-host](/self-hosting-novu/commerical-self-host) and want priority support. Kindly use Discord or Github for community self-hosting questions. + + ## Contributing All community members are of one of the following four types: 1. Open source users -2. Active users -3. Power users +2. Active member +3. Power member +4. Novu Ambassador ### Become an active community member - Everyone who joins our community becomes an open-source user automatically. -- You can become an active user by: +- You can become an active community member by: - Submitting >2 PRs - Opening >2 issues - Sending >5 messages on Github - Commenting >3 times on Github -- Active users are one step closer to becoming Power users. +- Active community members are one step closer to becoming Power community members and then an active moderator. -### Become a power user +### Become a power community member -- All active community members are eligible to become a power user and can become so by having at least one of the following: +- All active community members are eligible to become a power community member and can become so by having at least one of the following: - Submitting 3 PRs - Opening 3 Issues - Sending 10 Discord messages - Commenting >10 times on Github +- Power community members are just one step away from becoming a Novu ambassador. + +### Become a Novu Ambassador + +A Novu ambassador is a trusted power member of the community that can do the following: + +- Love exploring and sharing their knowledge of any technology with other developers. +- Often write and speak about Novu. +- Possess strong Novu expertise and often help and support Novu users within the community. +- Socially influence developers with some knowledge of Novu. +- Consistently contribute to Novu OSS product. + +We are launching the Novu Ambassador program soon with amazing perks. Stay tuned! -The activity period is 30 days for becoming an active/power user. So, you'll be upgraded/downgraded depending on your activity in the stipulated time. ## Activities @@ -59,7 +76,7 @@ Are you passionate about notifications like we are? There are many different—a ### Help in onboarding and answering questions. - Welcome new users into the community -- Answer questions in the [community support channel]([link](https://discord.com/channels/895029566685462578/1019663407915483176)). +- Answer questions in the [community support channel](https://discord.com/channels/895029566685462578/1019663407915483176). - Offer input and opinions about various solutions you have tried. ### Improve our documentation @@ -83,7 +100,7 @@ Are you passionate about notifications like we are? There are many different—a ### Create content - Content writers program: Apply to become a content writer with us and get paid to write about use-cases highlighting how you solved a problem using Novu -- Write an article or a social media post about what you built with Novu and tag us there to share it with the community. We’ll shout you out, promise!!! +- Write an article about what you built with Novu and share it with the community. We’ll give you a shout out! ### PRs, issues, and bug reports @@ -95,16 +112,13 @@ Are you passionate about notifications like we are? There are many different—a At Novu, we believe that no contribution is small, and the only wrong question is the one that doesn’t get asked. So feel free to ask any question or raise that Pull Request. You’re always welcome here! 🤗 - -### Events and announcements -Staying in tune with our upcoming community events, workshops, and hackathons is fairly easy. - - Just keep an eye out for new announcements in the [announcement](https://discord.com/channels/895029566685462578/1040040454906986578) channel in our [discord community.](https://discord.gg/novu?ref=docs-upcoming-event)That’s the best way to stay updated about new events. - - You can also subscribe our [youtube channel](https://www.youtube.com/@novuhq) and follow us on [dev.to](https://dev.to/novu). +### Participate in office hours -
+- We have frequent (replace with interval— twice weekly, weekly, etc.) and topic-specific office hours that offer the ability to engage in real-time with Novu staff and other community members +- In these sessions, offer input, opinions, examples, etc. to contribute! -We’re excited to have you on board and look forward to your valuable contributions! If you need assistance, have questions, or want to share your experiences, feel free to engage with us through the support channels mentioned above. +We’re excited to have you on board and look forward to your valuable contributions! Together, we’ll shape the future of Novu. 🫂 \ No newline at end of file diff --git a/community/run-in-local-machine.mdx b/community/run-in-local-machine.mdx index 582135c8..7830f271 100644 --- a/community/run-in-local-machine.mdx +++ b/community/run-in-local-machine.mdx @@ -17,7 +17,7 @@ Need help installing the requirements? Read more [here](/community/machine-setu We recommend having at least 8GB of RAM to run Novu on a local machine as Novu has multiple services running together with external services like redis, mongodb etc. - + ### Setup the project @@ -64,9 +64,9 @@ The `npm run start` will start the Jarvis CLI tool which allows you to run the - **start:node** - Runs the `@novu/node` package in watch mode - **start:notification-center** - Runs and builds the React package for the Novu notification center - + - + ### Set up your environment variables diff --git a/guides/FCM-iOS-Novu/how-to-send-PUSH-notifications-to-iOS-devices-with-FCM-using-Novu.mdx b/guides/FCM-iOS-Novu/how-to-send-PUSH-notifications-to-iOS-devices-with-FCM-using-Novu.mdx index 98b47301..d9ea54c0 100644 --- a/guides/FCM-iOS-Novu/how-to-send-PUSH-notifications-to-iOS-devices-with-FCM-using-Novu.mdx +++ b/guides/FCM-iOS-Novu/how-to-send-PUSH-notifications-to-iOS-devices-with-FCM-using-Novu.mdx @@ -1,7 +1,6 @@ --- title: 'How to send PUSH notifications to iOS devices with FCM using Novu' description: 'Learn how to integrate Firebase Cloud Messaging with Novu and send notifications to iOS' -icon: 'circle-7' --- ## Prerequisites diff --git a/guides/add-digest-to-email-notifications.mdx b/guides/add-digest-to-email-notifications.mdx index adf15e49..f79a229a 100644 --- a/guides/add-digest-to-email-notifications.mdx +++ b/guides/add-digest-to-email-notifications.mdx @@ -1,7 +1,6 @@ --- title: 'How to Add Digest to Email Notifications' description: 'Leverage the digest functionality to send email notifications' -icon: 'circle-2' --- # Introduction diff --git a/guides/add-digest-to-inapp-notifications.mdx b/guides/add-digest-to-inapp-notifications.mdx index 38ab6e0d..55bc450a 100644 --- a/guides/add-digest-to-inapp-notifications.mdx +++ b/guides/add-digest-to-inapp-notifications.mdx @@ -1,7 +1,6 @@ --- title: 'How to Add Digest to In-App Notifications' description: 'Leverage the digest functionality to send in-app notifications' -icon: 'circle-1' --- ## Introduction diff --git a/guides/discord-guide.mdx b/guides/discord-guide.mdx index d09567df..0b908d49 100644 --- a/guides/discord-guide.mdx +++ b/guides/discord-guide.mdx @@ -1,7 +1,6 @@ --- title: 'How to use Novu to send notifications to a channel in a Discord server' description: 'Learn to send Discord notifications swiftly with Novu' -icon: 'circle-5' --- # Introduction diff --git a/guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu.mdx b/guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu.mdx index 75acbf81..e26e5973 100644 --- a/guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu.mdx +++ b/guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu.mdx @@ -1,7 +1,6 @@ --- title: 'How to send push notifications to Flutter apps (Android & iOS) with FCM using Novu' description: 'Learn how to integrate Firebase Cloud Messaging with Novu and send notifications to Flutter apps' -icon: 'circle-8' --- ## Prerequisites diff --git a/guides/headless-notification-center-guide.mdx b/guides/headless-notification-center-guide.mdx index 043a093b..dcc30d80 100644 --- a/guides/headless-notification-center-guide.mdx +++ b/guides/headless-notification-center-guide.mdx @@ -1,7 +1,6 @@ --- title: 'How to use Headless Notification Center' description: 'Use the headless version of the notification center' -icon: 'circle-3' --- ## Introduction diff --git a/guides/how-to-integrate-segment-with-novu.mdx b/guides/how-to-integrate-segment-with-novu.mdx index 4ffc7331..b20838aa 100644 --- a/guides/how-to-integrate-segment-with-novu.mdx +++ b/guides/how-to-integrate-segment-with-novu.mdx @@ -1,7 +1,6 @@ --- title: 'How To Integrate Segment With Novu' description: '' -icon: 'circle-3' --- [Segment](https://segment.com/) is a customer data platform that helps businesses collect, manage, and analyze customer data from multiple sources. It streamlines data integration, ensures data quality, and aids in compliance with regulations. Segment's tools enable better understanding of customer behavior and facilitate personalized customer experiences. It's useful for marketing, analytics, and product teams in diverse industries. @@ -22,7 +21,7 @@ If this is your first time working with the tool, consider consulting the 'Get S height="315" src="https://www.youtube.com/embed/2fErE_8hFEc?si=DZ-j2vF1pJJv0A_K&clip=UgkxPJQujqPlfFfQ0o7FAPP1FiE-P8a2dD_h&clipt=EJqJFRjflRg" title="YouTube video player" - frameborder="0" + frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> @@ -36,7 +35,7 @@ width="560" height="315" src="https://www.youtube.com/embed/2fErE_8hFEc?si=2pPpf7wG2Mnmw2Vt&clip=UgkxEcJdj-m2g4WG_siE5UpuBqUuiWoKB3g-&clipt=EN75HRi-ziE" title="YouTube video player" -frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> +frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> diff --git a/guides/novu-fcm-react-native-android.mdx b/guides/novu-fcm-react-native-android.mdx new file mode 100644 index 00000000..463a808b --- /dev/null +++ b/guides/novu-fcm-react-native-android.mdx @@ -0,0 +1,321 @@ +--- +title: 'How to send push notifications in an Android app (react native) with FCM and Novu' +description: 'Learn how to send FCM push notifications in a React native Android app using Novu and FCM' +--- + +## Prerequisites + +To complete this tutorial, you will need the following: + + +- A [Firebase](https://firebase.google.com/) account +- A [Novu](https://web.novu.co/) account +- An [Expo](https://expo.dev) account + +Push notifications are notifications that are sent to a user’s devices whether the user is using the app or not. We’ll be using the Firebase Cloud Messaging (FCM) integration of Novu to send these notifications. You can find the complete code for this project in our [Github repo.](https://github.com/novuhq/fcm-react-native-android) + +## Start a React-Native project +We'll use the `create-expo` tool to initialize a new expo app. It creates a new React Native app with the expo package installed. We're naming our app `fcm-novu-rn2` and hence using the following command: +``` javascript + npx create-expo-app fcm-novu-rn2 +``` +If it asks you to choose a template, choose the 'blank' template. + +Now, go to the project directory and install the `react-native-firebase` package using the following command: + +``` bash +npm install --save @react-native-firebase/app +``` +Once this is installed, install the messaging module of Firebase using the following command: +``` bash +npm i --save @react-native-firebase/messaging +``` + +## Getting the FCM token +Now, we need to grab the `token key` from FCM. We'll need this to send notifications using FCM. We're using `useEffect` to grab this key as follows: +``` jsx +// import messaging module +import messaging from '@react-native-firebase/messaging'; + +// Request permission to send notifications +const authStatus = await messaging().requestPermission(); + +// Check if permission is granted or provisional +const enabled = + authStatus === messaging.AuthorizationStatus.AUTHORIZED || + authStatus === messaging.AuthorizationStatus.PROVISIONAL; + +// If permission is granted or provisional, proceed +if (enabled) { + // Log the authorization status + console.log('Authorization status:', authStatus); + + // Retrieve the FCM token for the device + const token = await messaging().getToken(); + // Log the FCM token + console.log('FCM Token is:', token); + + // Return a function to unsubscribe from notifications + return unsubscribe; +} else { + // If permission is not granted, log the error status + console.log('Could not grab token...', authStatus); +} + +``` + +## FCM handlers +FCM uses something called a `background handler` to, as the name suggests handle notifications when the app is in the background. So, we'll add it to our app: +``` jsx +// Background message handler for incoming messages while the app is in bg +messaging().setBackgroundMessageHandler(async (remoteMessage) => { + // Log a message indicating that a message was handled in the background + console.log('Message handled in the background!', remoteMessage); +}); + +``` + +Similarly, we also need a `foreground handler` to handle notifications when the app is in the foreground. In our case, we're updating a state's value in our handler. Here's our foreground handler: +``` jsx +// handle incoming messages while the app is in the foreground +const unsubscribe = messaging().onMessage(async (remoteMessage) => { + // Log a message indicating that the onMessage event is working + console.log('working!!!!'); + + // Update state with the received message + setNotification(remoteMessage); +}); +return unsubscribe; +``` + +## Setting up Expo +In order to load projects from Expo CLI, we need a dev client to be installed in our app. To install it, execute the following command from the root of the project directory: +``` bash + npx expo install expo-dev-client +``` + +Once installed, log into your expo account using the following command: + +``` bash +eas login +``` +It'll ask for your username and password and log you in. + +Now, we are ready to create our build of the app. Use the following command to create a development build of the app for the Android platform: +``` bash +eas build --profile development --platform android +``` +If expo asks if you want to automatically create an EAS project for your app, choose yes. Do the same when it asks you if you want to generate a new keystore. +Do not change the Android package name, even if EAS asks you to! + +## Setting up Firebase +1. Create a Firebase account if you don't already have one. Then, create a new project and all the relevant details. + +2. Once your project has been created, you'll be greeted with this welcome screen and asked to add Firebase to your app, so let's do that. + +3. We'll choose the 'Android' option because we're creating an Android app. + +4. Find the package name from the `app.json` file of the project: + +5. Add this package name to Firebase: + +6. Now, we need to add `SHA1` keys from our project to the Firebase app. Run the following command to obtain `SHA1` key. We'll get two `SHA1` keys, one of which we'll add to Firebase right now and the other one, later on. +``` bash +eas credentials +``` +If it asks you to, choose the 'Android' platform then 'Development' build then 'Keystore' then 'Set up a new keystore' then 'Select Build Credentials' and then 'Create a new build credential configuration'. + +7. Now copy the `SHA1` key and add it to Firebase and register the app: + +8. Click 'next' on all the other options and finally click 'continue to console' as follows: + +9. Go to 'project settings' and scroll all the way down + +10. Click on the 'Add fingerprint' button and add the second `SHA1` key here. + +11. Now, download the Google services file and add it to the project's root directory. We also need to specify its location in the `app.json` file: + +12. Now we need to upload the Firebase server key to expo. Go to project settings and find it under the 'Cloud Messaging' tab. + +13. Now, upload that key to expo using the following command: +``` bash +expo push:android:upload --api-key +``` +14. Rebuild the app using the following command and we're good to go! +``` bash +eas build --profile development --platform android +``` +15. If you have an Android device with you, simply scan and install the app. Otherwise, if you want to run it on an emulator, simply copy the link given alongside the QR code and open it on the emulator and then install the app. + +16. Start the server to run the app, using the following command: +``` bash +npx expo start --dev-client +``` +Again, you can either scan the QR code or copy and paste the link. + +Sometimes it doesn't fire up the emulator even when you have it installed. In that case, start the emulator manually and run the server again! + +## Setting up Novu +We'll need a workflow to trigger notifications to our user's devices. Follow the steps below to create one to ensure we are on the path to making FCM work as expected: +1. Head over to the [Integrations Store](https://web.novu.co/integrations) on the Novu Web Dashboard and make sure that you've turned on the 'Firebase Cloud Messaging' integration. + +If you're doing this for the first time, you'll need to get your service account key from the [Firebase Console](https://console.firebase.google.com/). Read more about it in our [FCM provider docs.](https://docs.novu.co/channels-and-providers/push/fcm) +2. Now, we need to create a workflow that we'll trigger from our app to send notifications. Head over to [workflows in the Novu Web Dashboard](https://web.novu.co/workflows) and click on the 'Add a workflow' button. + +3. Choose the 'blank workflow' option from the dropdown menu. + +3. Drag and drop the 'Push' node below the Workflow Trigger node. + +4. If you hover over the newly added 'Push' node, you'll see an error saying 'Message content and title are missing'. + +5. We're going to add a title and body for notifications. So, add them and give your workflow a suitable name. + +6. Now, click on the 'Update' and then the 'get snippet' button to get the trigger code. + + +## Create a subscriber and update credentials +A subscriber is essentially the recipient of the notifications sent through Novu’s system. When you create a subscriber, you’re setting up the necessary information for Novu to send targeted notifications to. You can find more about subscribers in [our docs.](https://docs.novu.co/subscribers/subscribers) +To create a subscriber, we'll use the `identify` method: +``` jsx +// creating new instance of Novu +const novu = new Novu(""); + +// creating subscriber +await novu.subscribers.identify('newSubForRNA', { + firstName: "RNA" +}); +``` + +Now, we'll add the FCM token that we'd received [earlier](#getting-the-fcm-token) to this subscriber using the `setCredentials` method: +``` jsx +await novu.subscribers.setCredentials('newSubForRNA', PushProviderIdEnum.FCM, { + deviceTokens: [''], +}); +// notice the use of 'newSubForRNA' here. This identifies the subscriber to which we're adding the FCM token +``` + +## Sending a push notification using Novu + +To send a notification with Novu, we are actually triggering a notification workflow. Here's how to do it using Node: +``` jsx +novu.trigger('rna-2', { + to: { + subscriberId: 'newSubForRNA' + }, + payload: {}, +}) +``` +When triggered using the trigger code from above, this is the notification received on the device: + + +## Dynamic content +So far, we've sent notifications that have had "hard-coded" content. Now we'll send dynamic data when triggering a notification. + +The way to do so is by changing the values of the title and the body to `{{title}}` and `{{body}}` in our workflow. + +1. Go to the workflow we'd created earlier and change the values of the title and the body to `{{title}}` and `{{body}}` respectively. + +2. Simply add these identifiers to the payload by changing the trigger code: +``` jsx +novu.trigger('rna-2', { + to: { + subscriberId: 'newSubForRNA' + }, + payload: { + title: payloadTitle, + body: payloadBody + }, +}); +``` +We're extracting `payloadTitle` and `payloadBody` from the request body +Now, the notification delivered to the subscriber will contain dynamic data as shown below: + + +## Sending images +Up to this point, your notifications have all contained only text. But if you’ve received many notifications, you know that notifications can have rich content, such as images. It’d be great if your notifications showed users a nice image related to their content. Once again, Firebase makes this super simple. + +All you need to do is to specify the `URL` of the image in the override as shown below: +``` jsx +novu.trigger('rna-2', { + to: { + subscriberId: 'newSubForRNA' + }, + payload: { + title: payloadTitle, + body: payloadBody + }, + overrides: { + fcm: { + android: { + notification: { + imageUrl: 'URL of the image', + } + } + } + } +}); +``` +The following notification is what gets delivered to the subscriber: + + + +## Handling data type messages +With FCM, you can send `Notification` and `Data` messages. We have handled sending notification messages. Let’s handle data messages. Data type messages are useful when, in addition to the usual data, you want to send some custom data. Maybe whether a subscriber has purchased the pro plan of our product or not, maybe which tier of usage they have purchased etc. You can do this easily by modifying the override. Here's an example of sending the subscription status using the identifier `subStatus`: + +``` jsx +novu.trigger('rna-2', { + to: { + subscriberId: 'newSubForRNA' + }, + payload: { + title: payloadTitle, + body: payloadBody + }, + overrides: { + fcm: { + android: { + data: { + subStatus: "true" + }, + } + } + } +}); +``` + +On the user's device, you can extract this out and have it displayed like this: + + +## Priority of a notification + +FCM tries to deliver high-priority messages immediately. The priority of a notification can also be altered by changing the overrides, as shown below: + +``` jsx +novu.trigger('rna-2', { + to: { + subscriberId: 'newSubForRNA' + }, + payload: { + title: payloadTitle, + body: payloadBody + }, + overrides: { + fcm: { + android: { + data: { + subStatus: "true" + }, + notification: { + priority: 'low' + } + } + } + } +}); +``` + + + +## Additional resources +- [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) +- [FCM Architectural Overview](https://firebase.google.com/docs/cloud-messaging/fcm-architecture) \ No newline at end of file diff --git a/guides/novu-fcm-web.mdx b/guides/novu-fcm-web.mdx index 7fc30d05..b83587e7 100644 --- a/guides/novu-fcm-web.mdx +++ b/guides/novu-fcm-web.mdx @@ -1,7 +1,6 @@ --- title: 'How to send web push notifications with FCM and Novu' description: 'Send FCM push notifications in a React app using Novu' -icon: 'circle-6' --- ## Introduction diff --git a/guides/slack-guide.mdx b/guides/slack-guide.mdx index be08396e..25a8cdef 100644 --- a/guides/slack-guide.mdx +++ b/guides/slack-guide.mdx @@ -1,7 +1,6 @@ --- title: 'How to use Novu to send notifications to a Slack channel' description: 'Learn to send Slack notifications swiftly with Novu (manually managed)' -icon: 'circle-4' --- # Introduction diff --git a/help/account-management.mdx b/help/account-management.mdx new file mode 100644 index 00000000..efdac4dc --- /dev/null +++ b/help/account-management.mdx @@ -0,0 +1,33 @@ +--- +title: "Account Management" +sidebarTitle: "Account Management" +icon: "user" +--- + +### Creating an account + +Novu supports [US](https://web.novu.co/auth/signup) and [EU](https://eu.web.novu.co/auth/signup) regions based on where you want your data to be stored. In both the regions, a new account can be created using Github or Email and Password. If you are looking for other ways to signup on Novu, feel free to reach out us at support@novu.co. + +### Resetting password + +If you have created an account with Novu before, you can reset your password by clicking on `Forgot Your Password?` option on the sign-in page. + +### Is US and EU account data synced? + +US and EU accounts are completely independent. If you have created an account in the US, you will not be able to login with the same credentials in the EU and vice versa. + +### Changing the email associated to my account +If you want to change your account email, please reach out to us at support@novu.co. + +### What happens if I change my Github account email? + +If you created your Novu account using Github, and you change your email in Github, it will not be reflected in Novu. When you login to Novu using the new Github email, a new account will be created. Please email support@novu.co to update your email address. + +### How do I create a new Organization? + +A new organization can be created by entering a value in the dropdown in the left bottom corner of the dashboard. As soon as you start writing something, an add option will appear. This dropdown can also be used to switch between organizations. One organization's data is not visible to other organization members. + +### How can I change the name of my Organization +If you want to change your current Organization name, [rename organization api](https://novu-preview.mintlify.app/api-reference/organizations/rename-organization) can be used. If you face any issue in using the API or need any help changing the Organization name, please reach out to us at support@novu.co. + + \ No newline at end of file diff --git a/help/channels/chat.mdx b/help/channels/chat.mdx new file mode 100644 index 00000000..d306742c --- /dev/null +++ b/help/channels/chat.mdx @@ -0,0 +1,10 @@ +--- +title: "Chat" +sidebarTitle: "Chat" +icon: "comment" +--- + +### Can I send a message to a specific user on Slack? +While installing the Slack app, you will be asked the User or Channel to which the message needs to be sent. On selecting a user, a webhookUrl for that user will be generated and Novu will use that webhookUrl to send a message to that specific user. + + \ No newline at end of file diff --git a/help/channels/email.mdx b/help/channels/email.mdx new file mode 100644 index 00000000..8b1d4f95 --- /dev/null +++ b/help/channels/email.mdx @@ -0,0 +1,28 @@ +--- +title: "Email" +sidebarTitle: "Email" +icon: "envelope" +--- + +### How to override default values of Email? +All values (from, to, subject, body, etc.) can be overridden by using the `overrides` option while triggering the workflow. Please see our [email overrides documentation](/channels-and-providers/email/overview#sending-email-overrides) for more details. + +### Sending HTML as the value of a variable +HTML content as a value of step variable can be sent by replacing the double curly braces `{{}}` variable with triple curly braces `{{{}}}` variable. For example, `{{{htmlContent}}}`. + +### I have multiple Email Providers or integrations active, how do I associate them to a Workflow? +There can be more than one active email integrations of same or different providers. However only one email integration can be primary at one time per environment. To use a different email integration than your primary integration, the integrationIdentifier field of email overrides can be used. Read about using [different email integration](/channels-and-providers/email/overview#using-different-email-integration) for more details. + +### Why am I getting the error “message content could not be generated”? +This error occurs when the HTML content is not properly formatted. Make sure the HTML content is properly formatted and does not contain any syntax errors. Make sure Step Variables are properly formatted and are not missing opening or closing curly braces. + +### Can email or phone be used as step variables? +Novu recommends not to use subscriber attributes as step variables. Instead, use the subscriber attributes directly in the step. For example, use `{{subscriber.email}}` instead of `{{email}}` as your step variable. Novu will select the email from subscriber attributes and inject the value in the content. + +### How to use Provider templates in place of email content? +Currently, we support external Provider template support for [sendgrid](/channels-and-providers/email/sendgrid#using-sendgrid-template) and [mailersend](/channels-and-providers/email/mailersend#using-mailersend-template) only. + +### Can I retrieve only Email content? +Novu does not have a separate API to retrieve email content. However, email content can be retrieved from the email step of the workflow. The email step contains the email content in the `content` field of [get worklfow api](/api-reference/workflows/get-workflow) response. + + \ No newline at end of file diff --git a/help/channels/in-app.mdx b/help/channels/in-app.mdx new file mode 100644 index 00000000..9cf7c4d0 --- /dev/null +++ b/help/channels/in-app.mdx @@ -0,0 +1,23 @@ +--- +title: "In App" +sidebarTitle: "In App" +icon: "bell" +--- + +### Creating two In-App Notification Centers in one account +To configure your In-App notifications, you must use the In-App integration from our integration store. + +To display in-app notifications to users, any SDKs in our [client library](/notification-center/introduction) can be used. Every library requires `applicationIdentifier` and `subscriberId` to fetch notifications. Currently, only one `applicationIdentifier` is supported per environment per organization. + +Feel free to reach out to us at support@novu.co if you have speicific requirements of multiple `applicationIdentifier` per organization. + +### Issues with a redirect URL +To redirect to specified redirect url on clicking the in-app notification, notification click event should be handled in client side code. Here is an example in [React](/notification-center/client/react/get-started#onnotificationclick). + +### Changing the default colors of the Notification Center +Styling of your In-App Notification Center can be customized using the [styles](/notification-center/client/react/customization#customization-using-styles-prop) prop. If you want to customize only a single component, you can use [available](/notification-center/client/react/customization#popovernotificationcenter-customization) props. + +### Additional Security for In-App Notifications +To add an extra layer of security, we recommend using our HMAC encryption feature to eliminate subscriber impersonation Checkout [HMAC](/notification-center/client/react/get-started#hmac-encryption) section for more details. + + \ No newline at end of file diff --git a/help/channels/push.mdx b/help/channels/push.mdx new file mode 100644 index 00000000..66375e33 --- /dev/null +++ b/help/channels/push.mdx @@ -0,0 +1,21 @@ +--- +title: "Push" +sidebarTitle: "Push" +icon: "mobile" +--- + +### Can I send a Desktop Push notification? +Yes, Desktop Push Notifications can be sent by using a Web Push Notification. It is supported with almost all [push channel](/channels-and-providers/push/overview) providers. + +### Why am I getting the error “unexpected provider” with FCM? +The possible reasons for this error are: +- Invalid FCM credentials. +- Invalid or stale FCM token. + +### Why am I getting the error “Sending message failed due to Requested entity was not found” with FCM? +- This error occurs when the FCM token is invalid or stale. You can fix this by updating the FCM device token. + +### Can I store device tokens for particular FCM integration if I have multiple FCM providers active? +- Device tokens for particular FCM integration can be stored using the `integrationIdentifier` field of [update subscriber credentials api](/api-reference/subscribers/update-subscriber-credentials). `integrationIdentifier` is the unique identifier of the integration which is similar to `providerIdentifier`. It can be copied from the integration form. + + \ No newline at end of file diff --git a/help/channels/sms.mdx b/help/channels/sms.mdx new file mode 100644 index 00000000..ba7878d6 --- /dev/null +++ b/help/channels/sms.mdx @@ -0,0 +1,16 @@ +--- +title: "SMS" +sidebarTitle: "SMS" +icon: "message-sms" +--- + +### Why am I getting the error “ subscriber does not have a configured channel”? +This error occurs when a Subscriber is missing `phone` attribute. To fix this error, you need to update the subscriber and set the `phone` attribute with a valid phone number. + +### How to change the default sender name for SMS? +First, ensure a custom sendername (sender id or from) is allowed with your Provider. Some countries expect to verify the sender name before using it. + +You can change the default sender name for SMS by using [overrides](/channels-and-providers/sms/overview#sending-sms-overrides) field while triggering the workflow. + + + \ No newline at end of file diff --git a/help/content-management.mdx b/help/content-management.mdx new file mode 100644 index 00000000..a7215a2a --- /dev/null +++ b/help/content-management.mdx @@ -0,0 +1,22 @@ +--- +title: "Content Management" +sidebarTitle: "Content Management" +icon: "file-pen" +--- + +### What is a Layout and how can I use them? +Layout is similar to a style container for email templates. Layouts can be used for your organization’s branding and style. It can be used to define the structure of the email template such as the header, footer, and other common elements. It must have a `{{{body}}}` variable which will be replaced by the actual email template content. + +### Can Layouts be used across all channels? +Layouts are specific to Emails. + +### Can MJML templates be used in content editors? +Only HTML templates can be used in content editors. We support [handlebar helpers](/content-creation-design/handlebars-helpers) for common use cases like iteration, conditions etc. If you need any specific Handlebar Helpers, please reach out to us at support@novu.co. + +### Can the content of one Step be used in another? +Currently each Step has content that is unique to it and can not be reused. If this is important to you, please send us a note at support@novu.co. + +### Which Translation Language will be used if the Subscriber’s locale field does not match with translation language files? +If the Subscriber's locale field does not match with Translation locale files, or it is not available, then the defaul language of the translation group will be used. If a default is not set, the automatic fallback is English. + + \ No newline at end of file diff --git a/help/observability.mdx b/help/observability.mdx new file mode 100644 index 00000000..d3ddf0e9 --- /dev/null +++ b/help/observability.mdx @@ -0,0 +1,17 @@ +--- +title: "Observability" +icon: "magnifying-glass" +description: "Analyzing your Triggered Events and Notification execution logs" +--- + +### My Subscribers have preferences set, but the Activity Feed is showing Triggers as being sent. +The Activity Feed is a place each event (Workflow Trigger) is listed. If a Subscriber has a preference to not receive notifications through a certain channel, Novu’s system will adhere to that. However, this is still a valid Trigger as the fanout occurs before preferences are accommodated. + +### What does "step filtered by subscriber preferences" mean in the logs? +It means that the Subscriber has set preferences configured and the step was filtered based on that preference. If the subscriber has disabled a step Channel then, the step will be filtered and notification will not be sent to the subscriber. + +### How to export Activity Feed data? +Currently, we don't have any option to export activity feed data. But you can use our [API](/api-reference/notification/get-notifications) to fetch the data. If there is a specific system you’re looking to integrate with, please send us a note at support@novu.co. + + + \ No newline at end of file diff --git a/help/orchestration.mdx b/help/orchestration.mdx new file mode 100644 index 00000000..305cdf69 --- /dev/null +++ b/help/orchestration.mdx @@ -0,0 +1,19 @@ +--- +icon: "screwdriver-wrench" +--- + +### New event triggers are merging an active Digest with an old duration.. +When a Digest is created with a set duration and an event is triggered, the Digest stays active ( and will batch the events) until the configured duration is over. + +If you change the duration before the initial time period has completed , the previous digest will still be active and the new duration is merged with the old duration Digest until the previous duration is complete. + +To remove the previous Digest, use [event cancel api](/api-reference/events/cancel-triggered-event) to cancel all event triggers that are still pending and are merged in active Digests. + +### Can I dynamically make the Digest inactive?? +Yes, Digest supports conditions and can be applied to your Digest step. If the Triggered Event passes the set conditions, then it will be active or inactive based on the condition. + +### Can a Subscriber control the Digest duration and time? +Not currently. The Digest duration can be changed at the Workflow level only and is applied to all subscribers that Workflow is triggered to. If you have an identified use case for this, please let us know at support@novu.co. + + + \ No newline at end of file diff --git a/help/overview.mdx b/help/overview.mdx new file mode 100644 index 00000000..79841fd6 --- /dev/null +++ b/help/overview.mdx @@ -0,0 +1,52 @@ +--- +title: "Help Center Overview" +description: "Introduction to Novu help center" +sidebarTitle: "Overview" +icon: "bolt" +--- + +At our Help Center, we're dedicated to provide comprehensive support to ensure your experience with our products and services is seamless and enjoyable. Whether you're a new user looking for guidance or a seasoned customer seeking assistance, we're here to help. Help Center is organized as per our product architecture and is divided into the following sections: + + + + Manage your account and access your data. + + + Manage subscribers and topics + + + Explore all channels and how to use each one. + + + Explore orchestration digest, delay, conditions and more. + + + Content management, layouts, templates, and more. + + + Observability, metrics, analytics, and more. + + + + + \ No newline at end of file diff --git a/help/user-management.mdx b/help/user-management.mdx new file mode 100644 index 00000000..6257b798 --- /dev/null +++ b/help/user-management.mdx @@ -0,0 +1,24 @@ +--- +title: "User Management" +sidebarTitle: "User Management" +icon: "users" +--- + +### What is a Subscriber? +A subscriber is an entity to which notifications are sent. It is a Novu term similar to a user in your system. As in your system, a user is identified by a unique id, similarly in Novu, a subscriber is identified by a unique id called `subscriberId`. We recommend that the existing value you use in your system as a `userId` to be used as `subscriberId` in Novu. Read more about subscribers on [subscribers documentation page](/subscribers/subscribers). + +### Is it necessary to use subscriberId as same as userId? +No, it is not necessary to use subscriberId as same as userId. You can use any unique id as subscriberId. We recommend using userId as subscriberId to avoid any confusion. Some of our customers use a pattern like `auth0|userId` as a value for `subscriberId`. + +### What is the right approach to add Subscribers? +Subscribers can be added either [ahead of trigger](/subscribers/subscribers#1-ahead-of-trigger) or [inline of trigger](/subscribers/subscribers#2-inline-of-trigger). One way to add a subscriber using inline of trigger is to create a new subscriber in Novu as soon as they sign up or register in your system. + +You can add your existing users as subscribers in Novu using [bulk create subscriber creation method](/subscribers/subscribers#bulk-subscriber-creation). + +### Can Subscriber credentials be added while creating a new Subscriber? +Subscriber credentials for Push and Chat channel providers cannot be added while creating a new subscriber. Subscriber credentials for Push and Chat channel providers can be added using the [update subscriber credentials api](/api-reference/subscribers/update-subscriber-credentials) or corresponding sdk methods. + +SMS and Email channels are a bit different because all providers can work with the same value, so `email` and `phone` [attributes](/subscribers/subscribers#subscriber-attributes) can be added while creating a new Subscriber. + +### Can Subscriber preferences be updated while adding a new Subscriber? +Subscriber preference cannot be updated while adding a new subscriber. Novu sets all channels as true by default for new subscribers. You can modify preferences at any time. Read more about [subscriber preferences](/subscribers/preferences). \ No newline at end of file diff --git a/images/fcm-novu-rna/android.png b/images/fcm-novu-rna/android.png new file mode 100644 index 00000000..5e660487 Binary files /dev/null and b/images/fcm-novu-rna/android.png differ diff --git a/images/fcm-novu-rna/cd.png b/images/fcm-novu-rna/cd.png new file mode 100644 index 00000000..082aa7f8 Binary files /dev/null and b/images/fcm-novu-rna/cd.png differ diff --git a/images/fcm-novu-rna/console.png b/images/fcm-novu-rna/console.png new file mode 100644 index 00000000..b6d8619a Binary files /dev/null and b/images/fcm-novu-rna/console.png differ diff --git a/images/fcm-novu-rna/custom.png b/images/fcm-novu-rna/custom.png new file mode 100644 index 00000000..d2299436 Binary files /dev/null and b/images/fcm-novu-rna/custom.png differ diff --git a/images/fcm-novu-rna/dynamic.png b/images/fcm-novu-rna/dynamic.png new file mode 100644 index 00000000..d8af0294 Binary files /dev/null and b/images/fcm-novu-rna/dynamic.png differ diff --git a/images/fcm-novu-rna/fp.png b/images/fcm-novu-rna/fp.png new file mode 100644 index 00000000..5ee4f2d2 Binary files /dev/null and b/images/fcm-novu-rna/fp.png differ diff --git a/images/fcm-novu-rna/greet.png b/images/fcm-novu-rna/greet.png new file mode 100644 index 00000000..ec066e21 Binary files /dev/null and b/images/fcm-novu-rna/greet.png differ diff --git a/images/fcm-novu-rna/hardcoded.png b/images/fcm-novu-rna/hardcoded.png new file mode 100644 index 00000000..11af7e7d Binary files /dev/null and b/images/fcm-novu-rna/hardcoded.png differ diff --git a/images/fcm-novu-rna/image.png b/images/fcm-novu-rna/image.png new file mode 100644 index 00000000..c277a216 Binary files /dev/null and b/images/fcm-novu-rna/image.png differ diff --git a/images/fcm-novu-rna/json.png b/images/fcm-novu-rna/json.png new file mode 100644 index 00000000..f049a8f0 Binary files /dev/null and b/images/fcm-novu-rna/json.png differ diff --git a/images/fcm-novu-rna/key.png b/images/fcm-novu-rna/key.png new file mode 100644 index 00000000..bd64d94c Binary files /dev/null and b/images/fcm-novu-rna/key.png differ diff --git a/images/fcm-novu-rna/keys.png b/images/fcm-novu-rna/keys.png new file mode 100644 index 00000000..b4a892bf Binary files /dev/null and b/images/fcm-novu-rna/keys.png differ diff --git a/images/fcm-novu-rna/location.png b/images/fcm-novu-rna/location.png new file mode 100644 index 00000000..77301ad6 Binary files /dev/null and b/images/fcm-novu-rna/location.png differ diff --git a/images/fcm-novu-rna/package.png b/images/fcm-novu-rna/package.png new file mode 100644 index 00000000..0b225f9b Binary files /dev/null and b/images/fcm-novu-rna/package.png differ diff --git a/images/fcm-novu-rna/priority.png b/images/fcm-novu-rna/priority.png new file mode 100644 index 00000000..9d257195 Binary files /dev/null and b/images/fcm-novu-rna/priority.png differ diff --git a/images/fcm-novu-rna/qr.png b/images/fcm-novu-rna/qr.png new file mode 100644 index 00000000..3da0ea2e Binary files /dev/null and b/images/fcm-novu-rna/qr.png differ diff --git a/images/fcm-novu-rna/serv.png b/images/fcm-novu-rna/serv.png new file mode 100644 index 00000000..9a67d0f4 Binary files /dev/null and b/images/fcm-novu-rna/serv.png differ diff --git a/images/fcm-novu-rna/server.png b/images/fcm-novu-rna/server.png new file mode 100644 index 00000000..80bed324 Binary files /dev/null and b/images/fcm-novu-rna/server.png differ diff --git a/images/fcm-novu-rna/settings.png b/images/fcm-novu-rna/settings.png new file mode 100644 index 00000000..0f858608 Binary files /dev/null and b/images/fcm-novu-rna/settings.png differ diff --git a/images/fcm-novu-rna/snippet.png b/images/fcm-novu-rna/snippet.png new file mode 100644 index 00000000..66cf00eb Binary files /dev/null and b/images/fcm-novu-rna/snippet.png differ diff --git a/images/fcm-novu-rna/title.png b/images/fcm-novu-rna/title.png new file mode 100644 index 00000000..816b902c Binary files /dev/null and b/images/fcm-novu-rna/title.png differ diff --git a/images/help/overview/product-architecture.jpg b/images/help/overview/product-architecture.jpg new file mode 100644 index 00000000..c1f65403 Binary files /dev/null and b/images/help/overview/product-architecture.jpg differ diff --git a/mint.json b/mint.json index 915ba2c8..3b9ede03 100644 --- a/mint.json +++ b/mint.json @@ -81,6 +81,10 @@ { "name": "Use Cases", "url": "use-cases" + }, + { + "name": "Help Center", + "url": "help" } ], "navigation": [ @@ -315,7 +319,8 @@ "self-hosting-novu/deploy-with-docker", "self-hosting-novu/object-storage", "self-hosting-novu/commerical-self-host", - "self-hosting-novu/kubernetes" + "self-hosting-novu/kubernetes", + "self-hosting-novu/aws" ] }, { @@ -325,11 +330,12 @@ "guides/add-digest-to-email-notifications", "guides/headless-notification-center-guide", "guides/slack-guide", - "guides/how-to-integrate-segment-with-novu", "guides/discord-guide", "guides/novu-fcm-web", "guides/FCM-iOS-Novu/how-to-send-PUSH-notifications-to-iOS-devices-with-FCM-using-Novu", - "guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu" + "guides/fcm-flutter-novu/how-to-send-push-notifications-to-flutter-apps-with-fcm-using-Novu", + "guides/how-to-integrate-segment-with-novu", + "guides/novu-fcm-react-native-android" ] }, { @@ -610,7 +616,20 @@ "api-reference/get-v1blueprintsgroup-by-category", "api-reference/get-v1blueprints" ] + }, + { + "group": "Help", + "pages": [ + "help/overview", + "help/account-management", + "help/user-management", + { "group": "Channels", "icon": "bars", "pages": ["help/channels/in-app", "help/channels/email", "help/channels/sms", "help/channels/push", "help/channels/chat" ] }, + "help/orchestration", + "help/content-management", + "help/observability" + ] } + ], "backgroundImage": "/background.png", "redirects": [ diff --git a/notification-center/client/headless/api-reference.mdx b/notification-center/client/headless/api-reference.mdx index d987517d..9ad99f73 100644 --- a/notification-center/client/headless/api-reference.mdx +++ b/notification-center/client/headless/api-reference.mdx @@ -195,7 +195,16 @@ headlessService.fetchNotifications({ ); }, page: pageNumber, - query: { feedIdentifier: "feedId", read: false, seen: true }, + query: { + feedIdentifier: "feedId", + read: false, + seen: true, + // payload sent while triggering the workflow + payload: { + message : "Notification message", + type: "product", + } + }, storeId: "storeId", }); ``` diff --git a/notification-center/introduction.mdx b/notification-center/introduction.mdx index 0e6c533b..f0238a9e 100644 --- a/notification-center/introduction.mdx +++ b/notification-center/introduction.mdx @@ -10,7 +10,7 @@ In-App notifications are different from push notifications in the sense that In- Novu provides a pre-built, ready-to-use, and customizable UI component. It also allows you to bring your own UI via a headless component which can be used to add In-App notifications to any platform. - + ## Example diff --git a/self-hosting-novu/aws.mdx b/self-hosting-novu/aws.mdx index a3ad6dc9..5d271eca 100644 --- a/self-hosting-novu/aws.mdx +++ b/self-hosting-novu/aws.mdx @@ -3,11 +3,42 @@ title: 'AWS' description: 'Learn how to deploy Novu to AWS' icon: 'amazon' --- -Amazon Web Services (AWS) is a cloud computing platform by Amazon, providing a wide range of on-demand services like computing power, storage, and databases over the internet. -It enables businesses and individuals to avoid managing physical infrastructure and offers features for computing, storage, databases, analytics, machine learning, and more. +Amazon Web Services (AWS) is a cloud computing platform by Amazon, providing a wide range of on-demand services like computing power, storage, and databases over the internet. +It enables businesses and individuals to avoid managing physical infrastructure and offers features for computing, storage, databases, analytics, machine learning, and more. AWS is known for its scalability, flexibility, and global network of data centers. Learn more about [AWS](https://docs.aws.amazon.com/) +## Deploying on EC2 with the Docker Compose File +Deploying Novu on EC2 with Docker Compose involves several steps. + +In general, the steps are as follows: +1. **Set up an EC2 Instance**: Create an instance on AWS EC2. We reccomend a bare minimum of 4 CPU Cores and 16GB of RAM. +2. **Install Docker**: Once you have your instance up and running, SSH into it and install Docker. You can do this by running the following commands: +``` bash +sudo yum update -y sudo amazon-linux-extras install docker; +sudo service docker start sudo usermod -a -G docker +ec2-user +``` +3. **Install Docker Compose**: Docker Compose will allow you to easily manage your application which will consist of multiple Docker containers. +Install it by running: +``` bash +sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; +sudo chmod +x /usr/local/bin/docker-compose +``` +4. **Deploy Novu**: Now, clone the Novu repository and navigate to the directory containing the docker-compose.yml file. +To start your Novu instance, simply run: +``` bash +docker-compose up -d +``` + +Please note, there are user reports indicating an issue with volume persistence when deploying Novu on EC2 with Docker Compose. +You can see the discussions about this problem [here](https://github.com/novuhq/novu/issues/3339) as we do not provide official support for these types of deployments. +This is something to be aware of when deploying in this manner, and you may need to adopt additional strategies for data persistence. +Be sure to consult the Novu documentation as well as any relevant EC2 and Docker documentation for any necessary details related to your specific deployment needs. +Additionally, keep in mind that these general steps may not cover all nuances or requirements of your particular use case or the specific configuration of the Novu application. +Always ensure any deployment follows best practices for security, scalability, and maintainability. + + # 🏗️ This page is still in creation process We believe in the power of collaboration. If you have insights to share or would like to contribute to the development of this page, we welcome your input. To get involved, follow these steps: @@ -20,5 +51,5 @@ By following these steps, you're helping us enhance the quality and depth of our Your contributions drive progress. Let's build together! -If you require guidance on setting up a production-scale configuration, official IaaS recommendations, please don't hesitate to [contact our team](https://notify.novu.co/meetings/novuhq/notifications-45min?utm_campaign=novuDocs&utm_content=deploy-to-AWS). +If you require guidance on setting up a production-scale configuration, official IaaS recommendations, please don't hesitate to [contact our team](https://notify.novu.co/meetings/novuhq/notifications-45min?utm_campaign=novuDocs&utm_content=deploy-to-AWS). They can provide assistance regarding enterprise edition licenses or cloud-prem deployment to meet your specific needs. diff --git a/self-hosting-novu/deploy-with-docker.mdx b/self-hosting-novu/deploy-with-docker.mdx index c29343e8..7c23d9f1 100644 --- a/self-hosting-novu/deploy-with-docker.mdx +++ b/self-hosting-novu/deploy-with-docker.mdx @@ -14,7 +14,7 @@ You need the following installed in your system: - [Git](https://git-scm.com/downloads) - + ## Quick Start diff --git a/self-hosting-novu/object-storage.mdx b/self-hosting-novu/object-storage.mdx index b6e834ec..87e5de46 100644 --- a/self-hosting-novu/object-storage.mdx +++ b/self-hosting-novu/object-storage.mdx @@ -268,9 +268,9 @@ TBD Google Cloud Storage requires the following environment variables to be set: -1. GCS_BUCKET_NAME: Name of the bucket to use. -2. GOOGLE_APPLICATION_CREDENTIALS: Path to the service account key file. -3. STORAGE_SERVICE: Name of the storage service to use, 'GCS' for Google Cloud Storage. +1. `GCS_BUCKET_NAME`: Name of the bucket to use. +2. `GOOGLE_APPLICATION_CREDENTIALS`: Path to the service account key file. +3. `STORAGE_SERVICE`: Name of the storage service to use, 'GCS' for Google Cloud Storage. ### Bucket Configuration