Telegram机器人API - 同一个机器人的多个实例

4

我想制作一个 Telegram 机器人,用于发送来自软件的错误信息。这个软件将在 20 台不同的电脑上运行。每个日志都是这样的:

"电脑名称 - 日期时间 - 错误文本"。

该机器人不接受任何命令。想法是在多台电脑上运行相同的可执行文件,拥有同一机器人的多个实例,并且它们都写入同一个 bot-chat。由于没有发送命令,因此没有风险让一个实例从其他实例中窃取命令。

这可能吗?或者有没有更聪明的方式在 Telegram 上实现?我不想为每台机器创建一个新的机器人,因为这会很快变得混乱,并且需要为每台机器进行设置。

谢谢

2个回答

5

我进行了一个快速测试,运行了两个实例的Node应用程序,使用telegraf每5秒向我发送一条消息,使用的是bot.telegram.sendMessage函数。

const { Telegraf } = require('telegraf')

const bot = new Telegraf("<MY_BOT_TOKEN>")

bot.launch().then(
    setInterval(() => {
        bot.telegram.sendMessage('<MY_CHAT_ID>', `hello from ${process.env.INSTANCE_NUMBER}`)
    }, 5000)
)

它正常工作,但我也收到了这个错误。
Error: 409: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

关于这个问题,我在这里找到了这篇文章。不管怎样,这两个实例都可以正常发送消息。
我想说的是,这取决于库,除了发送这些消息之外,它还轮询电报API以获取更新,即使我没有设置任何回调来管理它们。 事实上,如果你检查电报机器人API的sendMessage文档,它并没有提到这样的错误。
这意味着你应该能够从同一机器人的多个实例发送这样的sendMessage调用,而不会有任何问题,只要注意你正在使用的库以及它在幕后执行的操作。如果现有的应用程序不适合你的用例,甚至可以实现自己的调用。

更新

我尝试发送消息,而没有启动机器人(也就是说没有使它获取更新),我没有收到错误消息。

const { Telegraf } = require('telegraf')

const bot = new Telegraf("<MY_BOT_TOKEN>")

setInterval(() => {
  bot.telegram.sendMessage('<MY_CHAT_ID>', `hello from ${process.env.INSTANCE_NUMBER}`)
}, 5000))

现在,我相信你已经能够做到了。


谢谢!明天一旦解锁,我会立即给您发送奖励。 - sharkyenergy

1
是的,您的“机器人”的多个实例可以使用相同的机器人令牌发送消息。问题在于,如果您的计算机同时开始发送过多的消息,则可能会遇到速率限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接