對於我們的需求,我們已經大略完成了,從建立需求
-> 給予配單
-> 同意配單
。
但是如果過程中沒有提醒或通知,商家怎麼去知道有需求單了,客戶怎麼知道有回覆了,該不會還要每一天都去檢查吧。
所以今天我們就串接 Notification 模組到系統,然後用event
事件觸發方式,進而實作。
Notification(通知)
模組 是 MedusaJS 的 infrastructure(建設層)
。
如果大家不理解,為何要分成一般Module(模組)
與infrastructure(建設層)
。
我的簡單理解是,建設層主要分類是有助於系統的架構、方便與速度等等的歸類。
(我的主張,事情不用想得太難!!!)
所以關於Notification(通知)
不只是可以用來對客戶、對管理員,如果系統出現該警覺的事件,也可以通知維護的工程師。
通知的方式有千千百百種,比如信箱、簡訊、Line、Slack 等等都有,自己串接客製化都可以。但 MedusaJS
已經 有實作官方認證的插件,我們來介紹有哪些,用哪些方法通知的:
📊 SendGrid / MailChimp / Resend / Slack / Twilio SMS 功能比較
工具 | 定位 | 主要功能 | 適合對象 | 價格模式 | 常見用途 |
---|---|---|---|---|---|
SendGrid | Email API / Transactional Email | 系統郵件寄送、SMTP relay、模板、追蹤報告 | 開發者、電商、SaaS | 免費(100封/天),付費依寄送量計費 | 註冊驗證信、訂單通知信 |
MailChimp | Email Marketing(行銷) | 電子報、行銷自動化、分眾名單、設計工具 | 行銷人員、中小企業 | 免費(最多500聯絡人),付費依名單人數/月 | 電子報、促銷信、客戶維繫 |
Resend | 開發者導向 Email API | 簡單 API 寄信、React/JSX 模板、即時測試 | 新創團隊、前端工程師 | 免費(最多3000封/月),付費依寄送量計費 | 開發測試信件、快速串接寄信 |
Slack | 團隊協作 / 即時通訊 | 頻道、私訊、Bot、Webhook通知 | 軟體團隊、公司組織 | 免費(訊息保留限制),付費依用戶/月 | 內部溝通、系統錯誤通知 |
Twilio SMS | SMS / 通訊 API | 發送簡訊、語音、WhatsApp訊息 | 全球企業、需要OTP驗證的系統 | 按量付費(如台灣每則簡訊約 $0.05~$0.07 USD) | OTP驗證碼、出貨通知簡訊 |
在使用 SendGrid 之前,有三個必要條件:
有了上面數據之後,我們到先去 Dynamic Template
建立信件的模板
好了,我們可以開始串接信件模板了!!
在medusa-config.ts
加入使用SendGrid
設定值
module.exports = defineConfig({
// ...
modules: [
{
resolve: "@medusajs/medusa/notification",
options: {
providers: [
// ...
{
resolve: "@medusajs/medusa/notification-sendgrid",
id: "sendgrid",
options: {
channels: ["email"],
api_key: process.env.SENDGRID_API_KEY,
from: process.env.SENDGRID_FROM,
},
},
],
},
},
],
})
將 API KEY
以及 專門送信箱帳號 填入環境變數
SENDGRID_API_KEY=<YOUR_SENDGRID_API_KEY>
SENDGRID_FROM=<YOUR_SENDGRID_FROM>
import type {
SubscriberArgs,
SubscriberConfig,
} from "@medusajs/framework"
import { Modules } from "@medusajs/framework/utils"
//建立事件
export default async function demandCreateHandler({
event,
container
}: SubscriberArgs<{ id: string }>) {
const notificationModuleService = container.resolve(Modules.NOTIFICATION)
const DemandId = event.data.id
console.log(`The demand of custome supplement ${DemandId} was created`)
//通知函數
await notificationModuleService.createNotifications({
to: "xxxx@gmail.com",
channel: "email",
template: "d-dfe4475ce135482a8fed5b9d1c3ef2eb",
data: {
demandId:DemandId,
replay:"以建立"
},
})
}
//建立事件名稱
export const config: SubscriberConfig = {
event: "demand.created",
}
回到我們需求創建的workflow(工作流程)
,除了上次建立需求單新增至資料庫,今天要在多一個發送事件。
export const createDemandWorkflow = createWorkflow(
"create-demand",
(input: CreateDemandWorkflowInput) => {
const demand = createDemandStep(input)
//發送事件提醒有人創建了需求
emitEventStep({
eventName: "demand.created",
data: {
id: demand.id
},
})
return new WorkflowResponse(demand)
}
)
下集我會到大家導讀一下官方說明說怎麼去加入第三方金流當作模組。