API
Webhooks
DisHost에서 발생하는 주요 이벤트를 외부 서비스로 전달받는 웹훅(Webhook) 연동 방법입니다.
DisHost에서 발생하는 주요 이벤트(배포 완료, 크래시 등)를 외부 서비스로 실시간 전달할 수 있습니다. 디스코드 알림, Slack 메시지, 또는 외부 CI 파이프라인 트리거에 활용할 수 있습니다.
지원 이벤트 목록
| 이벤트명 | 설명 | Payload 주요 필드 |
|---|---|---|
deploy.completed | 봇 배포 완료 시 | { botId, botName, commitSha, commitMsg, branch, durationMs } |
server.crashed | 서버 비정상 종료 시 | { botId, botName, lastLog, timestamp } |
backup.completed | 백업 생성 완료 시 | { botId, botName, backupId, sizeBytes, timestamp } |
웹훅 구독 및 관리
웹훅 구독 등록
curl -X POST https://api.dishost.kr/api/v1/webhooks/subscriptions \
-H "x-api-key: dsh_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://my-server.com/webhook",
"events": ["deploy.completed", "server.crashed"],
"secret": "my-signature-secret"
}'등록된 웹훅 목록 조회
curl -H "x-api-key: dsh_live_xxx" \
https://api.dishost.kr/api/v1/webhooks/subscriptions웹훅 구독 해제
curl -X DELETE \
-H "x-api-key: dsh_live_xxx" \
https://api.dishost.kr/api/v1/webhooks/subscriptions/{id}웹훅 시그니처 검증
요청이 DisHost 서버에서 정상 발송되었는지 검증할 수 있도록 모든 웹훅 요청 헤더에 X-Dishost-Signature가 포함됩니다.
const crypto = require("crypto");
function verifySignature(payload, signature, secret) {
const hmac = crypto.createHmac("sha256", secret);
const expected = "sha256=" + hmac.update(payload).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}재시도 및 실패 정책
- 재시도 간격: 웹훅 수신에 실패하면 최대 3회 재시도합니다 (1초 → 5초 → 25초 간격).
- 자동 비활성화: 연속 10회 이상 배달에 실패하면 서비스 보호를 위해 해당 웹훅이 자동으로 비활성화됩니다.