API заавар

Webhook

Үлдэгдэл багасах, кредит болон өөрийн домэйн үйлчилгээ дуусах үед таны серверт мэдэгдэл ирнэ.

Webhook нь үйл явдал болоход WeSend таны серверийн хаяг руу илгээдэг POST хүсэлт. Үүгээр кредитээ автоматаар цэнэглэх, багтаа мэдэгдэх, илгээлтээ түр зогсоох боломжтой.

  1. 1

    Хаяг нэмэх

    Самбарын Тохиргоо, Webhook хэсэгт https:// хаягаа нэмж, хүлээн авах үйл явдлаа сонгоно. Нэг төсөлд 5 хүртэл хаяг нэмнэ.

  2. 2

    Нууц түлхүүрээ хадгалах

    whsec_-ээр эхэлсэн түлхүүрийг зөвхөн нэг удаа харуулна. Серверийнхээ орчны хувьсагчид хадгална.

  3. 3

    Турших

    «Турших» товч webhook.test үйл явдал илгээж, таны серверийн хариуг тэр даруй харуулна.

Үйл явдал

Үйл явдалХэзээ`data`
balance.lowҮлдэгдэл төслийн босгоос доош орсон. Нэг уналтад нэг удаа.balance, threshold
balance.emptyКредит дуусч, илгээлт зогссон. Үлдэгдэл 0-ээс дээш гартал дахин илгээхгүй.balance
credits.expiringКредитийн хугацаа 7 хоногийн дотор дуусна. Кредит бүрд нэг удаа.credits, expiresAt, balance
domain.expiringӨөрийн домэйн үйлчилгээ 7 хоног, мөн 1 хоногийн дараа дуусна.domain, endsAt, daysLeft
domain.suspendedҮйлчилгээ дуусч, хөнгөлөлтийн хоног өнгөрсөн тул домэйн түр зогссон. deletesAt-аас өмнө сунгавал шууд сэргэнэ.domain, deletesAt
balance.low
{
  "id": "evt_9b2f6c1e4a7d4f0e8c3b5a6d7e8f9012",
  "type": "balance.low",
  "createdAt": "2026-10-20T03:15:30.000Z",
  "projectId": "7f3c2a10-5b8e-4d6a-9c1f-2e3d4b5a6c7d",
  "data": {
    "balance": 4200,
    "threshold": 5000
  }
}

id нь үйл явдлыг таних дугаар. Дахин илгээсэн хүсэлт ижил id-тай ирэх тул нэг үйл явдлыг хоёр удаа боловсруулахаас сэргийлж хадгална уу.

Толгой мэдээлэл

HeaderУтга
WeSend-EventҮйл явдлын нэр, жишээ нь balance.low.
WeSend-DeliveryЭнэ илгээлтийн дугаар. Дахин оролдлого бүрд ижил.
WeSend-Signaturet=<unix секунд>,v1=<hex>. Доорх аргаар шалгана.

Гарын үсэг шалгах

v1 нь t болон хүсэлтийн биеийг цэгээр холбосон мөрийн (t.body) HMAC-SHA256 утга. Биеийг JSON болгон задлахаас өмнөх яг ирсэн хэлбэрээр нь шалгаж, 5 минутаас хуучин t-тэй хүсэлтийг татгалзана.

import crypto from 'node:crypto'
import express from 'express'

const app = express()

app.post('/wesend/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const header = req.get('WeSend-Signature') || ''
  const { t, v1 } = Object.fromEntries(header.split(',').map(part => part.split('=')))
  const expected = crypto.createHmac('sha256', process.env.WESEND_WEBHOOK_SECRET)
    .update(`${t}.${req.body}`).digest('hex')

  const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300
  const valid = v1?.length === expected.length && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
  if(!fresh || !valid) return res.sendStatus(400)

  const event = JSON.parse(req.body)
  if(event.type === 'balance.low') {
    // Top up, alert the team...
  }
  res.sendStatus(200)
})

Дахин илгээх

  • Таны сервер 10 секундын дотор 2xx хариу өгвөл хүрсэнд тооцно. Бусад хариу, хугацаа хэтрэх, холбогдож чадахгүй бол дахин илгээнэ.
  • Дахин оролдлого 1, 5, 30 минут, 2, 6, 12 цагийн дараа, нийт 7 удаа. Түүнээс хойш хүрээгүй гэж тэмдэглэнэ.
  • Redirect дагахгүй. Хаяг нь нийтэд нээлттэй https сервер байна.
  • Сүүлийн 30 хоногийн илгээлт, хариуг Тохиргоо, Webhook хэсэгт харна.

Эдгээр үйл явдлын үед төслийн гишүүдэд имэйл, эзэмшигчид SMS-ээр мөн мэдэгдэнэ. Webhook нь тэдгээрийг орлохгүй, нэмэлт суваг юм.