1. 웹훅 컨슈머 앱 개발
X 앱에 웹훅을 등록하려면 X 웹훅 이벤트를 수신하고 CRC 보안 요청에 응답하는 웹 앱을 개발, 배포, 호스팅해야 합니다.URL 요구 사항
이벤트를 수신할 웹훅 엔드포인트 역할을 할 공개 접근 가능한 HTTPS URL로 웹 앱을 만드세요:- URI 경로는 자유롭게 선택할 수 있습니다. 다음 예시는 모두 유효합니다:
https://mydomain.com/service/listenhttps://mydomain.com/webhook/twitter
- URL에는 포트 지정을 포함할 수 없습니다 (예:
https://mydomain.com:5000/webhook은 작동하지 않음)
앱이 처리해야 하는 것
웹훅 엔드포인트는 두 가지 유형의 HTTP 요청을 처리해야 합니다:2. CRC 검사
Challenge-Response Check (CRC)는 여러분이 제공한 콜백 URL이 유효하며 여러분이 이를 제어하고 있음을 X가 검증하는 방법입니다. 웹훅을 등록하고 유지하려면 웹 앱이 CRC 요청에 올바르게 응답해야 합니다.CRC가 트리거되는 시점
웹훅이 CRC 검사에 실패하면
invalid로 표시되며, 다시 통과할 때까지 이벤트를 받지 못하게 됩니다.
CRC 작동 방식
X가 CRC를 보낼 때crc_token 쿼리 매개변수와 함께 웹훅 URL에 GET 요청을 합니다:
response_token을 포함한 JSON 본문으로 응답해야 합니다:
CRC 응답 만드는 방법
- 쿼리 매개변수의
crc_token값을 메시지로 사용 - 앱의 consumer secret (API secret key)을 키로 사용
- HMAC SHA-256 해시 생성
- 결과를 Base64 인코딩
- 인코딩된 문자열 앞에
sha256=을 추가
예시: Python
예제
예시: Node.js
예제
예시: Flask (전체 엔드포인트)
이 예시는 CRC 검증(GET)과 이벤트 전달(POST)을 모두 처리하는 완전한 웹훅 엔드포인트를 보여줍니다:예제
3. 웹훅 보안 강화
X의 웹훅 기반 API는 웹훅 서버의 보안을 확인하는 두 가지 방법을 제공합니다:Challenge-Response Check (CRC)
CRC는 X가 웹훅 이벤트를 수신하는 웹 앱의 소유권을 확인할 수 있게 합니다. 전체 구현 세부 사항은 위의 2단계를 참조하세요.서명 검증
X의 각 POST 요청에는x-twitter-webhooks-signature 헤더가 포함되어 있어, 들어오는 웹훅의 출처가 X임을 확인할 수 있습니다.
서명을 확인하려면:
- 들어오는 요청에서
x-twitter-webhooks-signature헤더 값을 가져옵니다 - consumer secret을 키로, 원시 요청 본문을 메시지로 사용하여 HMAC SHA-256 해시를 생성합니다
- 해시를 Base64 인코딩하고 앞에
sha256=을 추가합니다 - 계산한 값을 헤더 값과 비교합니다 — 일치해야 합니다
예제
4. 웹훅 등록
앱이 CRC 확인을 처리할 수 있게 되면POST /2/webhooks 요청으로 웹훅 URL을 등록하세요. 이 요청을 하면 X는 즉시 여러분의 웹 앱에 CRC 요청을 보내 소유권을 확인합니다.
모든 웹훅 관리 엔드포인트에는 OAuth2 App Only Bearer Token 인증이 필요합니다.
웹훅 생성
POST /2/webhooks — API 참조
웹훅 보기
GET /2/webhooks — API 참조
애플리케이션과 연결된 모든 웹훅 구성을 가져옵니다.
예시 응답
웹훅 삭제
DELETE /2/webhooks/:webhook_id — API 참조
webhook_id(생성 또는 목록 응답에서 얻음)를 사용하여 웹훅을 삭제합니다.
웹훅 검증 및 재활성화
PUT /2/webhooks/:webhook_id — API 참조
지정된 웹훅에 대한 CRC 확인을 트리거합니다. 확인이 성공하면 웹훅이 valid: true로 재활성화됩니다.
valid 필드는 확인 시도 후 상태를 반영합니다. GET /2/webhooks를 사용하여 현재 상태를 확인할 수 있습니다.
xurl로 테스트하기
테스트 목적으로xurl 도구는 임시 웹훅을 지원합니다. GitHub에서 최신 버전의 xurl 프로젝트를 설치하고 인증을 구성한 다음 실행하세요:
중요 참고 사항
샘플 앱
다음 단계
Filtered Stream Webhooks
웹훅을 통해 필터링된 Post 수신
Account Activity API
웹훅을 통해 계정 이벤트 수신