本文へ

ガイド

レシピ:Telegram ボット

ボットのコマンド、ロール、非公開グループを販売。ユーザーごとに専用の請求書を作り、署名付き Webhook がアクセスを開きます。

Markdown で開く

ボットはお金を見ません。/buy でユーザーに専用の請求書リンクを送り、あなたのサーバーが invoice.fulfilled を受けてアクセスを開きます。有料コマンドは毎回 Perly Pay に尋ねるため、再起動しても何も失われません。Discord もロールで同じように。

アシスタントと一緒に:このレシピは、Perly Pay プラグインの sell-bot-access スキルがあなたのプロジェクトで実行します。動くサンプルは、プラグインのリポジトリの examples/telegram-bot(MIT)です。

仕組み

  1. 1

    商品と価格

    一回払いか買い切りは「永久」、期間制はパス、サブスクリプションは請求書で更新するメンバーシップに。

  2. 2

    チャットのユーザーごとに顧客

    external_id: "tg:<user id>"。メールはサブスクリプションのときだけ尋ねます:更新はそこに届きます。

  3. 3

    /buy

    metadata にチャット ID を入れた請求書を、ボタンで送ります。冪等キーのおかげで、ユーザーごとに 1 日 1 件。

  4. 4

    アクセスを開く

    invoice.fulfilled で metadata からチャット ID を取り出して応答:メッセージ、一度きりの招待、ロール。

  5. 5

    有料コマンド

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

サンプルを動かす

  1. 1

    インストール

    examples/telegram-bot で npm install(Node 20.12+)。

  2. 2

    キー

    .env.example を .env にコピーし、PERLY_PAY_SECRET_KEY にテストキー(sk_test_…)を書きます。

  3. 3

    準備

    npm run setup があなたのキーで商品と価格を作成し、.env 用にその ID を表示します。

  4. 4

    起動

    README のとおり npm start(または npm run dev)。

  5. 5

    ウォレットなしで支払う

    ボットに /buy と送り、Pay を開いて Simulate payment を押します:ボットが「Payment confirmed」と言い、/secret が応答します。

落とし穴

  • 全員で 1 つの支払いリンクを共有すること:誰が支払ったかわかりません。ユーザーごとに、チャット ID 付きの請求書を。
  • ユーザーが「支払いました」を押した時点でアクセスを開くこと。開くのは Webhook か entitlements.check だけです。
  • ボットのメモリにアクセス権を持つこと。再起動で消えます。Perly Pay に尋ねてください。