chat.received, chat.sent 및 관련 X Chat 활동을 전달합니다. Chat XDK로 복호화하세요.
비공개 X Chat 이벤트 유형은 모니터링하는 사용자에 대한 승인이 필요합니다. 암호화된 X Chat 파일 첨부 파일은 **
media_hash_key**와 X Chat 미디어 다운로드를 사용합니다—Post API의 expansions=attachments.media_keys / media.fields=variants가 아닙니다.
이벤트 유형
1. 전달 방식 선택
활동 스트림 (봇에 종종 가장 간단함): 앱 Bearer 토큰과 함께GET /2/activity/stream을 사용합니다 (OpenAPI에 따라 선택적 backfill_minutes, start_time, end_time). 클라이언트 측에서 chat.received / chat.sent를 필터링하세요.
활동 구독: 다음으로 지속적인 구독을 관리합니다:
POST /2/activity/subscriptions— 생성GET /2/activity/subscriptions— 목록 (페이지네이션됨)PUT /2/activity/subscriptions/{subscription_id}— 업데이트DELETE /2/activity/subscriptions/{subscription_id}또는DELETE /2/activity/subscriptions?ids=— 삭제
dm.read)이 필요합니다.
웹훅: HTTPS 엔드포인트에서 이벤트를 종료하는 경우, POST /2/webhooks로 웹훅을 등록하고 CRC 챌린지를 통과한 다음 webhook_id를 참조하여 POST /2/activity/subscriptions로 활동 구독을 생성합니다 (OpenAPI의 Webhooks 및 Activity 작업 참조). Python/TypeScript XDK는 해당 SDK 버전에 포함된 경우 웹훅과 활동을 위한 헬퍼를 노출할 수 있습니다.
- Python
- TypeScript
chat.sent도 구독하세요. 다른 언어: 동일한 /2/activity/* HTTPS 경로를 직접 호출하세요 (구독 생성에는 사용자 컨텍스트 토큰, 스트림에는 앱 Bearer 토큰).
2. CRC (웹훅 전용)
웹훅을 사용하는 경우, 소비자 시크릿을 사용한 토큰의 HMAC-SHA256으로 챌린지-응답 검사(GETcrc_token)에 응답하세요. 이는 웹훅 제품이 기대하는 JSON 형태(일반적으로 sha256=<base64>)여야 합니다.
3. Chat XDK로 복호화
실시간 필드:payload.encoded_event, 선택적 payload.conversation_key_change_event. **event_uuid**로 전달 중복을 제거하고, 복호화된 이벤트에 포함된 **message_id**로 메시지 중복을 제거하세요—message_id는 서명된 콘텐츠의 일부인 반면, 시퀀스 ID는 백엔드가 할당하는 서명되지 않은 메타데이터입니다.
아래 스니펫은 가장 짧은 핸들러를 위해 두 개의 선택적 세션 저장소를 사용합니다: set_signing_keys는 참가자의 공개 키(한 번만 public-keys 엔드포인트에서 가져옴)를 보관하고, set_cache_keys(true)는 각 대화의 검증된 키를 유지하므로 decrypt_event는 이벤트만 있으면 됩니다. 페이로드가 conversation_key_change_event를 포함하는 경우 먼저 decrypt_events로 통과시키세요: 그러면 키 변경이 검증되고, 캐싱이 켜져 있으면 해당 키가 decrypt_event 호출을 위해 유지됩니다. 인스턴스 상태를 두지 않는 편을 선호하시나요? 대신 호출마다 키를 전달하세요—이 섹션 끝의 참고를 확인하세요.
JavaScript는 camelCase 이벤트 유형(message)을 사용합니다; 다른 바인딩은 "Message"와 snake_case 필드를 사용합니다.
- Python
- TypeScript
- Rust
- Go
- C#
- Java
extract_conversation_keys가 conversation_key_change_event에서 키를 복호화하고, decrypt_event는 이를 (그리고 발신자의 서명 키를) 명시적 인자로 받아들입니다—명시적으로 전달된 비어 있지 않은 인자는 언제나 저장소보다 우선합니다.
이력: GET /2/chat/conversations/{id}/events + decrypt_events — 시작하기를 참조하세요.
페이로드 형태 (실시간)
관행
- 플랫폼 요구 사항에 따라 웹훅 서명을 검증하세요
- 세션 저장소를 한 번만 설정하세요: 모든 참가자에 대해
set_signing_keys, 대화 키에 대해set_cache_keys(true) - 의존 메시지를 복호화하기 전에 (
decrypt_events를 통해) 키 변경 blob을 적용하세요 event_uuid로 전달 중복을 제거하고, 서명된message_id로 메시지 중복을 제거하세요