Webhooks

ໃຫ້ລະບົບສົ່ງເຫດການໄປຫາ URL ຂອງທ່ານທັນທີທີ່ເກີດ ເຊັ່ນ ມີອໍເດີໃໝ່ ບິນປິດ ລະຫັດ Wi-Fi ຖືກໃຊ້ ຫຼື ກ່ອງ Wi-Fi ອອບລາຍ

  1. ໃນໜ້າ Integrations ສ່ວນ Webhooks ກົດ ເພີ່ມ Webhook (Project ຕ້ອງມີຮ້ານ Business Apps ໃນເວັບ ຫຼື ເປີດ Business Apps API ຫຼື Wi-Fi Hotspot API ແລະ ທ່ານເປັນ Owner ຫຼື Admin)
  2. ໃສ່ URL ແບບ https:// ທີ່ເຂົ້າເຖິງໄດ້ຈາກອິນເຕີເນັດ ແລະ ເລືອກເຫດການທີ່ຕ້ອງການ (ບໍ່ເລືອກ = ທຸກເຫດການ)
  3. ສຳເນົາ Signing secret ເກັບໄວ້ ລະບົບສະແດງຄັ້ງດຽວ
  4. ກົດ ທົດສອບ ເພື່ອສົ່ງເຫດການ ping ໄປລອງທີ່ URL ຂອງທ່ານ
ເຫດການເກີດເມື່ອ
order.created, order.updated, bill.closed, booking.created, shift.closed ແລະ ອື່ນໆມີການປ່ຽນແປງໃນຮ້ານ ທັງຮ້ານໃນເວັບ ແລະ ຮ້ານແບບ API ບໍ່ວ່າຈະປ່ຽນຈາກໜ້າຈັດການ ແອັບພະນັກງານ ຫຼື API (ມີ shopId)
order.payment_claimed, booking.payment_claimed, booking.cancelledລູກຄ້າເທິງໜ້າເວັບກົດແຈ້ງວ່າໂອນເງິນແລ້ວ ຫຼື ຍົກເລີກການຈອງເອງ
voucher.usedລະຫັດ Wi-Fi ຖືກໃຊ້ຄັ້ງທຳອິດ (ບໍ່ສົ່ງຕົວລະຫັດ ມີ note ທີ່ໃສ່ຕອນອອກລະຫັດ ເຊັ່ນ ເລກຫ້ອງ)
guest.signed_inຜູ້ໃຊ້ກອກອີເມວ ຫຼື ເບີໂທທີ່ໜ້າລັອກອິນ (returning ບອກວ່າເຄີຍມາແລ້ວ ຫຼື ບໍ່)
box.offline, box.onlineກ່ອງ Wi-Fi ຂາດການຕິດຕໍ່ເກີນ 2 ນາທີ ແລະ ເມື່ອກັບມາອອນລາຍ

ແຕ່ລະເຫດການສົ່ງເປັນ POST ແບບ JSON ລະບົບຂອງທ່ານຕ້ອງຕອບ 2xx ພາຍໃນ 10 ວິນາທີ ຖ້າບໍ່ຕອບ ລະບົບສົ່ງຊ້ຳອັດຕະໂນມັດ (ຫ່າງຂຶ້ນເລື້ອຍໆ ຈົນເຖິງປະມານໜຶ່ງວັນ) ເບິ່ງປະຫວັດການສົ່ງໄດ້ທີ່ປຸ່ມ ປະຫວັດການສົ່ງ

JSON
{"id":"evt_…","type":"order.created","createdAt":"2026-10-13T09:30:00Z","shopId":"…","data":{…}}

ກວດວ່າ Webhook ມາຈາກພວກເຮົາແທ້

ທຸກຄັ້ງມີ header X-TH-Signature: t=<ເວລາ>,v1=<ລາຍເຊັນ> ລາຍເຊັນຄື HMAC-SHA256 ຂອງ <ເວລາ>.<body> ດ້ວຍ Signing secret ຂອງທ່ານ ໃຫ້ຄຳນວນຈາກ body ດິບທີ່ໄດ້ຮັບ ກ່ອນແປງເປັນ JSON

Node.js
const crypto = require("crypto");
function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  const mac = crypto.createHmac("sha256", secret).update(parts.t + "." + rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(parts.v1));
}
Python
import hmac, hashlib
def verify(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    mac = hmac.new(secret.encode(), parts["t"].encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(mac, parts["v1"])

ເຫດການອາດມາຮອດບໍ່ຕົງລຳດັບ ໃຫ້ລຽງຕາມ createdAt ແລະ ໃຊ້ id ກັນການປະມວນຜົນຊ້ຳ ເພາະເຫດການເດີມອາດຖືກສົ່ງຊ້ຳໄດ້

ຖ້າພົບບັນຫາ

ເພີ່ມ Webhook ແລ້ວຂຶ້ນວ່າ URL ຕ້ອງເປັນທີ່ຢູ່ເທິງອິນເຕີເນັດ

ໃຊ້ URL ແບບ https:// ທີ່ເປີດຈາກພາຍນອກໄດ້ ບໍ່ແມ່ນ IP ພາຍໃນ ຫຼື localhost

ປະຫວັດການສົ່ງຂຶ້ນ “ສົ່ງບໍ່ສຳເລັດ”

ເບິ່ງລະຫັດ HTTP ທີ່ URL ຂອງທ່ານຕອບ ລະບົບສົ່ງຊ້ຳໃຫ້ເອງຈົນກວ່າຈະສຳເລັດ ຫຼື ຄົບຮອບ ແກ້ຝັ່ງຮັບແລ້ວກົດ ທົດສອບ ເພື່ອກວດ

ຍັງແກ້ບໍ່ໄດ້? ໃຫ້ທີມງານຊ່ວຍ

ເປີດ ticket ຈາກໜ້າຈັດການ ບອກຊື່ເວັບ ຫຼື ບໍລິການ ສິ່ງທີ່ເຮັດ ແລະ ຂໍ້ຄວາມທີ່ເຫັນເທິງຈໍ ທີມງານຈະຕອບກັບໃນເລື່ອງດຽວກັນ ຕິດຕາມໄດ້ໃນບ່ອນດຽວ