如何通过Node.js实现Telegram Bot主动发起对话发送交易确认消息
Telegram Bot主动发送交易确认消息的Node.js解决方案
核心限制说明
Telegram的安全机制禁止Bot主动给从未发起过互动的用户发送消息,这是无法绕过的平台规则。所以首先必须让用户先和Bot产生互动(比如发送/start命令),之后Bot才能主动给用户发消息。
解决方案1:用户提前互动后主动发消息
步骤1:引导用户完成首次互动
在你的交易流程中添加提示,比如:
- 交易前告知用户「请先给[你的Bot名称]发送任意消息或/start命令,以便后续接收交易通知」
- 在交易成功页面提供Bot的跳转链接,引导用户完成互动
步骤2:Node.js代码实现发送消息
- 安装依赖库
npm install node-telegram-bot-api
- 编写发送消息的代码
const TelegramBot = require('node-telegram-bot-api'); // 替换为你的Bot Token(从@BotFather获取) const BOT_TOKEN = 'YOUR_BOT_TOKEN_HERE'; const bot = new TelegramBot(BOT_TOKEN, { polling: false }); // 仅发送消息,无需轮询 // 封装交易确认消息发送函数 async function sendTransactionNotification(chatId, transactionInfo) { try { const notificationText = ` 🎉 交易成功确认 交易ID:*${transactionInfo.id}* 金额:${transactionInfo.amount} 完成时间:${transactionInfo.timestamp} `.trim(); await bot.sendMessage(chatId, notificationText, { parse_mode: 'Markdown' }); console.log(`已向用户${chatId}发送交易通知`); } catch (err) { // 捕获用户未互动的403错误 if (err.response?.statusCode === 403) { console.error(`用户${chatId}未与Bot互动,请引导用户先发送消息`); } else { console.error('发送消息失败:', err.message); } } } // 调用示例:传入用户聊天ID和交易信息 sendTransactionNotification(123456789, { id: 'TXN-20240520-001', amount: '¥199.00', timestamp: '2024-05-20 16:45:30' });
解决方案2:通过链接自动触发互动(适合未提前互动的用户)
如果用户没提前和Bot互动,可以生成Telegram深度链接,引导用户点击后自动发送/start命令并携带交易参数,Bot接收后自动回复交易确认消息。
步骤1:生成跳转链接
链接格式:
https://t.me/你的Bot用户名?start=交易ID
示例:https://t.me/MyTradeBot?start=TXN-20240520-001
用户点击链接后,会直接打开Telegram并向Bot发送/start TXN-20240520-001
步骤2:Bot接收消息并自动回复
const TelegramBot = require('node-telegram-bot-api'); const BOT_TOKEN = 'YOUR_BOT_TOKEN_HERE'; const bot = new TelegramBot(BOT_TOKEN, { polling: true }); // 监听带参数的/start命令 bot.onText(/\/start (.+)/, async (msg, match) => { const chatId = msg.chat.id; const transactionId = match[1]; // 这里替换为你的交易查询逻辑,根据ID获取交易详情 const transactionDetails = await fetchTransactionById(transactionId); if (transactionDetails) { const replyText = ` 🎉 交易成功确认 交易ID:*${transactionId}* 金额:${transactionDetails.amount} 完成时间:${transactionDetails.timestamp} `.trim(); await bot.sendMessage(chatId, replyText, { parse_mode: 'Markdown' }); } else { await bot.sendMessage(chatId, '未找到对应交易信息,请检查交易ID'); } }); // 模拟交易查询函数 async function fetchTransactionById(txnId) { // 实际场景中从数据库或API获取 return { amount: '¥199.00', timestamp: '2024-05-20 16:45:30' }; }
内容的提问来源于stack exchange,提问作者maryimana butom
相关产品推荐
相关产品推荐

