【问题标题】:Telegram bot api - multiple instances of same botTelegram bot api - 同一机器人的多个实例
【发布时间】:2022-10-18 16:09:28
【问题描述】:

我想制作一个从软件发送错误消息的电报机器人。该软件将在 20 台不同的电脑上运行。每个日志将是这样的:

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

该机器人不接受任何命令。 我们的想法是在多台电脑上运行相同的 exe,这些电脑具有同一个机器人的多个实例,并且它们都写在同一个机器人聊天中。因为没有命令被发送,所以没有一个实例从其他实例窃取命令的风险。

这可能吗?还是有更聪明的方法来使用电报?我不想为每台机器安装一个新的机器人,因为快速处理会变得一团糟,并且需要为每台机器进行设置。

谢谢你

【问题讨论】:

    标签: bots telegram


    【解决方案1】:

    我通过使用telegraf 运行节点应用程序的两个实例进行了快速测试,使用bot.telegram.sendMessage 每 5 秒向我发送消息。

    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
    

    我找到了this。无论如何,这两个实例都毫无问题地不断向我发送消息。

    我想说这取决于库,除了发送这些消息之外,它还会轮询电报 API 以获取更新,即使我没有设置任何回调来管理它们。 事实上,如果你查看 Telegram Bot 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))
    

    在这一点上,我很有信心你能做到。

    【讨论】:

    • 谢谢你!明天解锁后将立即向您发送奖励。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我有同样的想法,但我正在尝试给机器人发短信,并希望所有应用程序都可以接收和处理数据。不幸的是,只有一个应用程序最后运行了一个应用程序才能拥有数据。

      这个问题有什么想法吗?

      感谢您阅读

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 2020-04-04
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2020-10-26
        • 1970-01-01
        • 2019-02-15
        • 2018-09-15
        相关资源
        最近更新 更多