<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SuprSend</title>
    <description>The latest articles on DEV Community by SuprSend (@suprsend).</description>
    <link>https://dev.to/suprsend</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F6319%2Fbabd7ef9-76cf-4dd5-b512-a13f0ceb4758.png</url>
      <title>DEV Community: SuprSend</title>
      <link>https://dev.to/suprsend</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suprsend"/>
    <language>en</language>
    <item>
      <title>How to Choose the Right Notification Infrastructure for Your App or Website</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Mon, 02 Sep 2024 13:29:40 +0000</pubDate>
      <link>https://dev.to/suprsend/how-to-choose-the-right-notification-infrastructure-for-your-app-or-website-24g9</link>
      <guid>https://dev.to/suprsend/how-to-choose-the-right-notification-infrastructure-for-your-app-or-website-24g9</guid>
      <description>&lt;h4&gt;
  
  
  Breaking Down the Essentials of Notification Infrastructure
&lt;/h4&gt;

&lt;p&gt;To build a resilient notification infrastructure, it’s important to be familiar with its key components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Message Queues and Brokers: The Notification Backbone&lt;/strong&gt;
The backbone of any robust &lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;notification infrastructure&lt;/a&gt; is the message queue, which manages the flow of notifications. By processing messages asynchronously, message queues help avoid bottlenecks and ensure fault tolerance within your notification system. These queues temporarily store and then dispatch notifications as needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Message brokers like RabbitMQ and Apache Kafka play a crucial role in managing these processes within your notification infrastructure. RabbitMQ supports the AMQP protocol and provides features like message acknowledgments, making it a reliable choice for notification management. Kafka, known for its ability to handle large volumes of data with minimal delay, is an ideal solution for applications that need to process real-time streams.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Communication Protocols: For Instant Updates&lt;/strong&gt;
Real-time updates are a vital component of any notification infrastructure. Protocols such as WebSocket and HTTP/2 are essential for delivering notifications instantaneously. WebSocket allows for continuous, two-way communication between the client and server, which is particularly useful for live chat or real-time notification alerts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;HTTP/2, an improvement over HTTP/1.1, enhances your notification infrastructure by reducing latency through multiplexing and header compression. This ensures that notifications reach users quickly and efficiently.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Databases and Data Stores: Powering Personalization&lt;/strong&gt;
Personalization is a critical aspect of a successful notification infrastructure. Databases and data stores are the engines that power this personalization by storing user preferences and notification data. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Redis, a commonly used in-memory key-value store, is integral to many notification infrastructures due to its speed. It allows for rapid retrieval of user-specific data, enabling your system to deliver personalized notifications without delay.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Server Clusters: Ready for Growth&lt;/strong&gt;
As your user base expands, so does the demand on your notification infrastructure. Scalable server clusters are essential for handling this growth by distributing the load across multiple servers. This distribution ensures that your &lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;notification system&lt;/a&gt; remains responsive, even during peak usage times.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Load balancers play a vital role in this aspect of your notification infrastructure by evenly distributing traffic. Additionally, adopting a microservices architecture allows individual components of your notification system to scale independently, making it easier to manage and maintain as your app grows.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Technical Considerations for Building a Notification Infrastructure
&lt;/h4&gt;

&lt;p&gt;When designing your notification infrastructure, several critical aspects need to be considered to ensure it meets your needs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reliability and Redundancy: Ensuring Continuous Operation&lt;/strong&gt;&lt;br&gt;
A reliable notification infrastructure must minimize downtime and ensure continuous operation. Incorporating redundancy within your infrastructure means having backup systems that can take over if the primary ones fail. Failover mechanisms are also essential; they automatically switch to backups to keep your notifications flowing smoothly, regardless of any issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability: Handling Demand Fluctuations&lt;/strong&gt;&lt;br&gt;
Scalability is a key consideration for any notification infrastructure, particularly as your user base grows. Horizontal scaling, which involves adding more servers to handle increased load, is a critical feature of scalable notification systems. A microservices architecture further enhances scalability by allowing different parts of the notification infrastructure to scale independently, maintaining high performance under varying workloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customization and Personalization: Delivering Relevant Content&lt;/strong&gt;&lt;br&gt;
Customization and personalization are vital for an effective notification infrastructure. Notifications need to be tailored to user preferences and behaviors to maximize engagement. This requires a sophisticated approach to data handling, enabling your notification system to generate and deliver personalized content in real-time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security: Protecting User Data&lt;/strong&gt;&lt;br&gt;
Security is a cornerstone of any notification infrastructure. Ensuring that all data transmitted through your notification system is encrypted protects it from unauthorized access. Authentication mechanisms validate users and systems accessing the infrastructure, while data protection measures ensure compliance with privacy regulations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Analytics and Monitoring: Gaining Real-time Insights&lt;/strong&gt;&lt;br&gt;
Real-time analytics and monitoring are essential components of a modern notification infrastructure. Monitoring tools like Prometheus and Grafana provide insights into system performance, allowing you to detect and address issues promptly. These tools help you optimize your notification infrastructure over time, ensuring it continues to meet user needs efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Enhancing Your Notification Infrastructure with Specialized Services
&lt;/h4&gt;

&lt;p&gt;Specialized services like SuprSend can significantly enhance your notification infrastructure, making it more efficient and easier to manage:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4n9vkfylsjq7akurrle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4n9vkfylsjq7akurrle.png" alt="Notification architecture for scale"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Streamlined API Integration&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;SuprSend&lt;/a&gt; offers APIs that streamline the integration of notifications into your app or website. This simplifies the development process, ensuring that your notification infrastructure is both robust and easy to maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Routing and Filtering&lt;/strong&gt;&lt;br&gt;
Precision is key in a well-functioning notification infrastructure. &lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;SuprSend’s&lt;/a&gt; advanced routing and filtering capabilities allow you to target notifications effectively, ensuring that the right messages reach the right users at the right time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push and Pull Mechanisms&lt;/strong&gt;&lt;br&gt;
Flexibility is another critical component of a successful notification infrastructure. SuprSend supports both push notifications, which actively send updates to users, and pull mechanisms, where users request updates. This flexibility allows your notification system to adapt to different user needs and scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;You can see more of our engineering blogs here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.suprsend.com/post/how-redis-solved-our-challenges-with-dynamic-task-scheduling-and-concurrent-execution-developers-guide" rel="noopener noreferrer"&gt;How Redis Solved Our Challenges with Dynamic Task Scheduling and Concurrent Execution [Developer's Guide]&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discusses how Redis helped overcome challenges related to dynamic scheduling and concurrent task execution for syncing client data from a data warehouse to a store. The solution initially relied on goroutines, SQLite, and a Go service, but needed optimization for SaaS scalability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.suprsend.com/post/comparing-notification-infrastructure-marketing-automation-tools-a-guide-to-choose-the-right-platform-for-your-product" rel="noopener noreferrer"&gt;Comparing Notification Infrastructure &amp;amp; Marketing Automation Tools: A Guide to Choose the Right Platform for Your Product&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides insights on when to choose marketing automation tools like Braze or Customer.io and when to opt for notification infrastructure tools like SuprSend, based on product needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.suprsend.com/post/dynamically-syncing-in-app-notification-center-theme-with-applications-current-theme-state" rel="noopener noreferrer"&gt;Dynamically Syncing In-app Notification Center Theme with Application's Current Theme State&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explains how to customize the app's inbox notification center to sync dynamically with the application's theme, enhancing user experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.suprsend.com/post/how-can-saas-tools-enhance-user-engagement-with-notifications-channel-routing-with-linkedins-example" rel="noopener noreferrer"&gt;How Can SaaS Tools Enhance User Engagement with Notifications Channel Routing (like LinkedIn)?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demonstrates how SaaS tools can efficiently route notifications across different channels (e.g., email to SMS) based on availability, similar to LinkedIn's notification system, to enhance user engagement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.suprsend.com/post/how-to-batch-notifications-for-your-social-media-collaborative-application" rel="noopener noreferrer"&gt;How to Batch Notifications for your Social Media/ Collaborative Application?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn how to batch multiple notifications to streamline communication, as seen in platforms like Instagram, LinkedIn, and Google Workspace.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>angular</category>
      <category>node</category>
    </item>
    <item>
      <title>Building and Optimizing a Notification System and Infrastructure</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Fri, 09 Aug 2024 16:02:58 +0000</pubDate>
      <link>https://dev.to/suprsend/building-and-optimizing-a-notification-system-and-infrastructure-4b6j</link>
      <guid>https://dev.to/suprsend/building-and-optimizing-a-notification-system-and-infrastructure-4b6j</guid>
      <description>&lt;p&gt;If you're reading this, you likely understand how important it is to send timely notifications to boost user interaction and grow your business. Whether you're notifying users about new messages, upcoming events, or status updates, having a reliable notification system is crucial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.suprsend.com/post/a-complete-guide-on-notification-service-for-modern-applications-in-2023" rel="noopener noreferrer"&gt;Creating a notification system&lt;/a&gt; in-house is challenging. It requires detailed planning, development, and ongoing maintenance. This article will break down the main parts of a notification system. By the end, you'll understand what’s needed to build one in-house, the challenges you might face, and what approach suits your company best.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Components of a Notification System
&lt;/h3&gt;

&lt;p&gt;A well-functioning notification system has several key parts that work together. Here’s a look at each part:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxxkgysxw8tmtwzhtv87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxxkgysxw8tmtwzhtv87.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Delivery Channels &amp;amp; Vendor Integrations:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Delivery channels are how notifications reach users. To maximize engagement, you need to support multiple channels like email, SMS, in-app messages, push notifications, WhatsApp, Slack/Teams, and automated calls. Integrating with these channels can be complex, requiring vendor evaluation, API integration, service quality checks, and fallback strategies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuh6gah04o9aizaxeail.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuh6gah04o9aizaxeail.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Templating Engine:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A notification system must create messages that fit each channel. Emails might include detailed information, while SMS should be brief. Push notifications can include multimedia and interactive elements. Managing templates involves handling copywriting, personalization, branding, dynamic content, multilingual support, and testing. A visual editor for non-engineers can help manage these templates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl40m6fexblms8deww14n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl40m6fexblms8deww14n.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;User Preferences:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Proper targeting helps avoid notification fatigue and keeps users happy. Users should have control over what notifications they receive, how often, and through which channels. You need an easy-to-use interface for users to set their preferences, including types of notifications, channels, frequency, and timing. Allowing users to opt in or out of notifications helps prevent them from blocking all communications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0eafdrcc6vddozz0wwz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0eafdrcc6vddozz0wwz.png" alt="Image description" width="653" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Batching &amp;amp; Digest:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For some notifications, grouping several alerts into one message can be better than sending multiple separate alerts. For example, if there are several comments, it’s better to batch them and send them together. Summary digests can also be sent at user-preferred intervals (e.g., hourly, daily, weekly) to keep users updated without overwhelming them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Multi-Tenancy Support:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your system serves multiple customers, it needs to handle multi-tenancy. This means isolating data, customizing notifications for each customer, and supporting branding and preferences for each tenant. For example, a SaaS platform sending invoices needs to use the customer’s branding and preferences in notifications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58bkn3cp012xe3gb44xq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58bkn3cp012xe3gb44xq.png" alt="Image description" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Notification Analytics:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To improve notifications, you need to track their performance. Metrics like delivery rates, open rates, and user engagement are crucial. Different channels have different tracking methods, so standardizing how you measure user actions is important for effective analysis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcexdspzog348l16mk8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcexdspzog348l16mk8e.png" alt="Image description" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Non-Functional Aspects of Notification Systems
&lt;/h3&gt;

&lt;p&gt;Reliable and efficient notification services also depend on several non-functional components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbfoanxiopsvewws05ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbfoanxiopsvewws05ec.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Scalability &amp;amp; Load Balancing:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notification services must handle varying levels of traffic. Ensuring scalability helps manage increased loads without performance issues. Load balancing across servers and regions keeps the service available and responsive.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fault Tolerance, Redundancy, &amp;amp; Failure Retries:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To avoid downtime, the system must have redundancy and failover plans. This includes managing state, using fallback vendors, controlling request rates, and retrying failed notifications when appropriate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;High Deliverability:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ensuring notifications are delivered successfully involves managing multiple channels, choosing reliable vendors, and handling bounce rates. Keeping channels clean and active improves deliverability.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Low Latency:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notifications should arrive quickly. Minimizing delay involves optimizing delivery routes, reducing network trips, and improving database queries. Continuous efforts are needed to maintain low latency as the system grows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observability &amp;amp; Diagnosis:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Monitoring and diagnosing issues are essential for smooth operation. Implementing detailed logging, error tracking, and performance monitoring helps identify and resolve problems quickly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Message Queue Prioritization:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not all notifications are equally important. High-priority notifications, like authentication alerts, should be sent immediately, while less urgent notifications, like newsletters, can be delayed. Prioritizing messages helps manage queue efficiency and control costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deciding to Build or Buy
&lt;/h3&gt;

&lt;p&gt;After understanding the components, you need to decide whether to build a notification system in-house or use an existing solution:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to Build:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity:&lt;/strong&gt; If your notification needs are minimal and infrequent, a simple integration or a basic central service might work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Needs:&lt;/strong&gt; For highly specific requirements that third-party solutions can't meet, building a custom system is better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Product:&lt;/strong&gt; If notifications are central to your product, having full control through an in-house system may be necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Consider Alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource Constraints:&lt;/strong&gt; Limited engineering resources might make it more efficient to use existing services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to Market:&lt;/strong&gt; Using third-party solutions can speed up development and launch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex Features:&lt;/strong&gt; Established platforms often offer advanced features like workflows and cross-channel communication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on Core Competencies:&lt;/strong&gt; Using external services allows you to focus on your main business rather than the complexities of notification management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SuprSend is designed to handle the complexities of notification orchestration for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm65o8s0cz13re4pld3dj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm65o8s0cz13re4pld3dj.png" alt="Image description" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As an engineering leader, consider your company's needs, resources, and long-term goals when deciding whether to build a notification system in-house or use a third-party solution. The goal is to create a seamless and engaging user experience.&lt;/p&gt;

&lt;p&gt;Check out more of our engineering insights here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.suprsend.com/post/how-redis-solved-our-challenges-with-dynamic-task-scheduling-and-concurrent-execution-developers-guide" rel="noopener noreferrer"&gt;How Redis Solved Our Challenges with Dynamic Task Scheduling and Concurrent Execution&lt;/a&gt;&lt;br&gt;
The problem statement was simple, or so we thought. In our previous setup, we used goroutines for scheduling database queries, allowing us to run the whole setup on minimal setup with SQLite and go service. Seems simple enough, but when we decided to also have this feature on our SaaS platform, at the onset, we didn’t realize we would also be walking into a new set of challenges of dynamic scheduling and concurrent task execution.&lt;br&gt;
We needed a way to sync data in a scheduled manner from the client's data warehouse to our data store.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.suprsend.com/post/comparing-notification-infrastructure-marketing-automation-tools-a-guide-to-choose-the-right-platform-for-your-product" rel="noopener noreferrer"&gt;Comparing Notification Infrastructure &amp;amp; Marketing Automation Tools&lt;/a&gt;&lt;br&gt;
We discuss around when should one prefer marketing automation tools ike Braze, Cutomer.io and when does it make sense to check notification infrastructure tools like SuprSend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.suprsend.com/post/dynamically-syncing-in-app-notification-center-theme-with-applications-current-theme-state" rel="noopener noreferrer"&gt;Dynamically Syncing In-App Notification Center Theme with Application's Current Theme State&lt;/a&gt;&lt;br&gt;
Showcasing some customization capabilities of our app inbox notification center&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.suprsend.com/post/how-can-saas-tools-enhance-user-engagement-with-notifications-channel-routing-with-linkedins-example" rel="noopener noreferrer"&gt;Enhancing User Engagement with Notifications Channel Routing&lt;/a&gt;&lt;br&gt;
Learn how to do efficient notifications channel routing, i.e, if email is unavailable send on SMS with smart logic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>eventdriven</category>
      <category>aws</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Send emails using Java (Javamail API or Simple Java Mail or SuprSend Java SDK)</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Fri, 02 Aug 2024 04:43:06 +0000</pubDate>
      <link>https://dev.to/suprsend/send-emails-using-java-javamail-api-or-simple-java-mail-or-suprsend-java-sdk-4pp3</link>
      <guid>https://dev.to/suprsend/send-emails-using-java-javamail-api-or-simple-java-mail-or-suprsend-java-sdk-4pp3</guid>
      <description>&lt;h2&gt;
  
  
  Method 1: Using JavaMail API for Email Notifications
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview:
&lt;/h3&gt;

&lt;p&gt;The JavaMail API is a robust, platform-independent, and protocol-independent framework designed to support Java client applications in performing comprehensive email and messaging functionalities. This API offers a generic interface with abstract classes representing various objects created in transactional email systems. It is especially useful for enterprise-level applications where reliability and extensive functionalities are paramount.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Well-Structured and Widely Adopted:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaMail API is renowned for its solid structure and widespread usage, particularly in enterprise environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Versatile Functionality:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It provides an extensive set of functionalities, including reading, composing, and sending emails.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Programmatic Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplifies the integration with other programs, making it easier to send confirmations and other messages programmatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extended Compilation Time:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers may face longer code compilation times due to the API's complexity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memory Consumption:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using the JavaMail API can lead to significant consumption of Java heap space.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Implementation Steps:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Step 1: Installing JavaMail API
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Include JAR files (&lt;code&gt;mail.jar&lt;/code&gt; and &lt;code&gt;activation.jar&lt;/code&gt;) in the CLASSPATH.&lt;/li&gt;
&lt;li&gt;Configure an SMTP server (e.g., Pepipost) for email transmission.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 2: Setting Up the Mail Session
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create a session object with host information using &lt;code&gt;javax.mail.Session&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Properties&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Properties&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
&lt;span class="nc"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefaultInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Alternatively:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Properties&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Properties&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
&lt;span class="nc"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Network authentication:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;javax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mail&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Authenticator&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="nc"&gt;PasswordAuthentication&lt;/span&gt; &lt;span class="nf"&gt;getPasswordAuthentication&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PasswordAuthentication&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sender@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"password"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Step 3: Composing the Email
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;javax.mail.internet.MimeMessage&lt;/code&gt; subclass to set the sender, receiver, subject, and message body.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;MimeMessage&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFrom&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InternetAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addRecipient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;RecipientType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InternetAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is the email subject"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is the email body"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Step 4: Adding Attachments
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;To include attachments, create a &lt;code&gt;Multipart&lt;/code&gt; object and add a &lt;code&gt;BodyPart&lt;/code&gt; for each attachment.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Multipart&lt;/span&gt; &lt;span class="n"&gt;multipart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeMultipart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="nc"&gt;BodyPart&lt;/span&gt; &lt;span class="n"&gt;messageBodyPart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeBodyPart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is the email body"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBodyPart&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;messageBodyPart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeBodyPart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;DataSource&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileDataSource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"path/to/attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDataHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DataHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFileName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBodyPart&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setContent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Step 5: Sending the Email
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;javax.mail.Transport&lt;/code&gt; class to send the email.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Transport&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Complete Code Example:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Properties&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.mail.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.mail.internet.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.activation.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SendMail&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"receiver@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sender@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"smtp.gmail.com"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

      &lt;span class="nc"&gt;Properties&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getProperties&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mail.smtp.host"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mail.smtp.port"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"465"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mail.smtp.ssl.enable"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mail.smtp.auth"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="nc"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;javax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mail&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Authenticator&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;
        &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="nc"&gt;PasswordAuthentication&lt;/span&gt; &lt;span class="nf"&gt;getPasswordAuthentication&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PasswordAuthentication&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sender@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"password"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;});&lt;/span&gt;

      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;MimeMessage&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFrom&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InternetAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addRecipient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;RecipientType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InternetAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Your email subject goes here"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="nc"&gt;Multipart&lt;/span&gt; &lt;span class="n"&gt;multipart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeMultipart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;BodyPart&lt;/span&gt; &lt;span class="n"&gt;messageBodyPart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeBodyPart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You have a new message"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBodyPart&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;messageBodyPart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MimeBodyPart&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;DataSource&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileDataSource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"path/to/attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDataHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DataHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFileName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBodyPart&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messageBodyPart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setContent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multipart&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="nc"&gt;Transport&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MessagingException&lt;/span&gt; &lt;span class="n"&gt;mex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;mex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Method 2: Using Simple Java Mail for Email Notifications
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Overview:
&lt;/h3&gt;

&lt;p&gt;Simple Java Mail is a user-friendly mailing library designed to simplify the process of sending SMTP emails in Java. It serves as a wrapper around the JavaMail API, streamlining the email sending process by reducing the complexity of the underlying API.&lt;/p&gt;
&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Robust and Lightweight:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple Java Mail is robust while maintaining a lightweight footprint of 134kB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RFC Compliance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It complies with all relevant RFCs, ensuring compatibility with various email clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Authenticated SOCKS Proxy Support:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports sending emails through an authenticated SOCKS proxy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Advanced Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offers support for HTML content, images, and attachments, and allows sending emails to multiple recipients simultaneously.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Limited Community Support:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;The community support for Simple Java Mail is smaller compared to JavaMail API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Implementation Steps:
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Step 1: Creating an Email Object with HTML and Attachments
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Email&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;EmailBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startingBlank&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"From"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"from@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1st Receiver"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"rec1@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2nd Receiver"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"rec2@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enhanced Email with HTML and Attachments"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withHTMLText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello!&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;This is an enhanced email with HTML content.&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withAttachment&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"path/to/attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildEmail&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Step 2: Creating a Mailer Object using MailerBuilder
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Mailer&lt;/span&gt; &lt;span class="n"&gt;mailer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MailerBuilder&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSMTPServer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"smtp.mailtrap.io"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2525&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"username"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"password"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withTransportStrategy&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TransportStrategy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SMTPS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildMailer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Step 3: Sending the Enhanced Email
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendMail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Complete Code Example:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.simplejavamail.api.email.Email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.simplejavamail.email.EmailBuilder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.simplejavamail.mailer.Mailer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.simplejavamail.mailer.MailerBuilder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.simplejavamail.api.mailer.config.TransportStrategy&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SendEnhancedMail&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Email&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;EmailBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startingBlank&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"From"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"from@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1st Receiver"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"case1@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2nd Receiver"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"case2@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enhanced Email with HTML and Attachments"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withHTMLText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello!&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;This is an enhanced email with HTML content.&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withAttachment&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"path/to/attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildEmail&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="nc"&gt;Mailer&lt;/span&gt; &lt;span class="n"&gt;mailer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MailerBuilder&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSMTPServer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"smtp.mailtrap.io"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2525&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"username"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"password"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withTransportStrategy&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TransportStrategy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SMTPS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildMailer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendMail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Method 3: Using SuprSend for Multichannel Notifications with JAVA SDKs
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Overview:
&lt;/h3&gt;

&lt;p&gt;SuprSend offers a comprehensive third-party multichannel notification infrastructure that supports sending notifications across various channels like email, SMS, and push notifications through a unified API. By leveraging SuprSend, developers can manage complex notification workflows seamlessly.&lt;/p&gt;
&lt;h4&gt;
  
  
  Key Features &amp;amp; Benefits:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extensive Integration Options:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrates seamlessly with over 50 Communication Service Providers (CSPs) and supports multiple channels including Mixpanel, Segment, Twilio, Mailchimp, Slack, Teams, SNS, Vonage, Whatsapp, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No Tech Dependency:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages the entire notification lifecycle without heavy reliance on the engineering team. Integrate the &lt;a href="https://docs.suprsend.com/docs/java-sdk" rel="noopener noreferrer"&gt;JAVA SDK&lt;/a&gt; once, and the product team can handle the rest.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Intelligent Routing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements intelligent cross-channel flows across providers without requiring technical dependencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;In-App SDK:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides a developer-ready in-app layer for both web and mobile applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Granular Template Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Features an intuitive drag &amp;amp; drop editor for designing templates, offering superior control over content.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Powerful Workspace:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages multiple projects with distinct integrations, workflows, and templates within each workspace.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unified Analytics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides a unified view of cross-channel analytics, enabling data-driven decision-making.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Automation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automates synchronization, refreshing, and notification triggers to streamline operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automates scalability, ensuring a hassle-free experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost Considerations:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Managing multiple notification channels may incur costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Monthly Notification Limit&lt;/em&gt;:*

&lt;ul&gt;
&lt;li&gt;Though SuprSend provides 10k notifications free every month, which resets every month, you can also buy credits. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Limits:**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There may be restrictions on the number of notifications per month.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Implementation Steps:
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Step 1: Integrating the JAVA SDK
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the SuprSend JAVA SDK&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Add the SDK to your JAVA project via Maven or Gradle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Step 2: Configuring the API Key and Workspace Secret
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Configuration&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Obtain the API key and workspace secret from your SuprSend account and configure them in your JAVA project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Step 3: Creating and Sending Notifications
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Send Notifications via JAVA SDK&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use the SDK to send notifications, specifying the required channel (email, SMS, push, etc.) and the content.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.Notification&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.NotificationBuilder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.SuprSendClient&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SendNotification&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Initialize the SuprSendClient with API key and Workspace Secret&lt;/span&gt;
        &lt;span class="nc"&gt;SuprSendClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SuprSendClient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"your_api_key"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"your_workspace_secret"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Build the notification&lt;/span&gt;
        &lt;span class="nc"&gt;Notification&lt;/span&gt; &lt;span class="n"&gt;notification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NotificationBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startingBlank&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withRecipientEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"recipient@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withRecipientSMS&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"recipient_phone_number"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Notification Subject"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withHTMLBody&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello!&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;This is a multichannel notification.&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Send the notification&lt;/span&gt;
        &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendNotification&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Complete Code Example with JAVA SDK:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.Notification&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.NotificationBuilder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.suprsend.SuprSendClient&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SuprSendExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Initialize the SuprSendClient with API key and Workspace Secret&lt;/span&gt;
        &lt;span class="nc"&gt;SuprSendClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SuprSendClient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"your_api_key"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"your_workspace_secret"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Create the notification&lt;/span&gt;
        &lt;span class="nc"&gt;Notification&lt;/span&gt; &lt;span class="n"&gt;notification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NotificationBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startingBlank&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withRecipientEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"receiver@example.com"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Subject of the Notification"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withHTMLBody&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello!&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;This is a notification from SuprSend.&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withAttachment&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"path/to/attachment.txt"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Send the notification&lt;/span&gt;
        &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendNotification&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;These methods offer a comprehensive guide to sending email notifications using Java, with varying levels of complexity and integration capabilities to suit different needs and scenarios.&lt;/p&gt;



&lt;p&gt;You may want to check out other SuprSend SDKs too. Consider giving us a star after usage. It's free and open.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/suprsend" rel="noopener noreferrer"&gt;
        suprsend
      &lt;/a&gt; / &lt;a href="https://github.com/suprsend/suprsend-go" rel="noopener noreferrer"&gt;
        suprsend-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      SuprSend SDK for go
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;suprsend-go&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;SuprSend Go SDK&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get github.com/suprsend/suprsend-go&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Initialize the SuprSend SDK&lt;/p&gt;

&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; (
    &lt;span class="pl-s"&gt;"log"&lt;/span&gt;

    suprsend &lt;span class="pl-s"&gt;"github.com/suprsend/suprsend-go"&lt;/span&gt;
)

&lt;span class="pl-k"&gt;func&lt;/span&gt; &lt;span class="pl-en"&gt;main&lt;/span&gt;() {
    &lt;span class="pl-s1"&gt;opts&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; []suprsend.&lt;span class="pl-smi"&gt;ClientOption&lt;/span&gt;{
        &lt;span class="pl-c"&gt;// suprsend.WithDebug(true),&lt;/span&gt;
    }
    &lt;span class="pl-s1"&gt;suprClient&lt;/span&gt;, &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;suprsend&lt;/span&gt;.&lt;span class="pl-en"&gt;NewClient&lt;/span&gt;(&lt;span class="pl-s"&gt;"__api_key__"&lt;/span&gt;, &lt;span class="pl-s"&gt;"__api_secret__"&lt;/span&gt;, &lt;span class="pl-s1"&gt;opts&lt;/span&gt;&lt;span class="pl-c1"&gt;...&lt;/span&gt;)
    &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;!=&lt;/span&gt; &lt;span class="pl-c1"&gt;nil&lt;/span&gt; {
        &lt;span class="pl-s1"&gt;log&lt;/span&gt;.&lt;span class="pl-en"&gt;Println&lt;/span&gt;(&lt;span class="pl-s1"&gt;err&lt;/span&gt;)
    }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Trigger Workflow&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;package&lt;/span&gt; main
&lt;span class="pl-k"&gt;import&lt;/span&gt; (
    &lt;span class="pl-s"&gt;"log"&lt;/span&gt;

    suprsend &lt;span class="pl-s"&gt;"github.com/suprsend/suprsend-go"&lt;/span&gt;
)

&lt;span class="pl-k"&gt;func&lt;/span&gt; &lt;span class="pl-en"&gt;main&lt;/span&gt;() {
    &lt;span class="pl-c"&gt;// Instantiate Client&lt;/span&gt;
    &lt;span class="pl-s1"&gt;suprClient&lt;/span&gt;, &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;suprsend&lt;/span&gt;.&lt;span class="pl-en"&gt;NewClient&lt;/span&gt;(&lt;span class="pl-s"&gt;"__api_key__"&lt;/span&gt;, &lt;span class="pl-s"&gt;"__api_secret__"&lt;/span&gt;)
    &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;!=&lt;/span&gt; &lt;span class="pl-c1"&gt;nil&lt;/span&gt; {
        &lt;span class="pl-s1"&gt;log&lt;/span&gt;.&lt;span class="pl-en"&gt;Println&lt;/span&gt;(&lt;span class="pl-s1"&gt;err&lt;/span&gt;)
        &lt;span class="pl-k"&gt;return&lt;/span&gt;
    }
    &lt;span class="pl-c"&gt;// Create WorkflowTriggerRequest body&lt;/span&gt;
    &lt;span class="pl-s1"&gt;wfReqBody&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-k"&gt;map&lt;/span&gt;[&lt;span class="pl-smi"&gt;string&lt;/span&gt;]&lt;span class="pl-k"&gt;interface&lt;/span&gt;{}{
        &lt;span class="pl-s"&gt;"workflow"&lt;/span&gt;: &lt;span class="pl-s"&gt;"workflow-slug"&lt;/span&gt;,
        &lt;span class="pl-s"&gt;"recipients"&lt;/span&gt;: []&lt;span class="pl-k"&gt;map&lt;/span&gt;[&lt;span class="pl-smi"&gt;string&lt;/span&gt;]&lt;span class="pl-k"&gt;interface&lt;/span&gt;{}{
            {
                &lt;span class="pl-s"&gt;"distinct_id"&lt;/span&gt;: &lt;span class="pl-s"&gt;"0f988f74-6982-41c5-8752-facb6911fb08"&lt;/span&gt;,
                &lt;span class="pl-c"&gt;// if $channels is present, communication will be tried on mentioned channels only (for this request).&lt;/span&gt;
                &lt;span class="pl-c"&gt;// "$channels": []string{"email"},&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/suprsend/suprsend-go" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;







&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/suprsend" rel="noopener noreferrer"&gt;
        suprsend
      &lt;/a&gt; / &lt;a href="https://github.com/suprsend/suprsend-py-sdk" rel="noopener noreferrer"&gt;
        suprsend-py-sdk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      SuprSend SDK for python3 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;suprsend-py-sdk&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This package can be included in a python3 project to easily integrate
with &lt;code&gt;SuprSend&lt;/code&gt; platform.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Installation&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;suprsend-py-sdk&lt;/code&gt; is available on PyPI. You can install using pip.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install suprsend-py-sdk&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This SDK depends on a system package called &lt;code&gt;libmagic&lt;/code&gt;. You can install it as follows:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; On debian based systems&lt;/span&gt;
sudo apt install libmagic

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; If you are using macOS&lt;/span&gt;
brew install libmagic&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Usage&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Initialize the SuprSend SDK&lt;/p&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;suprsend&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;Suprsend&lt;/span&gt;
&lt;span class="pl-c"&gt;# Initialize SDK&lt;/span&gt;
&lt;span class="pl-s1"&gt;supr_client&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-v"&gt;Suprsend&lt;/span&gt;(&lt;span class="pl-s"&gt;"workspace_key"&lt;/span&gt;, &lt;span class="pl-s"&gt;"workspace_secret"&lt;/span&gt;)&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Following example shows a sample request for triggering a workflow.
It triggers a pre-created workflow &lt;code&gt;purchase-made&lt;/code&gt; to a recipient with id: &lt;code&gt;distinct_id&lt;/code&gt;,
email: &lt;code&gt;user@example.com&lt;/code&gt; &amp;amp; androidpush(fcm-token): &lt;code&gt;__android_push_fcm_token__&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;suprsend&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;WorkflowTriggerRequest&lt;/span&gt;
&lt;span class="pl-c"&gt;# Prepare Workflow body&lt;/span&gt;
&lt;span class="pl-s1"&gt;wf&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-v"&gt;WorkflowTriggerRequest&lt;/span&gt;(
  &lt;span class="pl-s1"&gt;body&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;{
    &lt;span class="pl-s"&gt;"workflow"&lt;/span&gt;: &lt;span class="pl-s"&gt;"purchase-made"&lt;/span&gt;
    &lt;span class="pl-s"&gt;"recipients"&lt;/span&gt;: [
        {
          &lt;span class="pl-s"&gt;"distinct_id"&lt;/span&gt;: &lt;span class="pl-s"&gt;"0f988f74-6982-41c5-8752-facb6911fb08"&lt;/span&gt;,
          &lt;span class="pl-c"&gt;# if $channels is present, communication will be tried on mentioned&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/suprsend/suprsend-py-sdk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;






&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/suprsend" rel="noopener noreferrer"&gt;
        suprsend
      &lt;/a&gt; / &lt;a href="https://github.com/suprsend/suprsend-node-sdk" rel="noopener noreferrer"&gt;
        suprsend-node-sdk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Official SuprSend SDK for Node.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;suprsend-node-sdk&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This package can be included in a node project to easily integrate with SuprSend platform.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install @suprsend/node-sdk@latest&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Initialization&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; Suprsend &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"@suprsend/node-sdk"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;supr_client&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Suprsend&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"workspace_key"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s"&gt;"workspace_secret"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;a href="https://docs.suprsend.com/docs/node-trigger-workflow-from-api" rel="nofollow noopener noreferrer"&gt;Trigger workflow from API&lt;/a&gt;&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;It is a unified API to trigger workflow and doesn't require user creation before hand. If you are using our frontend SDK's to configure notifications and passing events and user properties from third-party data platforms like Segment, then &lt;a href="https://docs.suprsend.com/docs/node-send-event-data" rel="nofollow noopener noreferrer"&gt;event-based trigger&lt;/a&gt; would be a better choice.&lt;/p&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; Suprsend&lt;span class="pl-kos"&gt;,&lt;/span&gt; WorkflowTriggerRequest &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"@suprsend/node-sdk"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;supr_client&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Suprsend&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"workspace_key"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s"&gt;"workspace_secret"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-c"&gt;// workflow payload&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;body&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-c1"&gt;workflow&lt;/span&gt;: &lt;span class="pl-s"&gt;"_workflow_slug_"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-c1"&gt;actor&lt;/span&gt;: &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-c1"&gt;distinct_id&lt;/span&gt;: &lt;span class="pl-s"&gt;"0fxxx8f74-xxxx-41c5-8752-xxxcb6911fb08"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;"actor_1"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-c1"&gt;recipients&lt;/span&gt;: &lt;span class="pl-kos"&gt;[&lt;/span&gt;
    &lt;span class="pl-kos"&gt;{&lt;/span&gt;
      &lt;span class="pl-c1"&gt;distinct_id&lt;/span&gt;: &lt;span class="pl-s"&gt;"0gxxx9f14-xxxx-23c5-1902-xxxcb6912ab09"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
      &lt;span class="pl-c1"&gt;$email&lt;/span&gt;: &lt;span class="pl-kos"&gt;[&lt;/span&gt;&lt;span class="pl-s"&gt;"abc@example.com"&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/suprsend/suprsend-node-sdk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;






&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/suprsend" rel="noopener noreferrer"&gt;
        suprsend
      &lt;/a&gt; / &lt;a href="https://github.com/suprsend/suprsend-react-inbox" rel="noopener noreferrer"&gt;
        suprsend-react-inbox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      SuprSend SDK for integrating inbox functionality in React applications
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;@suprsend/react-inbox&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Integrating SuprSend Inbox channel in React websites can be done in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SuprSendInbox&lt;/strong&gt; component which comes with UI and customizing props.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SuprSendProvider&lt;/strong&gt; headless component and hooks, incase you want to totally take control of UI. (example: Full page notifications).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Detailed documentation can be found here: &lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="nofollow noopener noreferrer"&gt;https://docs.suprsend.com/docs/inbox-react&lt;/a&gt;
&lt;br&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;You can install SuprSend inbox SDK using npm/yarn&lt;/p&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;npm&lt;/span&gt; &lt;span class="pl-s1"&gt;install&lt;/span&gt; @&lt;span class="pl-s1"&gt;suprsend&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-s1"&gt;react&lt;/span&gt;&lt;span class="pl-c1"&gt;-&lt;/span&gt;&lt;span class="pl-s1"&gt;inbox&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;SuprSendInbox Integration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;After installing, Import the component in your code and use it as given below. Replace the variables with actual values.&lt;/p&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;SuprSendInbox&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'@suprsend/react-inbox'&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s"&gt;'react-toastify/dist/ReactToastify.css'&lt;/span&gt; &lt;span class="pl-c"&gt;// needed for toast notifications, can be ignored if hideToast=true&lt;/span&gt;

&lt;span class="pl-c"&gt;// add to your react component;&lt;/span&gt;
&lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;SuprSendInbox&lt;/span&gt;
  &lt;span class="pl-c1"&gt;workspaceKey&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;'&amp;lt;workspace_key&amp;gt;'&lt;/span&gt;
  &lt;span class="pl-c1"&gt;subscriberId&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;'&amp;lt;subscriber_id&amp;gt;'&lt;/span&gt;
  &lt;span class="pl-c1"&gt;distinctId&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;'&amp;lt;distinct_id&amp;gt;'&lt;/span&gt;
&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;interface&lt;/span&gt; &lt;span class="pl-v"&gt;ISuprSendInbox&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  workspaceKey: &lt;span class="pl-s1"&gt;string&lt;/span&gt;
  distinctId: &lt;span class="pl-s1"&gt;string&lt;/span&gt; &lt;span class="pl-c1"&gt;|&lt;/span&gt; &lt;span class="pl-c1"&gt;null&lt;/span&gt;
  subscriberId: &lt;span class="pl-s1"&gt;string&lt;/span&gt; &lt;span class="pl-c1"&gt;|&lt;/span&gt; &lt;span class="pl-c1"&gt;null&lt;/span&gt;
  &lt;span class="pl-s1"&gt;tenantId&lt;/span&gt;?: &lt;span class="pl-s1"&gt;string&lt;/span&gt;
  &lt;span class="pl-s1"&gt;stores&lt;/span&gt;?: &lt;span class="pl-v"&gt;IStore&lt;/span&gt;&lt;span class="pl-kos"&gt;[&lt;/span&gt;&lt;span class="pl-kos"&gt;]&lt;/span&gt;
  &lt;span class="pl-s1"&gt;pageSize&lt;/span&gt;?: &lt;span class="pl-s1"&gt;number&lt;/span&gt;
  &lt;span class="pl-s1"&gt;pagination&lt;/span&gt;?: &lt;span class="pl-s1"&gt;boolean&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/suprsend/suprsend-react-inbox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>java</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>App Inbox Notification Feed in Next.js</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Fri, 02 Aug 2024 04:28:01 +0000</pubDate>
      <link>https://dev.to/suprsend/app-inbox-notification-feed-in-nextjs-18kb</link>
      <guid>https://dev.to/suprsend/app-inbox-notification-feed-in-nextjs-18kb</guid>
      <description>&lt;p&gt;A &lt;a href="https://www.suprsend.com/post/implementing-app-inbox-in-next-js-application-as-a-developer" rel="noopener noreferrer"&gt;notification center in a Next.js&lt;/a&gt; app acts as a central hub where users can access all their notifications anytime. This feature enhances user engagement and ensures no important updates are missed. In this tutorial, we'll guide you through creating a comprehensive notification center in a Next.js application, including backend setup and frontend development for a user-friendly notification feed.&lt;/p&gt;

&lt;p&gt;By following this guide, you'll develop a fully functional notification system in your Next.js app with real-time updates. This implementation will enhance your app's user experience and provide a scalable solution for managing notifications.&lt;/p&gt;

&lt;p&gt;Key topics include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up a Next.js project for your notification center.&lt;/li&gt;
&lt;li&gt;Building a backend with Node.js and Express to handle notifications.&lt;/li&gt;
&lt;li&gt;Creating and integrating a frontend notification widget with the backend.&lt;/li&gt;
&lt;li&gt;Implementing real-time updates for an up-to-date notification feed.&lt;/li&gt;
&lt;li&gt;Styling the notification UI for responsiveness and user-friendliness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No matter if you call it an in-app inbox, notification widget, or alert center, the principles and steps remain consistent. Let's get started on building your Next.js notification center!&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge of Next.js&lt;/li&gt;
&lt;li&gt;SuprSend account with a secret key and token&lt;/li&gt;
&lt;li&gt;A Next.js application&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where will we build our app inbox in Next.js?
&lt;/h3&gt;

&lt;p&gt;For this tutorial, we've created a demo Next.js project called &lt;code&gt;b2b2c-freight_company&lt;/code&gt; available on GitHub. The application is also deployed on Vercel, allowing you to see the real-time notification feed here: &lt;a href="https://b2b2c-freight-company.vercel.app" rel="noopener noreferrer"&gt;Freight B2B2C App&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building a real-time notification center in Next.js
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Step 1: Creating an account on SuprSend
&lt;/h4&gt;

&lt;p&gt;Start by signing up on SuprSend. After onboarding, navigate to Developers → API Keys in the side panel to find your Workspace Key and Workspace Secret.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7oy96wgzqtzqatknww2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7oy96wgzqtzqatknww2h.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Finding the right place for your app inbox
&lt;/h4&gt;

&lt;p&gt;Typically, the app inbox is located in the header with other menu options. Alternatively, it can be an option in the side panel for a full-page notification center, similar to LinkedIn. In our case, we'll implement the notification center in the navigation header. Relevant code is available &lt;a href="https://github.com/b2b2c-freight_company/src/app/page.tsx" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Installing and integrating SuprSendInbox in Next.js
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the SuprSend App Inbox Package&lt;/strong&gt;:
```bash
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;npm install @suprsend/react-inbox&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
2. **Import Necessary Packages**:
   ```javascript


   import 'react-toastify/dist/ReactToastify.css';


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Disable Server-Side Rendering for SuprSend&lt;/strong&gt;:
```javascript
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;import dynamic from 'next/dynamic';&lt;/p&gt;

&lt;p&gt;const SuprSendInbox = dynamic(() =&amp;gt; import('@suprsend/react-inbox'), { ssr: false });&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
4. **Place the SuprSendInbox Component**:
   ```javascript


   const workspaceKey = process.env.NEXT_PUBLIC_SUPRSEND_WORKSPACE_KEY || '';
   const subscriberId = process.env.NEXT_PUBLIC_SUPRSEND_SUBSCRIBER_ID || '';
   const distinctId = process.env.NEXT_PUBLIC_SUPRSEND_DISTINCT_ID || '';

   export default function HomePage() {
     return (
       &amp;lt;div className="flex min-h-screen bg-gray-900 text-white"&amp;gt;
         &amp;lt;div className="fixed top-0 right-0 m-4 z-50"&amp;gt;
           &amp;lt;SuprSendInbox
             workspaceKey={workspaceKey}
             subscriberId={subscriberId}
             distinctId={distinctId}
             themeType="dark"
           /&amp;gt;
         &amp;lt;/div&amp;gt;
       &amp;lt;/div&amp;gt;
     );
   }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Styling the App Inbox Component&lt;/strong&gt;:
If using Tailwind CSS, integrate the inbox into your navigation panel and customize it:
```javascript
&lt;/li&gt;
&lt;/ol&gt;


&lt;br&gt;
     
       workspaceKey={workspaceKey}&lt;br&gt;
       subscriberId={subscriberId}&lt;br&gt;
       distinctId={distinctId}&lt;br&gt;
       themeType="dark"&lt;br&gt;
     /&amp;gt;&lt;br&gt;
   




&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
   Customize using props like &lt;code&gt;workspaceKey&lt;/code&gt;, &lt;code&gt;subscriberId&lt;/code&gt;, &lt;code&gt;distinctId&lt;/code&gt;, and &lt;code&gt;themeType&lt;/code&gt;. More details are in the &lt;a href="https://docs.suprsend.com/docs/react-customize-inbox" rel="noopener noreferrer"&gt;SuprSend documentation&lt;/a&gt;.
&lt;h4&gt;
  
  
  Step 4: Setting environment variables
&lt;/h4&gt;

&lt;p&gt;Ensure you set the following in your &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;NEXT_PUBLIC_SUPRSEND_WORKSPACE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_workspace_key
&lt;span class="nv"&gt;NEXT_PUBLIC_SUPRSEND_SUBSCRIBER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_subscriber_id
&lt;span class="nv"&gt;NEXT_PUBLIC_SUPRSEND_DISTINCT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_distinct_id


&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;h4&amp;gt;
  &amp;lt;a &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"step-5-setting-triggers-for-notifications"&lt;/span&gt; &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"#step-5-setting-triggers-for-notifications"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &amp;lt;/a&amp;gt;
  Step 5: Setting triggers &lt;span class="k"&gt;for &lt;/span&gt;notifications
&amp;lt;/h4&amp;gt;

&amp;lt;p&amp;gt;With your app inbox &lt;span class="nb"&gt;set &lt;/span&gt;up and visible, configure triggers &lt;span class="k"&gt;for &lt;/span&gt;sending notifications using any backend SDK. We will use the Node SDK. Documentation &lt;span class="k"&gt;for &lt;/span&gt;sending and triggering events is available &amp;lt;a &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://suprsend.com"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;here&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;img &lt;span class="nv"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8w4qa0sbhl3vuzt64ur.png"&lt;/span&gt; &lt;span class="nv"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Image description"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;
  &amp;lt;a &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"key-points"&lt;/span&gt; &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"#key-points"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &amp;lt;/a&amp;gt;
  Key Points
&amp;lt;/h3&amp;gt;

&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Disable server-side rendering, as the app inbox operates only on the client side.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;For generating the subscriber key, perform HMAC authentication using any backend SDK.&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;p&amp;gt;Integrating a notification center &lt;span class="k"&gt;in &lt;/span&gt;your Next.js app significantly boosts user engagement and ensures crucial messages are never missed. By following these steps, you can effectively implement the SuprSend app inbox, optimizing performance and functionality with dynamic import and client-side rendering. &amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;This approach provides extensive customization options, fitting seamlessly within your existing design. With this robust notification system, you can focus on building more features, knowing your &lt;span class="nb"&gt;users &lt;/span&gt;are always informed and engaged. Happy coding!&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>javascript</category>
      <category>nextjs</category>
      <category>react</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Batch Notifications Across Users in a Dedicated Time Window? w/ Example Github Application</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Thu, 04 Jul 2024 05:38:31 +0000</pubDate>
      <link>https://dev.to/suprsend/how-to-batch-notifications-across-users-in-a-dedicated-time-window-w-example-github-application-2p3k</link>
      <guid>https://dev.to/suprsend/how-to-batch-notifications-across-users-in-a-dedicated-time-window-w-example-github-application-2p3k</guid>
      <description>&lt;p&gt;&lt;a href="https://www.suprsend.com/post/how-to-batch-notifications-for-your-social-media-collaborative-application" rel="noopener noreferrer"&gt;Batching notifications&lt;/a&gt; is a feature widely adopted by major social media platforms and collaborative tools like LinkedIn, MS Teams, and Google Workspace products. This technique consolidates multiple alerts into a concise summary within a single notification, creating a clutter-free user experience and reducing interruptions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkpau5scktu2rxnn33bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkpau5scktu2rxnn33bg.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;For hands-on implementation, please refer to the provided GitHub repository and deployed application links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/SuprSend-NotificationAPI/social-app-react-app-inbox" rel="noopener noreferrer"&gt;SuprSend Social App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deployed Application: &lt;a href="https://suprsend-notificationapi.github.io/social-app-react-app-inbox/" rel="noopener noreferrer"&gt;SuprSend Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Benefits of Batching Notifications
&lt;/h3&gt;

&lt;p&gt;Frequent alerts can lead to notification fatigue, causing users to disengage. By batching notifications, we can maintain user attention and promote sustained interaction with our platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Overview: How Batching Works
&lt;/h3&gt;

&lt;p&gt;Batching notifications requires sophisticated workflows and significant development resources. Here's a closer look at the technical aspects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aggregation Engine&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efficiently aggregates related notifications, such as likes, shares, and comments, based on metadata attributes.&lt;/li&gt;
&lt;li&gt;Example: Instagram separates notifications for story likes and comments, ensuring clarity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Batching Window&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The batching window can be fixed (e.g., every 30 minutes) or dynamic (e.g., user-specific intervals).&lt;/li&gt;
&lt;li&gt;Example: LinkedIn batches email alerts for new messages every 30 minutes, while Google Docs batches comments based on user activity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Determines the optimal time for delivering notifications, which could be immediately, at the end of a batching window, or at a strategic time.&lt;/li&gt;
&lt;li&gt;Example: SaaS companies often send a daily digest of activities the following morning.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Batched Message Presentation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Options range from simple counters to detailed summaries, balancing informativeness and engagement without overwhelming the user.&lt;/li&gt;
&lt;li&gt;Example: "Patrick and 3 others liked your photo" versus listing all activities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cancelling Aggregation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adjusts the aggregation counter for counter-activities within the batching window.&lt;/li&gt;
&lt;li&gt;Example: If a user likes and then unlikes a post within the batching window, the counter is adjusted accordingly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Practical Implementation Using SuprSend
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pre-requisites:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Account on &lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;SuprSend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Integration of &lt;a href="https://docs.suprsend.com/docs" rel="noopener noreferrer"&gt;SuprSend SDK&lt;/a&gt; in your project&lt;/li&gt;
&lt;li&gt;Successful &lt;a href="https://docs.suprsend.com/reference/event-api" rel="noopener noreferrer"&gt;event calls made to SuprSend&lt;/a&gt; with necessary details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ekiq9lmhtoi1168ty2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ekiq9lmhtoi1168ty2g.png" alt="Image description" width="411" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Steps to Implement Batching:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identifying Triggers&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Identify recurring events suitable for batching.&lt;/li&gt;
&lt;li&gt;Example: Trigger a &lt;code&gt;Like_Event&lt;/code&gt; whenever someone likes a post in a React application using SuprSend's JavaScript SDK.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iohs4abmgcpp4hdlcig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iohs4abmgcpp4hdlcig.png" alt="Image description" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Setting Up Batch Parameters&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use SuprSend’s workflow builder to configure batching.&lt;/li&gt;
&lt;li&gt;Define batch window (fixed or dynamic), batch key (e.g., userName), and retain batch events (e.g., 15 objects).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r5eqrdupg01fyw7815q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r5eqrdupg01fyw7815q.png" alt="Image description" width="536" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the code I am using to send the event to SuprSend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flevvo3x11j8ya3qoh6lz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flevvo3x11j8ya3qoh6lz.png" alt="Image description" width="800" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizxksactgmi2eb2o1n7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizxksactgmi2eb2o1n7s.png" alt="Image description" width="800" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Creating Templates for Batched Events&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use SuprSend’s template editor and Handlebar Helpers to format notifications based on the batched event count.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaqsszorz5wawyp6hkxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaqsszorz5wawyp6hkxs.png" alt="Image description" width="537" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example Template that I used for this demo application using handlebars:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{#compare $batched_events_count '&amp;gt;' 1}} 
{{ $batched_events.[0].username }} and {{ subtract $batched_events_count 1 }} others liked your post. 
{{else}} 
{{ $batched_events.[0].username }} liked your post.
{{/compare}}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final result would look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkjb3jfzo6j7cadrpipc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkjb3jfzo6j7cadrpipc.png" alt="Image description" width="550" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Beyond Batching: Implementing Throttling
&lt;/h3&gt;

&lt;p&gt;While batching reduces the total number of notifications, introducing throttling can further enhance user experience by limiting the frequency of notifications. By setting an upper limit on daily notifications, we ensure users are not overwhelmed even with multiple batches.&lt;/p&gt;




&lt;p&gt;For hands-on implementation, please refer to the provided GitHub repository and deployed application links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/SuprSend-NotificationAPI/social-app-react-app-inbox" rel="noopener noreferrer"&gt;SuprSend Social App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deployed Application: &lt;a href="https://suprsend-notificationapi.github.io/social-app-react-app-inbox/" rel="noopener noreferrer"&gt;SuprSend Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Incase you want to check out the Javascript SDK, you can head here: &lt;a href="https://docs.suprsend.com/docs/javascript-sdk" rel="noopener noreferrer"&gt;https://docs.suprsend.com/docs/javascript-sdk&lt;/a&gt; &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>react</category>
    </item>
    <item>
      <title>React App Inbox with 0 Notification Costs.</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Sun, 23 Jun 2024 08:32:01 +0000</pubDate>
      <link>https://dev.to/suprsend/react-app-inbox-with-0-notification-costs-jik</link>
      <guid>https://dev.to/suprsend/react-app-inbox-with-0-notification-costs-jik</guid>
      <description>&lt;p&gt;Building a robust notification system in React can be a complex task. Juggling multi-channel notifications, real-time updates, and user interaction requires a powerful solution. Enter the &lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="noopener noreferrer"&gt;SuprSend Inbox for React&lt;/a&gt;, a feature-packed library designed to simplify and elevate your app's notification experience.&lt;br&gt;
Check out this video first to understand how will this notification infrastructure platform work?&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/oNhJjh5ZHkU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Want to see inapp inbox in action first? &lt;a href="https://inbox-playground.suprsend.com/" rel="noopener noreferrer"&gt;Head here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Under the Hood
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built with TypeScript for type safety and enhanced developer experience.&lt;/li&gt;
&lt;li&gt;Provides various UI components like notifications list, bell icon, and notification details view.&lt;/li&gt;
&lt;li&gt;Customization options allow you to tailor the look and feel to match your app's branding.&lt;/li&gt;
&lt;li&gt;Integrates seamlessly with popular state management libraries like Redux and Context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST API for sending notifications, managing subscribers, and tracking user engagement.&lt;/li&gt;
&lt;li&gt;Supports multiple notification channels like email, push notifications, and SMS via external integrations.&lt;/li&gt;
&lt;li&gt;Scalable architecture ensures reliable performance even with high notification volumes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HMAC authentication secures communication between your app and SuprSend's API.&lt;/li&gt;
&lt;li&gt;Data encryption protects sensitive user information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Integration Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install the &lt;code&gt;@suprsend/react-inbox&lt;/code&gt; library using npm.&lt;/li&gt;
&lt;li&gt;Configure the SuprSend SDK with your workspace key and subscriber ID.&lt;/li&gt;
&lt;li&gt;Define optional settings like notification display format, custom icons, and initial visibility.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Integration:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Render the &lt;code&gt;SuprSendInbox&lt;/code&gt; component in your React app layout.&lt;/li&gt;
&lt;li&gt;Pass the configuration details as props to customize the Inbox's behavior and appearance.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import SuprSendInbox from '@suprsend/react-inbox'

// add to your react component
&amp;lt;SuprSendInbox
  workspaceKey= "&amp;lt;workspace_key&amp;gt;"
  subscriberId= "&amp;lt;subscriber_id&amp;gt;"
  distinctId= "&amp;lt;distinct_id&amp;gt;"
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Use SuprSend's API from your backend server to send notifications with rich content and metadata.&lt;/li&gt;
&lt;li&gt;Leverage the SDK's event system to handle user interactions like clicking on notifications or marking them as read.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj44ogzzxtyxnqdxbhzck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj44ogzzxtyxnqdxbhzck.png" alt="Image description" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Advanced Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Updates:&lt;/strong&gt; WebSockets enable instant notification delivery, keeping the Inbox updated dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Components:&lt;/strong&gt; Build custom UI elements for specific notification types or personalize the Inbox layout with render props.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Support:&lt;/strong&gt; Store notifications locally for offline access and ensure a seamless user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Linking:&lt;/strong&gt; Integrate notifications with internal app pages for smooth navigation upon clicking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Analytics:&lt;/strong&gt; Track user engagement metrics like notification open rates and click-through rates for optimization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Technical Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose appropriate notification channels based on your app's purpose and target audience.&lt;/li&gt;
&lt;li&gt;Implement proper error handling mechanisms for API requests and network failures.&lt;/li&gt;
&lt;li&gt;Design a user-friendly notification experience with clear visuals and intuitive interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="noopener noreferrer"&gt;SuprSend Inbox for React Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.suprsend.com/docs" rel="noopener noreferrer"&gt;SuprSend API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://legacy.reactjs.org/" rel="noopener noreferrer"&gt;React Community Forums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Send Push Notifications without Hassles of FCM Token Generation</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Tue, 21 May 2024 14:56:07 +0000</pubDate>
      <link>https://dev.to/suprsend/send-push-notifications-without-hassles-of-fcm-token-generation-1n91</link>
      <guid>https://dev.to/suprsend/send-push-notifications-without-hassles-of-fcm-token-generation-1n91</guid>
      <description>&lt;p&gt;Handling FCM tokens and marking the user state is a hassle that businesses doesn't want to get into. To solve for this, SuprSend provides you with all the popular languages SDK, with point install and integration. &lt;/p&gt;

&lt;h2&gt;
  
  
  Token Generation and Notification handled By SDK
&lt;/h2&gt;

&lt;p&gt;You may use this option if all of your android push notifications are to be handled via SuprSend SDK. We recommend you use this method as it is just a single-step process to just register the service in your application manifest and everything else will be ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;!--If you are targeting to API 33 (Android 13) you will additional need to add POST_NOTIFICATIONS --&amp;gt;
&amp;lt;uses-permission android:name="android.permission.POST_NOTIFICATIONS" /&amp;gt;

&amp;lt;service
    android:name="app.suprsend.fcm.SSFirebaseMessagingService"
    android:enabled="true"
    android:exported="false"&amp;gt;
    &amp;lt;intent-filter&amp;gt;
        &amp;lt;action android:name="com.google.firebase.MESSAGING_EVENT" /&amp;gt;
    &amp;lt;/intent-filter&amp;gt;
&amp;lt;/service&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full documentation here: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;React Native - &lt;a href="https://docs.suprsend.com/docs/react-native-firebase-fcm-push-integration%C2%A0" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Android - &lt;a href="https://docs.suprsend.com/docs/android-firebase-fcm-push-integration" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Flutter - &lt;a href="https://docs.suprsend.com/docs/flutter-firebase-fcm-push-integration" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>firebase</category>
      <category>android</category>
      <category>reactnative</category>
      <category>flutt</category>
    </item>
    <item>
      <title>Deprecating Angular App Inbox towards web-inbox</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Sat, 11 May 2024 11:01:31 +0000</pubDate>
      <link>https://dev.to/suprsend/deprecating-angular-app-inbox-towards-web-inbox-50ef</link>
      <guid>https://dev.to/suprsend/deprecating-angular-app-inbox-towards-web-inbox-50ef</guid>
      <description>&lt;h1&gt;
  
  
  @suprsend/web-inbox
&lt;/h1&gt;

&lt;p&gt;This package is used to &lt;a href="https://www.suprsend.com/products/app-inbox" rel="noopener noreferrer"&gt;integrate inbox channel&lt;/a&gt; in non react applications. For react application use &lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="noopener noreferrer"&gt;@suprsend/react-inbox&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;p&gt;Documentation can be found here: &lt;a href="https://docs.suprsend.com/docs/embeddable-inbox" rel="noopener noreferrer"&gt;https://docs.suprsend.com/docs/embeddable-inbox&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrate using script tag
&lt;/h3&gt;

&lt;p&gt;This solution works if you are using applications like Django, Laravel, ruby.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"suprsend-inbox"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;initializeSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;suprSendConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;workspaceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_workspace_key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="p"&gt;.....&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;scriptElem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://web-inbox-assets.suprsend.com/v0.3.0.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;initializeSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_distinct_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_subscriber_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In above code replace &lt;strong&gt;your_distinct_id&lt;/strong&gt;, &lt;strong&gt;your_subscriber_id&lt;/strong&gt;,&lt;br&gt;&lt;br&gt;
&lt;strong&gt;your_workspace_key&lt;/strong&gt; and &lt;strong&gt;SPECIFIC_VERSION&lt;/strong&gt; variables with valid values.&lt;/p&gt;

&lt;p&gt;Example code: &lt;a href="https://github.com/suprsend/suprsend-web-inbox/blob/main/index.html" rel="noopener noreferrer"&gt;https://github.com/suprsend/suprsend-web-inbox/blob/main/index.html&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Integrate using NPM module
&lt;/h3&gt;

&lt;p&gt;This solution work if you are using applications like angular, vue etc. If you are using server side rendering frameworks then render this inbox component after mounting on client side.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @suprsend/web-inbox@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @suprsend/web-inbox@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;initSuprSendInbox&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@suprsend/web-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suprSendConfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;workspaceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_workspace_key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_distinct_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_subscriber_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;......&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;initSuprSendInbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;suprSendConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Calling &lt;strong&gt;initSuprSendInbox&lt;/strong&gt; function will initialize inbox inside div tag.&lt;/p&gt;

&lt;p&gt;To unmount inbox component manually you can use &lt;strong&gt;cleanSuprSend&lt;/strong&gt; function provided in SDK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;docuent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;cleanSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h3&gt;
  
  
  Customising Inbox
&lt;/h3&gt;

&lt;p&gt;For &lt;strong&gt;suprSendConfig&lt;/strong&gt; (script and npm package) you can pass other options to customize.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;workspaceKey&lt;/td&gt;
&lt;td&gt;string (Mandatory)&lt;/td&gt;
&lt;td&gt;You can find it in SuprSend Dashboard inside &lt;em&gt;Settings -&amp;gt; API Keys&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;distinctId&lt;/td&gt;
&lt;td&gt;any (Mandatory)&lt;/td&gt;
&lt;td&gt;Unique identifier for the user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subscriberId&lt;/td&gt;
&lt;td&gt;string (Mandatory)&lt;/td&gt;
&lt;td&gt;This is unique string for every distinctId used for authentication to inbox service. You check &lt;a href="https://docs.suprsend.com/docs/hmac-authentication" rel="noopener noreferrer"&gt;generation docs&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tenantId&lt;/td&gt;
&lt;td&gt;string (Optional)&lt;/td&gt;
&lt;td&gt;If you use multi-tenant architecture you can get inbox notifications for that specific tenant/brand only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stores&lt;/td&gt;
&lt;td&gt;IStore[] (Optional)&lt;/td&gt;
&lt;td&gt;Pass stores array if you ant to use &lt;a href="https://docs.suprsend.com/docs/multi-tabs" rel="noopener noreferrer"&gt;multi-tab feature&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pageSize&lt;/td&gt;
&lt;td&gt;number (Optional)&lt;/td&gt;
&lt;td&gt;Notifications to get in one api call. Used for pagination to get older notifications. Maximum allowed is 50. Defaults to 20.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pagination&lt;/td&gt;
&lt;td&gt;boolean (Optional)&lt;/td&gt;
&lt;td&gt;By default infinite scroll will be enabled to get older notifications on scroll. It can be disabled by passing false.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other UI based options are:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
interface ISuprSendInboxConfig {&lt;br&gt;
  ....&lt;br&gt;
  themeType?: 'light' | 'dark'&lt;br&gt;
  hideInbox?: boolean&lt;br&gt;
  hideToast?: boolean&lt;br&gt;
  hideAvatar?: boolean&lt;br&gt;
  notificationClickHandler?: (notificationData: any) =&amp;gt; void&lt;br&gt;
  toastProps?: IToastProps&lt;br&gt;
  theme?: Dictionary&lt;br&gt;
  popperPosition?: 'top' | 'bottom' | 'left' | 'right'&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const suprSendConfig = {
  workspaceKey: "your_workspace_key",
  distinctId: "your_distinct_id",
  subscriberId: "your_subscriber_id",
  tenantId: "testing",
  themeType: "dark",
  hideToast: true,
  theme: {
    bell: { color: "blue" },
    badge: { backgroundColor: "red", color: "black" },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Details about these UI styling customizations can be found here: &lt;a href="https://docs.suprsend.com/docs/react-customize-inbox" rel="noopener noreferrer"&gt;https://docs.suprsend.com/docs/react-customize-inbox&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>web3</category>
    </item>
    <item>
      <title>Deprecating Angular App Inbox towards web-inbox</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Sat, 11 May 2024 11:01:27 +0000</pubDate>
      <link>https://dev.to/suprsend/deprecating-angular-app-inbox-towards-web-inbox-b8b</link>
      <guid>https://dev.to/suprsend/deprecating-angular-app-inbox-towards-web-inbox-b8b</guid>
      <description>&lt;h1&gt;
  
  
  @suprsend/web-inbox
&lt;/h1&gt;

&lt;p&gt;This package is used to &lt;a href="https://www.suprsend.com/products/app-inbox" rel="noopener noreferrer"&gt;integrate inbox channel&lt;/a&gt; in non react applications. For react application use &lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="noopener noreferrer"&gt;@suprsend/react-inbox&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;p&gt;Documentation can be found here: &lt;a href="https://docs.suprsend.com/docs/embeddable-inbox" rel="noopener noreferrer"&gt;https://docs.suprsend.com/docs/embeddable-inbox&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrate using script tag
&lt;/h3&gt;

&lt;p&gt;This solution works if you are using applications like Django, Laravel, ruby.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"suprsend-inbox"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;initializeSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;suprSendConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;workspaceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_workspace_key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="p"&gt;.....&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;scriptElem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://web-inbox-assets.suprsend.com/v0.3.0.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scriptElem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;initializeSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_distinct_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_subscriber_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In above code replace &lt;strong&gt;your_distinct_id&lt;/strong&gt;, &lt;strong&gt;your_subscriber_id&lt;/strong&gt;,&lt;br&gt;&lt;br&gt;
&lt;strong&gt;your_workspace_key&lt;/strong&gt; and &lt;strong&gt;SPECIFIC_VERSION&lt;/strong&gt; variables with valid values.&lt;/p&gt;

&lt;p&gt;Example code: &lt;a href="https://github.com/suprsend/suprsend-web-inbox/blob/main/index.html" rel="noopener noreferrer"&gt;https://github.com/suprsend/suprsend-web-inbox/blob/main/index.html&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Integrate using NPM module
&lt;/h3&gt;

&lt;p&gt;This solution work if you are using applications like angular, vue etc. If you are using server side rendering frameworks then render this inbox component after mounting on client side.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @suprsend/web-inbox@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @suprsend/web-inbox@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;initSuprSendInbox&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@suprsend/web-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suprSendConfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;workspaceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_workspace_key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;distinctId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_distinct_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subscriberId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_subscriber_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;......&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;initSuprSendInbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;suprSendConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Calling &lt;strong&gt;initSuprSendInbox&lt;/strong&gt; function will initialize inbox inside div tag.&lt;/p&gt;

&lt;p&gt;To unmount inbox component manually you can use &lt;strong&gt;cleanSuprSend&lt;/strong&gt; function provided in SDK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;docuent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;suprsend-inbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;cleanSuprSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h3&gt;
  
  
  Customising Inbox
&lt;/h3&gt;

&lt;p&gt;For &lt;strong&gt;suprSendConfig&lt;/strong&gt; (script and npm package) you can pass other options to customize.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;workspaceKey&lt;/td&gt;
&lt;td&gt;string (Mandatory)&lt;/td&gt;
&lt;td&gt;You can find it in SuprSend Dashboard inside &lt;em&gt;Settings -&amp;gt; API Keys&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;distinctId&lt;/td&gt;
&lt;td&gt;any (Mandatory)&lt;/td&gt;
&lt;td&gt;Unique identifier for the user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subscriberId&lt;/td&gt;
&lt;td&gt;string (Mandatory)&lt;/td&gt;
&lt;td&gt;This is unique string for every distinctId used for authentication to inbox service. You check &lt;a href="https://docs.suprsend.com/docs/hmac-authentication" rel="noopener noreferrer"&gt;generation docs&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tenantId&lt;/td&gt;
&lt;td&gt;string (Optional)&lt;/td&gt;
&lt;td&gt;If you use multi-tenant architecture you can get inbox notifications for that specific tenant/brand only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stores&lt;/td&gt;
&lt;td&gt;IStore[] (Optional)&lt;/td&gt;
&lt;td&gt;Pass stores array if you ant to use &lt;a href="https://docs.suprsend.com/docs/multi-tabs" rel="noopener noreferrer"&gt;multi-tab feature&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pageSize&lt;/td&gt;
&lt;td&gt;number (Optional)&lt;/td&gt;
&lt;td&gt;Notifications to get in one api call. Used for pagination to get older notifications. Maximum allowed is 50. Defaults to 20.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pagination&lt;/td&gt;
&lt;td&gt;boolean (Optional)&lt;/td&gt;
&lt;td&gt;By default infinite scroll will be enabled to get older notifications on scroll. It can be disabled by passing false.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other UI based options are:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
interface ISuprSendInboxConfig {&lt;br&gt;
  ....&lt;br&gt;
  themeType?: 'light' | 'dark'&lt;br&gt;
  hideInbox?: boolean&lt;br&gt;
  hideToast?: boolean&lt;br&gt;
  hideAvatar?: boolean&lt;br&gt;
  notificationClickHandler?: (notificationData: any) =&amp;gt; void&lt;br&gt;
  toastProps?: IToastProps&lt;br&gt;
  theme?: Dictionary&lt;br&gt;
  popperPosition?: 'top' | 'bottom' | 'left' | 'right'&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const suprSendConfig = {
  workspaceKey: "your_workspace_key",
  distinctId: "your_distinct_id",
  subscriberId: "your_subscriber_id",
  tenantId: "testing",
  themeType: "dark",
  hideToast: true,
  theme: {
    bell: { color: "blue" },
    badge: { backgroundColor: "red", color: "black" },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Details about these UI styling customizations can be found here: &lt;a href="https://docs.suprsend.com/docs/react-customize-inbox" rel="noopener noreferrer"&gt;https://docs.suprsend.com/docs/react-customize-inbox&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>web3</category>
    </item>
    <item>
      <title>Angular App Inbox</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Sat, 11 May 2024 10:51:56 +0000</pubDate>
      <link>https://dev.to/suprsend/angular-app-inbox-2ik7</link>
      <guid>https://dev.to/suprsend/angular-app-inbox-2ik7</guid>
      <description>&lt;p&gt;Modern business users increasingly demand seamless, personalized experiences. The Angular In-App Inbox notification center emerges as a solution to meet these expectations. This guide offers developers, from novices to seasoned experts, a simple walkthrough of integrating and optimizing SuprSend’s In-App Inbox within Angular applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
Explore the Angular Inbox service in the &lt;a href="https://github.com/suprsend/suprsend-web-inbox" rel="noopener noreferrer"&gt;suprsend/ngx-suprsend-inbox repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Documentation can be found &lt;a href="https://docs.suprsend.com/docs/embeddable-inbox" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SuprSend Inbox Example:&lt;/strong&gt;&lt;br&gt;
Try out our &lt;a href="https://inbox-playground.suprsend.com" rel="noopener noreferrer"&gt;SuprSend Inbox Playground&lt;/a&gt; first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install SuprSend SDK and Dependencies&lt;/strong&gt;&lt;br&gt;
Ensure compatibility with Angular versions &amp;gt;=12.0.0. Install SuprSend’s Angular SDK, js-inbox, and the Popper.js/core package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @suprsend/ngx-inbox @suprsend/js-inbox @popperjs/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Import SuprSendInboxModule in Your Angular App Module&lt;/strong&gt;&lt;br&gt;
Incorporate the SuprSend Inbox module into your Angular app module and provide your workspaceKey and workspaceSecret.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SuprSendInboxModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@suprsend/ngx-inbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;NgModule&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;SuprSendInboxModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forRoot&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;workspaceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your workspaceKey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;workspaceSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your workspaceSecret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Identify Users for Personalized Notifications&lt;/strong&gt;&lt;br&gt;
Utilize the SuprSendInboxService to identify users and ensure personalized and targeted in-app notifications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SuprSendInboxService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@suprsend/ngx-inbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;OnInit&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;ssinbox&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SuprSendInboxService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ssinbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;identifyUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;distinct_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;subscriber_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Integrating Toast:&lt;/strong&gt;&lt;br&gt;
Effortlessly integrate toast notifications by adding the following code snippet where you want to display the in-app inbox on your Angular UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;suprsend-inbox&amp;gt;&amp;lt;/suprsend-inbox&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Customization Options:&lt;/strong&gt;&lt;br&gt;
Unlock extensive customization options for a tailored in-app inbox experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the Angular In-App Inbox?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Angular In-App Inbox notification center is a dynamic and user-centric hub embedded within mobile or web applications. It is purposefully crafted to manage and showcase messages, alerts, and updates efficiently. Unlike conventional notification systems reliant solely on push notifications or emails, the In-App Inbox seamlessly operates within the application interface. Acting as a centralized repository, users can conveniently access, review, and interact with messages on their own terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Updates:&lt;/strong&gt; &lt;br&gt;
The In-App Inbox notification feed ensures users instant access to updates, guaranteeing timely delivery of critical information without relying on external channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User-Centric Interaction:&lt;/strong&gt; &lt;br&gt;
Facilitating engagement within the application, users seamlessly interact with notifications without disrupting the overall user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personalization:&lt;/strong&gt; &lt;br&gt;
Empowering tailored communication, the In-App Inbox allows businesses to deliver personalized messages, promotions, or relevant content based on user behavior and preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Message Persistence:&lt;/strong&gt; &lt;br&gt;
In contrast to traditional notifications that vanish post-dismissal, messages within the In-App Inbox persist until acknowledged or dismissed by the user, ensuring vital information remains accessible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Channel Integration:&lt;/strong&gt; &lt;br&gt;
The In-App Inbox notification feed aggregates messages from diverse channels, providing a unified platform to manage notifications originating from in-app activities, marketing campaigns, or other sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced User Engagement:&lt;/strong&gt; &lt;br&gt;
Contributing to heightened user engagement and retention, In-App Inboxes facilitate direct communication and interaction within the application environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable Content:&lt;/strong&gt; &lt;br&gt;
Messages within the In-App Inbox feed incorporate actionable elements, such as buttons or links, enabling users to take specific actions directly from the notification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analytics and Insights:&lt;/strong&gt; &lt;br&gt;
Businesses gain invaluable insights into user behavior and engagement patterns through analytics associated with the In-App Inbox. This data informs data-driven decisions for future communication strategies. Remarkably, this channel boasts a deliverability rate of 100% with SuprSend’s out-of-box inbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy Integration with SuprSend:&lt;/strong&gt;&lt;br&gt;
Kickstart your app inbox in under 10 minutes with SuprSend. Integrate your preferred SDK, copy a few lines of code, and you’re good to go. Check the documentation for a hassle-free start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.suprsend.com/docs/in-app-inbox-template" rel="noopener noreferrer"&gt;In-App Inbox Template Documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>angular</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Marketing Automation Tools vs Notification Infrastructure Platforms - Which one should be used, and when?</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Thu, 02 May 2024 13:48:16 +0000</pubDate>
      <link>https://dev.to/suprsend/marketing-automation-tools-vs-notification-infrastructure-platforms-which-one-should-be-used-and-when-57h2</link>
      <guid>https://dev.to/suprsend/marketing-automation-tools-vs-notification-infrastructure-platforms-which-one-should-be-used-and-when-57h2</guid>
      <description>&lt;p&gt;Two major types of tools exist to achieve this objective of notifying end users: Marketing Automation Tools (MATs) and Notification Infrastructure Platforms (NIPs). Although both serve similar purposes, there are significant differences between them. Understanding the &lt;a href="https://www.suprsend.com/post/comparing-notification-infrastructure-marketing-automation-tools-a-guide-to-choose-the-right-platform-for-your-product" rel="noopener noreferrer"&gt;unique aspects of MATs and NIPs&lt;/a&gt; can aid in making informed decisions about which tools to implement for specific business requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;MATs, represented by industry leaders like Braze, Customer.io, Iterable, and CleverTap, dominate the marketplace by helping businesses execute targeted marketing campaigns. Such campaigns contribute positively towards customer retention and engagement. Alongside these activities, businesses must transmit essential product notifications, covering transactional alerts and updates in customers' accounts. Though MATs prove competent in addressing promotional use cases, they may lack the capacity to deal with intricate product notifications pivotal to product success.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Objectives, Divergent Methods
&lt;/h2&gt;

&lt;p&gt;MATs and NIPs share a fundamental goal: connecting businesses with their intended audiences. Nevertheless, their underlying functionalities diverge substantially.&lt;/p&gt;

&lt;h3&gt;
  
  
  Marketing Automation Platforms (MATs)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Strengths
&lt;/h4&gt;

&lt;p&gt;MATs possess several advantages, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;User Segmentation&lt;/em&gt;: MATs excel at categorizing users based on a range of factors, thereby enabling firms to craft focused and impactful messaging.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;One-Time Campaigns&lt;/em&gt;: MATs facilitate the construction and release of standalone campaigns meant to stimulate specific reactions, such as announcing new launches or urging cart additions.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cohort Change Notifications&lt;/em&gt;: MATs automate alerts linked to shifts in user group membership, dispatching timely and applicable communications.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Rapid Experimentation and A/B Testing&lt;/em&gt;: MATs permit swift prototyping and comparisons of alternatives aimed at optimizing conversion paths.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Multi-Step Campaign Journeys&lt;/em&gt;: Visual editors within MATs make it straightforward to establish sequential, condition-driven engagements, leveraging historical interaction data.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;External User Preferences&lt;/em&gt;: MATs collect user preferences via externally hosted forms, chiefly for promotional situations, easing subscription management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Weaknesses
&lt;/h4&gt;

&lt;p&gt;Notwithstanding their virtues, MATs exhibit certain weaknesses, specifically when tackling complex product notifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Limited Scalability&lt;/em&gt;: When confronted with escalating numbers of incoming requests, MATs may encounter difficulties maintaining satisfactory performance levels.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Inadequate Flexibility&lt;/em&gt;: Due to preset constraints, MATs might impose limits on customizability, hampering attempts to introduce novel features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Notification Infrastructure Platforms (NIPs)
&lt;/h3&gt;

&lt;p&gt;NIPs represent the latest generation of tools developed to tackle the challenges associated with building and preserving product notifications.&lt;/p&gt;

&lt;h4&gt;
  
  
  Benefits
&lt;/h4&gt;

&lt;p&gt;NIPs bring numerous enhancements, notably:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Expanded Channel Coverage&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs interface smoothly with both widely adopted and cutting-edge channels, unlike MATs concentrating predominantly on mainstream methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Real-time In-app Notification Feeds&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs provide genuine real-time alert presentation inside apps, whereas MATs often resort to non-native display techniques.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Robust Multi-tenant Structures&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs readily supply powerful multi-tenant configurations, accommodating diversified tenant-level demand profiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Advanced Workflow Processing&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs furnish superior assistance in devising and administering convoluted workflows, surpassing MATs constrained by elementary structures.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Sophisticated Preference Management&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs afford improved preference administration, letting users exercise finer command over channels, subjects, and recurrence patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Granular Insights&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs yield rich analytical reports, revealing deeper insights than those generated by standard MATs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Improved Resilience&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs demonstrate increased tolerance against disruptions, safeguarding continuous operation amid adversities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Developer-Oriented Interfaces&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;NIPs expose interfaces geared explicitly towards developers, fostering accelerated iterations and automation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;_Segmented workspaces for staging and production environments

&lt;ul&gt;
&lt;li&gt;NIPs offer independent workspaces suited to staging and production environments, eliminating conflicts arising from shared resources inherent in MATs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.suprsend.com/" rel="noopener noreferrer"&gt;SuprSend&lt;/a&gt; supports all the above use-cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Informed Decisions: Choosing the Right Tool
&lt;/h2&gt;

&lt;p&gt;When deciding whether to utilize MATs or NIPs, assessing the following points can lead to an educated decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identifying the desired outcome(s) and mapping them to corresponding tool capabilities&lt;/li&gt;
&lt;li&gt;Matching resource allocation with expected return on investment&lt;/li&gt;
&lt;li&gt;Balancing operational expenditure against capital expenses&lt;/li&gt;
&lt;li&gt;Anticipating future expansion and its implications on selected tools&lt;/li&gt;
&lt;li&gt;Accounting for technological advancements and evolving ecosystem trends&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Use Case Examples
&lt;/h2&gt;

&lt;p&gt;E-Commerce&lt;br&gt;
~~~~&lt;del&gt;&lt;/del&gt;~~&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize NIPs to generate dynamic discount codes, recover abandoned shopping carts, and foster repeat purchases&lt;/li&gt;
&lt;li&gt;Leverage MATs to broadcast seasonal sales announcements, recommend trending items, and track shoppers' browsing histories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Healthcare&lt;br&gt;
~&lt;del&gt;&lt;/del&gt;~~~~&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Employ NIPs to schedule medication reminders, confirm appointments, and disseminate lab results&lt;/li&gt;
&lt;li&gt;Harness MATs to propagate health tips, solicit feedback, and promote disease prevention programs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Financial Services&lt;br&gt;
~~~~&lt;del&gt;&lt;/del&gt;~~&lt;del&gt;&lt;/del&gt;~~~&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capitalize on NIPs to distribute billing statements, notify transactions, and report fraudulent activities&lt;/li&gt;
&lt;li&gt;Exploit MATs to suggest financial instruments, publicize interest rate updates, and encourage savings behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Logistics and Transportation&lt;br&gt;
~&lt;del&gt;&lt;/del&gt;~~&lt;del&gt;&lt;/del&gt;~~&lt;del&gt;&lt;/del&gt;~~&lt;del&gt;&lt;/del&gt;~~~~~&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take advantage of NIPs to monitor shipments, estimate arrival times, and arrange pickups&lt;/li&gt;
&lt;li&gt;Apply MATs to propose alternate routes, forecast traffic congestion, and reward punctual delivery personnel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, combining the powers of MATs and NIPs equips businesses with potent arsenals to engage and retain customers successfully. Carefully considering the tradeoffs and synergies between these tools guarantees sustained progress in today's competitive landscape.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Inapp Messaging Intgr.- Native for react, ngx, flutter, vue, Next,js, iOS</title>
      <dc:creator>Nik L.</dc:creator>
      <pubDate>Wed, 03 Apr 2024 15:39:27 +0000</pubDate>
      <link>https://dev.to/suprsend/inapp-messaging-intgr-native-for-react-ngx-flutter-vue-nextjs-ios-kmg</link>
      <guid>https://dev.to/suprsend/inapp-messaging-intgr-native-for-react-ngx-flutter-vue-nextjs-ios-kmg</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubxtusmsmhb81ehkq53c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubxtusmsmhb81ehkq53c.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  With our &lt;a href="https://www.suprsend.com/products/app-inbox" rel="noopener noreferrer"&gt;in-app notification center&lt;/a&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adaptable UI:&lt;/strong&gt; Create a native in-app inbox interface with customizable pre-built components or headless API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Auth:&lt;/strong&gt; Robust HMAC security &amp;amp; authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time updates:&lt;/strong&gt; Lightning-fast web sockets delivering immediate alerts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State mgmt.:&lt;/strong&gt; Streamlined handling for read/unread/archived notifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filtering:&lt;/strong&gt; Neatly arranged tabs and filters, ensuring swift info access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability:&lt;/strong&gt; Complete control over tracking &amp;amp; debugging with logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart batching:&lt;/strong&gt; Consolidated multi-alert notifications made easy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform routing:&lt;/strong&gt; Multiple delivery channels (email, Slack, SMS, WhatsApp) based on end-user preference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there's much more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tjs2mp1qgv4ur1ef73r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tjs2mp1qgv4ur1ef73r.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Platforms Supported
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;li&gt;iOS&lt;/li&gt;
&lt;li&gt;web&lt;/li&gt;
&lt;li&gt;Vue.js&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Github
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/suprsend/suprsend-web-inbox" rel="noopener noreferrer"&gt;https://github.com/suprsend/suprsend-web-inbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/suprsend/suprsend-react-inbox" rel="noopener noreferrer"&gt;https://github.com/suprsend/suprsend-react-inbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Play with &lt;a href="https://inbox-playground.suprsend.com/" rel="noopener noreferrer"&gt;sandbox&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Kxjnu4K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets-global.website-files.com/62a87a4ff7326e1bc863e8f3/66081f7e93f891e48121e238_Views-lottie-final-transcode.mp4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Kxjnu4K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets-global.website-files.com/62a87a4ff7326e1bc863e8f3/66081f7e93f891e48121e238_Views-lottie-final-transcode.mp4" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;btw, we have launched app inbox on Product Hunt, consider giving us your support there: &lt;a href="https://www.producthunt.com/posts/in-app-notification-center-by-suprsend" rel="noopener noreferrer"&gt;Product Hunt Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>watercooler</category>
    </item>
  </channel>
</rss>
