Ir al contenido

Guías

Receta: bot de Telegram

Vende comandos de un bot, un rol o un grupo privado. Cada usuario recibe su propia factura; un webhook firmado abre el acceso.

Ver como Markdown

El bot nunca ve dinero. Con /buy envía al usuario su propio enlace a una factura; tu servidor oye invoice.fulfilled y abre el acceso. Cada comando de pago pregunta a Perly Pay, así que nada se pierde al reiniciar. Discord funciona igual, con un rol.

Con un asistente: la skill sell-bot-access del plugin de Perly Pay hace esta receta en tu proyecto. El ejemplo ejecutable es examples/telegram-bot (MIT) en el repositorio del plugin.

Cómo funciona

  1. 1

    Producto y precio

    Único o vitalicio para «para siempre», por plazo para pases, suscripción para membresías renovadas por factura.

  2. 2

    Un cliente por usuario del chat

    external_id: "tg:<user id>". Pide el correo solo para suscripciones: ahí van las renovaciones.

  3. 3

    /buy

    Una factura con el id del chat en metadata, enviada con un botón. Una factura por usuario al día, gracias a una clave de idempotencia.

  4. 4

    Abre el acceso

    Con invoice.fulfilled, toma el id del chat de metadata y responde: un mensaje, una invitación de un solo uso, un rol.

  5. 5

    Comandos de pago

    entitlements.check({ customer_external_id: "tg:<id>", product }).

/buy
const invoice = await pay.invoices.create(
  { line_items: [{ price: PRICE }], customer: customer.id, metadata: { chat_id: String(chatId) } },
  { idempotencyKey: `buy-${userId}-${today}` },
);
await tg("sendMessage", { chat_id: chatId, text: "Pay:", reply_markup: { inline_keyboard: [[{ text: "Pay", url: invoice.url }]] } });

Ejecuta el ejemplo

  1. 1

    Instala

    npm install en examples/telegram-bot (Node 20.12+).

  2. 2

    Clave

    Copia .env.example a .env y pon una clave de prueba (sk_test_…) en PERLY_PAY_SECRET_KEY.

  3. 3

    Prepara

    npm run setup crea el producto y el precio con tu clave e imprime sus ids para .env.

  4. 4

    Ejecuta

    npm start (o npm run dev), según diga su README.

  5. 5

    Paga sin billetera

    Escribe /buy al bot, abre Pay y pulsa Simulate payment: el bot dice «Payment confirmed» y /secret responde.

Errores comunes

  • Un mismo enlace de pago para todos: no se ve quién pagó. Una factura por usuario, con el id del chat.
  • Dar acceso cuando el usuario pulsa «Ya pagué». Solo lo abre el webhook o entitlements.check.
  • El acceso en la memoria del bot. Se pierde al reiniciar; pregunta a Perly Pay.