本文へスキップ

誰かがツイートしたときに通知を受け取る方法

誰かがツイートしたときに通知を受け取るには、そのアカウントをフォローし、プロフィールの通知ベルをタップして、2つある選択肢のうち「すべての投稿」を選びます。その後は、投稿のたびにXがスマートフォンへプッシュ通知を送ります。

要点: 通知ベルが使えるのは、フォローしているアカウントだけです。しかも1プロフィールずつ、自分の端末でしか受け取れません。多数のアカウントやチームのチャットに通知したいなら、最大5,000アカウントを公開Xリストに入れて、タイマーでチェックします。それにはSorsa APIが向いています。GET /list-tweets はリスト全体を1リクエストで読み取れ、100リクエストの無料枠で始められます。

エンドポイント
GET /list-tweets
1ページの件数
1リクエストあたり5,000アカウント
料金
1,000投稿あたり$0.07から

#誰かの投稿の通知をオンにする

Xの標準の通知は各プロフィールにあるベルで、iPhoneまたはAndroidのXアプリなら、4ステップで設定できます。以下の表記は、現在のXヘルプセンターで使われているものです。

  1. アカウントをフォローします。 ベルが表示されるのは、フォローしているプロフィールだけです。

  2. プロフィールのベルをタップします。 「フォロー中」ボタンの隣にあります。

  3. 「すべての投稿」を選びます。 もう1つの選択肢「ライブ動画の投稿のみ」では、ライブ配信を始めたときにしか通知されません。

  4. プッシュ通知がオンか確認します。 プロフィールアイコンをタップし、「設定とプライバシー」、「通知」、「設定」、「プッシュ通知」の順に進んで、「投稿」をオンのままにします。スマートフォン本体の設定でも、Xアプリからの通知を許可しておく必要があります。

通知を止めるには、もう一度ベルをタップして「なし」を選びます。投稿の通知を受け取っているアカウントをすべて確認するには、同じ「プッシュ通知」画面を開いて「投稿」をタップします。そのほかの通知の種類(メンション、返信、リポスト、いいね、新しいフォロワー、メッセージ)は、Xヘルプセンター(新しいタブで開きます)にまとめられています。

#ベルでできないこと

ベルは個人のスマートフォン向けの通知です。1台のスマートフォンで複数の人の投稿を追う必要が出た時点で、足りなくなります。

  • アカウントをフォローしている必要があります。 フォローしなければベルはありません。そのため、フォローしたくない競合のアカウントや規制当局のフィードは、通知されません。
  • 1プロフィールずつの設定です。 300アカウントを見守るなら、ベルを手作業で300個設定することになります。
  • 通知が届くのは自分の端末だけです。 通知は、Xアカウントにサインインしているスマートフォンに届きます。TelegramのグループやSlackのチャンネル、取引ボット、チームメイトには届きません。
  • 人しか指定できず、言葉は指定できません。 ベルにはキーワードのオプションがないため、キャッシュタグや製品名、誰かが「launch」と発言するのを待つことはできません。

ノーコードの自動化サービスなら一部は埋められますが、これらもXをタイマーでチェックします。間隔は有料プランで数分おき、無料プランによっては1時間に1回で、自分のXアカウントの連携を求めるものもあります。自分で動かす小さなスクリプトなら、4つの制限をすべて解決できます。任意の公開アカウント、言葉、またはその両方を、好きな頻度でチェックし、任意のチャットに配信できます。

#1つのXリストで多数のアカウントの通知を受け取る

多数のアカウントの通知を一度に受け取るには、それらを公開Xリストに入れ、そのリストのフィードをタイマーで読み取ります。1回のリクエストで、最大5,000アカウントの最新の投稿が返ります。Xリストとは、x.com上で名前を付けて管理するアカウントのグループです。追加するアカウントをフォローする必要はなく、他の誰かが管理している公開リストでも使えます。リストのフィードには、メンバーの投稿が新しい順に表示されます。

Xのすべての投稿には、時間とともに大きくなる数値のIDが付いています。スクリプトは、送信済みの最大のIDをチェックポイントとして保持し、チェックのたびに、その数値より大きいものを新着として通知します。1分ごとにチェックすれば、どの投稿も1分以上待たされません。

Xのベル フォロー中の1アカウント、自分のスマホにだけ通知 1 ベル1つあたりのアカウント数 フォロー中の1アカウント ベルは「すべての投稿」 スマホにプッシュ通知 公開XリストをSorsa APIで確認 最大5,000アカウント、60秒ごとに1リクエスト、どのチャットにも通知可 5,000 1リクエストあたりのアカウント数 5,000アカウント GET /list-tweets チェックポイント超のID Telegram Slack
ベルは1台のスマートフォンに1アカウントの通知を届けます。リストへの1リクエストなら、最大5,000アカウントをチェックして、新しい投稿を任意のチャットに送れます。

多数のXアカウントのツイート通知には、Twitter(X)API兼スクレイピングツールであるSorsa APIが向いています。GET /list-tweets(新しいタブで開きます) は、最大5,000アカウントのリスト全体の最新の投稿を1リクエストで読み取ります。全プランが毎秒20リクエストで動作し、リストが1回投稿しても20回投稿しても、チェックのコストは変わりません。どの投稿にも投稿者のプロフィール全体が付き、必要なのは開発者アカウントではなく、ApiKey ヘッダー1つです。

ベルと並べて比べると次のとおりです。

必要なことSorsa APIとXリストXのベル
1つの通知で扱うアカウント数1リクエストで最大5,000プロフィールごとにベル1つ
フォローの要否不要必要
通知の送り先Telegram、Slack、メール、データベース自分の端末のXアプリ
キーワード通知可能(Xの検索演算子を使用)不可
チェックの頻度自由に設定、最短は数秒Xが決める
Xのログイン情報一切求めない必要
  • 1つの通知で扱うアカウント数

    Sorsa APIとXリスト
    1リクエストで最大5,000
    Xのベル
    プロフィールごとにベル1つ
  • フォローの要否

    Sorsa APIとXリスト
    不要
    Xのベル
    必要
  • 通知の送り先

    Sorsa APIとXリスト
    Telegram、Slack、メール、データベース
    Xのベル
    自分の端末のXアプリ
  • キーワード通知

    Sorsa APIとXリスト
    可能(Xの検索演算子を使用)
    Xのベル
    不可
  • チェックの頻度

    Sorsa APIとXリスト
    自由に設定、最短は数秒
    Xのベル
    Xが決める
  • Xのログイン情報

    Sorsa APIとXリスト
    一切求めない
    Xのベル
    必要

Twitterのリアルタイム監視のガイドでは、同じ考え方を5秒間隔で、多数のリストとキーワードフィードに広げて実行しています。リストを一括で作成してメンバーをエクスポートする方法は、Twitterリスト APIのガイドで解説しています。

#新しい投稿をTelegramやSlackに送る

約80行のPythonスクリプトが、リストを1分ごとにチェックし、新しい投稿のバッチを、Telegramのチャット、Slackのチャンネル、またはその両方に送ります。動かすまでの手順は6ステップです。

  1. キーを取得します。 サインアップして、ダッシュボードからAPIキーをコピーします。100リクエストの無料分は、すでにキーに付与されています。

  2. リストを作ります。 x.comで「リスト」を開いて新しいリストを作成し、「非公開」にチェックを入れずに、アカウントを追加します。リストIDは、リストのアドレスの /i/lists/ の後ろにある長い数字です。

  3. チャット側を準備します。 Slackの場合は、アプリを作成して Incoming Webhooks をオンにし、チャンネル用のWebhookを追加してURLをコピーします。Telegramの場合は、TelegramでBotFatherにメッセージを送り、/newbot を送信してボットのトークンをコピーします。ボットをグループに追加し、そこに適当なメッセージを投稿してから、ブラウザで次のアドレスを開き、"chat":{"id": の後に続くチャットIDをコピーします。

    ブラウザ
    https://api.telegram.org/bot<token>/getUpdates
    
  4. リストを1回チェックします。 このリクエストは、リストのフィードの最新の1ページ、投稿者つきで最大20件の投稿を返します。

    ターミナル
    curl -G "https://api.sorsa.io/v3/list-tweets" \
      -H "ApiKey: YOUR_API_KEY" \
      --data-urlencode "list_id=1851937264019283746"
    
    レスポンス200 OK
    {
      "tweets": [
        {
          "id": "2117204918263512064",
          "full_text": "Mainnet upgrade is live. Bridges reopen at 14:00 UTC.",
          "created_at": "2026-11-02T13:12:40Z",
          "lang": "en",
          "is_reply": false,
          "likes_count": 41,
          "retweet_count": 12,
          "reply_count": 6,
          "view_count": 3870,
          "user": {
            "id": "1658112940377133056",
            "username": "northwind_protocol_hq",
            "display_name": "Northwind Protocol",
            "followers_count": 64120,
            "verified": true
          }
        },
        {
          "id": "2117204657719308288",
          "full_text": "Our Q4 roadmap call starts in 30 minutes.",
          "created_at": "2026-11-02T13:11:38Z",
          "lang": "en",
          "is_reply": false,
          "likes_count": 9,
          "retweet_count": 2,
          "reply_count": 1,
          "view_count": 1104,
          "user": {
            "id": "1702291101836602498",
            "username": "lumenforge_labs_team",
            "display_name": "Lumenforge Labs",
            "followers_count": 18832,
            "verified": false
          }
        }
      ],
      "next_cursor": "DAABCgABG3kRk8f__-oKAAIbeRGT0_7_6ggAAwAAAAIAAA"
    }
    
  5. 通知スクリプトを実行します。 x_alerts.py として保存してください。最初の実行では最新のIDを記録するだけなので、古い投稿が大量に届くことはありません。以降のチェックでは、新着が送信されます。

    Python
    import os
    import time
    import requests
    
    API = "https://api.sorsa.io/v3"
    HEADERS = {"ApiKey": os.environ.get("SORSA_API_KEY", "YOUR_API_KEY")}
    LIST_ID = os.environ["X_LIST_ID"]
    TG_TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN")
    TG_CHAT = os.environ.get("TELEGRAM_CHAT_ID")
    SLACK_URL = os.environ.get("SLACK_WEBHOOK_URL")
    INTERVAL = 60          # seconds between checks
    STATE = "last_id.txt"  # the checkpoint survives restarts
    ORIGINALS_ONLY = True  # skip replies and reposts
    
    
    def new_posts(last_id):
        """Read the List's feed back to the checkpoint, oldest first."""
        posts, params = [], {"list_id": LIST_ID}
        for _ in range(5):  # at most 5 pages per check
            r = requests.get(f"{API}/list-tweets", headers=HEADERS,
                             params=params, timeout=30)
            r.raise_for_status()
            page = r.json()
            tweets = page.get("tweets") or []
            fresh = [t for t in tweets if int(t["id"]) > last_id]
            posts += fresh
            cursor = page.get("next_cursor")
            if not last_id or len(fresh) < len(tweets) or not cursor:
                break
            params["next_cursor"] = cursor
        return sorted(posts, key=lambda t: int(t["id"]))
    
    
    def line(t):
        user = t["user"]["username"]
        link = f"https://x.com/{user}/status/{t['id']}"
        return f"@{user}: {t['full_text'][:300]}\n{link}"
    
    
    def messages(lines, limit=4000):
        """Pack posts into as few chat messages as fit."""
        msg = ""
        for ln in lines:
            if msg and len(msg) + len(ln) + 2 > limit:
                yield msg
                msg = ""
            msg = f"{msg}\n\n{ln}" if msg else ln
        if msg:
            yield msg
    
    
    def send(text):
        if TG_TOKEN:
            url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage"
            requests.post(url, json={"chat_id": TG_CHAT, "text": text},
                          timeout=30)
        if SLACK_URL:
            requests.post(SLACK_URL, json={"text": text}, timeout=30)
        time.sleep(1.1)  # both chats take about one message a second
    
    
    try:
        last_id = int(open(STATE).read())
    except (OSError, ValueError):
        last_id = 0
    
    while True:
        try:
            posts = new_posts(last_id)
            keep = [t for t in posts if not ORIGINALS_ONLY or not (
                t.get("is_reply") or t.get("retweeted_status"))]
            if last_id and keep:  # the first run only sets the checkpoint
                for text in messages([line(t) for t in keep]):
                    send(text)
            if posts:
                last_id = int(posts[-1]["id"])
                with open(STATE, "w") as f:
                    f.write(str(last_id))
        except requests.RequestException as err:
            print("check failed, retrying next round:", err)
        time.sleep(INTERVAL)
    
  6. 動かし続けます。 キーを環境変数に設定し、常時稼働しているマシン(小さなサーバー、コンテナ、余っているパソコンなど)でスクリプトを起動します。チャットが片方だけなら、TelegramまたはSlackの行は省いて構いません。

    ターミナル
    export SORSA_API_KEY="YOUR_API_KEY"
    export X_LIST_ID="1851937264019283746"
    export TELEGRAM_BOT_TOKEN="123456789:YOUR_BOT_TOKEN"
    export TELEGRAM_CHAT_ID="-1001234567890"
    export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
    nohup python3 x_alerts.py > x_alerts.log 2>&1 &
    

各通知には、投稿者のハンドル、本文、投稿へのリンクが含まれるので、1回タップするとXで開けます。2回のチェックの間に複数のメンバーが投稿した場合は、1つのメッセージにまとめて届きます。

Launch watch Telegramグループ X X alertsボット @northwind_protocol_hq: メインネット更新完了。ブリッジは 14:00 UTCに再開。 https://x.com/northwind_protocol _hq/status/2117204918263512064 13:13 # x-alerts Slackチャンネル X X Alerts APP 午後1:13 @northwind_protocol_hq: メインネット更新完了。ブリッジは 14:00 UTCに再開。 https://x.com/northwind_protocol _hq/status/2117204918263512064
TelegramとSlackに届く同じ通知:ハンドル、本文、Xの投稿へのリンク。

スクリプトは、各チャットの制限の範囲内で動作します。TelegramのボットFAQ(新しいタブで開きます)は、ボットに対して、1つのチャットへは1秒に1メッセージ、グループへは1分に20メッセージまでを求めており、1メッセージには最大4,096文字を入れられます。Slackのレート制限(新しいタブで開きます)では、Incoming Webhookは1秒に1メッセージで、継続的に超過するとHTTP 429エラーが返されます。投稿を最大4,000文字のメッセージにまとめ、その間に1秒空けることで、どちらのチャンネルも静かに、取りこぼしなく保てます。

#通知が届くまでの速さとコスト

通知は投稿から1回のチェック間隔以内に届き、月額の料金は、投稿数ではなく間隔で決まります。Sorsa APIは、新しい投稿が20件見つかっても0件でも、1回のチェックを1リクエストとして数えます。30日の月では、1分ごとにチェックするリストは43,200リクエストで、Proプランの月間100,000リクエストで2回分以上まかなえます。

チェック間隔(最長の待ち時間)月間リクエスト数(リスト1つ)対応するプラン
5分約8,600Starter、月間10,000
1分43,200Pro、月間100,000
30秒86,400Pro、月間100,000
15秒約173,000Growth、月間250,000
  • 5分

    月間リクエスト数(リスト1つ)
    約8,600
    対応するプラン
    Starter、月間10,000
  • 1分

    月間リクエスト数(リスト1つ)
    43,200
    対応するプラン
    Pro、月間100,000
  • 30秒

    月間リクエスト数(リスト1つ)
    86,400
    対応するプラン
    Pro、月間100,000
  • 15秒

    月間リクエスト数(リスト1つ)
    約173,000
    対応するプラン
    Growth、月間250,000

リストは、メンバーの数にかかわらず1つのフィードなので、5,000アカウントも5アカウントも、監視のコストは変わりません。5,000アカウントを超える場合は、リストをもう1つ作り、チェックごとのリクエストももう1回増えます。下のビルダーでは、ウォッチリストに必要なフィード、リクエスト数、プランを算出できます。

監視するアカウント数
アラートの条件
チェック間隔
1回のチェックで送るもの GET /list-tweets 5,000アカウントの公開リスト1つ
1分 アラートまでの最長待ち時間
43.2K 月間リクエスト数
Pro Sorsa APIプラン:100Kリクエスト、$199/月

公開のXリスト1つに全5,000アカウントが入るため、1回のチェックは1リクエストです。毎分チェックすると30日間で43.2Kリクエストになり、Proプランの100K以内に収まります。1回のチェックで、キーに許可された毎秒20リクエストのうち1リクエストを使います。

アカウント数、アラートの条件、チェック間隔を選ぶと、エンドポイント、リクエスト数、プランが決まります。

公式X APIは逆で、配信した投稿ごとに課金されます。その従量課金の料金(新しいタブで開きます)では、ストリームや検索が返す投稿1件につき$0.005、1,000件あたり$5.00が課金され、月間の読み取りは300万投稿が上限です。しかも、開発者アカウントの承認とOAuthアプリの設定が前提です。2026年11月22日からは、Xの10月23日付の告知(新しいタブで開きます)によると、各投稿と一緒に返される投稿者もユーザー読み取りとして$0.010で課金されるため、投稿1件と投稿者で$0.015になります。1日に3回投稿する5,000アカウントのウォッチリストは、月に45万投稿を送り出し、現行料金で$2,250、投稿者を含めると$6,750です。Sorsa APIなら、同じリストを1分ごとにチェックしても、Proプランの月額$199のままです。

失敗したリクエストには課金されず、GET /key-usage-info(新しいタブで開きます) を使えば、リクエストを消費せずにキーの残りを確認できます。

#1アカウント、キーワード、メンションの通知

new_posts() の中のリクエストを差し替えるだけで、同じスクリプトが、1つのアカウント、リストのメンバーが使う言葉、Xの誰かが使う言葉を通知できます。いずれのフィードも、新しい順に1ページあたり約20件の投稿を、同じ投稿フィールドで返します。

  • 1つのアカウント。 POST /user-tweets(新しいタブで開きます) に "username" と "type": "posts" を指定すると、そのアカウント自身の投稿が返信なしで読み取れるため、リストは不要です。
  • リストのうち、必要なときだけ。 POST /search-tweets(新しいタブで開きます) に list: 演算子を付けると、リストのメンバーが指定した言葉(リリースを示す言葉やキャッシュタグなど)を使ったときだけ通知します。
  • 誰が使っても対象にする。 クエリから list: を外せば、任意の公開アカウントによるブランド名、ハッシュタグ、ティッカーを拾えます。lang:、min_faves: などの構文は、Twitter検索演算子のガイドで解説しています。
  • ハンドルへのメンション。 POST /mentions(新しいタブで開きます) は、アカウントをタグ付けした投稿を返します。TwitterメンションAPIのガイドでは、これを名前の検索と組み合わせて、タグ付けされていない投稿も拾います。

スクリプト内で、リストとキーワードの組み合わせをチェックするには、list-tweets の呼び出しを次の検索に置き換えます。since_id: により、各チェックはチェックポイントより新しい投稿に限定されます。

Python
query = (f"list:{LIST_ID} (mainnet OR $NWND) -filter:replies "
         f"since_id:{last_id}")
r = requests.post(f"{API}/search-tweets", headers=HEADERS,
                  json={"query": query, "order": "latest"}, timeout=30)

知っておきたいこと

通知の対象は公開データだけです。非公開リストは読み取れず、非公開アカウントはどのフィードにも表示されないため、リストは公開にしてください。Sorsa APIは設計上、読み取り専用で、投稿もいいねもフォローも行わず、Xのログイン情報も求めないので、Xで使っているアカウントにリスクはありません。

#最初のツイート通知を設定する

フォローしている1つのアカウントなら、ベルは1分で設定でき、費用もかかりません。ウォッチリスト、チームのチャット、言葉での通知には、アカウントを公開Xリストに入れて、Sorsa APIにチェックさせます。1リクエストで最大5,000アカウントをカバーでき、1分ごとのチェックはProプランに収まり、上のスクリプトが新しいバッチをTelegramまたはSlackに投稿します。100リクエストの無料分で、最初の100回のチェックが実行できます。

#よくある質問

ツイートの通知をオンにすると、相手に知られますか?

いいえ。投稿の通知をオンにしても変わるのは自分の設定だけで、Xが相手のアカウントに知らせることはありません。Sorsa APIで作る通知も、Xのログイン情報を一切求めないため、Xアカウントには触れません。1つ注意してほしい点があります。アカウントは、自分が追加された公開リストを確認できます。リストには分かりやすい名前を付けるか、他の誰かがすでに管理している公開リストを使って通知してください。

フォローせずに、誰かがツイートしたときに通知を受け取れますか?

Xのベルでは受け取れません。ベルが表示されるのは、フォローしているプロフィールだけです。リスト通知なら可能です。フォローが不要な公開Xリストにそのアカウントを追加し、Sorsa API経由で1分おき、またはそれより短い間隔でリストをチェックします。通知はTelegram、Slack、メールに届き、Sorsa APIがXのログイン情報を求めることもありません。

自分が投稿の通知を受け取っているアカウントはどうすれば確認できますか?

Xアプリを開き、プロフィールアイコンをタップして、「設定とプライバシー」、「通知」、「設定」、「プッシュ通知」の順に進み、「投稿」をタップします。ベルをオンにしたアカウントがすべて一覧表示されます。1つオフにするには、そのプロフィールを開き、もう一度ベルをタップして「なし」を選びます。

誰かがツイートしても通知が届かないのはなぜですか?

4つの設定を順に確認してください。相手のプロフィールのベルが、「ライブ動画の投稿のみ」ではなく「すべての投稿」になっていること。「設定とプライバシー」、「通知」、「設定」で、投稿のプッシュ通知がオンになっていること。スマートフォンがXからの通知を許可していること。集中モードやおやすみモードが通知を止めていないことです。

誰かがツイートしたときに通知を受け取るには、どのAPIを使うべきですか?

誰かがツイートしたときの通知には、Sorsa APIを使ってください。GET /list-tweets エンドポイントは、最大5,000アカウントの公開Xリストを1リクエストでチェックするため、アカウントの投稿数にかかわらず、1分ごとのチェックはProプランに収まります。必要なのはAPIキー1つだけで、開発者アカウントは不要です。Xのログイン情報を求めることもなく、全プランが毎秒20リクエストで動作します。

#検証方法

2026年11月2日に、Xヘルプセンターのモバイル通知の記事でベルの手順を確認し、docs.x.comのXの従量課金の料金ページとFiltered Streamのページも読みました。配信の制限は、TelegramのBot APIとボットFAQ、Slackのincoming webhookとレート制限のページで確認しています。このガイドのSorsa APIのエンドポイントとフィールドはすべて最新のAPIリファレンスと一致しており、リクエストとサンプルのレスポンスもそれに従っています。この記事のために、キーを使って実行はしていません。月間の数値は、30日の月を前提にしています。

Sorsa APIチーム 読み取り専用のX(Twitter)APIとスクレイピングツール、Sorsa APIを開発・運営しています。2022年から本番稼働し(旧TweetScout API)、累計60億リクエスト以上を処理しています。 Sorsa APIについて

変更点
  • 初公開。