import { TypeList } from "docs-ui"

export const metadata = {
  title: `Send Notification with the Notification Module`,
}

# {metadata.title}

In this guide, you'll learn how to send a notification using the Notification Module.

## Use the Create Method

In your resource, such as a subscriber, resolve the Notification Module's main service and use its `create` method:

export const highlights = [
  ["12", "notificationModuleService", "Resolve the Notification Module."],
  ["17", "create", "Create the notification to be sent."],
  ["19", '"email"', "Use the provider module defined for the `email` channel to send an email."],
  ["20", '"product-created"', "The ID of the template defined in the third-party service, such as SendGrid."],
  ["21", "data", "The data to pass to the template defined in the third-party service."]
]

```ts title="src/subscribers/product-created.ts" highlights={highlights}
import type {
  SubscriberArgs,
  SubscriberConfig,
} from "@medusajs/medusa"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { INotificationModuleService } from "@medusajs/types"

export default async function productCreateHandler({
  data,
  container
}: SubscriberArgs<{ id: string }>) {
  const notificationModuleService: INotificationModuleService =
    container.resolve(
      ModuleRegistrationName.NOTIFICATION
    )

  await notificationModuleService.create({
    to: "shahednasser@gmail.com",
    channel: "email",
    template: "product-created",
    data: "data" in data ? data.data : data
  })
}

export const config: SubscriberConfig = {
  event: "product.created",
}
```

The `create` method accepts an object or an array of objects having the following properties:

<TypeList
  types={[
    {
      name: "to",
      type: "`string`",
      description: "The destination to send the notification to. When sending an email, it'll be the email address. When sending an SMS, it'll be the phone number.",
      optional: false,
    },
    {
      name: "channel",
      type: "`string`",
      description: "The channel to send the notification through. For example, `email` or `sms`. The provider module defined for that channel will be used to send the notification.",
      optional: false
    },
    {
      name: "template",
      type: "`string`",
      description: "The ID of the template used for the notification. This is useful for providers like SendGrid, where you define templates within SendGrid and use their IDs here.",
      optional: false
    },
    {
      name: "data",
      type: "`Record<string, unknown>`",
      description: "The data to pass along to the template, if necessary."
    }
  ]}
  sectionTitle="Use the Create Method"
/>

{/* TODO add once reference for type once generated */}

{/* For a full list of properties accepted, refer to [this guide](/references/notification-provider-module#create). */}
