結論から言うと
Whiziがインポートを拒否した場合は、まず選んだファイルを確認してください。Whiziが読み込むのはChatGPTまたはClaudeのエクスポート内にあるconversations.jsonだけなので、エクスポートを解凍してzipそのものではなくそのファイルを選んでください。それ以外では、インポートが失敗する場所は二つのうちどちらかで、メッセージの文言を見ればどちらか分かります。エクスポートファイルを読み込むブラウザのパーサーか、パーサーが生成した会話を受け取るインポートのエンドポイントです。ファイルのエラーは選んだファイルに関するものです。アップロードのエラーはネットワークやセッションに関するものです。どのメッセージも一つの条件に紐づく固定文字列なので、あいまいな中間地点はありません。
何かを再試行する前に知っておくべき二つ目のことは、インポートを再実行してもチャットが重複することは絶対にない、という点です。インポートされた会話はすべてアカウント、ソース、ソースIDで一意に識別されるため、同じエクスポートを二回インポートしても、接続が切れた後に再開しても、インポートを二回クリックしても、同じチャットが一度だけ反映されます。
| 表示された内容 | 失敗した場所 | 対処法 |
|---|---|---|
| エクスポート形式やconversations.jsonに関するメッセージ | ファイルの読み込み中、アップロード前 | エクスポート内の別のファイルを選ぶ。詳細は下の表を参照 |
| セッションや接続に関するメッセージ | アップロードの途中 | 再度サインインするか再接続してから、インポートを再実行する |
| インポートできなかった会話の件数 | 一部のバッチが再試行しても失敗した | インポートを再実行すると、不足分だけ取り込まれる |
| 何も表示されないが、時間がかかっている | レート制限が想定どおり働いている | そのまま待つ。インポーターが自動で再試行する |
エクスポートファイルの読み込みで発生するエラー
これらはブラウザ側で発生するもので、1バイトもあなたの端末から送信される前に起こります。エクスポートファイル自体がアップロードされることは一切なく、ブラウザがそれを解析し、正規化された会話だけを送信します。つまりここでのエラーは、ファイルが送信段階まで到達しなかったことを意味します。
| メッセージ | 発生条件 | 対処法 |
|---|---|---|
That file is not a ChatGPT or Claude export. Look for conversations.json inside the export zip. | パーサーがどちらのエクスポート形式も識別できない、またはzipから認識できないペイロードが得られた場合 | エクスポートのアーカイブを開き、conversations.jsonを直接選ぶ |
There is no conversations.json inside that zip. Unzip it and pick the file directly. | 選んだzipに該当するエントリがない場合 | 自分でzipを解凍してconversations.jsonを見つけ、そのファイルを選ぶ |
That file is not valid JSON, so there was nothing to read. | 選んだファイルがJSONとして解析できない場合 | ChatGPTまたはClaudeからエクスポートをやり直し、そこからconversations.jsonを選ぶ |
That export has no conversations with text in them. | エクスポートは解析できるが会話が0件の場合 | そのエクスポートには本当にテキストの会話が含まれていない。Whizi側で直せることはない |
That file is too large for the browser to open. Pick the export .zip instead, which is read one file at a time. | 選んだ生の.jsonファイルがブラウザの読み込み上限を超えている場合 | 代わりに.zipを選ぶ。生の.jsonエクスポートは300MBまで受け付けられ、.zip側にはそれ自体の上限がない。conversations.jsonのエントリだけが解凍されるため |
Could not read that file. Please try again. | それ以外の理由でファイル読み込みがエラーになった場合 | 純粋な再試行のケース。同じファイルで繰り返す場合は、1エントリずつ読み込まれるエクスポートの.zipを選ぶ |
最初のメッセージは広い範囲をカバーするもので、一つの文字列が二つの条件、パーサーが識別できないエクスポート形式と、認識できないペイロードを返すzip、をカバーしています。どちらも対処法は同じで、エクスポートを解凍してconversations.jsonを直接選ぶことです。
アップロード自体で発生するエラー
ファイルが解析されると、インポーターは会話をバッチ単位で送信します。この段階で問題が起きる可能性は二つあり、どちらも回復可能です。
| メッセージ | 発生条件 | 対処法 |
|---|---|---|
Your session ended. Sign in again, then start the import. | インポートの途中でトークンの取得結果が空になった場合 | 再度サインインしてから、インポートを最初からやり直す。すでに取り込まれた分はそのまま残り、再実行時はスキップされる |
The import could not be finished. Check your connection and try again. | インポート実行中にそれ以外のアップロード失敗が起きた場合 | 接続を確認して、もう一度実行する |
三つ目の結果はエラーではなく、サマリーです。{count} could not be imported. Run the import again to pick them up. これは、再試行しても失敗し続けたバッチの会話数です。メッセージ内の指示がそのまま対処法のすべてで、二回目の実行が無駄にならない理由は、結論のセクションで説明した重複排除キーにあります。
インポートのエンドポイントが返すエラー
これらは、インポートのルート自体が生成するコードと文字列です。ウェブサイト側も同じ上限をミラーし、送信前に検証を行うため、これらが重要になるのは、何かが直接エンドポイントに送信している場合や、バッチが不正な形式になっている場合です。
| コード | メッセージ | 発生条件 |
|---|---|---|
invalid_import | A JSON object body is required. | インポートのボディがオブジェクトでない場合 |
invalid_source | An import source of chatgpt or claude is required. | sourceフィールドが欠けている、または対応する2種類のいずれでもない場合 |
empty_import | At least one conversation is required. | conversations配列が欠けている、または空の場合 |
too_many_conversations | This batch has {count} conversations, over the 25 per request limit. | 1リクエストに25件を超える会話が含まれる場合 |
too_many_messages | Conversation {n} carries {count} messages, over the 400 per request limit. Send the rest as an append. | 1リクエスト内の1会話に400件を超えるメッセージが含まれる場合 |
invalid_import | Conversation {n} is not an object. | conversations配列の要素がオブジェクトでない場合 |
invalid_import | Conversation {n} has no messages array. | 会話にmessages配列がない場合 |
invalid_import | Conversation {n} has an invalid append target. | appendToフィールドが文字列でもnullでもない場合 |
invalid_message | Conversation {n} message {m} is not an object. | メッセージのエントリがオブジェクトでない場合 |
invalid_message | Conversation {n} message {m} needs a role of "user" or "assistant". | メッセージのroleがこの2種類以外の場合 |
invalid_message | Conversation {n} message {m} has no text. | メッセージのcontentが文字列でない場合 |
request_too_large | Request is too large. | JSONボディが、宣言されたContent-Lengthまたは実際に読み込まれたバイト数のいずれかでルートのバイト上限を超えた場合 |
これらのメッセージの背景にある上限は、1リクエストあたり会話25件、1リクエストの1会話あたりメッセージ400件、そしてリクエストボディ最大2,000,000バイトです。ウェブサイトのインポーターは正確に25件と400件で分割し、各リクエストを1,200,000バイト未満に抑えます。これはリクエストのエンベロープ分の余裕を残すため、意図的に2,000,000バイトの上限より低く設定されています。400件を超える会話は拒否されず、分割されます。残りは、最初のスライスが作成したチャットへの追加(append)スライスとして送信されます。
大きなインポートは20秒ずつ一時停止する
会話のインポートは、ユーザー1人あたり1分間に20リクエストというレート制限がかかっています。大きなエクスポートはこの上限に達しますが、それは想定内の動作であり、故障ではありません。
これが起きてもエラーは表示されません。HTTP 429に達したインポートは表示に出ず、クライアントは20秒待ってから再試行します。これはバッチごとに最大4回まで行われます。つまり、大きなエクスポートで20秒ずつ停止しているように見えるインポートは、まさに想定どおりの動作をしています。そのまま実行させておいてください。
4回の試行後もバッチが失敗し続ける場合は、{count} could not be imported. Run the import again to pick them up. というサマリーに含まれます。この場合、サポートに問い合わせるのではなく、インポートをもう一度実行するのが対処法です。
インポートが意図的に除外するもの
一部のコンテンツは仕様として除外されるため、成功したインポートでも元の内容と比べると不完全に見えることがあります。
ChatGPTのエクスポートでは、画面に表示されていたブランチのみがインポートされます。再生成された返信や破棄された下書きは、メッセージとして再現されません。トランスクリプト以外のコンテンツもスキップされます。非表示の推論、分析ツールのコードと出力、ブラウジングのスクラッチパッド、カスタム指示のブロック、関数呼び出しなどです。
Claudeのエクスポートでは、思考ブロック、ツール呼び出し、添付ファイルが除外されます。インポートされるのはテキストブロックのみです。
ファイル内で読み取れるテキストを持たない会話は、黙って除外されるのではなく、カウントされてスキップとして報告されます。つまりスキップ件数は失敗ではなく、情報です。
使用できるタイトルがない会話はImported chatになり、120文字を超えるタイトルは切り詰められます。コンテンツ上限を超えるインポート済みメッセージは、拒否されるのではなく切り詰められます。そのため、1件のサイズ超過メッセージのために、その会話の残りが失われることはありません。
最後にタイムスタンプについてです。2015年1月1日より前の日付、または未来の日付が付いたインポート済みメッセージは、タイムスタンプとして破棄され、その行はインポートを実行した時刻にフォールバックします。元の日付ではなくインポートを実行した日付でチャットが表示された場合は、このルールに該当したということです。
インポートを再実行しても安全な理由
結論のセクションで説明した重複排除キーにはフォールバックがあります。エクスポートに安定した会話IDがない場合、キーはトランスクリプト自体のハッシュになります。そのため、再実行してもそれらの会話は一致し、二重にコピーが追加されることはありません。
知っておくべき一つの結果があります。インポート済みのチャットを削除してから同じエクスポートを再びインポートすると、重複として報告されるのではなく、そのチャットが復活します。インポートした会話を意図的に削除した場合は、それを戻したいのでない限り、そのエクスポートを再実行しないでください。
- エクスポートzipそのものではなく、その中のconversations.jsonを選ぶ
- 生の.jsonエクスポートは300MBまで受け付けられ、それを超える場合は.zipを使う
- セッションや接続のエラーは、サインインまたは再接続してから再実行する
- インポートできなかった件数が表示されたら、インポートを再実行する
- インポート済みのチャットを削除して再インポートすると、そのチャットが復活する
- 大きなインポートが20秒ずつ一時停止するのはレート制限であり、不具合ではない
- ChatGPTの再生成されたブランチ、そしてClaudeの思考ブロックと添付ファイルは、仕様として除外される
よくある質問
ChatGPTのエクスポートなのに、Whiziにそうではないと言われます。なぜですか?
そのメッセージはThat file is not a ChatGPT or Claude export. Look for conversations.json inside the export zip.で、パーサーが選んだファイル内でどちらの形式も識別できない場合、またはzipから認識できないペイロードが返された場合に表示されます。Whiziが読み込むのはconversations.jsonなので、エクスポートを解凍してそのファイルを直接選んでください。zipを選んで代わりにThere is no conversations.json inside that zip. Unzip it and pick the file directly.が表示された場合は、そのzipに該当するエントリが全くないということなので、エクスポートをやり直す必要があります。
インポートが途中で止まりました。もう一度実行するとチャットが重複しますか?
いいえ。再実行は、接続の切断、セッションの終了、バッチの失敗に対する正しい回復手段です。二回目の実行でも同じチャットが一度だけ反映され、不足分だけが取り込まれます。事前に行うべきクリーンアップの手順はありません。
なぜ一部の会話しかインポートされなかったのですか?
表示される件数には2種類あり、失敗を意味するのはそのうち一方だけです。{count} could not be imported. Run the import again to pick them up.は、再試行しても失敗し続けたバッチの件数で、インポートを再実行するのが対処法です。もう一方はスキップ件数で、これは失敗した会話ではなく、ファイル内で読み取れるテキストを持たない会話を報告するものです。
インポートがしばらく止まったままです。壊れていますか?
経過時間ではなく、また動き出すかどうかを見てください。約20秒の停止の後に処理が進むのはレート制限によるもので、クライアントは何も表示せずに20秒待ってから再試行します。実際に終了したインポートは、このページに載っているエラー文字列のいずれか、または{count} could not be imported. Run the import again to pick them up.というサマリーで、そのことを知らせます。何も表示されず、時々進捗があるだけなら、そのままにしておいてください。
ChatGPTやClaudeのエクスポートファイルはWhiziにアップロードされますか?
いいえ。エクスポートファイル自体がサーバーに届くことは一切ありません。ブラウザがそれを読み込み、解析し、正規化された会話だけを送信します。だからこそ、このページのすべての形式エラーは何かが送信される前に発生します。データの取り扱いの詳細は、Whiziがあなたのデータをどう扱うかをご覧ください。