おはようございます。まさきんです。
スマホに届く通知に「Claudeに投げる」ボタンを付けています。押すとその内容でClaudeのチャットが開く仕組みです。ところが日本語の長い文だと、URLに収まりきりませんでした。今日はその回避策として、全文をNotionに逃がした話を書いておきます。
※記事公開時点の情報です。最新の条件は公式サイトでご確認ください。
- 日本語はURLエンコードで1文字あたり約9文字に膨らみます。
- 僕の環境では2,000前後を目安にし、長い案内文は短くして通しました。
- 長文はNotionに全文を置き、ボタンにはページIDと冒頭だけを載せています。
- claude.ai/new?q= のWeb版は、公式ドキュメントで確認できませんでした。
- デスクトップ版は claude://claude.ai/new?q= が公式ヘルプに載っています。
通知を読むだけで終わっていた
我が家では、家の定期レポートや障害通知をTelegramで受け取っています。自動化の結果がスマホに次々と届く形ですね。以前、毎晩のカード利用をAIにチェックさせる仕組みも書きました。
ただ、通知は読んだらそれで終わりがちでした。「これどうしよう」と思っても、Claudeを開いて貼り付けるのが少し面倒です。なので、通知そのものに相談の入り口を付けることにしました。
ボタンの仕組み
通知には「🤖 Claudeに投げる」というボタンが付いています。中身は claude.ai/new?q=<依頼文> というURLです。押すと依頼文が入った状態でClaudeのチャットが開きます。
ボタンにはTelegramのInlineKeyboardButtonを使っています。公式のBot APIでは、url欄に「HTTPかtg://のURL」を指定できるとされています。一方で、押したときにボットへ送る callback_data は1〜64バイトの制限があります。今回はURLを開くだけなので、url欄だけで足ります。
| 項目 | 公式の仕様 | 僕の使い方 |
|---|---|---|
| text | ボタンの表示文字 | 🤖 Claudeに投げる |
| url | HTTPかtg://のURL | claude.ai/new?q=… |
| callback_data | 1〜64バイト | 使っていない |
| 通知の本文 | 1〜4096文字 | レポートや障害の内容 |
日本語は1文字9文字に膨らむ
ここで最初の壁に当たりました。日本語をURLに入れると、文字数が一気に増えます。
URLに使える文字は決まっています。それ以外はパーセントエンコードという形に置き換えます。RFC 3986では、1バイトを「%」と16進数2桁の3文字で表すと定めています。
日本語の文字は、UTF-8ではふつう3バイトです。RFC 3629の表でも、この範囲は3バイトの並びになっています。3バイトがそれぞれ3文字になるので、1文字で約9文字です。例えば「あ」は %E3%81%82 になります。
| 文字の種類 | UTF-8のバイト数 | エンコード後の文字数 |
|---|---|---|
| 半角英数字 | 1バイト | 1文字(そのまま) |
| ひらがな・漢字の多く | 3バイト | 約9文字 |
| 記号の一部 | 1〜3バイト | 3〜9文字 |
仕組みがわかると、なるほどという感じでした。日本語200文字で、URLは2,000文字近くになる計算です。
当初の案内文だけで2,000を超えた
最初は、依頼文の頭に長めの案内文を付けていました。「これは家の自動通知です」のような前置きですね。ところがその案内文だけで、エンコード後に2,000を超えてしまいました。
なので、案内文をぐっと短くして通しました。とはいえ本文が長いと、また同じ問題にぶつかります。ここで別の置き場所が必要だと感じました。
URLの長さに一律の上限はない
では、URLは何文字まで入るのか。調べてみると、一律の上限はないようです。
HTTPの仕様であるRFC 9110では、少なくとも8,000オクテットのURIに対応することを推奨しています。ただ、これは下限の推奨です。上限を決めているわけではありません。長すぎると、サーバーは「414 URI Too Long」を返すこともあります。
ブラウザやアプリ、途中のサービスごとに扱える長さは違います。なので、僕の環境では2,000前後を目安にしました。この数字は、どこでも通る保証ではありません。
+と%が化けた
もうひとつ、地味にハマったのが記号です。?q= に渡す文で「+」と「%」が化けました。正しくエンコードしても、表示される文が崩れたんです。
URLの世界では「+」を空白として読む慣習があります。WHATWGのURL標準でも、フォーム形式の解析で「+」を空白に置き換える手順があります。どこで化けているかは、ここでは断定しません。
対策はシンプルにしました。送る前に「+」と「%」を全角の「+」「%」に置き換えています。人が読む依頼文なので、全角でも困る場面は少ないと思います。
長文はNotionに退避した
本題の回避策です。長い文はURLに入れるのをやめました。
代わりに、Notionの「Claude受け渡し」というデータベースに全文を書きます。ボタンのURLには、そのページIDと冒頭だけを載せます。Claude側は、そのIDでNotionのページを読みに行きます。
| 比べる点 | 短文 | 長文 |
|---|---|---|
| URLに載せるもの | 依頼文そのもの | ページIDと冒頭 |
| 全文の置き場所 | URLの中 | Notionのページ |
| Claudeの動き | そのまま読む | Notionを読みに行く |
| 動作確認 | 送って確認した | 送って確認した |
短文も長文も、実際に送って動くことを確かめました。
Notion APIでできること
Notionの公式APIでは、データベースの下にページを作れます。既存のページかデータソースを親に指定する形です。
読む側では、ページIDを指定してページの情報を取り出せます。ただ、ページの本文は別の窓口です。「ブロックの子要素を取得する」APIで読むと公式に書かれています。
もうひとつ、制限にも気をつけたいところです。公式のリクエスト制限では、リッチテキスト1つの中身は2,000文字までとされています。長文を1つのブロックに詰めるのではなく、分けて書くのが無難かもしれません。
Claude側から読むには、Notionのコネクタを接続しておく必要があります。コネクタは、Claudeが外部サービスのデータにアクセスする仕組みです。権限は接続した人のものを引き継ぐと、公式ヘルプに書かれています。
手順の流れ
僕の仕組みを、流れとして並べるとこうなります。
- 通知スクリプトが、通知の本文と依頼文を用意する。
- 依頼文の「+」と「%」を全角に置き換える。
- エンコード後の長さが目安以内か確かめる。
- 短ければ、そのまま ?q= に入れてボタンを作る。
- 長ければ、Notionの受け渡しDBに全文を書く。
- ページIDと冒頭だけを ?q= に入れてボタンを作る。
- Telegramに通知とボタンを送る。
擬似コードにすると、だいたいこんな形です。
文 = 依頼文の「+」「%」を全角に置換
if エンコード後の長さ <= 目安:
q = 文
else:
ID = Notion受け渡しDBに全文を保存
q = "Notionページ " + ID + " を読んで。冒頭: " + 文の先頭
ボタンURL = "https://claude.ai/new?q=" + エンコード(q)
ボタン作りは別スクリプトに分けた
最初は、通知送信のスクリプトの中でURLを組み立てていました。ただ、置換や長さの判定が増えて見通しが悪くなりました。
なので、ボタンURLを作る処理を小さな別スクリプトに分けました。通知を送る側は、できたURLを受け取るだけです。通知の種類が増えても、同じ部品を使い回せます。
自動化の裏側の話はCloudflare Workers無料枠のCron上限の記事にも書いています。小さく分けておくと、あとで直すときに楽ですね。
Macのデスクトップアプリでの違い
MacのClaudeデスクトップアプリでも試しました。claude://new?q= だと、アプリが起動するだけでした。文面は渡りませんでした。
一方で、claude://claude.ai/new?q= なら文面が渡りました。公式ヘルプにも、この形の書式が載っています。ヘルプには、q の文は約14,000文字で切り詰められるとも書かれています。すべての値はURLエンコードが必要ともあります。
なお、Telegramのボタンのurl欄は公式にはHTTPかtg://のURLです。claude:// をボタンに直接入れる使い方とは別の話として見てください。
Web版の claude.ai/new?q= は、公式ドキュメントでは確認できませんでした。いまは動いていますが、将来変わるかもしれません。デスクトップ版の claude:// は公式ヘルプに書式が載っています。
スマホ1台で家の用事を回すなら、通信費も見直しておきたいところです。通知やAIとのやりとりが増えるほど、スマホは生活の窓口になりますね。
よくある失敗・落とし穴
この仕組みは「通知を読むだけで流してしまう人」に向いていると思います。「自動化の結果をAIに相談したい人」にも合うかもしれません。一方で、つまずきやすい点もいくつかありました。
- 案内文を長くしすぎて、本文が入らなくなる
- 文字数で数えて、エンコード後の長さを見落とす
- 「+」や「%」が化けて、依頼の意味が変わる
- ボタンのURLにトークンや個人のIDを混ぜてしまう
- 受け渡しページが溜まり続けて、整理が追いつかない
特にトークンの件は気をつけたいところです。URLは履歴や共有で人目に触れやすいです。受け渡し用のページIDだけを載せるのが安心ではないでしょうか。
受け渡しページの整理は、僕もまだ途中です。7日経ったら自動でアーカイブする処理は未実装です。ルールを決めても守られない話は164件のタスクを数えた記事でも書きました。仕組みで片付けるまでが宿題かな。
始める前に確認すること
- 通知に使うサービスでURLボタンが使えるか
- 依頼文のエンコード後の長さを数える仕組みがあるか
- プラスとパーセントの記号の扱いを決めたか
- 長文の退避先(Notionなど)を用意したか
- ClaudeにNotionのコネクタを接続したか
- URLにトークンや個人のIDを入れていないか
- 受け渡しページを片付けるルールがあるか
よくある質問
Q. なぜ日本語だとURLが長くなるの?
日本語の多くの文字は、UTF-8で3バイトになります。URLでは1バイトを「%XX」の3文字で表します。なので1文字あたり約9文字に膨らみます。
Q. URLは何文字まで入れられる?
一律の上限はないようです。HTTPの仕様では、8,000オクテット以上への対応を推奨しています。ただ、実際の上限はブラウザやサービスで違います。僕の環境では2,000前後を目安にしました。
Q. claude.ai/new?q= は公式の機能?
Web版については、公式ドキュメントで確認できませんでした。いまは動いていますが、将来変わるかもしれません。デスクトップ版の claude://claude.ai/new?q= は公式ヘルプに載っています。
Q. 「+」や「%」はなぜ化けるの?
URLでは「+」を空白として読む慣習があります。ただ、僕の環境でどこで化けたのかは断定していません。対策として、送る前に全角に置き換えています。
Q. Telegramのボタンに長いデータを持たせられない?
callback_data は1〜64バイトの制限があります。長い文を持たせる用途には向きません。なので、全文はNotionに置く形にしました。
Q. Notionに置いた全文をClaudeはどう読むの?
ClaudeにNotionのコネクタを接続しておきます。URLに載せたページIDを手がかりに、Claudeがページを読みに行きます。短文と長文の両方で、実際に動くことを確かめました。
Q. 受け渡しページは溜まらない?
溜まります。7日経ったら自動でアーカイブする処理は、まだ作れていません。いまの残課題のひとつです。
参考にした公式情報
- Telegram Bot API(InlineKeyboardButton・sendMessage)
- RFC 3986(URIの構文・パーセントエンコーディング)
- RFC 3629(UTF-8)
- RFC 9110(HTTPの仕様・URIの長さ・414)
- WHATWG URL Standard(フォーム形式の解析)
- Open Claude Desktop with a link(Claude Help Center)
- Open the Claude mobile app with a link(Claude Help Center)
- Use connectors to extend Claude’s capabilities(Claude Help Center)
- Notion connector(Claude)
- Create a page(Notion API)
- Retrieve a page(Notion API)
- Retrieve block children(Notion API)
- Request limits(Notion API)
まとめ
通知に「Claudeに投げる」ボタンを付けると、相談までの距離がぐっと縮まります。ただ、日本語はURLの中で約9倍に膨らみます。短文はそのまま、長文はNotionに逃がす形に落ち着きました。
残っている宿題は、受け渡しページの片付けです。通知を読んで流してしまいがちなら、ボタンをひとつ足してみるのはいかがでしょうか。
本記事にはアフィリエイト広告を含みます。当サイトのリンクを経由して商品・サービスへお申し込みいただいた場合、提携先企業から成果報酬を受け取ることがあります。 また、運営者は楽天グループに所属する社員であり、紹介プログラムを通じた報酬を受け取る場合があります。記事内容・評価は広告の有無にかかわらず、運営者の実体験と調査に基づき作成していますが、 上記の関係性をご理解のうえお読みください。詳しくは免責事項・アフィリエイト表記をご覧ください。
楽天モバイルの通信エリア・電波状況について気になることがある方は、公式の電波改善・調査依頼フォームからご相談いただけます。