如何使用电报机器人 api 在群聊中接收消息

Posted

技术标签:

【中文标题】如何使用电报机器人 api 在群聊中接收消息【英文标题】:How to receive messages in group chats using telegram bot api 【发布时间】:2016-11-28 16:32:43 【问题描述】:

我的电报机器人在私人聊天中接收用户发送给我的机器人的消息,但不接收用户在群聊中发送的消息。用于获取群聊消息的任何选项/API。

【问题讨论】:

【参考方案1】:

与@botfather 交谈并禁用隐私模式。

【讨论】:

请注意您必须在添加到聊天之前将其关闭。否则你必须删除它并重新添加它 这不是真的,您可以在之前、之后、期间...随时进行操作。 我不确定,但踢机器人并将其添加回来解决了我的问题。花了我几个小时= =。 您必须在添加到聊天之前将其关闭 另一个注意事项是机器人必须是该组的管理员,无论隐私设置如何。否则,它将无法读取任何群组消息。 不,机器人需要成为管理员,或者需要禁用隐私模式。【参考方案2】:

BotFather 聊天中的序列:

:/setprivacy

BotFather:选择一个机器人来更改群组消息设置。

:@your_name_bot

BotFather:“启用” - 您的机器人将只接收以“/”符号开头或通过用户名提及机器人的消息。

“禁用” - 您的机器人将接收人们发送到群组的所有消息。

当前状态为:已启用

:禁用

BotFather:成功!新状态为:禁用。 /帮助

【讨论】:

我花了大约 2 个小时试图弄清楚这一点。谢谢老兄! 我想做一个补充。我注意到,如果您授予您的机器人在组中的管理权限,那么无论 /setprivacy 设置如何,它都可以查看所有消息。【参考方案3】:

默认情况下,机器人只会接收任何用户直接通过/command@YourBot any message you send 发帖发送给它的消息。 之后,它将通过 getUpdates API 调用可用。 在浏览器中它将是:

https://api.telegram.org/botToken/getupdates

在输出 JSON 中查找相关消息并获取 chatId。它将允许您回复:

https://api.telegram.org/botToken/sendmessage?chat_id=123456788&text=My Answer

【讨论】:

我在调用 getupdates 时收到 "ok":false,"error_code":401,"description":"Unauthorized" OK,那是因为它需要offset和limit参数【参考方案4】:

由管理员在组中制作您的机器人。

【讨论】:

【参考方案5】:

如果您在禁用隐私模式之前添加了您的机器人,您应该从组中删除该机器人并重新添加

【讨论】:

【参考方案6】:

您可以通过将/mybots 发送到Botfather 来访问所有机器人的所有可用设置。选择 bot,然后选择 Bot SettingsGroup Privacy。如果禁用(默认),您可以点击关闭

现在可以使用GetUpdates 接收聊天记录。这可以通过 HTTP API 或框架来完成。例如,在 C# (.NET Core) 中是这样的:

var bot = new TelegramBotClient(ApiToken);
var updates = bot.GetUpdatesAsync().Result;
foreach(var update in updates) 
    Console.WriteLine($"update.ChannelPost.Date update.ChannelPost.Text");

但请记住,此功能实现了某种完美的前向保密。因此,您只会收到在组隐私被禁用后发送的消息。因此,GetUpdates 结果在发布某些帖子之前为空。

【讨论】:

以上是关于如何使用电报机器人 api 在群聊中接收消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 asmack 在群聊中发送后收到多条消息

使用 XMPP 在群聊中传输文件

如何在 IOS 的 XMPP 群聊中接收通知

如何使用 Skype4COM 在 Skype 群聊中发送消息?

cos migration工具webhook推送

如何在没有机器人的情况下在 node.js 中接收我自己的电报消息