Vai al contenuto

Guide

Ricetta: bot Telegram

Vendi i comandi di un bot, un ruolo o un gruppo privato. Ogni utente riceve la sua fattura; un webhook firmato apre l’accesso.

Vedi come Markdown

Il bot non vede mai denaro. Con /buy manda all’utente il suo link a una fattura; il tuo server riceve invoice.fulfilled e apre l’accesso. Ogni comando a pagamento chiede a Perly Pay, quindi niente si perde al riavvio. Discord funziona allo stesso modo, con un ruolo.

Con un assistente: la skill sell-bot-access del plugin Perly Pay realizza questa ricetta nel tuo progetto. L’esempio eseguibile è examples/telegram-bot (MIT) nel repository del plugin.

Come funziona

  1. 1

    Prodotto e prezzo

    Una tantum o a vita per «per sempre», a durata per i pass, abbonamento per le membership rinnovate a fattura.

  2. 2

    Un cliente per utente della chat

    external_id: "tg:<user id>". Chiedi l’email solo per gli abbonamenti: lì vanno i rinnovi.

  3. 3

    /buy

    Una fattura con l’id della chat in metadata, inviata con un pulsante. Una fattura per utente al giorno, grazie a una chiave di idempotenza.

  4. 4

    Apri l’accesso

    Con invoice.fulfilled, prendi l’id della chat da metadata e rispondi: un messaggio, un invito monouso, un ruolo.

  5. 5

    Comandi a pagamento

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

Esegui l’esempio

  1. 1

    Installa

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

  2. 2

    Chiave

    Copia .env.example in .env e metti una chiave di test (sk_test_…) in PERLY_PAY_SECRET_KEY.

  3. 3

    Prepara

    npm run setup crea il prodotto e il prezzo con la tua chiave e stampa i loro id per .env.

  4. 4

    Avvia

    npm start (o npm run dev), come dice il suo README.

  5. 5

    Paga senza wallet

    Scrivi /buy al bot, apri Pay e premi Simulate payment: il bot dice «Payment confirmed» e /secret risponde.

Errori comuni

  • Lo stesso link di pagamento per tutti: non si vede chi ha pagato. Una fattura per utente, con l’id della chat.
  • Dare l’accesso quando l’utente preme «Ho pagato». Lo apre solo il webhook o entitlements.check.
  • L’accesso nella memoria del bot. Si perde al riavvio; chiedi a Perly Pay.