---
title: "Pipedream"
description: "Automatiza flujos en Pipedream para búsqueda de tweets, perfiles, tendencias, disparadores HTTP y publicaciones aprobadas a través de TwexAPI."
---

Crea una integración de Twitter en Pipedream para búsquedas, perfiles, tweets en tendencia y publicaciones aprobadas. TwexAPI proporciona una sola REST API y una sola API key para cada flujo.

Elige un disparador webhook para entregas de agentes, un disparador programado para búsquedas recurrentes o pasos de código inline cuando necesites normalización personalizada.

## Elige un patrón de automatización en Pipedream

<CardGroup cols={2}>
  <Card title="Disparador HTTP + paso de código" icon="webhook">
    Recibe JSON estricto de un agente MCP, normaliza filas y enruta a Slack o Sheets.
  </Card>

  <Card title="Lecturas REST programadas" icon="calendar-clock">
    Llama a TwexAPI según una cadencia para búsqueda de tweets o informes de tendencias.
  </Card>

  <Card title="Paquete de componentes privado" icon="boxes">
    Empaqueta solicitudes autenticadas repetidas cuando todo el equipo necesita las mismas acciones.
  </Card>
</CardGroup>

Separa búsquedas, entregas por webhook, exportaciones de seguidores y escrituras aprobadas en flujos distintos. Flujos más pequeños exponen errores y límites de tasa con más claridad.

## Requisitos previos

* [API key de TwexAPI](https://twexapi.io/dashboard)
* Cuenta de Pipedream
* Cuentas conectadas opcionales para Slack, Google Sheets, Airtable o una base de datos
* Agente opcional compatible con MCP conectado a `https://api.twexapi.io/mcp`

## Integración API serverless

Inicia cada solicitud TwexAPI en `https://api.twexapi.io`. Envía la API key mediante el encabezado `Authorization: Bearer`. Mantén las keys en variables de entorno de Pipedream, no en exportaciones de pasos ni logs.

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

Usa `GET /balance` como primera comprobación de autenticación. Verifica la API key sin cambiar una cuenta de X.

## Helper compartido de solicitudes

```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();
    },
  },
});
```

## Acciones iniciales

| Acción | Ruta TwexAPI |
| --- | --- |
| Buscar tweets | `POST /twitter/advanced_search/page` |
| Obtener perfil de usuario | `GET /twitter/{screen_name}/about` |
| Buscar usuarios | `GET /twitter/search-user/{keyword}/{target_count}` |
| Obtener tendencias | `GET /twitter/global-trending/tweets` |
| Listar seguidores | `POST /v3/twitter/users/followers` |
| Crear tweet | `POST /twitter/tweets/create` |

### Paso de código para búsqueda de tweets

```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();
  },
});
```

## Flujo webhook-first

1. Crea un disparador HTTP en Pipedream.
2. Pide a un agente compatible con MCP que recopile filas de TwexAPI y devuelva JSON estricto.
3. Haz POST del JSON al endpoint de Pipedream.
4. Normaliza y deduplica filas en un paso de código.

### Paso de normalización en 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,
    }));
  },
});
```

Prompt sugerido para agente 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.
```

## Entrega de resultados

<CardGroup cols={2}>
  <Card title="Páginas de tweets" icon="search">
    Exporta `tweet_count`, `has_more` y `next_cursor`; devuelve filas con `tweet_id`, `text`, `author_username` y `created_at`.
  </Card>

  <Card title="Filas de perfil" icon="user-round">
    Exporta `user_id`, `username`, `name`, conteos de seguidores y campos de verificación.
  </Card>

  <Card title="Lotes de tendencias" icon="trending-up">
    Exporta país, tema, etiqueta de contenido y filas de tweets con metadatos del flujo.
  </Card>

  <Card title="Acciones de escritura" icon="send">
    Previsualiza con el [CLI](/sdks/cli) `--dry-run`. Las acciones de escritura requieren una cookie o `auth_token`.
  </Card>
</CardGroup>

## Manejo de errores

Enruta cada estado antes de exportar filas posteriores.

| Estado | Acción |
| ------ | ------ |
| `400` | Corrige campos de la solicitud; no reintentes sin cambios. |
| `401` | Reemplaza la API key. |
| `403` | Resuelve acceso a la cuenta o créditos. |
| `429` | Haz backoff y conserva el cursor. |
| `5xx` | Reintenta lecturas seguras con backoff acotado. |

Persiste un cursor de página solo después de que el procesamiento posterior tenga éxito.

## Recetas

### Búsqueda de tweets a Slack

1. Programa el flujo según tu cadencia de informes.
2. Llama a `POST /twitter/advanced_search/page`.
3. Filtra tweets por umbral de engagement.
4. Envía texto del tweet seleccionado, autor y enlace a Slack.

### Entrega de agente a Google Sheets

1. El disparador HTTP recibe JSON de entrega MCP.
2. Normaliza filas de tweets.
3. Haz upsert en Sheets por `tweet_id`.

### Página de seguidores a CRM

1. El paso HTTP o programado llama a `POST /v3/twitter/users/followers`.
2. Normaliza filas de seguidores.
3. El CRM hace upsert por `user_id`.
4. El data store conserva `next_cursor`.

## Lista de verificación de pruebas

* Confirma que el cuerpo del disparador es JSON válido.
* Usa `tweet_id` o `user_id` como clave de deduplicación.
* Guarda `next_cursor` en data stores de Pipedream para continuación programada.
* Mantén `TWEXAPI_API_KEY` solo en variables de entorno.
* Nunca registres tokens Bearer en la salida de pasos.

## Próximos pasos

* [Make](/guides/make)
* [Zapier](/guides/zapier)
* [n8n](/guides/n8n)
* [Entrega MCP de agente](/mcp/agent-handoff)
* [Referencia de API](/api-reference/overview)
