---
title: "Pipedream"
description: "TwexAPI 経由で Pipedream ワークフロー自動化を構築し、ツイート検索、プロフィール、トレンドツイート、HTTP トリガー、承認済み投稿を実現する。"
---

検索、プロフィール、トレンドツイート、承認済み投稿向け Pipedream Twitter 連携を構築します。TwexAPI はすべてのワークフローに1つの REST API と1つの API キーを提供します。

エージェントハンドオフには webhook トリガー、定期検索にはスケジュールトリガー、カスタム正規化にはインラインコードステップを選択してください。

## Pipedream 自動化パターンを選択

<CardGroup cols={2}>
  <Card title="HTTP trigger + code step" icon="webhook">
    MCP エージェントから厳密な JSON を受信し、行を正規化して Slack または Sheets にルーティング。
  </Card>

  <Card title="スケジュールされた REST 読み取り" icon="calendar-clock">
    ツイート検索またはトレンドレポート用に TwexAPI を定期呼び出し。
  </Card>

  <Card title="プライベートコンポーネントパッケージ" icon="boxes">
    チーム全体が同じアクションを必要とする場合、繰り返し認証済みリクエストをパッケージ化。
  </Card>
</CardGroup>

検索、webhook ハンドオフ、フォロワーエクスポート、承認済み書き込みを別ワークフローに分割してください。小さなワークフローの方がエラーとレート制限が明確になります。

## 前提条件

* [TwexAPI API キー](https://twexapi.io/dashboard)
* Pipedream アカウント
* オプション: Slack、Google Sheets、Airtable、データベース接続アカウント
* オプション: `https://api.twexapi.io/mcp` に接続された MCP 対応エージェント

## サーバーレス API 連携

すべての TwexAPI リクエストは `https://api.twexapi.io` から開始します。`Authorization: Bearer` ヘッダーで API キーを送信します。キーはステップエクスポートやログではなく Pipedream 環境変数に保持してください。

```bash
export TWEXAPI_API_KEY="YOUR_API_KEY"
```

`GET /balance` を最初の認証チェックとして使用してください。X アカウントを変更せず API キーを検証します。

## 共有リクエストヘルパー

```javascript
export default defineComponent({
  props: {
    twexapi: {
      type: "string",
      label: "TwexAPI API Key",
      secret: true,
    },
  },
  methods: {
    async twexapiRequest($, { method, path, body, params }) {
      const url = new URL(`https://api.twexapi.io${path}`);
      if (params) {
        Object.entries(params).forEach(([key, value]) => {
          if (value !== undefined && value !== null) {
            url.searchParams.set(key, String(value));
          }
        });
      }

      const response = await fetch(url, {
        method,
        headers: {
          Authorization: `Bearer ${this.twexapi}`,
          "Content-Type": "application/json",
        },
        body: body ? JSON.stringify(body) : undefined,
      });

      if (!response.ok) {
        throw new Error(`TwexAPI request failed with HTTP ${response.status}`);
      }

      return response.json();
    },
  },
});
```

## スターターアクション

| Action | TwexAPI route |
| --- | --- |
| ツイート検索 | `POST /twitter/advanced_search/page` |
| ユーザープロフィール取得 | `GET /twitter/{screen_name}/about` |
| ユーザー検索 | `GET /twitter/search-user/{keyword}/{target_count}` |
| トレンド取得 | `GET /twitter/global-trending/tweets` |
| フォロワー一覧 | `POST /v3/twitter/users/followers` |
| ツイート作成 | `POST /twitter/tweets/create` |

### ツイート検索コードステップ

```javascript
export default defineComponent({
  async run({ steps, $ }) {
    const response = await fetch("https://api.twexapi.io/twitter/advanced_search/page", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.TWEXAPI_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        searchTerms: ["AI agents lang:en"],
        sortBy: "Latest",
        nextCursor: "",
      }),
    });

    if (!response.ok) {
      throw new Error(`TwexAPI request failed with HTTP ${response.status}`);
    }

    return response.json();
  },
});
```

## Webhook ファーストフロー

1. Pipedream で HTTP トリガーを作成。
2. MCP 対応エージェントに TwexAPI 行を収集し厳密な JSON を返させる。
3. JSON を Pipedream エンドポイントに POST。
4. コードステップで行を正規化・重複排除。

### JavaScript 正規化ステップ

```javascript
export default defineComponent({
  async run({ steps }) {
    const payload = steps.trigger.event.body;

    return (payload.tweets || []).map((tweet) => ({
      id: tweet.tweet_id || tweet.id,
      url: tweet.public_url ?? `https://x.com/i/web/status/${tweet.tweet_id || tweet.id}`,
      author: tweet.author_username,
      text: tweet.text || tweet.full_text,
      created_at: tweet.created_at,
      route_used: payload.route_used,
      next_cursor: payload.next_cursor,
    }));
  },
});
```

推奨 MCP エージェントプロンプト:

```text
Use Twexapi MCP to get quote tweets for tweet ID 1803006263529541838.
Return only JSON with route_used, source_tweet_id, has_more, next_cursor, and tweets.
Each tweet must include tweet_id, author_username, text, created_at, and public_url.
Do not call write endpoints.
```

## 結果ハンドオフ

<CardGroup cols={2}>
  <Card title="ツイートページ" icon="search">
    `tweet_count`, `has_more`, `next_cursor` をエクスポート。`tweet_id`, `text`, `author_username`, `created_at` 付き行を返す。
  </Card>

  <Card title="プロフィールデータ" icon="user-round">
    `user_id`, `username`, `name`, フォロワー数、認証フィールドをエクスポート。
  </Card>

  <Card title="トレンドバッチ" icon="trending-up">
    国、トピック、コンテンツタグ、ワークフローメタデータ付きツイート行をエクスポート。
  </Card>

  <Card title="書き込みアクション" icon="send">
    [CLI](/sdks/cli) `--dry-run` でプレビュー。書き込みアクションには cookie または `auth_token` が必要。
  </Card>
</CardGroup>

## エラー処理

下流行をエクスポートする前に各ステータスをルーティングしてください。

| ステータス | 対処法 |
| ------ | ------ |
| `400` | リクエストフィールドを修正。変更なしでリトライしない。 |
| `401` | API キーを差し替え。 |
| `403` | アカウントアクセスまたはクレジットを解決。 |
| `429` | バックオフし、カーソルを保持。 |
| `5xx` | 安全な読み取りに上限付きバックオフでリトライ。 |

下流処理が成功した後にのみページカーソルを永続化してください。

## レシピ

### ツイート検索から Slack

1. レポート頻度でワークフローをスケジュール。
2. `POST /twitter/advanced_search/page` を呼び出し。
3. エンゲージメント閾値でツイートをフィルター。
4. 選択ツイートの本文、著者、リンクを Slack に送信。

### エージェントハンドオフから Google Sheets

1. HTTP トリガーが MCP ハンドオフ JSON を受信。
2. ツイート行を正規化。
3. `tweet_id` で Sheets に upsert。

### フォロワーページから CRM

1. HTTP またはスケジュールステップが `POST /v3/twitter/users/followers` を呼び出し。
2. フォロワー行を正規化。
3. CRM が `user_id` で upsert。
4. データストアが `next_cursor` を保持。

## テストチェックリスト

* トリガーボディが有効な JSON であることを確認。
* `tweet_id` または `user_id` を重複排除キーとして使用。
* スケジュール継続用に Pipedream データストアに `next_cursor` を保存。
* `TWEXAPI_API_KEY` は環境変数のみに保持。
* ステップ出力に Bearer トークンをログしない。

## 次のステップ

* [Make](/guides/make)
* [Zapier](/guides/zapier)
* [n8n](/guides/n8n)
* [Agent MCP Handoff](/mcp/agent-handoff)
* [API Reference](/api-reference/overview)
