디스코드 봇 웹후크 설정 및 테스트 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- 개발자
- 실시간 메시지 전송, 로컬 테스트, 봇 인터그레이션 구현에 관심 있는 중급 이상 개발자
- 난이도: 중간 (Python, Flask, Discord API 기본 지식 필요)
핵심 요약
- Discord 웹후크는 실시간 알림 및 봇 인터그레이션을 위한 공개 URL 기반의 비동기 메시지 전송 방식
- Flask 서버와 Pinggy를 활용해 로컬 개발 환경에서 공개 URL을 생성 가능
- 보안 처리를 위해 Discord 서명 검증(
nacl.signing.VerifyKey
)이 필수적
섹션별 세부 요약
1. 디스코드 서버 및 채널 생성
- 채널 ID 생성을 위해 개발자 모드 활성화 및 채널 ID 복사 필요
- Discord Developer Portal에서 Bot Token 발급 및 OAuth2 URL 생성 (권한:
Manage Webhooks
)
2. 웹후크 생성 및 설정
curl
명령어로 웹후크 생성 (필요한 파라미터:BOT_TOKEN
,CHANNEL_ID
)- 생성된
id
및token
을 사용해 웹후크 URL 구성 (https://discord.com/api/webhooks/{id}/{token}
)
3. Flask 서버 구현
discord_webhook.py
파일 생성 및 Flask 앱 구성/send
엔드포인트: 메시지 전송 (requests.post
)/health
엔드포인트: 서버 상태 확인- 필수 의존성:
flask
,requests
4. 로컬 서버 공개 및 테스트
- Pinggy를 통해 로컬 서버에 공개 URL 할당 (
ssh -p 443 -R0:localhost:8000 a.pinggy.io
) curl
또는 Postman으로 메시지 전송 테스트 (curl -X POST "http://
)/send" -d '{"content": "Hello"}'
5. 인터랙션 및 보안 처리
- Slash 명령어 처리 엔드포인트 (
/discord-interactions
) 구현 type 1
(PING) →type 1
(PONG) 응답type 2
(명령어) → 사용자 입력 처리- Discord 서명 검증
X-Signature-Ed25519
,X-Signature-Timestamp
헤더 사용nacl.signing.VerifyKey
를 통해 서명 검증 수행
결론
- Pinggy를 활용해 로컬 테스트를 통해 공개 URL 생성 가능
- 보안 처리는 서명 검증(
nacl.signing.VerifyKey
)을 필수적으로 적용해야 함 - Flask + Discord API를 결합한 봇 인터그레이션은 실시간 알림 및 사용자 상호작용 구현에 적합함