--- slug: /references/notification-provider-module --- import { TypeList } from "docs-ui" # How to Create a Notification Provider Module In this document, you’ll learn how to create a notification provider module and the methods you must implement in it. --- ## 1. Create Module Directory Start by creating a new directory for your module. For example, `src/modules/my-notification`. --- ## 2. Create the Notification Provider Service Create the file `src/modules/my-notification/service.ts` that holds the implementation of the notification service. The Notification Provider Module's main service must extend the `AbstractNotificationProviderService` class imported from `@medusajs/utils`: ```ts title="src/modules/my-notification/service.ts" import { AbstractNotificationProviderService } from "@medusajs/utils" class MyNotificationProviderService extends AbstractNotificationProviderService { // TODO add methods } export default MyNotificationProviderService ``` ### constructor The constructor allows you to access resources from the module's container using the first parameter, and the module's options using the second parameter. If you're creating a client or establishing a connection with a third-party service, do it in the constructor. #### Example ```ts import { AbstractNotificationProviderService } from "@medusajs/utils" import { Logger } from "@medusajs/types" type InjectedDependencies = { logger: Logger } type Options = { apiKey: string } class MyNotificationProviderService extends AbstractNotificationProviderService { protected logger_: Logger protected options_: Options // assuming you're initializing a client protected client constructor ( { logger }: InjectedDependencies, options: Options ) { super() this.logger_ = logger this.options_ = options // assuming you're initializing a client this.client = new Client(options) } } export default MyNotificationProviderService ``` ### constructor ### send This method is used to send a notification using the third-party provider or your custom logic. #### Example ```ts class MyNotificationProviderService extends AbstractNotificationProviderService { // ... async send( notification: ProviderSendNotificationDTO ): Promise { // TODO send the notification using a third-party // provider or custom logic. // for example: return this.client.send({ email: notification.to, template: notification.template, template_data: notification.data }) } } ``` #### Parameters `","description":"The data that gets passed over to the provider for rendering the notification.","optional":true,"defaultValue":"","expandable":false,"children":[]}]}]} sectionTitle="send"/> #### Returns --- ## 3. Create Module Definition File Create the file `src/modules/my-notification/index.ts` with the following content: ```ts title="src/modules/my-notification/index.ts" import MyNotificationProviderService from "./service" import { Module } from "@medusajs/utils" export default Module("my-notification", { service: MyNotificationProviderService, }) ``` This exports the module's definition, indicating that the `MyNotificationProviderService` is the main service of the module. --- ## 4. Use Module To use your Notification Provider Module, add it to the `providers` array of the Notification Module: The Notification Module accepts one provider per channel. ```js title="medusa-config.js" import { Modules } from "@medusajs/utils" // ... module.exports = defineConfig({ // ... modules: { [Modules.NOTIFICATION]: { resolve: "@medusajs/notification", options: { providers: [ { resolve: "./modules/my-notification", id: "my-notification", options: { channels: ["email"], // provider options... }, }, ], }, }, } }) ```