Steps to add a new provider to Novu
in_app
, push
, email
, chat
and sms
.
For in_app
we support only our own provider, so new providers cannot be added to this channel. For the other four channels, we support the integration of external providers. This guide will help in adding new providers for any of these 4 channels.
In this guide, we are adding a new provider for the email channel, but all of the mentioned steps are similar for other channels as well.
node
package to get started.
up
and down
arrow to switch channel
type and press enter
to select.
For this example, we will be selecting EMAIL
as our provider type. The name for our provider will be example-provider
.
example-provider
is generated in your local machine project.
In above example, we have given our provider name as example-provider for simplicity. If provider you want to add have name as twilio, don’t use twilio-provider as name, instead use twilio only. If one provider supports multiple channels like infobip supports both sms and email channels, use infobip-email or infobip-sms to differentiate these providers.Once our
example-provider
is generated we will need to begin working from within packages/providers/src/lib/example-provider
directory. Make sure to write the test for this new provider.
example-provider
.pnpm run setup:project
to build all dependencies again. Use this new sdk method
to complete the provider’s sendMessage
function. Check the reference links
for adding new providers section for each
channel’s provider example.integration store
we need logos in dark and light mode. Add dark color svg logo in apps/web/public/static/images/providers/dark/sqaure
directory and light color svg logo in apps/web/public/static/images/providers/light/sqaure
directory.
Use the provider name as the file name. The sample name for our above-added provider is example-provider.svg
.
example-provider
, we have only one credential ApiKey
. We will need to add a config object for example-provider
with all existing provider’s configs like below.
key
is of type CredentialsKeyEnum
.If a new key is added, add this key at these 3 places:-
- In
CredentialsKeyEnum
at filelibs/shared/src/consts/providers/provider.enum.ts
- In
CredentialsDto
at fileapps/api/src/app/integrations/dtos/credentials.dto.ts
- In
credentials
field ofintegrationSchema
at filelibs/dal/src/repositories/integration/integration.schema.ts
displayName
is a human-friendly easy to understand name which will be shown in the provider integration form for this credential.description
is a field that can be used to share more information about the credential.type
here means text field type. this can be a string for text, text for text-area, or a switch for the toggle.required
is of boolean type.mailConfigBase
is an object having default credentials required by any email
provider. Make sure not to add duplicate providers which are already there in mailConfigBase
. In the case of another channel provider, we will use that channel config base in place of mailConfigBase
.A credential can be made secret by adding in ./secure-credentials.ts file.
libs/shared/src/consts/providers/provider.enum.ts
. As our example-provider
is of email type, add this in EmailProviderIdEnum
with all existing providers like below
libs/shared/src/consts/providers/channels/email.ts
. Note that the id
is the provider’s name, displayName
is the provider’s name in Pascal’s case, credentials
are the ones we created in the previous step, logoFileName
should be as it was on the adding logo step (with the format type included).
package.json
located in libs/application-generic/package.json
and add it manually to the dependencies list: "@novu/<NEW_PROVIDER_NAME>": "^<VERSION>"
Please note that the provider name and version can be found from the provider package.json you created earlier.After adding the dependency run
pnpm run setup:project
from the root of the mono repo. so, it can create the required symlinks for the newly created package.
libs/application-generic/src/factories/mail/handlers
. Other channel handlers can also be found here.
Create a new file example-provider.handler.ts
here with the following code
libs/application-generic/src/factories/mail/mail.factory.ts
apiKey
for
our example-provider
. This is for reference purposes only. A provider can
have more than one credential as per its SDK
requirements. At each step, you
will need to add all credentials carefully. Check providers referenced below
for more information.