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회 이상 배달에 실패하면 서비스 보호를 위해 해당 웹훅이 자동으로 비활성화됩니다.