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.
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.
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
Producto y precio
Único o vitalicio para «para siempre», por plazo para pases, suscripción para membresías renovadas por factura.
- 2
Un cliente por usuario del chat
external_id: "tg:<user id>". Pide el correo solo para suscripciones: ahí van las renovaciones. - 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
Abre el acceso
Con
invoice.fulfilled, toma el id del chat demetadatay responde: un mensaje, una invitación de un solo uso, un rol. - 5
Comandos de pago
entitlements.check({ customer_external_id: "tg:<id>", product }).
Ejecuta el ejemplo
- 1
Instala
npm installenexamples/telegram-bot(Node 20.12+). - 2
Clave
Copia
.env.examplea.envy pon una clave de prueba (sk_test_…) enPERLY_PAY_SECRET_KEY. - 3
Prepara
npm run setupcrea el producto y el precio con tu clave e imprime sus ids para.env. - 4
Ejecuta
npm start(onpm run dev), según diga su README. - 5
Paga sin billetera
Escribe
/buyal bot, abre Pay y pulsa Simulate payment: el bot dice «Payment confirmed» y/secretresponde.
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.