블로그

· 3분 분량

API 호출 한 번으로 Discord, Slack, Telegram에 공지 보내기

앱에서 REST 요청 한 번으로 Discord 채널, Slack 채널, Telegram 채널에 릴리스 노트와 공지를 보내세요. 등록할 개발자 앱은 없습니다.

커뮤니티는 세 곳에 있습니다. Discord 서버, Slack 워크스페이스, Telegram 채널. 릴리스마다 누군가 같은 공지를 세 곳에 손으로 복사합니다. 보통 늦고, 가끔은 한 곳이 빠지며, 서식은 늘 살짝 어긋납니다.

직접 자동화하려면 서로 다른 연동 세 개가 필요합니다.

  • Discord는 채널 웹훅으로 JSON 페이로드를 받고, 이미지는 embed이며, 글자 수는 2,000자까지입니다.
  • Slack은 incoming webhook URL로 다른 형태의 페이로드를 받습니다.
  • Telegram은 봇 토큰과 chat ID가 필요하고, 텍스트, 사진, 동영상, 앨범의 메서드가 서로 다릅니다.

이 가이드는 Hapi로 같은 공지를 요청 한 번에 세 곳에 보내는 방법을 보여 줍니다. 셋 다 개발자 앱이나 플랫폼 심사가 필요 없어서, 10분 정도면 실제로 보낼 수 있습니다.

1단계: 플랫폼마다 자격 증명 받기

Discord. 서버를 열고 Server Settings → Integrations → Webhooks → New Webhook으로 가서 채널(예를 들어 #announcements)을 고른 뒤 Copy Webhook URL을 클릭하세요.

Slack. 워크스페이스용 incoming webhook을 만들고, 글이 올라갈 채널(예를 들어 #launches)을 고르세요. https://hooks.slack.com/services/로 시작하는 URL을 복사하세요.

Telegram. @BotFather에게 /newbot을 보내고 봇 토큰을 복사하세요. 봇을 채널에 관리자로 추가하세요. chat ID는 채널의 @username이고, 비공개 채널은 숫자 ID입니다.

2단계: Hapi에 연결

Hapi 계정을 만들고 Accounts → Connect를 연 다음 자격 증명을 각각 붙여 넣으세요. Hapi는 저장하기 전에 각 웹훅 URL이 실제 Discord 또는 Slack 웹훅인지 확인합니다. 웹훅 URL과 봇 토큰은 저장 시 암호화되고(AES-256-GCM) 브라우저로 다시 전송되지 않아서, 팀원이 대시보드에서 복사해 갈 수 없습니다.

그다음 API keys에서 API 키를 만들어 환경 변수에 넣으세요.

bash
export HAPI_API_KEY="hapi_live_..."

3단계: 공지 하나를 모든 곳에

bash
curl -X POST https://hapi.tools/v1/posts \
  -H "Authorization: Bearer $HAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: release-2-4-0" \
  -d '{
    "content": "v2.4 is out 🎉 Dark mode, CSV export and 3x faster search. Full notes: https://example.com/changelog",
    "platforms": ["discord", "slack", "telegram"],
    "mediaUrls": ["https://example.com/v2.4-banner.png"]
  }'

201과 함께 채널별 결과가 돌아옵니다. Discord, Slack, Telegram에 글이 도착했는지 바로 확인할 수 있습니다.

릴리스 파이프라인에서 (Node.js)

이 호출이 가장 쓸모 있는 자리는 배포 스크립트의 끝입니다. 릴리스가 나가는 순간에 공지도 나갑니다.

js
await fetch("https://hapi.tools/v1/posts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
    "Content-Type": "application/json",
    // Same key on a retried deploy = no duplicate announcement.
    "Idempotency-Key": `release-${process.env.RELEASE_VERSION}`,
  },
  body: JSON.stringify({
    content: `${process.env.RELEASE_VERSION} is live 🚀 ${process.env.RELEASE_NOTES_URL}`,
    platforms: ["discord", "slack", "telegram"],
  }),
});

여기서 Idempotency-Key가 중요합니다. CI 작업은 재시도되고, 이 키가 없으면 불안정한 배포가 같은 릴리스를 세 번 알릴 수 있습니다.

4단계: 채널마다 문구 맞추기

Slack 워크스페이스는 고객용이고 Telegram 채널은 더 넓은 커뮤니티용일 수 있습니다. platformOptions로 같은 요청 안에서 채널마다 문구를 바꾸세요.

json
{
  "content": "v2.4 is out 🎉 Dark mode, CSV export and 3x faster search.",
  "platforms": ["discord", "slack", "telegram"],
  "platformOptions": {
    "slack": { "content": "v2.4 is live for all workspaces. Dark mode, CSV export and faster search. Questions? Reply in this thread." },
    "telegram": { "content": "v2.4 is out 🎉 Dark mode, CSV export, 3x faster search. Changelog: https://example.com/changelog" }
  }
}

Hapi는 요청을 받아들이기 전에 각 버전을 그 플랫폼의 제한과 대조합니다. Discord 문구가 2,000자를 넘으면, 릴리스 후가 아니라 지금 알 수 있습니다.

5단계: 맞는 시각에 예약

배포가 끝난 시각이 아니라, 사용자 시간대 오전 9시에 공개하고 싶나요? 시각을 추가하세요.

json
{
  "content": "Launch day 🚀 v3.0 is here.",
  "platforms": ["discord", "slack", "telegram"],
  "scheduledAt": "2026-11-20T09:00:00-05:00",
  "timezone": "America/New_York"
}

이 세 플랫폼은 웹훅이나 봇으로 메시지를 나중에 보내도록 예약하지 못합니다. Hapi가 글을 들고 있다가 정시에 보내고, 채널별 결과와 함께 서명된 post.published 또는 post.failed 웹훅을 앱으로 보냅니다.

알아 두면 좋은 점

  • 이미지. Discord는 이미지를 embed로 최대 10장까지 보여 줍니다. Telegram은 사진이나 동영상 하나, 또는 여러 장을 붙이면 최대 10장의 앨범을 보냅니다. 미디어가 붙으면 Telegram 캡션은 1,024자까지이니, 이미지 공지는 짧게 쓰세요.
  • Telegram 답글. firstComment를 넣으면 Hapi가 공지에 대한 답글로 올립니다. “여기서 이야기해요”나 “전체 체인지로그” 후속에 유용합니다.
  • 삭제. Discord와 Telegram 글은 DELETE /v1/posts/{id}로 지울 수 있습니다. Slack incoming webhook은 메시지를 지우지 못하니, 나가기 전에 Slack 문구를 다시 확인하세요.
  • 같은 호출로 더 많은 네트워크. platforms에 "x", "linkedin", "bluesky"를 더하면 공개 채널에도 동시에 알립니다.

건너뛴 것

  • 페이로드 형식 세 가지와 제한 세 가지
  • 웹훅 URL과 봇 토큰을 안전하게 암호화하고 저장하기
  • 스케줄러. 이 플랫폼들은 대신 예약해 주지 않습니다
  • 중복 없는 재시도, 그리고 채널별 실패 보고

15일 체험 시작 → $5 체험은 15일 동안 연결 채널 5개와 게시물 300개를 포함합니다. 첫날부터 Discord, Slack, Telegram에 충분합니다.