Hubz API v1 (beta) · Hubz v0.7.0 · 2026-11-06
Lấy sự kiện bị lỡ với GET /v1/events
Phần mềm nằm trong mạng nội bộ, sau NAT (ví dụ một Odoo cài tại văn phòng) không nhận được webhook. Khi đó, gọi GET /v1/events định kỳ để kéo sự kiện. Đây cũng là cách lấy lại sự kiện bị lỡ khi webhook lỗi.
Cách kéo
- Lần đầu gọi với
after=0. - Xử lý các sự kiện trả về theo thứ tự, rồi lưu giá trị
next. - Lần sau gọi với
after=<next>. Lấy hết trang thì gọi tiếp ngay; hết sự kiện thì chờ đến lần kéo sau.
curl "https://api.hubz.vn/v1/events?after=0&limit=100" \
-H "Authorization: Bearer hbz_live_xxx"
{
"events": [
{"id": "1042", "type": "message.created", "version": 1, "createdAt": "2026-11-06T09:15:02Z", "data": {"…": "…"}},
{"id": "1043", "type": "conversation.updated", "version": 1, "createdAt": "2026-11-06T09:15:40Z", "data": {"…": "…"}}
],
"next": "1043"
}
Tham số
| Tham số | Ý nghĩa |
|---|---|
after | Giá trị next của lần gọi trước; 0 cho lần đầu. |
limit | Mặc định 100, tối đa 500. |
types | Lọc loại sự kiện, cách nhau dấu phẩy, ví dụ message.created,conversation.updated. |
Khóa cần quyền events. Sự kiện được giữ 7 ngày. Id sự kiện tăng dần: xử lý mỗi id một lần.
Ví dụ Python
import time
import requests
API = "https://api.hubz.vn"
HEADERS = {"Authorization": "Bearer hbz_live_xxx"}
def poll(after: str = "0"):
"""Fetch every new event once; store `after` between runs (events are kept 7 days)."""
while True:
res = requests.get(f"{API}/v1/events", headers=HEADERS, params={"after": after, "limit": 500}, timeout=30)
if res.status_code == 429:
time.sleep(int(res.headers.get("Retry-After", "60")))
continue
res.raise_for_status()
page = res.json()
for event in page["events"]:
handle(event) # your code: idempotent, keyed by event["id"]
after = page["next"]
if len(page["events"]) < 500:
return after
Hubz không phải sản phẩm của Zalo hay VNG; Hubz không dùng API chính thức của Zalo. Hubz không liên kết với Odoo S.A.; Odoo là nhãn hiệu của Odoo S.A.