Aller au contenu

Guides

Recette : bot Telegram

Vendez des commandes de bot, un rôle ou un groupe privé. Chaque utilisateur reçoit sa propre facture ; un webhook signé débloque l’accès.

Voir en Markdown

Le bot ne voit jamais l’argent. Sur /buy, il envoie à l’utilisateur son propre lien de facture ; votre serveur reçoit invoice.fulfilled et débloque. Chaque commande payante interroge Perly Pay : un redémarrage ne perd rien. Discord marche de la même façon, avec un rôle.

Avec un assistant : le skill sell-bot-access du plugin Perly Pay réalise cette recette dans votre projet. L’exemple exécutable est examples/telegram-bot (MIT) dans le dépôt du plugin.

Comment ça marche

  1. 1

    Un produit et un prix

    Unique ou à vie pour « pour toujours », durée fixe pour les pass, abonnement pour les adhésions renouvelées par facture.

  2. 2

    Un client par utilisateur du chat

    external_id: "tg:<user id>". Ne demandez un e-mail que pour les abonnements : les renouvellements y partent.

  3. 3

    /buy

    Une facture avec l’id du chat dans metadata, envoyée sous forme de bouton. Une facture par utilisateur et par jour, grâce à la clé d’idempotence.

  4. 4

    Débloquez

    Sur invoice.fulfilled, lisez l’id du chat dans metadata et répondez : un message, un lien d’invitation à usage unique, un rôle.

  5. 5

    Commandes payantes

    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 }]] } });

Lancez l’exemple

  1. 1

    Installez

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

  2. 2

    Clé

    Copiez .env.example vers .env et mettez une clé de test (sk_test_…) dans PERLY_PAY_SECRET_KEY.

  3. 3

    Préparez

    npm run setup crée le produit et le prix avec votre clé et affiche leurs ids pour .env.

  4. 4

    Lancez

    npm start (ou npm run dev), comme l’indique son README.

  5. 5

    Payez sans portefeuille

    Envoyez /buy au bot, ouvrez Pay et touchez Simulate payment : le bot répond « Payment confirmed » et /secret répond.

Pièges

  • Un seul lien de paiement partagé pour tous : impossible de savoir qui a payé. Une facture par utilisateur, avec l’id du chat.
  • Débloquer quand l’utilisateur touche « J’ai payé ». Seuls le webhook ou entitlements.check débloquent.
  • L’accès gardé dans la mémoire du bot. Il disparaît au redémarrage ; interrogez Perly Pay.