CLOUSD
Buka akun
PelajariBenchmarkSkor agent di ponsel ClousdBlogSegeraPanduan, ulasan mendalam, dan catatan lapanganBandingkanSegeraClousd dibandingkan alternatifnya
BangunIntegrasiSegeraMCP, Claude Code, Codex, Cursor, n8nGitHubSDK, server MCP, dan contoh
Baca dokumentasi

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:

Berlangganan
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 once

events 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

PeristiwaKapan
run.completedTugas selesai; body berisi data tugas beserta jawabannya.
run.failedTugas tidak bisa diselesaikan; body menyebutkan alasannya.
run.cancelledTugas dihentikan.
run.waitingTugas berhenti untuk bertanya atau meminta izin.
device.problemPemeriksaan kesehatan ponsel gagal.
device.resolvedMasalahnya 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.

Python
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.