novu

Open-Source Notification Platform. Embeddable Notification Center, E-mail, Push and Slack Integrations.

OTHER License

Downloads
474.1K
Stars
34.7K
Committers
437

Bot releases are visible (Hide)

novu - v0.24.0 Latest Release

Published by LetItRock 7 months ago

What’s new in Novu 0.24?

TL;DR: All you need to know about the latest Novu 0.24.0 release. Translation management improvements, notifire package deprecations, template editing preview updates, workflow pagination, and more!

0.24 Release Updates

We're excited to highlight the newest features introduced in our latest release. Join us as we explore the treasure that was recovered from the depths of the engineers' dungeon!

giphy (9)

Translation Management Improvements

We’ve made significant enhancements to the Translation management feature.

  • Users can now preview translated templates in their preferred languages in the workflow editor.
  • A new drag-and-drop functionality for uploading of the translation files.
  • We revamped the UI of the step editors significantly enhancing the user experience for template editing.
  • Translation Managements Variants Preview

image

image

image

image

image

image

💡 Note: This feature is only available for Novu Cloud for Business and Enterprise Clients.

Deprecation of Original Notifire Packages

As of this release we will be deprecating the original Notifire packages hosted on GitHub and any package within the @notifire namespace on NPM.

Users should promptly transition to the official @novu packages and platform.

Deprecated Packages

  1. Notifire WebSocket Package (notifire/ws)
  2. Notifire Widget Package (notifire/widget)
  3. Notifire SDK Package (notifire/sdk)
  4. Notifire Web Package (notifire/web)
  5. Notifire API Package (notifire/api)

Workflow Page Pagination Improvements

We've implemented enhanced pagination on the Workflows page, allowing for easier navigation between pages, displaying more items, and direct access to specific pages.

image

Auto Remove Deleted Subscribers from Topic

Previously, deleted subscribers remained part of the topics they were added to. Now, they are automatically removed from any topics they were part of upon deletion.

PR for Reference: https://github.com/novuhq/novu/pull/5187

Subscriber Details Now Available For Digest Filters

There was a known reported bug where a subscriber filter on a digest step fails because subscriber details always appeared to be null when evaluating filters on digests.

The bug has been resolved, and subscriber details are now consistently available for digest filters.

PR for Reference: https://github.com/novuhq/novu/pull/5234

Notable changes

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.23.0...v0.24.0

novu - v0.23.0

Published by LetItRock 8 months ago

What’s new in Novu 0.23?

TL;DR: All you need to know about the latest Novu 0.23.0 release. Translation management, provider integrations, notification center updates, performance updates, and more!

0.23 Release Updates

We're excited to highlight the newest features introduced in our latest release. Join us as we explore what awaits you!

giphy (7)

Translation Management

💡Note: This feature is only available for Novu Cloud for Business and Enterprise Clients.

The translation management feature allows users to create, upload, and edit translation groups and files from the Novu dashboard.

It’s new and we’re excited for you to start using it in your apps!

With this feature comes a new handlebar helper for translations, {{ i18n ... }}. Novu users can now translate their notification templates to different languages using the i18n handlebar helper and the translation keys in the editor.

image

Support for Non-Root User (UID 1000)

In our continued effort to enhance security and compatibility in enterprise environments, we are proud to announce a significant update aimed at supporting systems with restricted root access.

Key Features:

  • Non-Root User Support: Novu now officially supports deployment under a non-root user with a fixed UID of 1000. This update is crucial for enterprise deployments on systems that enforce strict no-root policies, ensuring compliance with security best practices.
  • Seamless Integration: This enhancement facilitates smoother integration of Novu into secure environments, reducing the need for workarounds or exceptions in security policies.
  • Enhanced Security: Running Novu under a non-root user reduces potential security risks and aligns with the principle of least privilege, further safeguarding our notification infrastructure.

Getting Started:

No action is required from your side to take advantage of this update. The changes have been seamlessly integrated into Novu, ensuring that your enterprise deployments comply with non-root user policies without any additional configuration needed.

ARM Image Support

We're thrilled to share that Novu has officially introduced support for ARM images, marking a significant step in our dedication to embracing innovation and responsibility within the tech landscape. This development ensures that Novu stays ahead in the realm of notification infrastructure by broadening our platform's accessibility, compatibility, and sustainability.

Key Highlights:

  • ARM Architecture Support: Users can now deploy Novu on systems powered by ARM processors, benefiting from the efficiency and performance improvements that ARM architectures offer.
  • Optimized Performance: ARM support brings optimized performance for ARM-based deployments, ensuring faster and more efficient notification processing.

Getting Started with ARM Images:

To use Novu on an ARM-based system, simply pull the ARM-compatible Docker image from our registry. If you are on a not a ARM based system you can use the following command in docker to pull the image.

docker pull --platform linux/arm64 ghcr.io/novuhq/novu:v0.23.0

💡Note: Emulating ARM hardware may be slower then running an ARM image on ARM hardware.

Deprecation of Original Notifire Packages

Novu has evolved so much from when it was originally created. On the release of v0.24.0, we will be deprecating the original Notifire packages hosted on GitHub and any package within the @notifire namespace on NPM.

The following packages hosted on GitHub under the novuhq organization are scheduled for deprecation:

Deprecated Packages

  1. Notifire WebSocket Package (notifire/ws)
  2. Notifire Widget Package (notifire/widget)
  3. Notifire SDK Package (notifire/sdk)
  4. Notifire Web Package (notifire/web)
  5. Notifire API Package (notifire/api)

NPM Namespace Deprecation

All packages within the @notifire namespace on NPM are also scheduled for deprecation. This includes any package prefixed with @notifire/, ensuring a comprehensive and clear transition away from these older offerings.

Users currently relying on these deprecated packages should promptly transition to the official @novu packages.

Field-level Encryption to API Keys

We're security conscious at Novu. The API keys are now encrypted at rest in the database and hashed at rest in the cache.

We added this security feature to prevent direct use of the API key in the event of a database breach or bad actor trying to use the key with bad intentions.

Note: All existing API keys become encrypted through a data migration script for self-hosted users. Running the script more than once does not re-encrypt the api keys.

Bulk Delete Notifications in Notification Center

Users can now remove multiple notifications using an array of message ids (limit of 100) via the Notification center hooks and Headless library.

Notification Center Hook

const onSuccess = (data: IMessage) => {};

const onError = (error: Error) => {};

const { removeNotifications, isLoading, isError, error } = useRemoveNotifications({
  onSuccess,
  onError,
});

Headless Service

headlessService.removeNotifications({
  listener: (
    result: UpdateResult<IMessage, unknown, { messageId: string }>
  ) => {
    console.log(result);
  },
  onSuccess: (message: IMessage) => {
    console.log(message);
  },
  onError: (error: unknown) => {
    console.error(error);
  },
  messageIds: ["message_id_1", "message_id_2" ],
});

Rocket Chat Provider Integration

You can now send Chat messages via the Rocket Chat provider integration:

Brevo (SendInBlue) SMS Provider Integration

You can now send SMS messages via the Brevo SMS provider integration:

iSend SMS Provider Integration

You can now send SMS via the iSend sms provider integration:

CustomData Overrides for SMS

A customData overrides provider for SMS now exists. This property allows us to support provider specific configurations in future for SMS providers.

For now, it only supports DLT (Distributed Ledger Technology) for the Gupshup SMS provider.

Trigger workflow with customData

novu.trigger("gupshup-workflow", {
  to: {
    subscriberId: "1234",
  },
  payload: {
    user: "Viraj",
  },
  overrides: {
    sms: {
      customData: {
        principalEntityId: "principal entity Id",
        dltTemplateId: "dlt template Id",
      },
    },
  },
});

Email Editor Variables Auto-suggestion Dropdown

We've made a little adjustment to the workflow email editor to enhance user experience by including auto-suggestions while adding variables.

This feature greatly minimizes the chance of selecting the wrong variable and having incorrect template content.

Notable changes

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.22.0...v0.23.0

novu - v0.22.0

Published by LetItRock 10 months ago

What’s new in Novu 0.22?

TL;DR: All you need to know about the latest Novu 0.22.0 release. Multi-tenancy Variants, API Idempotency, API Rate Limiting, Filter conditional variables and more!

0.22 Release Updates

We're excited to highlight the newest features introduced in our latest release. Join us as we explore what awaits you!

image

Multi-tenancy Variants

Variants is an integral component of our multi-tenancy feature and aims to empower users to create multiple variants for a given workflow step, such as the Email step. These step variations are linked to specific conditions.

Within the multi-tenancy context, these conditions may pertain to tenants; for instance, if the tenant is named "Nike", a specific email variant will be chosen.

However, these conditions extend beyond tenants, allowing users to base their criteria on the trigger payload, subscriber data, or webhook data.

During the notification sending phase, the system’s logic will determine the appropriate variant based on the contextual information that was passed with the trigger event and the conditions applied to the variants. Only a single variant will be selected and sent to the user at the end.

Note: We have renamed the Filters functionality to Conditions.

variants

variants

Adding a variant to email step

In this gif above, we added a variant to our email step, thus making us have the root variant (with no condition) that will be sent if there's no tenant identifier specified, and a variant that will be sent if the tenant identifier is Nike.

Idempotency

To enhance the resilience and dependability of our API system, especially during disruptive scenarios like network interruptions, we have introduced the Idempotency headers to POST and PATCH HTTP methods within the API.

We have now granted users the ability to include Idempotency headers in their requests. A given operation will not be executed more than once, even if users resubmit the request following a perceived failure.

This guarantees that we process changes in a fail-safe manner, and the system caches the response for a day for future reference. This approach ensures that only valid and unique changes are processed, contributing to the overall robustness and reliability of our API system.

Note: Currently, the Idempotency headers are not enabled on the Novu cloud but functionality is available for self-hosting. We are currently integrating it into all of our SDKs as well.

Huge shoutout to @mahendraHegde for bringing in the Idempotency feature and to @michaldziuba03 for implementing the exponential retry mechanism in Node SDK! Your contribution rocks, much appreciated! 🙌

PRs:

API Rate Limiting

Rate limiting is an essential functionality for establishing a robust and resilient system. It safeguards system resources from being misused by malicious actors or being monopolized by one client.

It plays a vital role in sustaining consistent system performance by regulating traffic and preventing sudden increases that could degrade service quality.

Note: It's not currently enabled on Novu Cloud yet. We'll inform all users whenever we want to enable this option for all cloud users. If you're self-hosting, you can enable API rate limiting immediately with the IS_API_RATE_LIMITING_ENABLED flag in the environment variable.

PRs:

Variable Support in the Step Conditions aka Filters

The condition Value field now supports the use of variables as its value, enhancing the dynamic nature of this functionality.

variables_in_step_conditions

PRs:

Workflow Settings Override for tenants

The workflow settings override functionality allows to update the active and channel preferences fields on the workflow per tenant.

A good use case for this is the ability to have the following setting preferences enabled for all users, but you want them disabled for specific tenants. For example, you have about 3 tenants: Nike, Cloudinary and Eden. You can create a new settings override by passing the tenantId and workflowId, and your preferences.

We have implemented the set of the API endpoints that allow the following:

  • Creating, updating and deleting overrides,
  • List all overrides, or for one template.

override1

override2

Create new workflow settings overrides

override3

Update workflow settings overrides

PRs:

Note: We are currently working on ensuring our SDKs have support for this functionality.

Event Cancellation from Digest

We have added a new API endpoint that allows the cancellation of any event from the digest.

digest

Note: We are currently updating all of our SDKs to support this new functionality.

PRs:

Resiliency and Performance Improvements

We have done some performance plumbing to improve the speed & resilience of the overall system. Our goal is to keep working on performance, reliability and resilience in every release.

Custom SMS Provider Integration

You can now send SMS messages using custom SMS providers using REST API. Do this by setting up the Generic SMS provider:

custom_sms

custom_sms2

MessageBird SMS Provider Integration

You can now send SMS messages via the MessageBird SMS provider integration:

messagebird

BulkSMS Provider Integration

You can now send SMS messages via the BulkSMS SMS provider integration:

bulksms

SimpleTexting SMS Provider Integration

You can now send SMS messages via the SimpleTexting SMS provider integration:

simpletexting

Azure SMS Provider Integration

You can now send SMS messages via the Azure SMS provider integration:

azure_sms

Braze Email Provider Integration

You can now send emails via the Braze Email provider integration:

braze

Pusher Beams Provider Integration

You can now send messages via the Pusher Beams provider integration:

pusher_beams

Grafana On Call Webhook Chat Provider Integration

You can now send messages via the Grafana On Call webhook chat provider integration:

grafana

Notable changes

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.21.0...v0.22.0

novu - v0.21.0

Published by LetItRock 12 months ago

TL;DR: All you need to know about the latest Novu 0.21.0 release. Removal of the multi-providers feature flag, @novu/notification-center-angular package now supports Angular projects of version 15 and higher, new Actor system variables, Brand Logo Management, Organization APIs and more.

0.21 Release Updates

We're thrilled to announce the newest features in our most recent release. Let's get started and explore what's waiting for you!

giphy_(47)

Removal of the multi-providers Feature Flag

In this release, we are excited to announce the removal of the multi-providers feature flag. This feature was previously disabled by default to ensure backward compatibility.

Action Required for Upgrading

To upgrade to this new version, you will need to follow these steps:

  1. Run Migration Script for Creating primary and priority Fields: You can access the migration script for creating primary and priority fields by clicking here.

    // apps/api/package.json
    
    "migration": "cross-env NODE_ENV=local MIGRATION=true ts-node --transpileOnly ./migrations/integration-scheme-update/add-primary-priority-migration.ts",
    
    cd apps/api
    npm run migration
    
  2. Run Migration Script for Updating Novu Integrations: To update Novu integrations, you'll need to execute the migration script available here.

    // apps/api/package.json
    
    "migration": "cross-env NODE_ENV=local MIGRATION=true ts-node --transpileOnly ./migrations/integration-scheme-update/update-primary-for-disabled-novu-integrations.ts",
    
    cd apps/api
    npm run migration
    

By following these steps, you can smoothly upgrade to the latest version of our software and enjoy the benefits of the multi-providers feature flag removal. If you encounter any issues during the upgrade process, please don't hesitate to reach out to our support team for assistance.

PR Details:

chore(web): Remove multi-provider feature flag by @rifont in https://github.com/novuhq/novu/pull/4402

Notification Center Angular

Starting with this release, the @novu/notification-center-angular package now supports Angular projects of version 15 and higher.

Previously, it had a limitation only for Angular version 15.

PR Details:

feat(notification-center-angular): Support Angular versions 15+ by @rifont in https://github.com/novuhq/novu/pull/4518

Actor System Variables

In this release, we've introduced a new Actor system variables.
These system variables can now be utilized within any channel editor, enhancing flexibility and customization.

  • You can now leverage actor system variables in your channel editors.

Screenshot_2023-10-27_at_15 28 34

  • When setting up a "Run a Test" Trigger, the application will prompt the user to provide actor information.

Screenshot_2023-10-27_at_15 29 43

This addition lets you incorporate dynamic actor information in your channel configurations, making your workflows more versatile and adaptable.

PR Details:

feat: add actor to system variables by @ainouzgali in https://github.com/novuhq/novu/pull/4278

Brand Logo Management

This release introduces a new functionality that allows you to update or remove your brand logo seamlessly.

  • Update Brand Logo: You can now easily replace your existing brand logo with a new one, giving your application a fresh look.
  • Remove Brand Logo: If you prefer a cleaner interface, you have the option to remove the brand logo altogether.

Screenshot_2023-10-27_at_15 34 27

These brand logo management capabilities give you greater control over your application's visual identity. Customize your branding effortlessly and tailor it to your specific needs.

PR Details:

feat: add ability to remove uploaded brand logo by @michaldziuba03 in https://github.com/novuhq/novu/pull/4451

New Provider: Pushpad

We are excited to introduce a new integration with Pushpad in this release.

You can learn more about this provider here.

PR Details:

Screenshot_2023-10-27_at_15 39 53

Organization APIs Enhancement

In this release, we've introduced a significant enhancement - the Organization APIs.
You can now harness the power of these APIs to manage their organizations efficiently, handle member listings, removals, and even update branding seamlessly.

  • Manage Organizations: With the Organization APIs, clients gain full control over their organization's settings and configurations.
  • List and Remove Members: Easily access and manipulate the list of organization members, allowing for efficient membership management.
  • Branding Updates: Organizations can now update their branding effortlessly using these APIs, ensuring consistent and up-to-date branding across the board.
  • Member Invitations: For inviting new members, we've introduced a separate endpoint POST /invites, simplifying the process of expanding your organization.

Screenshot_2023-10-27_at_15 46 40

PR Details:

Notable changes

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.20.0...v0.21.0

novu - v0.20.0

Published by LetItRock 12 months ago

What’s new in Novu 0.20?

TL;DR: All you need to know about the latest Novu 0.20.0 release. Global User Preferences, Integrations conditions, Digest and delay filters and more!

0.20 Release Updates

We're thrilled to announce the newest features in our most recent release. Let's get started and explore what's waiting for you!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jxs3nc6jp6abbjvis8i.gif

Global Channel Preferences for Subscribers API

It's now possible to set subscriber preferences globally for either a particular channel or all channels via API.

I'm really stoked about this because before now it was only available per workflow, /:subscriberId/preferences/:templateId

With these API URLs, you can fetch and update global subscriber preferences.

  • PATCH /subscribers/:subscriberid/preference - Update a subscriber preference globally.
  • GET /subscribers/:subscriberid/preferences/global - Fetch a subscriber preference globally.

Note: These methods are also available in the NodeJS SDK. They will be available in other language SDKs very soon.

If you're using the Headless service and Notification Center Widgets, you can set or fetch via the following APIs:

  • widgets/preferences - PATCH : Update subscriber preferences globally
{

    "enabled": true,
    "preferences": [
        {
            "type": "in_app",
            "enabled": true
        },
        {
            "type": "email",
            "enabled": false
        }
    ]
}

  • widgets/preferences/global - GET : Fetch subscriber preferences globally.

The exposed methods from the widgets are:

  • fetchUserGlobalPrereferences
  • updateUserGlobalPreferences

Note: If a workflow is marked as critical, the subscriber global preferences will be ignored, and notifications will be sent.

Filters Usage in Digest and Delay Nodes

Users can now add filters to the digest and delay nodes inside the workflow editor to dynamically control if a digest should be used or not.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1l0dao60xd7eixps56r.png

Digest Node: Adding filter

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8epc6ew33s9accvtmjzm.png

Delay Node: Adding filter

Improved Error Messages In The Workflow Editor

We have improved the error icons and states for each node in the workflow, when no provider is connected or not configured.

SMS & Email Custom Data Overrides

We now support adding custom data in email overrides as shown below:

import { Novu } from '@novu/node';

const novu = new Novu('<NOVU_API_KEY>');

await novu.subscribers.trigger("workflowIdentifier", {
  to: "subscriberId",
  payload: {
    customKey: "customValue",
  },
  overrides: {
    email: {
      from: "[email protected]",
      // customData will work only for sendgrid
      customData: {
        "customKey": "customValue"
      }
    }
  }
}

Email Custom Data overrides

Note: This works for Sendgrid only at the moment.

You can override sms values via the code below.

...
...
await novu.subscribers.trigger("workflowIdentifier", {
  to: "subscriberId",
  payload: {
    customKey: "customValue",
  },
  overrides: {
    sms: {
      to: "<insert-phone-number>",
      content: "<insert-content>"
    }
  }
}

SMS Overrides

Enabling The Addition of Conditions to Integrations

Users can now create conditions for the channel integrations to be executed for specific tenants only.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c4j4ioad8tjqljy3qzqx.png

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o187yxcsmtgfgq7a7gyp.png

In the image above, you can add the condition (to an integration) to state that the integration should be used if the tenant identifier used in trigger matches the tenant identifier set here.

Note: The integrations are the provider instances on the Integration store dashboard.

When Novu runs a trigger code with a tenant Identifier attached to it like so:

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

await novu.trigger('<WORKFLOW_TRIGGER_ID>',
  {
    to: {
      subscriberId: '<UNIQUE_SUBSCRIBER_IDENTIFIER>',
      email: '[email protected]',
    },
   tenant: "tenantIdentifier"
  }
);

..Novu runs checks on the integrations in the Integration store to determine which integration matches to be used to send the notification based on any condition that has been set. If nothing was set, it defaults to the primary provider set for the channel used in the workflow.

Mailtrap Email Provider Integration

Now, you can use the Mailtrap Email provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fb9pmn5xu3ep6f8lcpq3.png

Clicksend SMS Provider Integration

Now, you can use the Clicksend SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1f5154c9alnn4aqollxl.png

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.19.0...v0.20.0

novu - v0.19.0

Published by scopsy about 1 year ago

What’s new in Novu 0.19?

TL;DR: All you need to know about the latest Novu 0.19.0 release. Multi-tenancy management, bulk subscriber creation, override layouts and more!

0.19 Release Updates

We're eager to showcase the latest features in our most recent release. Let's dive in and discover what's in store for you!

giphy (2) (1)

Multi-tenancy Management

We are stoked to let you know that you can now manage tenants from the UI (Novu’s dashboard) and the API.

tenants-management (1)

Self-hosted users need to add and turn on the IS_MULTI_TENANCY_ENABLED env flag to be able to manage tenants in their Novu installation.

Tenants Usage in Workflows as Variables

With tenants feature now generally available, there are different ways you’ll be able to use it in your app depending on your use case.

One of those ways is using it as variables in your workflows and triggers. When triggering a notification using the events trigger endpoint, you can pass in a tenant property as a parameter like so:

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

await novu.trigger('<WORKFLOW_TRIGGER_ID>',
  {
    to: {
      subscriberId: '<UNIQUE_SUBSCRIBER_IDENTIFIER>',
      email: '[email protected]',
      firstName: 'John',
      lastName: 'Doe',
    },
    payload: {
      name: "Hello World",
      organization: {
        logo: 'https://happycorp.com/logo.png',
      },
    },
	 actor: "actorId"
   tenant: "tenantIdentifier"
  }
);

passing in tenant property when triggering a notification

The tenant can also be accessed in a workflow template like so:

{{ tenant.data.logo }}

accessing tenant properties in a workflow

Bulk Subscriber Creation

This release also ships the wildly requested “bulk subscriber creation.” Starting v0.19, you’ll be able to create subscribers in bulk (up to 500 at once) using an API endpoint.

Note: The bulk API is limited to 500 subscribers per request.

await novu.subscribers.bulkCreate([
      {
        subscriberId: 'test-subscriber-1',
        email: '[email protected]',
        firstName: 'subscriber-1',
        lastName: 'test-1',
      },
      {
        subscriberId: 'test-subscriber-2',
        email: '[email protected]',
        firstName: 'subscriber-2',
        lastName: 'test-2',
      },
      {
        subscriberId: 'test-subscriber-3',
      },
    ]);

Addition of Tags in Workflow Settings

We have added the ability to use tags in the workflow settings screen.

This change allows use cases where you need to group multiple workflows under the same tag, and then use it to filter subscriber preferences for example.

taggs-workflow-settings (1)

Allow Override layout On Trigger

To override your assigned layout during a trigger event use the layoutIdentifier property, the layout specified will be used for all emails in the context of that trigger event.

import { Novu } from '@novu/node';

const novu = new Novu('<NOVU_API_KEY>');

novu.trigger('workflow-identifier', {
  to: {
    subscriberId: '...',
  },
  payload: {
    attachments: [
      {
        file: fs.readFileSync(__dirname + '/data/test.jpeg'),
        name: 'test.jpeg',
        mime: 'image/jpg',
      },
    ],
  },
  overrides: {
    layoutIdentifier: 'your-layout-identifier',
  },
});

Show Primary Providers on Workflow Nodes

Now you can see the primary provider of a channel in the nodes that show on the workflow editor. This gives you more context and better identification without extra clicks!

Screenshot 2023-09-11 at 16 11 03

Enhanced Workflow Nodes Misconfiguration Error

Nodes and workflows will now display mis-configured workflows on the dashboard like so:

Screenshot 2023-09-11 at 16 20 25

All changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.18.0...v0.19.0

novu - v0.18.0

Published by scopsy about 1 year ago

What’s new in Novu 0.18?

TL;DR: All you need to know about the latest Novu 0.18.0 release. General Layout design, multi-provider configuration and more!

0.18 Release Updates

We're excited to unveil the freshest developments in our latest release. Let's plunge right in and uncover what awaits you!

General Layout Design

We have refreshed the layout design to accommodate and provide a foundation for a lot of upcoming future updates regarding the navigation stack and general usability of the system.

Multi-provider Configuration

In the last update, I mentioned that Novu now supports multiple providers.

Now you can specify who should be the primary provider when you have multiple providers for a particular channel for a given environment. As mentioned in the last release, you can programmatically call a provider identifier during a trigger event.

await novu.trigger("<workflow_trigger_id>", {
  to: {...},
  payload: {...},
  overrides: {
    email: { integrationIdentifier: 'the identifier"} ,
    sms: { integrationIdentifier: 'the identifier"}
  }
});

Migration for Self-hosted Novu Users - BREAKING CHANGE

A migration needs to be run prior to the new version update:

cd apps/api
npm run migration:primary-provider

# .env file in apps/api/src/.env should have a MONGO_URL pointing to your deployment

Plunk Email Provider Integration

Now, you can use the Plunk Email provider on Novu.

Screenshot 2023-08-24 at 11 28 47

All changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.17.2...v0.18.0

novu - v0.17.1 - Release

Published by scopsy about 1 year ago

What’s new in Novu 0.17.1?

TL;DR: All you need to know about the latest Novu 0.17.1 release. Multi-provider Integration support, Multi-tenancy support, cookbook, notification center updates and more!

0.17.1 Release Updates

We're excited to unveil the freshest developments in our latest release. Let's plunge right in and uncover what awaits you!
image

Multi-provider Integration Support (BETA)

Now you can connect multiple providers per channel and make them active. This feature is currently in beta.

We also redesigned the Integrations store page to make it more intuitive in selecting & enabling channel providers.

image

With this feature, you can now do the following:

Specify the provider you want when triggering notifications. Add the integrationIdentifier to the overrides object for the specific channel.

await novu.trigger("<workflow_trigger_id>", {
to: {...},
payload: {...},
overrides: {
              email: { integrationIdentifier: 'the identifier"} ,
                sms: { integrationIdentifier: 'the identifier"}
	}

If you're self-hosting Novu, you'll need to pass the env flag, IS_MULTI_PROVIDER_CONFIGURATION_ENABLED to all services.

Note: In the nearest future, you will be allowed to select a provider based on a tenant and other execution conditions.

Multi-tenancy Support (BETA)

We've been hard at work building the base flow, API and processes to support multi-tenancy. This feature is currently in beta testing. It will become generally available in the next release.

Delete Provider Credentials API

We have added support to delete a provider credentials via an API endpoint

PR here for reference

Remove All Messages In Notification Center Widget & Headless Service

The Notification Center widget allows users to see all notification messages. Before now, you can only delete messages one after the other.

There are a few notable updates:

  • We have added a useRemoveAllNotification hook in the React Notification Center widget. You can remove all notifications from a feed or entirely!
  • We have also added a removeAllNotifications method to the headless service.

Additional Handlebar helpers

We have added a unique and groupBy handlebar helpers.

  • unique: To remove duplicates in array iteration
{{#each (unique names "name")}}
--<b>{{this}}</b>---
{{/each}}

  • groupBy: To group array values by property
{{#each (groupBy names "name")}}
 <h1>{{key}}<h1>
 {{#each items}}
   {{age}}-
 {{/each}}
{{/each}}

Notification Feed Page Size Changes (BREAKING CHANGE)

By default, the notification feed page will return 100 notifications and return a hasMore field if more than 100 notifications exist.

Activity Feed & Subscriber API Changes (BREAKING CHANGE)

The Activity Feed & Subscriber API will no longer return totalCount. Due to performance optimizations, they will return a hasMore boolean flag in cases where there are more results to fetch.

listenNotificationReceive in Headless Service.

We have added a new function, listenNotificationRecieve, to listen to when a new notification comes in!

It can be used to retrieve a new notification in real-time and trigger UI changes.

headlessService.listenNotificationReceive({
  listener: (message: IMessage) => {
    console.log(JSON.stringify(message));
  },
});

Sendchamp SMS Provider Integration

Now, you can use the Sendchamp SMS provider on Novu.

image

Update on Workers

Workers will now wait for health check to pass before accepting jobs to process, and will perform a graceful shutdown on a terminate signal received by the service manager.

Docs, Cookbook & Guides

We currently offer [quickstart guides](https://docs.novu.co/overview/quickstart/general-quickstart) for a wide range of major languages and technologies. Feel free to explore these guides to swiftly begin your projects in your preferred programming language.

We have added a [Cookbook section](https://docs.novu.co/cookbook/introduction) to our docs to provide recipes on common tasks.

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.16.4...v0.17.1

You can find the full changelog on [GitHub](https://github.com/novuhq/novu/compare/v0.16.4...v0.17.1).

novu - v0.16.4

Published by scopsy over 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.16.3...v0.16.4

novu - v0.16.3 - Patch Release

Published by scopsy over 1 year ago

What's Changed

Full Changelog: https://github.com/novuhq/novu/compare/v0.16.1...v0.16.3

novu - v0.16.1

Published by scopsy over 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.16.0...v0.16.1

novu - v0.16.0 - Template Store and integration store improvements

Published by scopsy over 1 year ago

What’s new in Novu 0.16.0?

TL;DR: All you need to know about the latest Novu 0.16.0 release. Template Store, Demo SMS Provider, Notification Templates Renaming and more!

0.16.0 Release Updates

We are thrilled to share the latest updates on our most recent release. Let's dive in headfirst and discover what's in store for you!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tdzueooohncgk6czgq0s.gif

Template Store

The Novu dashboard now has a new embedded template store with ready-to-use notification workflows for everyone.

You can simply choose a sample notification workflow from the template store, modify it and be ready to trigger a notification in record time!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vxewbhmfs43dmt3matap.gif

Demo SMS Provider

We now have a built-in SMS provider for our cloud users to test SMS notifications quickly without setting up and providing credentials for external SMS providers. It's similar to what's available for Email.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs1f158idnbksa0abyi4.png

In-App Notification Center In Integration Store

The Integration Store houses the providers for all the channels: Email, SMS, Chat and Push. The In-App channel is now part of the integration store.

The configuration has been moved to the integration store now from the settings page as it was previously.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifqdhpa3zbsdh7tho3b1.png

BREAKING CHANGE (Novu Self-hosted Only)

Prior to upgrading to 0.16.0, a migration script needs to be run. This migration script will create a notification center integration and activate it to allow the delivery of in app messages. If you are not using the notification center, there is no need to run the migration scripts.

To run the migrations, follow the next steps:

Clone the novu repository, and install the dependencies (npm run setup:project)

Update the MONGO_URL to your production environment in apps/api/src/.env file, and run the npm run migration:in-app command from the apps/api folder.

After running the migration script, the version can be updated.

Renaming Notification Templates To Workflows

Notification templates as we have all known it are now called Workflows. It was renamed for more consistent terminology across the entire system.

New API endpoints will be introduced in v0.17.0 and current endpoints of notification templates will be marked as deprecated.

https://res.cloudinary.com/dxc6bnman/image/upload/v1687321553/workflow_ia3p0n.png

The isDefined Filter

This new isDefined filter checks the presence of a variable. Essentially, it checks if a variable is available or not!

It works for all channels. You can check if a payload, subscriber or webhook variable is defined.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvfu8vit9bnh7aqqfwyi.png

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/232hx77zgn3839rd2jqi.png

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fdzi55mjyzy2d3vd6gq.png

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.15.0...v0.16.0

novu - v0.15.0 - Scheduled Digest and Slack OAuth for webhook urls

Published by scopsy over 1 year ago

What’s new in Novu 0.15.0?

TL;DR: All you need to know about the latest Novu 0.15.0 release. Scheduled Digest, In-App Onboarding playground, Slack Webhook URL managed flow and more!

0.15.0 Release Updates

We're excited to unveil fresh updates about our most recent release. So let's dive right in!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uyvgje77r0sbm9f9l8yc.gif

Scheduled Digest

Now you can schedule digest at specific intervals according to your preference. This feature eradicates the need to create cron jobs to suit your use case.

From the Novu dashboard, you can specify the times when a digest will be sent - Every two days, Daily, Weekly, etc. The Digest engine aggregates events before a set time and fires them when that time is reached.

Typical Use Case

A digest is scheduled for Tuesday and Thursday at 7:07 AM weekly. A notification event is triggered a couple of times to a subscriber every day.

The digest engine aggregates all events that occur before Tuesday. On Tuesday at 7:07am, it fires an event comprising all the aggregated events. Similarly, all events occurring between Tuesday and Thursday are aggregated, and an event is fired on Thursday at 7:07am. This cycle continues.

Note: For now, the time is UTC-based. We plan to make it user-timezone aware soon!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ds4v0jiiejlw3xbyms93.gif

In-App Onboarding Playground

We have integrated a new playground in our onboarding flow to test and explore In-App notifications. So take it for a spin!

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pug70auggz9vussml1xh.gif

Slack Webhook URL Managed Flow

Until now, developers had to manually spin up and deploy an https server with an endpoint to listen for redirect requests. They had to follow numerous steps to get Slack webhook Url generation right and working seamlessly for subscribers.

Now, Novu manages the OAuth flow for you. No more spinning of servers! All you need to do is:

  • Add https://api.novu.co/v1/subscribers/ to the Redirect URL in OAuth & Permissions on your Slack Developer Dashboard.
  • Add the Add to Slack button or the shareable URL to your application to request access permission (scope: incoming-webhook). More information here

Africa's Talking SMS Provider Integration

Now, you can use the Africa's talking SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jrxgh7mvseb0rbiopg7f.png

OneSignal Push Provider Integration

Now, you can use the OneSignal Push provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8bordqacaw8uc6mg8qq.png

Push Webhook

Now you can add a webhook URL to trigger push notifications on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3osipx08eq7tzo8jokn.png

There is work ongoing for Email Webhook Provider. You can follow the commits here

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.14.0...v0.15.0

novu - v0.14.0 - Performance optimization and redesigned workflow editor

Published by scopsy over 1 year ago

What’s new in Novu 0.14.0?

TL;DR: All you need to know about the latest Novu 0.14.0 release. Performance optimization, Workflow UI Editor, Data expiration, Headless Notification Center and more!

0.14.0 Release Updates

We're stoked to share new updates on our latest release. Let's dig in!

Performance Optimization

We have worked extremely hard to improve the core performance of Novu. I'll highlight crucial things to note and be aware of:

  1. Improved Caching.
  2. Optimized Indexes. Indexes are defined on each schema file at the bottom.

New Worker Service

Breaking Change: A new service is required to run with Novu called @novu/worker , extracted from the @novu/api monolith to ensure that queues and jobs are processed faster. Novu Cloud users do not need to be concerned about this change.

Novu self-hosted users can now scale the worker service independently as much as the hardware their hosted domain runs on.

For Novu self-hosted users running on Docker, it is now necessary to pull in the new worker service image in order for Novu to work properly. This is already taken care of here & here. When you run docker-compose up, the worker image will be automatically pulled in. No extra steps are needed.

Data Expiration

The Jobs and Messages collection now has a TTL and will be removed from the database when it expires. For Novu cloud users, notifications and activity feed data will be saved for 1 month, while in-app messages will be saved for 6 months. After that time, the records will be archived.

For Novu self-hosted users, the same time frame applies before records will be deleted. However, they can disable the TTL setting by adding the environment variable DISABLE_TTL=true.

Affected schemes:

  • Notification (for 1 month)
  • Job (for 1 month)
  • Message (for in-app messages - 6 months, for all other messages - 1 month)
  • Execution Details (for 1 month)

New Workflow UI Editor

We're constantly iterating on the UI editor to reduce the number of clicks needed to perform specific actions, improve the UX, and provide a great experience in setting up notification workflows.

In this release, we simplified the workflow editor UI like so:

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/msm9mf9i3thhvtb8i4yg.gif

Headless Notification Center

You might have heard the phrase: “Bring Your Own...” or something along those lines.

We encourage you to bring your UI with the newly released framework-agnostic headless version of Novu's notification center.

This lightweight library allows you to incorporate our notification system into any framework or vanilla JavaScript app without UI constraints. Install and call the API methods needed to access the notification system.

Install:

npm install @novu/headless

Use:

import { HeadlessService } from '@novu/headless';

You can now fetch all In-App notifications shown like so:

const headlessService = new HeadlessService({
  applicationIdentifier: 'APP_ID_FROM_ADMIN_PANEL',
  subscriberId: 'USER_ID',
  backendUrl: 'YOUR_BACKEND_URL',
  socketUrl: 'YOUR_SOCKET_URL',
});

headlessService.initializeSession({
  listener: (session) => {
    console.log(session);
  },
  onSuccess: (session) => {
    console.log(session);
  },
  onError: (error) => {
    console.error(error);
  },
});

headlessService.fetchNotifications({
  listener: ({ data, error, isError, isFetching, isLoading, status }) => {
    console.log({ data, error, isError, isFetching, isLoading, status });
  },
  onSuccess: (response: IPaginatedResponse<IMessage>) => {
    console.log({response.data, response.page, response.totalCount, response.pageSize});
  },
  page: 1, // page number to be fetched
});

Maqsam SMS Provider Integration

Now, you can use the Maqsam SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yj8mleheehqi0rjm97q0.png

Termii SMS Provider Integration

Now, you can use the Termii SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ctsjas4ajli9o14n48i7.png

SMSCentral SMS Provider Integration

Now, you can use the SMSCentral SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gpub5ixz2rspw0au1a5j.png

Sparkpost SMS Provider Integration

Now, you can use the Sparkpost SMS provider on Novu.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p52oukji6lzi9aww2p6a.png

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.13.0...v0.14.0

novu - v0.13.0

Published by scopsy over 1 year ago

What’s new in Novu 0.13.0?

TL;DR: All you need to know about the latest Novu 0.13.0 release. Better onboarding experience, Digest Workflow Playground, Seen/Read Step Filter, SMS providers integration and more!

0.13.0 Release Updates

New Onboarding Page

We shipped a better onboarding experience to make it easier for users to set up multichannel notification workflows.

image

Sign up and set up your app notifications system with ease.

We'll keep iterating on our onboarding process to ensure we provide a best-in-class onboarding experience for new users.

Digest Workflow Playground

We built a new digest playground that allows anyone to test, and play around with the digest feature.

The digest engine collects multiple trigger events, aggregates them into a single message and delivers it to the subscriber.

https://res.cloudinary.com/unicodeveloper/video/upload/v1679931446/Digest_Workflow_Playground___Novu_Manage_Platform_-_27_March_2023_feoctu.gif

Digest Playground

New Node Seen/Read Step Filter

We've added a new seen/read filter. This filter gives the flexibility of executing successive notifications based on the status of previous notifications. It currently works for in-app and email notifications.

Typical Use Case:

You have a set of customers that you need to send a 2-step email to them. However, they should only get the second email if they have read/seen the first email.

With the new seen/read filter, you can do the following in a notification workflow:

  • Set the first email step.
  • Set a delay.
  • Set the second email step.
  • Create a filter on the second email step that indicates if the previous step needs to be seen/read before it should be executed.

https://res.cloudinary.com/unicodeveloper/video/upload/v1679934867/Templates_-_Filter_dd8jjf.mp4

Setting up Seen/Read Filter

Note: For this to work with emails, the webhook url needs to be set up for the active email provider you're using on Novu. It's very essential for the filter to work. No extra set up is needed for in-app notifications.

PR: https://github.com/novuhq/novu/pull/2922

Create Topics On The Fly when adding Subscribers

Till now, you could not add subscribers to a non-existent topic. You will be met with an error!

We have now reduced friction for users by allowing them to create topics and add subscribers on the fly in one step. The system checks if the topic does not exist, and proceeds to create the topic implicitly.

Kannel SMS Provider Integration

Now, you can use the Kannel SMS Provider on Novu.

https://res.cloudinary.com/unicodeveloper/image/upload/v1679935944/Screenshot_2023-03-27_at_17.51.46_kzwse7.png

PR: https://github.com/novuhq/novu/pull/2700

46elks SMS Provider Integration

Now, you can use the 46elks SMS provider on Novu.

https://res.cloudinary.com/unicodeveloper/image/upload/v1679938643/Screenshot_2023-03-27_at_18.36.21_cninwo.png

PR: https://github.com/novuhq/novu/pull/2973

Mattermost SMS Provider Integration

Mattermost is an open-source Slack alternative. One integrated platform for all of your team messaging, collaborative workflows and project management needs. Now, you can use the Mattermost provider on Novu.

https://res.cloudinary.com/unicodeveloper/image/upload/v1679939274/Screenshot_2023-03-27_at_18.41.41_zki3wn.png

PR: https://github.com/novuhq/novu/pull/2935

Changes & Bug Fixes:

All Changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.12.0...v0.13.0

novu - v0.12.0 - Polishing Season 💅

Published by scopsy over 1 year ago

What’s new in Novu 0.12.0?

TL;DR: All you need to know about the latest Novu 0.12.0 release. New Onboarding experience, Actor Filtering, Custom subscriber properties, Email overrides, bug fixes, UI polishing and more!

0.12.0 Polishing Release Updates

This release contains exciting updates for existing and new users of Novu. Fun fact, more than 170 polishing issues were resolved in this release. Let's dig in!

New Onboarding Experience for Notification Center

We shipped a new onboarding experience for adding the notification center to existing apps. Check it out below:

https://res.cloudinary.com/unicodeveloper/video/upload/v1677519923/Novu_Manage_Platform_-_27_February_2023_tljibe.gif

Sign up and set up your app with the notification center swiftly!

Actor Filtering for Topics

This feature is great for users of topic-based notification. By default, it excludes an actor responsible for the action of a triggered notification on a topic event.

Typical Use Case:

The comment section of a post. Jane, John, and Doe made comments on a post. When Prosper makes a comment on the post, these users (Jane, John and Doe) should get a notification about the recent comment, but Prosper should not receive a notification on his recently created comment.

const topicKey = 'posts:comment:12345';

await novu.trigger('template-name', {
  to: [{ type: 'Topic', topicKey: topicKey }],
  payload: {},
  actor: { subscriberId: '<SUBSCRIBER_ID_OF_ACTOR>' },
});

Node SDK Usage: Actor filtering

PR: https://github.com/novuhq/novu/pull/2691

Support for cc, bcc, and multiple to for E-mail

Now, you can use the overrides object to allow for multiple to, bcc, and cc when triggering the email channel.


await novu.trigger('template-name', {
   to: 'subscriberId',
   payload: {...data},
   overrides: {
     email: {
         to: ['[email protected]'],
         bcc: ['[email protected]'],
         cc: ['[email protected]']
     }
   }
});

Node SDK Usage: E-mail support for cc,bcc and multiple to

The to property will be merged with the subscriber recipient email to avoid duplicates.

Also text can be passed as an override that will send the text version of the email along side the HTML for old clients.

PR: https://github.com/novuhq/novu/pull/2763

Use Custom Sender Name on Template

Before now, the sender name was defined only on the provider integration. So, all the emails triggered had the same sender name.

https://res.cloudinary.com/unicodeveloper/image/upload/v1677512479/Screenshot_2023-02-27_at_15.40.13_fhith6.png

Before: Integration store - Provider Integration

Now, you can define a custom sender from name on the template level. If empty, Novu will fallback to the sender name defined on the provider integration.

https://res.cloudinary.com/unicodeveloper/image/upload/v1677512609/sendername_fhmakz.png

Now: Sender Name from Template

PR: https://github.com/novuhq/novu/pull/2769

Typical Use Case

Each template can serve a different purpose, depending on the type of email content. Specifying different sender names for different templates makes the email content different.

PR: https://github.com/novuhq/novu/pull/2769

Bulk Trigger Endpoint

Previously, the only way to trigger events as many times as possible was to loop the trigger call.

await novu.trigger('<template-name>', {
  to: [
    {
      subscriberId: '<UNIQUE_IDENTIFIER>',
      email: '[email protected]',
      firstName: 'John',
      lastName: 'Doe',
    },
  ],
  payload: {
    name: 'Hello World',
    organization: {
      logo: '<https://happycorp.com/logo.png>',
    },
  },
});

Node SDK Usage: Trigger event

Now, Novu has a new bulk trigger endpoint, /events/trigger/bulk.

This endpoint allows simply passing in an array of events to the like so:

await novu.bulkTrigger([
	{ eventId: "my-event", to: "subscriber-id", payload: myPayload },
	{ eventId: "my-event-2", to: "subscriber-id-2", payload: myPayload2 }
]);

Node SDK Usage: Bulk Trigger events

PR: https://github.com/novuhq/novu/pull/2704

Custom Subscriber Properties

Now, custom subscriber properties can be added using the data key via the API or SDK like so:

Typical Use Case

You can leverage using the data key if you need to add some metadata (e.g date of birth, gender) to the subscriber. The data added is also available in templates.

API reference: The property can be set directly via the create & update subscriber API.

...
await novu.subscribers.identify(user.id, {
  email: user.email,
  firstName: user.firstName,
  lastName: user.lastName,
  phone: user.phone,
  avatar: user.profile_avatar
  data: {
    dob: user.dob
    gender: user.gender
  }
});

Node SDK usage - Create Subscriber

PR: https://github.com/novuhq/novu/pull/2707

Resend Email Provider Integration

Now, you can use the Resend email provider on Novu.

https://res.cloudinary.com/unicodeveloper/image/upload/v1677519100/resend_connect_gkp3ck.png

https://res.cloudinary.com/unicodeveloper/image/upload/v1677572334/Screenshot_2023-02-28_at_08.17.54_vrgfei.png

PR: https://github.com/novuhq/novu/pull/2802

Changes & Bug Fixes:

All changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.11.0...v0.12.0

novu - v0.11.0 - Layouts, Reply Callbacks, Is Online Filters and more...

Published by scopsy over 1 year ago

In this release, we are very excited to introduce a lot of new improvements to some of our core features as well as completely new functionalities to help with creating better notification experiences for your users.

Let's deep dive in the new things available:

E-mail Layouts

You can now create and manage email layouts for notification templates. This feature makes it easier for you to customize the look and feel of your e-mail notifications and ensure that they are consistent across templates. Once a layout is created, you can then attach particular notifications to that layout. All the regular variables that are available on the template level will also be available when compiling the layout content.

To read more about layouts, visit our documentation page: https://docs.novu.co/platform/layouts

Is Online Filters

Really excited to share that from now you can send or not send notifications depending on the online status of the current subscriber in your system. When using the Novu notification center, we will track the current active session of the subscriber and allow filtering by its current status. You can filter by currently online, or online in the last X minutes.

Read more about it here.

Reply Callbacks with Inbound E-mail Parsing (Cloud Only)

Subscribers can now reply to e-mails you send them, similar to the behavior you might see when replying to a GitHub issue comment e-mail and your reply e-mail automagically appears as a GitHub comment.

You can enable Reply Callbacks for a particular notification template. Novu will modify the reply to the field to add a unique identifier when a subscriber replies to this e-mail. After parsing novu will call you the webhook URL defined in the template containing information about the particular notification and the e-mail contents for you to perform extra business logic for it.

Novu Starter E-mail Provider (Cloud only)

For new accounts evaluating Novu you could now have up to 300 free e-mails using the built novu provider to evaluate novu without the need to connect your SendGrid account.

Breaking changes

@novu/notification-center changes

NovuProvider:
Added the new prop initialFetchingStrategy which allows deciding about fetching strategy. By default feed notifications and user preferences are not fetched, this behavior is particularly implemented for the PopoverNotificationCenter as we don’t want to make the request for the feed before the notification center is opened, it might not be opened at all. But, sometimes it might be useful to fetch them during the hook mounting, ex. when you build custom UI components, ex. notifications list page, then you can use this prop to define that you want to fetch “right away”. Also, you can change the fetching strategy manually using the useNovuContext and setFetchingStrategy functions.

Hooks:

Changed the return interface of the useNotifications hook:

  • updateAction prop moved to a separate hook useUpdateAction
  • markAsRead renamed to markNotificationAsRead, it takes now only the messageId as the argument
  • markAllAsRead renamed to markAllNotificationsAsRead, it doesn’t require args to pass
  • markAsSeen renamed to markNotificationAsSeen, it takes now only the messageId as the argument
  • fetching renamed to isFetching
  • removed onWidgetClose and onTabChange as these props have nothing to do with this hook and they were only needed for internal use
  • added props: storeId, stores, unseenCount, isLoading, isFetchingNextPage, setStore, markAllNotificationsAsSeen

Split useSubscriberPreference into two separate hooks: useFetchUserPreferences and useUpdateUserPreferences

New hooks: useUpdateUserPreferences, useUpdateAction, useFetchNotifications, useFetchOrganization, useFeedUnseenCount, useMarkNotificationsAs

Hooks removed: useAuth, useApi, useScreens, useUnseenController - used for internal purpose

Hooks exposed: useSocket, useUnseenCount, useNotifications, useNovuContext, useNovuTheme, useNotificationCenter, useTranslations, useUpdateUserPreferences, useUpdateAction, useFetchNotifications, useFetchOrganization, useFeedUnseenCount, useFetchUserPreferences, useMarkNotificationsAs

Other notable changes

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.10.3...v0.11.0

novu - v0.10.1 - Webhook filters

Published by scopsy almost 2 years ago

This release includes support for webhook filters of steps and also various small improvements and bug fixes.

Webhook Filters

The webhook filter support for steps allows users to filter a particular step execution based on the response received from the webhook. This can be useful in scenarios where it is necessary to take different actions based on the response from the webhook. With this feature, users have greater control over the execution of their workflows and can customize them to meet their specific needs.

Read more about step filters here.

What else has changed

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.10.0...v0.10.1

novu - v0.10.0 Release - Topics and new e-mail editor

Published by scopsy almost 2 years ago

We are excited to announce the latest release of Novu, which includes several new and improved features. One of the requested features has been the addition of Topics, which allows users to easily send notifications to groups for subscribers using a single identifier. We have also added avatar support, so notifications in the notification center can now include subscriber avatars. Another significant addition is the new e-mail editor and preview in the web UI. In addition to these new features, we have also made various performance improvements and bug fixes to enhance the overall experience. Let’s dive deeper:

Topics

We are excited to announce Topics, which allows you to create custom groups of subscribers and send targeted notifications to those groups. Using our API, you can easily create new topics and assign subscribers to them. Once a topic has been created, it is now possible to send notifications to that topic using the unique topic key.

Let’s see how it works in action.

First, we will need to create a topic:

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

const result = await novu.topics.create({
  key: 'posts:comments:123456',
  name: 'Post comments',
});

Assign subscriber to it:

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

const topicKey = 'posts:comments:123456';

const response = await novu.topics.addSubscribers(topicKey, {
  subscribers: ['subscriber-id-1', 'subscriber-id-2', ...],
});

And then trigger a notification for this topic:

const topicKey = 'posts:comments:123456';

await novu.trigger('<REPLACE_WITH_EVENT_NAME_FROM_ADMIN_PANEL>', {
  to: [{ type: TriggerRecipientsTypeEnum.TOPIC, topicKey: topicKey }],
  payload: {},
});

Read more about Topics on our documentation page.

New e-mail editor and preview

We are also excited to announce the release of a new e-mail editor that makes it easier than ever to customize and send e-mails. The editor includes a list of available variables that you can insert into the e-mail templates and a preview feature that allows seeing how the final e-mail will look. We have also added autocomplete support for variables to make it easier to use them in your e-mails. Another helpful feature is the ability to send a test e-mail to your own account, so you can see exactly how the e-mail will look and make any necessary adjustments before sending it out to your subscribers.

CleanShot_2022-12-27_at_10 04 46

Notification Center as a Vue, Angular, and Web Component (Beta)

We have converted our notification center component to be available as a vue, angular, and web component. This will allow to easily integrate the notification center into their projects regardless of their preferred front-end framework. The notification center provides a central location for users to view and manage their notifications, and we believe that making it available in multiple formats will make it even more accessible.

Let’s explore the usage of the Vue component:

import { createApp } from 'vue';
import NotificationCenterPlugin from '@novu/notification-center-vue';
import '@novu/notification-center-vue/dist/style.css';
import App from './App.vue';

createApp(App).use(NotificationCenterPlugin).mount('#app');

And then use it as a component:

<script lang="ts">
  export default {
    data() {
      return {
        applicationIdentifier: import.meta.env.VITE_NOVU_APP_IDENTIFIER,
        subscriberId: import.meta.env.VITE_NOVU_SUBSCRIBER_ID,
      };
    },
    methods: {
      sessionLoaded() {
        console.log('Notification Center Session Loaded!');
      },
    },
  };
</script>

<template>
  <NotificationCenterComponent
    :subscriberId="subscriberId"
    :applicationIdentifier="applicationIdentifier"
    :sessionLoaded="sessionLoaded"
  />
</template>

Read more about the component information in our documentation.

Are you experienced in one of the new components? Help us improve the API and developer experience by submitting an issue on GitHub.

Actors and Avatars

Now you can add an actor when triggering a notification and display their avatar on the notification feed. This allows a recipient of the notification better understand the context of a particular notification and who sent it. To use this feature, users simply need to include the actor's avatar URL when creating a notification.

CleanShot_2022-12-27_at_10 27 39

import { Novu } from '@novu/node';

export const novu = new Novu('<REPLACE_WITH_API_KEY_FROM_ADMIN_PANEL>');

await novu.trigger('<REPLACE_WITH_EVENT_NAME_FROM_ADMIN_PANEL>',
  {
    to: {
      subscriberId: '<USER_IDENTIFIER>',
      email: '[email protected]'
    },
		actor: {
      subscriberId: '<ACTION_PERFORMING USER>',
			avatar: 'http://path-to-avatar.com/profile.png'
    },
    payload: {
      customVariables: 'Hello'
    }
  }
);

Request caching

We have also introduced an optional cache layer to cache frequent requests for the notification feed, you can optionally enable cache by specifying the following environment variable when running the novu API

  • REDIS_CACHE_HOST - The path for your Redis instance
  • REDIS_CACHE_PORT - The port of the Redis instance defaults to the default port.

Webhook support

You can now connect webhooks from supported delivery providers to get better visibility on bounces, email opens, and more… Click on the integration, if supported a webhook URL will appear, copy it, and paste it on your provider delivery dashboard.

The webhook information will appear when inspecting and item in the activity feed. Read more about it on our documentation.

Notable features

  • Activity feed list can now be filtered using transactiondId
  • Upgraded Socket.IO to version 4
  • Security fixes and best practices for the API
  • New Info Bip SMS Provider
  • New Burst SMS Provider
  • New Sparkpost SMS Provider
  • New Outlook365 Provider

Other changes in this release

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.9.2...v0.10.0

novu - v0.9.0 - Hacktoberfest Release

Published by scopsy almost 2 years ago

Excited to announce our biggest release so far at Novu. This release is the work of our team and over 100 contributors from all around the world. Welcome to version 0.9.0. Let's explore what's new!

Notification Observability

We have overhauled how we store and display the execution of the notification workflow. This change allows much more visibility on the errors or successful execution happening. Here are some of the highlights of the activity feed:

  • Each step workflow can be inspected
  • Execution details for each step are displayed with information and timestamps
  • Inspect raw provider error response
  • Understand delayed and digested events

We hope that this release will provide a ground for improvement and iteration to later support webhook information, etc... Looking forward to hearing your thoughts!

Seen and Read for notification center - Breaking Change

Since our initial launch, we've been asked countless times to provide a true seen functionality and, on top of that, to allow distinguish read from seen.

Currently, we've only had a seen property that was behaving like a read, in this release, we have introduced another property named read and the actual seen behavior is only triggered once the user has seen the notification center.

BREAKING CHANGE
seen behavior has changed to now be modified for when the user sees the notification, and the new read property should be updated on click of the notification.

Testing workflows from the UI

Want quickly to test your new notification template? From now you can easily trigger a notification and specify the payload variable without leaving the template editor.

APNS integration (beta)

Recently we have introduced the Push channel with support for FCM. From this release, you will be able to send notifications using APNS. This integration is still in beta, and we would love to hear your feedback or suggestions.

Subscribers List Page

In this version new subscribers list page was added to inspect your registered subscribers, right now we don't allow creating or editing subscribers. This will be implemented in the upcoming versions.

Integrated provider credentials check

Hearing your feedback for onboarding to Novu, we now test the providers during the integration phase by performing a test email to the provider using the credentials provided. Errors will be displayed inline when you try to integrate.

We hope this will help to identify issues much faster when connecting new providers.

New navigation Spotlight

Scheduled delay notifications

It is now possible to specify a delayed key following the ISO format, and the delay functionality will be delayed until this timestamp. This could be useful to delay the execution of a message until a predefined dynamic date rather than a hardcoded number of minutes or days.

Adding steps in the middle of the workflow

Steps could be now added in the middle between 2 existing nodes in the UI

Other notable changes

  • Regenerating API Keys is now possible by visiting the settings page
  • The novu notification center is available in 45+ new languages! 🌍
  • Novu is now available at the Vercel marketplace, for easier integration with your vercel deployed projects
  • New MS Teams chat provider
  • Various UI and bug fixes resolved (more details in the change list)
  • Documentation improvements
  • Better Kubernetes examples and support
  • Fixed invite link for self-hosted deployments
  • Improved API support in our @novu/node SDK
  • Implemented delivery providers webhook parsing, will be supported fully in next release
  • Higher unit tests coverage for our WEB platform components
  • A lot more!

Changelist

New Contributors

Full Changelog: https://github.com/novuhq/novu/compare/v0.8.0...v0.9.0