Ir al contenido

IDEAS PRÁCTICAS · ASIMOV INGENIERÍA

6 Integración de APIs para conectar agentes con Facebook y Twitter: Guía completa con ejemplos en Python

Aprende paso a paso cómo integrar tus agentes de atención al cliente con las APIs de Facebook y Twitter usando Python. Incluye autenticación, ejemplos de publicación y lectura, mejores prácticas, seguridad y comparativas de rendimiento.

Imagen ilustrativa · Austin Distel / Unsplash.

Table of contents

No titles in the blog post

Integración de APIs para conectar agentes con Facebook y Twitter

En la era del customer experience omnicanal, los agentes de soporte deben poder interactuar de forma fluida con los usuarios donde estos se encuentren: Facebook y Twitter son los canales más habituales. Este artículo muestra cómo conectar dichos canales mediante sus APIs y Python, cubriendo autenticación, código de ejemplo, buenas prácticas, seguridad y comparativas de rendimiento.

Mesa de trabajo con computadoras y material de planificación
Imagen ilustrativa · Marvin Meyer / Unsplash.

¿Por qué integrar Facebook y Twitter?

  • Omnicanalidad: Un único panel de control para responder mensajes, menciones y comentarios.
  • Automatización: Respuestas rápidas, clasificación de tickets y generación de informes.
  • Escalabilidad: APIs oficiales garantizan alta disponibilidad y cumplimiento de políticas de la plataforma.

Visión general de las APIs

Facebook Graph API

Permite gestionar páginas, publicar contenido, leer mensajes y suscribirse a webhooks para recibir notificaciones en tiempo real. Requiere una App de Facebook, permisos pages_manage_posts, pages_read_engagement y pages_messaging.

  • Endpoint principal: https://graph.facebook.com/v17.0/<PAGE_ID>/feed
  • Límites de tasa: 200 llamadas por hora por token de acceso.
  • Formato de respuesta: JSON.

Twitter API v2

Proporciona acceso a tweets, menciones, mensajes directos y streams en tiempo real. Necesita una Project y App en el Developer Portal, con permisos Tweet.read, Tweet.write y DM.read/DM.write según el caso.

  • Endpoint principal: https://api.twitter.com/2/tweets
  • Límites de tasa: 300 tweets por 15 min (standard); 1 000 000 tweets por mes (elevated).
  • Formato de respuesta: JSON.

Autenticación segura (OAuth 2.0)

Ambas plataformas utilizan OAuth 2.0. La recomendación es emplear tokens de acceso de corta vida y renovarlos mediante refresh tokens. En Python, la librería requests-oauthlib simplifica el flujo.

import os
from requests_oauthlib import OAuth2Session

# Variables de entorno (mantener seguras)
CLIENT_ID = os.getenv('FB_CLIENT_ID')
CLIENT_SECRET = os.getenv('FB_CLIENT_SECRET')
REDIRECT_URI = 'https://miapp.com/callback'
AUTH_URL = 'https://www.facebook.com/v17.0/dialog/oauth'
TOKEN_URL = 'https://graph.facebook.com/v17.0/oauth/access_token'

fb = OAuth2Session(CLIENT_ID, redirect_uri=REDIRECT_URI, scope=[
    'pages_manage_posts',
    'pages_read_engagement',
    'pages_messaging'
])
authorization_url, state = fb.authorization_url(AUTH_URL)
print('Visita esta URL y autoriza la app:', authorization_url)
# Después de la redirección, captura el código y obtén el token
code = input('Introduce el código de autorización: ')
token = fb.fetch_token(TOKEN_URL, client_secret=CLIENT_SECRET, code=code)
print('Token de acceso:', token['access_token'])

Para Twitter el proceso es similar, pero con el endpoint https://api.twitter.com/oauth2/token. Se recomienda usar la librería tweepy que ya incorpora la lógica de refresco.


Ejemplos prácticos en Python

Publicar una publicación en una página de Facebook

import requests, os

PAGE_ID = os.getenv('FB_PAGE_ID')
ACCESS_TOKEN = os.getenv('FB_ACCESS_TOKEN')
message = '🚀 ¡Nuestro nuevo chatbot está listo! #IA #Soporte'
url = f'https://graph.facebook.com/v17.0/{PAGE_ID}/feed'
payload = {
    'message': message,
    'access_token': ACCESS_TOKEN
}
resp = requests.post(url, data=payload)
if resp.status_code == 200:
    print('Publicación exitosa:', resp.json()['id'])
else:
    print('Error:', resp.status_code, resp.text)

Enviar un tweet mediante la API v2

import tweepy, os

client = tweepy.Client(
    bearer_token=os.getenv('TWITTER_BEARER'),
    consumer_key=os.getenv('TWITTER_API_KEY'),
    consumer_secret=os.getenv('TWITTER_API_SECRET'),
    access_token=os.getenv('TWITTER_ACCESS_TOKEN'),
    access_token_secret=os.getenv('TWITTER_ACCESS_SECRET')
)
response = client.create_tweet(text='🤖 Bot de soporte activado! #CustomerCare')
print('Tweet ID:', response.data['id'])

Webhooks y procesamiento en tiempo real

Para que los agentes reciban notificaciones instantáneas, configure webhooks en ambas plataformas.

  • Facebook: Suscripción a messages y messaging_postbacks mediante POST /{PAGE_ID}/subscribed_apps.
  • Twitter: Uso de Account Activity API o Filtered Stream endpoint para menciones y DMs.

Ejemplo de endpoint Flask que recibe eventos de Facebook:

from flask import Flask, request, abort
import hmac, hashlib, json, os

app = Flask(__name__)
VERIFY_TOKEN = os.getenv('FB_VERIFY_TOKEN')
APP_SECRET = os.getenv('FB_APP_SECRET')

def verify_signature(sig, payload):
    expected = 'sha1=' + hmac.new(APP_SECRET.encode(), payload, hashlib.sha1).hexdigest()
    return hmac.compare_digest(expected, sig)

@app.route('/fb/webhook', methods=['GET', 'POST'])
def fb_webhook():
    if request.method == 'GET':
        # Verificación de suscripción
        if request.args.get('hub.verify_token') == VERIFY_TOKEN:
            return request.args.get('hub.challenge')
        return 'Invalid token', 403
    # POST – eventos
    signature = request.headers.get('X-Hub-Signature')
    if not verify_signature(signature, request.data):
        abort(403)
    data = request.get_json()
    # Procesar mensajes
    for entry in data.get('entry', []):
        for messaging in entry.get('messaging', []):
            sender_id = messaging['sender']['id']
            if 'message' in messaging:
                text = messaging['message'].get('text')
                # Aquí se delega al motor de tickets o a un chatbot
                print(f'Nuevo mensaje de {sender_id}: {text}')
    return 'OK', 200

if __name__ == '__main__':
    app.run(port=5000, debug=True)

Para Twitter, la lógica es similar usando Flask + tweepy.StreamingClient.


Comparativa rápida: Facebook vs Twitter

CaracterísticaFacebook
Tipo de contenidoPublicaciones, historias, mensajes, comentarios
Límite de caracteres63 206 (texto) – sin límite para imágenes
AutenticaciónOAuth 2.0 (token de página)
WebhooksMensajes, reacciones, comentarios, leads
Rate limit200 llamadas/hora por token
CosteGratuito (sujeto a cuotas de uso)
CaracterísticaTwitter
Tipo de contenidoTweets, hilos, respuestas, DMs, polls
Límite de caracteres280 caracteres (texto)
AutenticaciónOAuth 2.0 + OAuth 1.0a (para DMs)
WebhooksAccount Activity API, filtered stream
Rate limit300 tweets/15 min (standard)
CosteGratuito (plan Elevated para mayor volumen)

Mejores prácticas y seguridad

  1. Almacena los tokens en un vault (HashiCorp Vault, AWS Secrets Manager). Nunca los incluyas en código ni repositorios.
  2. Usa HTTPS y valida firmas (X‑Hub‑Signature para Facebook, JWT para Twitter).
  3. Implementa retry exponencial ante errores 5xx o 429 (rate‑limit). Ejemplo con tenacity:
from tenacity import retry, wait_exponential, stop_after_attempt

@retry(wait=wait_exponential(multiplier=1, min=2, max=60), stop=stop_after_attempt(5))
def post_fb(message):
    # lógica de publicación (ver ejemplo anterior)
    pass
  1. Limita los scopes a lo estrictamente necesario (principio de menor privilegio).
  2. Monitorea los logs de auditoría: cada llamada a la API debe quedar registrada con timestamp, endpoint y código de respuesta.
  3. Configura alertas de uso de cuota para evitar bloqueos inesperados.
  4. Versiona tus contratos de API (p. ej., usa v17.0 en Graph API) y revisa los deprecation notices trimestrales.

Troubleshooting frecuente

SíntomaCausa típicaSolución
401 Unauthorized (Facebook)Token expirado o sin permisosRenueva el token mediante refresh token y verifica los scopes en la App Dashboard.
429 Too Many Requests (Twitter)Límite de tasa excedidoImplementa back‑off exponencial y revisa la cuota en Twitter Dev Portal.
Webhook no recibe eventosFirma inválida o URL no accesibleComprueba que el certificado SSL sea válido y que la verificación HMAC coincida.
Errores de codificación de caracteresUTF‑8 no especificadoAsegura que los headers incluyan Content-Type: application/json; charset=utf-8.

Escalabilidad y despliegue

Para entornos de producción con alto volumen de mensajes, considera:

  • Contenedores Docker o Podman para aislar la aplicación.
  • Orquestación con Kubernetes y Horizontal Pod Autoscaler basado en la métrica requests_per_second de la API.
  • Colas de mensajes (RabbitMQ o Kafka) para desacoplar la ingestión de webhook y el procesamiento de tickets.
  • Logs estructurados (JSON) enviados a ELK Stack o Grafana Loki para análisis en tiempo real.

Conclusión

Integrar los agentes de soporte con Facebook y Twitter mediante sus APIs permite crear una experiencia de cliente fluida, automatizada y medible. Con los ejemplos de Python presentados, la gestión segura de tokens, la implementación de webhooks y las mejores prácticas de rendimiento, estás listo para diseñar una solución robusta y preparada para el futuro.

© 2025 TechInsights Blog – Todos los derechos reservados.