Skip to main content
画像やその他のファイルは、テキストと同じ会話鍵を使用します。Chat XDK(encrypt_stream / decrypt_stream)でバイトを暗号化し、/2/chat/media/upload ルート(サイドバー API リファレンス → Media)経由でアップロードし、encrypt_messagemedia_hash_key を添付します。 アップロード時は、DM スコープに media.write を含めてください。パスにはハイフン付きの会話 ID を使います(:-)。MIME や寸法は復号済みのバイトから取得することが望ましいです。 このパスは Posts メディアモデル(expansions=attachments.media_keysmedia.fields=variants など)ではありません。それらのパラメータは Posts に適用されます;E2EE X Chat の blob は media_hash_key と X Chat メディアダウンロードでアドレス指定されます。

暗号化

encrypt_stream / decrypt_stream はペイロード全体をメモリ内で処理します。大きなファイルの場合、stream_encryptor() / stream_decryptor() はインクリメンタルなオブジェクト(StreamEncryptor / StreamDecryptor)を返します: push でチャンクを供給し、最後に finish を 1 回呼び出します — ストリームが切り詰められた場合、finish はエラーを返します。

アップロード

API リファレンス → Media の下にある OpenAPI ページのリクエストボディを使用してください。サイズが必要な場合は、暗号化済みの blob サイズを優先してください。Finalize は添付とダウンロード用の media_hash_key を返します。一時的な 5xx はバックオフで再試行してください。Python/TypeScript ではメディアヘルパーが存在する場合は XDK を使用できます;それ以外は任意の言語で Bearer トークンを使って POST します。

添付ファイル付きで送信する

メディア添付付きで暗号化し、その後メッセージ送信ボディを POST します(フィールドマッピングは Getting Started と同じ)。

ダウンロードして復号する

パス: GET /2/chat/media/{conversation_id}/{media_hash_key}。レスポンスボディは暗号文です。受信メッセージでは、復号された添付ファイル / media_hashes から media_hash_key を読み取ります。 イベントの鍵バージョンで鍵を選択します。 各復号済みメッセージイベントは、そのコンテンツが暗号化された keyVersion(JS;他のバインディングでは key_version)を保持しています。添付ファイルはそのバージョンの会話鍵で復号してください — conversationKeys.keys[event.keyVersion] — 最新のものではありません。鍵ローテーション(たとえばメンバー追加)の後、最新の鍵では古いメッセージに添付されたメディアを復号できません。

ヒント

  • メディアが暗号化されたときと同じ会話鍵バージョンを使用する
  • 平文メディアや未加工の鍵をログに出力しない
  • MIME は復号に検出する
  • Web クライアント: 可能な場合はクライアント側で暗号化・復号する;OAuth トークンはサーバー側に保持する
各メディアルート(アップロード初期化、チャンク追加、アップロード確定、メディアダウンロード)の完全なリクエストとレスポンスのスキーマは、サイドバーの API リファレンス → Media の下にあります。