Implementa un bot de Telegram en Python que recibe un ingrediente, consulta una API de recetas y responde con resultados formateados. Incluye estructura, comandos y manejo de errores.
Crear un bot de Telegram que busca recetas por ingrediente

Un bot de Telegram es una forma perfecta de practicar automatización: entrada del usuario → lógica → llamada a API → respuesta. El caso “recetas por ingrediente” combina todo lo útil: HTTP, JSON y UX conversacional.

1) Requisitos

  • Un token de bot creado con @BotFather.
  • Credenciales de una API de recetas (por ejemplo Edamam).
  • Python + librería de Telegram (según la versión que uses en clase).

2) Flujo del bot

  1. El usuario escribe /receta pollo o pulsa un botón.
  2. El bot valida el texto (que haya ingrediente).
  3. Hace una petición HTTP a la API (con requests o httpx).
  4. Parsea JSON y responde con título + enlace + imagen (si existe).

3) Petición a una API REST (ejemplo genérico)

import os
import requests

def buscar_recetas(ingrediente: str):
    app_id = os.getenv("EDAMAM_APP_ID")
    app_key = os.getenv("EDAMAM_APP_KEY")

    url = "https://api.edamam.com/api/recipes/v2"
    params = {
        "type": "public",
        "q": ingrediente,
        "app_id": app_id,
        "app_key": app_key,
    }

    r = requests.get(url, params=params, timeout=10)
    r.raise_for_status()
    data = r.json()
    return data.get("hits", [])

4) Respuesta “amigable”

En bots, importa el formato. Mejor enviar 3–5 recetas que 30 de golpe.

def formatear_hits(hits):
    if not hits:
        return "No he encontrado recetas. Prueba con otro ingrediente."

    lines = ["Recetas encontradas:"]
    for h in hits[:5]:
        recipe = h.get("recipe", {})
        title = recipe.get("label", "Receta")
        url = recipe.get("url", "")
        lines.append(f"- {title}\n  {url}")
    return "\n".join(lines)

5) Buenas prácticas

  • No hardcodees tokens: usa variables de entorno.
  • Timeouts: evita bots colgados con timeout.
  • Errores claros: responde con un mensaje útil si la API falla.