Jalankan otomatisasi
Webhook
Terima panggilan ke server Anda saat tugas selesai atau ponsel perlu dicek.
Tambah webhook
Di dasbor: Pengaturan → Koneksi → Peristiwa → Webhook. Atau lewat API:
POST /v1/webhooks
{"url": "https://example.com/clousd", "events": ["run.completed", "run.failed"], "description": "orders bot"}
# → 201 {"webhook": {"id": "wh_3c1a", …}, "secret": "whsec_…"} the secret is shown onceevents yang kosong berarti semua event. Satu kunci bisa punya hingga sepuluh webhook; masing-masing punya secret sendiri. POST /v1/webhooks/{id}/rotate memberi secret baru, /toggle menjeda pengiriman, /test langsung mengirim event uji, GET …/deliveries menampilkan pengiriman terbaru beserta kode respons dan waktunya.
Event
| Peristiwa | Kapan |
|---|---|
| run.completed | Tugas selesai; body berisi data tugas beserta jawabannya. |
| run.failed | Tugas tidak bisa diselesaikan; body menyebutkan alasannya. |
| run.cancelled | Tugas dihentikan. |
| run.waiting | Tugas berhenti untuk bertanya atau meminta izin. |
| device.problem | Pemeriksaan kesehatan ponsel gagal. |
| device.resolved | Masalahnya sudah teratasi. |
Verifikasi tanda tangan
Setiap pengiriman berupa POST dengan body JSON dan header X-Clousd-Signature: t=<unix time>,v1=<hex>, dengan hex berupa HMAC-SHA256 dari "<t>.<raw body>" yang dikunci dengan secret webhook Anda. Tolak timestamp lama untuk mencegah serangan replay.
import hashlib, hmac, time
def valid(body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
t, sig = parts.get("t", ""), parts.get("v1", "")
if not t.isdigit() or abs(time.time() - int(t)) > tolerance:
return False
mac = hmac.new(secret.encode(), t.encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, sig)Pengulangan
Setiap event dicoba hingga empat kali: langsung, setelah 30 detik, setelah 5 menit, dan setelah 30 menit. Jawab dengan 2xx apa pun untuk konfirmasi. Body-nya {"id", "type", "created", "data"} dan id yang sama dikirim di X-Clousd-Event-Id: jika pengulangan tiba setelah percobaan sebelumnya ternyata berhasil tetapi lambat, lewati id yang sudah Anda proses. Setelah 20 pengiriman gagal berturut-turut, webhook menjeda dirinya sendiri; aktifkan lagi di dasbor atau dengan /toggle.