Thuta Learning
API Integration & Webhooks
IntermediateWeb Developmentintermediate

Webhook Payload နှင့် Event Types

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Webhook Payload နှင့် Event Types concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram ကို ဖတ်ပြီး request/response (သို့) event flow ဘယ်လိုစီးဆင်းသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် ကိုယ်ပိုင် API integration အတွက် ဘယ်လို အသုံးချသင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Webhook payload တစ်ခုက provider အလိုက် field name အတိအကျ ကွာနိုင်ပေမယ့် ယေဘုယျပုံစံတစ်ခုတည်းကို လိုက်လေ့ရှိပါတယ် — event type ကို ဖော်ပြတဲ့ field တစ်ခု နဲ့ အဲဒီ event နဲ့ ဆိုင်ရာ အသေးစိတ်တွေ ပါတဲ့ data object တစ်ခု။

ဒါက အရေးကြီးတာက real integration တစ်ခုက event အမျိုးအစားတိုင်းအတွက် သီးခြား URL register မလုပ်လေ့ရှိလို့ပါ။ သင့် endpoint က ဝင်လာတဲ့ request တစ်ခုစီရဲ့ event type ကို ကြည့်ပြီး မှန်ကန်တဲ့ logic ဆီကို route လုပ်ပေးရပါတယ်။

  • Event type string တစ်ခုစီကို handle လုပ်မယ့် function ဆီ map လုပ်ပါ။
  • မသိသေးတဲ့ event type တွေအတွက် safe default (acknowledge + ignore) ကို fallback ထားပါ။
  • Provider က event type အသစ် ထပ်ထည့်လာရင်တောင် endpoint ကို တည်ငြိမ်နေစေပါ။

ရိုးရိုးသားသား ပြောရရင် — event type + data ပုံစံက အများစုမှာ တွေ့ရပေမယ့် universal မဟုတ်ပါဘူး၊ field name တွေလည်း ကွာနိုင်ပါတယ်။ Handler မရေးခင် provider ရဲ့ webhook documentation ကို အမြဲဖတ်ပါ။

text
ONE ENDPOINT, MULTIPLE EVENT TYPES
----------------------------------
-----
All events arrive at one URL: POST /webhooks/orders

  payment.completed  -----> handlePaymentCompleted()
  payment.failed      -----> handlePaymentFailed()
  user.created          -----> handleUserCreated()
  (anything else)        -----> log it, acknowledge, do not crash

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

အောက်က code က dispatch table သေးသေးလေးတစ်ခု — event type string တွေကို handler function တွေဆီ map လုပ်တဲ့ plain object — ကို တည်ဆောက်ထားပါတယ်။ ဒါက real webhook endpoint အားလုံးနီးပါးမှာ ထပ်ခါထပ်ခါ တွေ့ရမယ့် pattern ပါ။

Payload လေးခု ဝင်လာပါတယ် — payment event နှစ်ခု၊ user အသစ် event တစ်ခု၊ dispatch table က တစ်ခါမှ မမြင်ဖူးတဲ့ event type တစ်ခု။ နောက်ဆုံးတစ်ခုက crash မဖြစ်ဘဲ default response ဆီ ကျဆင်းသွားပါတယ်။

Provider တွေက event type အသစ်တွေ ထပ်ထည့်လာနိုင်ပါတယ်။ မသိတဲ့ type ကို ကျယ်ကျယ်လောင်လောင် fail လုပ်တဲ့ router တစ်ခုက handler တစ်ခုလုံးကို ရပ်တန့်စေနိုင်ပေမယ့်၊ report လုပ်ပြီး ဆက်သွားတဲ့ router ကတော့ တည်ငြိမ်နေပါလိမ့်မယ်။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
const handlers = {
  "payment.completed": (data) => `Order ${data.orderId} marked paid`,
  "payment.failed": (data) => `Order ${data.orderId} marked failed, notifying customer`,
  "user.created": (data) => `Welcome email queued for ${data.email}`
};

function routeWebhookEvents(payloads) {
  return payloads.map((raw) => {
    const event = JSON.parse(raw);
    const handler = handlers[event.type];
    if (!handler) {
      return { type: event.type, result: "No handler registered, ignored" };
    }
    return { type: event.type, result: handler(event.data) };
  });
}

const incomingBatch = [
  JSON.stringify({ type: "payment.completed", data: { orderId: "ord_100" } }),
  JSON.stringify({ type: "payment.failed", data: { orderId: "ord_101" } }),
  JSON.stringify({ type: "user.created", data: { email: "mia@example.com" } }),
  JSON.stringify({ type: "invoice.paid", data: { invoiceId: "inv_9" } })
];

console.log(routeWebhookEvents(incomingBatch));
You should see
[
  { type: 'payment.completed', result: 'Order ord_100 marked paid' },
  {
    type: 'payment.failed',
    result: 'Order ord_101 marked failed, notifying customer'
  },
  {
    type: 'user.created',
    result: 'Welcome email queued for mia@example.com'
  },
  { type: 'invoice.paid', result: 'No handler registered, ignored' }
]

၅ မိနစ် စမ်းကြည့်

dispatch table ထဲကို 'invoice.paid' event type အတွက် handler တစ်ခု ထပ်ထည့်ပါ၊ နောက် router run ချိန်မှာ မှန်ကန်စွာ ယူသုံးနိုင်ကြောင်း သေချာအောင် စစ်ဆေးပါ။

သတိလေးတစ်ချက်

Endpoint ဆီကို event type တစ်ခုပဲ ရောက်လာမယ်လို့ ယူဆပြီး logic ကို hard-code လုပ်ခြင်း။

မသိတဲ့ event type ကို safe default response ဆီ fallback မလုပ်ဘဲ crash ဒါမှမဟုတ် throw ဖြစ်စေခြင်း။

GitHub Docs — Webhook events and payloadsAPI Integration & Webhooks

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Endpoint ဆီကို event type တစ်ခုပဲ ရောက်လာမယ်လို့ ယူဆပြီး logic ကို hard-code လုပ်ခြင်း။
  • မသိတဲ့ event type ကို safe default response ဆီ fallback မလုပ်ဘဲ crash ဒါမှမဟုတ် throw ဖြစ်စေခြင်း။
  • API Tutorial (apiguide) ကို မလေ့လာရသေးရင် ဒီ course ကို စမလိုက်ခင် အရင် ပြီးအောင် လေ့လာထားသင့်ပါတယ် — ဒီ course က REST/HTTP/Auth အခြေခံတွေကို ထပ်မသင်ဘဲ webhook, testing, reliability, integration architecture တို့ကိုသာ ဆက်လက် တည်ဆောက်ပါတယ်။

လေ့ကျင့်ခန်း

dispatch table ထဲကို 'invoice.paid' event type အတွက် handler တစ်ခု ထပ်ထည့်ပါ၊ နောက် router run ချိန်မှာ မှန်ကန်စွာ ယူသုံးနိုင်ကြောင်း သေချာအောင် စစ်ဆေးပါ။

You'll know it worked when: [ { type: 'payment.completed', result: 'Order ord_100 marked paid' }, { type: 'payment.failed', result: 'Order ord_101 marked failed, notifying customer' }, { type: 'user.created', result: 'Welcome email queued for mia@example.com' }, { type: 'invoice.paid', result: 'No handler registered, ignored' } ]

Webhook Payload နှင့် Event Types | Thuta Learning