Threads にスレッドという仕組みは無い。reply_to_id で鎖を作る
スレッド オブジェクトは存在しない
Threads API には「スレッド」を表すオブジェクトがありません。連投に見える投稿は、返信の入れ子でできています。
作り方は、投稿コンテナを作るときに reply_to_id で直前の投稿を親に指定することです。リプ1の親は本投稿、リプ2の親はリプ1、リプ3の親はリプ2、という鎖になります。
relmea では、本投稿1本とリプ3〜5個を1つの連鎖として扱っています。
上限は1投稿500字。投げる直前に再検査する
1投稿の上限は500字です。超えると、その1本だけが例外で落ちます。
生成時に長さを見ていても、あとから文面を加工する工程があれば上限は変わります。そのため、API に投げる直前の文面で、実際の上限に対して再検査します。
導線リンクの回は最終リプの上限を下げる
導線リンクを入れる回があります。UTM 付きで約110字あり、それを足すと最終リプが500字に収まらなくなります。
この回は最終リプの上限を330字に下げています。上限を緩めるとリンクが黙って落ちるので、緩める方向には動かしません。
常駐トリガー1本で回す。単発投稿は全廃した
2026-08-23 に、Threads の単発投稿を全廃しました。以降は連鎖だけの1レーンで、専用シートと、10分間隔で動く常駐トリガー1本という構成です。
理由はトリガーの数です。GAS のトリガー上限は20件で、2026-08-19 の時点で13件がすでに常駐していました。投稿枠ごとに単発トリガーを撒く設計だと、本数を増やすたびに残りの7件を食います。
常駐1本が10分ごとにシートを見て、投げられる行があれば投げる形にしておけば、1日の本数を増やしてもトリガーは増えません。
Threads API は無料です。X への自動投稿は従量課金なので、同じ連投でも運用の考え方が変わります。
200 は成功ではない。消える2つの例と、鎖の数え直し方
例1: 5本とも 200 で、公開は4本
2026-08-19 の初回テストで、3秒間隔で5本を投げました。API は5本とも 200 を返しました。ところが公開されたのは4本で、リプ3が黙って消えていました。
エラーは出ていません。投げた側のログだけを見れば、全部成功です。
対策は二つです。
- 投稿の間合いを3秒から8秒に広げた
- 投げ終わったら、Threads 側の事実で鎖を数え直す。「投げた数」を成功と呼ばない
間合いを広げた効果が十分かどうかは、この記事の範囲では確かめていません。だから数え直しを外さずに残しています。
例2: 公開直後に審査で削除された
同じ 2026-08-19 に、リプ3が公開直後に審査で削除されました。通知の文言は「経済的な利益に関する非現実的な主張や約束」でした。該当したのは、「1時間で100案」のような速度の表現です。
これもAPI上は 200 で通っています。
審査語の弾き方そのものは、既存のコラムAI自動投稿の安全対策で扱っています。ここでは連鎖に特有の点だけ書きます。
生成時と投稿直前の両方で、言い回しの型を検査しています。
- 稼げる、儲かる、月収
- 「必ず」と成果の組み合わせ
- 倍率や速度の型(語順の両方向を見る)
1本でも引っかかれば、その連鎖ごと使いません。該当のリプだけ差し替えない理由は、鎖の途中が消えると、残りのリプの論理が飛ぶからです。リプ3が前提になっているリプ4は、リプ3が無い画面では意味が通りません。
鎖の検証は /conversation と /threads の突き合わせ
公開後の確認には落とし穴があります。/replies は、本投稿への直接の返信しか返しません。入れ子になった鎖を見るには /conversation を取ります。
ただし、会話APIは取りこぼすことがあります。そのため、自分の直近投稿の一覧(/threads)とも突き合わせています。片方だけを信じると、投稿できたのに鎖から外れた1本を見逃します。
もう一つ、記録しておくべきものがあります。permalink のショートコードでは API を引けません。本投稿の数値の投稿ID(media_id)を、投げた時点で必ず記録します。後から数え直すときの起点がこのIDです。
2207051 の正体は、本文中のファイル名だった
起きたこと
2026-09-19、リプ2が 400 で拒否されました。内容は OAuthException の code 1、error_subcode 2207051 です。メッセージは「action is blocked」でした。同じ拒否が3枠連続で続きました。
原因
原因は、本文中の ideas.md と outline.md というファイル名でした。拡張子が国別ドメインと同じ形をしているため、リンクとして扱われたようです。
- .md はモルドバ
- .py はパラグアイ
- .sh はセントヘレナ
- .ai はアンギラ
このほかにも同形の拡張子があります。
審査語でもアカウント制限でもありませんでした。同じ時間帯に、本投稿とリプ1(ファイル名なし)は通っていたからです。拒否されたのはファイル名を含む1本だけでした。表記を言い換えると、すぐに通りました。
対策
生成時と投稿直前の両方で、ファイル名らしき語を弾いています。
本物のURL(https://… の中)は弾きません。URL の中の文字列は、先頭の / があるかどうかで見分けて除外しています。
同根の問題: そのファイル名は元記事に無かった
もう一つ分かったことがあります。ideas.md も outline.md も、元の記事には出てこない語でした。
記事から派生した投稿48本が、すべて本文の空の記事から作られていました。記事の中身はタイトルと抜粋200字だけで、その情報から、記事に無いコマンド名やファイル名を生成していました。
直したのは入力側です。
- 本文が300字未満の記事は、派生元に選ばない
- 古い記事204本の本文を埋めた
拒否の原因は投稿側にありましたが、そこに至る原因は、材料の足りない入力にありました。
途中で落ちたら続きから。再開位置の書き方と2つの不具合
本投稿が通った時点で即記録する
連鎖の途中で落ちる前提で、再開できる形で状態を書きます。
最初の決まりは、本投稿が通った時点で、すぐにその投稿IDを記録することです。記録を後回しにすると、リプで落ちたときに本投稿をもう一度打ってしまいます。
次に、各リプを投げるたびに、「resume:<最後の投稿ID>:<済みリプ数>」という形で継続点を書きます。再開するときは、この最後の投稿IDを親にして、済みリプ数の次から続けます。
実例: 8日間見送られ続けた行
2026-08-30 から 09-07 にかけて、ある行が本投稿とリプ1まで出て、リプ2で落ちました。この行は8日間、見送られ続けました。原因は二つの不具合の重なりでした。
一つ目は、読む側の照合です。失敗したときに書く値は「resume:… / error:…」の形でした。ところが読む側が完全一致で照合していたので、自分の書いた継続点を読めませんでした。先頭一致に直しました。
二つ目は、済みリプ数の更新です。リプごとに数を進めておらず、失敗時に :0 を書き戻していました。この状態で再開すると、すでに投稿済みのリプをもう一度打つ形になっていました。リプごとに更新するよう直しました。
継続点の無い行は止める
本投稿が済んでいるのに継続点が無い行は、再開させません。リプを別のスレッドとして、バラバラに投稿してしまうからです。この状態の行は投げずに見送ります。
在庫と長さ。投げられない物を数えない
弾かれる下書きを在庫に数えない
補充の判断は、在庫の本数で動かしています。ここで、審査で弾かれる下書きや、賞味期限が切れた下書きを在庫に数えると、補充が走りません。
その1本が残っている限り、枠が毎回見送りになります。実際に、次の二つが起きました。
- 2026-08-29: あるアカウントで6件/日
- 2026-10-09〜10: 別のアカウントで5枠連続
「在庫がある」と「投げられる」は別のことなので、投げられない物は在庫に数えません。ここも、投げた数を成功と呼ばないのと同じ考え方です。
長さは下限が無かったことが原因だった
生成した文面が短すぎる問題もありました。上限だけを指定した初回の生成は、本投稿が80〜109字、リプが129〜198字で、器に届きませんでした。長さを決めていたのは上限ではなく、下限が無いことでした。
次に、1本ずつ150字の下限をかけて刻みました。すると歩留まりは53%、15本中8本になりました。
そこで、連鎖全体の平均(180字)で測ることにし、1本ずつにかけるのは絶対下限(リプ100字)だけにしました。
その後の実測(2026-08-24〜09-07)では、採用は129本中75本で58%でした。破棄の理由は次のとおりです。
- 連鎖が薄い: 37件
- リプが薄い: 14件
この58%が十分かどうかの判断はしていません。53%と58%は期間も本数も違う集計なので、厳密な比較にはなっていません。
まとめ
連投スレッドの自動投稿で押さえた点を並べます。
- スレッドは reply_to_id による入れ子の鎖で、500字の上限は投げる直前に再検査する
- 導線リンクの回は最終リプの上限を330字に下げる
- トリガーは常駐1本。GAS の上限20件に対し、13件がすでに常駐していた
- 200 が返っても消える。投げ終わったら /conversation と /threads で鎖を数え直す
- 2207051 の原因は、本文中のファイル名と国別ドメインの形の一致だった
- 継続点は本投稿の直後から、リプごとに更新する
- 投げられない下書きは在庫に数えない
どれも、投げた側のログでは気づけず、Threads 側の事実を見て初めて見つかったものです。
出典: relmea の GAS(ThreadsThread.gs)の注記と運用ログ
