Webhook tích hợp CRM
Webhook là gì?
Subiz sử dụng webhooks để thông báo cho bạn biết một sự kiện đã xảy ra trong tài khoản. Qua đó bạn có thể tích hợp Subiz với các bên khác như CRM, SMS, ...
Webhook lắng nghe các sự kiện xảy ra trong tài khoản subiz rồi gửi chi tiết sự kiện sang máy chủ của bạn.
Ví dụ:
- Khi một người dùng mới vào website, Webhook thông báo sang cho server của bạn.
- Khi một người dùng Facebook gửi tin nhắn lên Fanpage. Webhook chuyển tin nhắn này tới server của bạn.
- Khi tư vấn viên cập nhật thông tin của khách hàng trên Subiz. Webhook gửi thông tin này sang server của bạn.
Bạn cần chuẩn bị những gì?
Để sử dụng được tính năng webhook, bạn phải:
- Sở hữu một máy chủ HTTP công khai trên internet.
- Xử lý gói tin nhận được từ webhook (biết code).
Bạn có thể tự dựng máy chủ vật lý hoặc thuê máy chủ ảo. Khi tạo dựng được máy chủ, bạn cần cung cấp một đường dẫn URL (endpoint) để nhận dữ liệu từ subiz. Thông thường URL sẽ có dạng https://example.com/webhooks hoặc http://192.123.233.244/webhook.
Subiz sẽ gửi dữ liệu sang endpoint này với một định dạng đã được quy chuẩn, bạn cần phải hiểu định dạng này và biết cách lấy được những thông tin mình quan tâm. (Định dạng sẽ được mô tả chi tiết ở phần sau).
Ví dụ về một gói dữ liệu subiz sẽ gửi sang:
// JSON
{
"events": [
{
"id": "evqwjalnhlrkwyvuspdfmwzlv",
"account_id": "acpxkgumifuoofoosble",
"created": 1608883792973,
"type": "message_sent",
"by": { "id": "bbqvwqeofekbxyvlmj", "type": "agent" },
"data": {
"message": {
"conversation_id": "csqwjalnenqynheyql",
"text": "Rất vui được gặp bạn!",
"format": "plaintext",
"integration_id": "acpxkgumifuoofoosble.subizv4.subikon"
}
}
}
]
}
Xây dựng endpoint nhận webhook
Việc đầu tiên cần làm là xây dựng endpoint nhận dữ liệu của riêng bạn. Tạo một webhook endpoint trên server của bạn không khác gì việc tạo một trang mới trên website của bạn. Nếu bạn sử dụng PHP, bạn sẽ cần tạo một file .php mới. Nếu bạn sử dụng NodeJS framework Express, bạn sẽ cần tạo một route mới với đường dẫn mong muốn.
Trước khi bắt đầu code, bạn lưu ý phải trả về mã HTTP 2xx thật nhanh. Khi bạn trả về 2xx chúng tôi hiểu endpoint của bạn đã nhận được dữ liệu thành công. Tất cả các mã ngoài khoảng này, kể cả 3xx, đều chỉ ra rằng bạn chưa nhận được event.
Khi thấy endpoint không nhận event, chúng tôi sẽ cố gắng gửi lại event đó nhiều lần. Nếu sau vài ngày vẫn thất bại, chúng tôi ghi nhận endpoint đã chết, sẽ dừng hoàn toàn việc gửi dữ liệu và vô hiệu hóa webhook cho endpoint của bạn. Khi bị vô hiệu hóa, toàn bộ khối dữ liệu nghẽn được lưu trữ từ lúc endpoint của bạn không trả về 2xx sẽ bị giải phóng, không thể lấy lại ngay cả khi bạn kích hoạt lại webhook.
Vì việc ghi nhận gửi thành công cực kỳ quan trọng, endpoint của bạn nên trả về 2xx trước khi xử lý những logic phức tạp để tránh gây timeout.
Kiểm tra webhook signature
Subiz sẽ (không bắt buộc) ký các event webhook gửi sang endpoint của bạn. Việc này cho phép bạn xác thực gói tin nhận được là từ Subiz gửi sang, chứ không phải của một bên khác.
Phần này hướng dẫn bạn cách xác thực chữ ký, ngoài ra nó cung cấp một số đoạn code mẫu giúp bạn dễ dàng hình hơn.
Tại sao bạn cần xác thực
Endpoint của bạn sớm hay muộn cũng sẽ bị công khai trên internet (có thể do search engine quét được, có thể do nhà cung cấp mạng sơ ý để lộ dữ liệu, ...). Khi bị đối tượng phá hoại dò được, chúng có thể gửi các gói tin giả mạo, gây xáo trộn, phá hỏng tính toàn vẹn dữ liệu, tồi tệ hơn, chúng có thể chiếm được quyền điều khiển server (qua một số lỗ hổng bảo mật trên server của bạn).
"Ôi, chắc chẳng ai thèm hack server mình đâu, còn bao việc" là suy nghĩ của hầu hết nhà phát triển trước khi phát hiện ra mình bị hack.
Cẩn tắc vô áy náy, bạn cần xác thực gói tin ngay từ những giây phút đầu tiên.