Guias
Receita: bot do Telegram
Venda comandos de um bot, um cargo ou um grupo privado. Cada usuário recebe a própria fatura; um webhook assinado libera o acesso.
O bot nunca vê dinheiro. Com /buy, ele envia ao usuário o próprio link para uma fatura; o seu servidor ouve invoice.fulfilled e libera o acesso. Cada comando pago pergunta ao Perly Pay, então nada se perde ao reiniciar. O Discord funciona igual, com um cargo.
sell-bot-access do plugin do Perly Pay faz esta receita no seu projeto. O exemplo executável é examples/telegram-bot (MIT) no repositório do plugin.Como funciona
- 1
Produto e preço
Único ou vitalício para “para sempre”, por prazo para passes, assinatura para assinaturas renovadas por fatura.
- 2
Um cliente por usuário do chat
external_id: "tg:<user id>". Peça o e-mail só para assinaturas: as renovações vão para ele. - 3
/buy
Uma fatura com o id do chat em
metadata, enviada com um botão. Uma fatura por usuário por dia, graças a uma chave de idempotência. - 4
Libere o acesso
Com
invoice.fulfilled, pegue o id do chat emmetadatae responda: uma mensagem, um convite de uso único, um cargo. - 5
Comandos pagos
entitlements.check({ customer_external_id: "tg:<id>", product }).
Execute o exemplo
- 1
Instale
npm installemexamples/telegram-bot(Node 20.12+). - 2
Chave
Copie
.env.examplepara.enve coloque uma chave de teste (sk_test_…) emPERLY_PAY_SECRET_KEY. - 3
Prepare
npm run setupcria o produto e o preço com a sua chave e imprime os ids deles para o.env. - 4
Execute
npm start(ounpm run dev), como diz o README dele. - 5
Pague sem carteira
Mande
/buypara o bot, abra o Pay e clique em Simulate payment: o bot diz “Payment confirmed” e/secretresponde.
Erros comuns
- Um mesmo link de pagamento para todos: não dá para ver quem pagou. Uma fatura por usuário, com o id do chat.
- Liberar o acesso quando o usuário toca em “Já paguei”. Só o webhook ou
entitlements.checkliberam. - O acesso na memória do bot. Ele se perde ao reiniciar; pergunte ao Perly Pay.