如何将我的机器人添加到 Telegram 频道?

94

我正在使用机器人发布重要新闻,但是当我使用sendMessage发送到频道时,我收到以下错误:

{"ok":false,"error_code":403,"description":"Error: Forbidden: bot is not a participant of the channel"}

变更日志中提到客户端无法向频道发送消息,那么还有其他方法吗?

因此,问题是如何将我的机器人添加到频道中?


这个链接通过图片描述了如何将Telegram机器人设置为你的频道管理员。 - Juggernaut
@Juggernaut的链接返回404错误。这里是从archive.org中获取的最后一个快照: https://web.archive.org/web/20190207105000/http://telmemeber.com/single/7/Make-telegram-bot-your-channel-admin - francis duvivier
4个回答

151

现在所有的客户端都允许这样做,但它不是非常简单。
在任何一个Telegram客户端中:

  1. 打开频道信息(在应用程序标题中)
  2. 选择“管理员”
  3. 添加管理员
  4. 联系人列表中没有机器人,所以您需要搜索。输入您的机器人用户名
  5. 点击该机器人用户名,使其成为管理员。

enter image description here


你知道如何获取私人频道的@channelusername吗?我是它的管理员。谢谢 - aborruso
@aborruso 好的,请看一下您最初的问题。 - Stas Parshin
我已经做了同样的事情(将我的机器人添加为频道管理员),但仍然出现“机器人不是频道参与者”的错误。 - Beatles1692
3
对于没有用户名的频道,只需为其指定一个用户名,使用机器人发送一条消息,sendMessage 的结果应包含一个 chat_id,在删除频道名称后可将其用于后续操作。请注意保持翻译内容与原文意思一致,同时使其更加通俗易懂。 - Johannes Kuhn
在任何Web客户端中都无法工作。我尝试了Z、K和legacy=1,但是这些Web客户端中的Administrators下没有Add Admin按钮。如果我检查移动和桌面客户端,我确实可以找到Add Addmin按钮。 请检查并相应更新您的答案,以便人们不需要像这样经历3个不同的Web客户端。 - francis duvivier
显示剩余4条评论

66
这是我如何将机器人添加到我的频道并设置通知的方法:
  1. 确保频道是公开的(您可以稍后将其设置为私有)
  2. 添加管理员 > 输入机器人用户名并使其成为管理员
  3. 您的机器人将加入您的频道
  4. 通过设置频道url来设置频道ID,例如

telegram.me/任意想要且可用的名称

该频道的ID将为@任意想要且可用的名称

现在设置您的机器人发送通知消息:

https://api.telegram.org/bot机器人TOKEN/sendMessage?chat_id=@任意想要且可用的名称&text=测试

机器人将通知的消息是:测试

我强烈建议对消息进行urlencode处理,例如

https://api.telegram.org/bot机器人TOKEN/sendMessage?chat_id=@任意想要且可用的名称&text=测试%20是否有效

在PHP中,您可以使用urlencode("测试是否有效");在JavaScript中,您可以使用encodeURIComponent("测试是否有效");

希望这有所帮助。


我该如何将其设置为私有? - CodeGuru
@CodeGuru - 如果您是电报频道管理员,可以在您的电报桌面或移动客户端中将此频道设置为私有。对我来说,这样做的方式是先将频道设为公开,通过机器人向该频道发送消息,然后将频道设为私有,机器人仍然可以在其中发送消息。因此,我认为它在某种程度上有效。但是经过一段时间后,它停止了工作。因此,我认为机器人无法向私人频道发送消息。 - vodolaz095
这里提到了一个疯狂的解决方案-https://dev59.com/21sX5IYBdhLWcg3waexx#39943226 - vodolaz095
还应该提到,“添加管理员”按钮仅在移动客户端和桌面客户端中存在。目前在Web客户端中不存在,已尝试webK alpha 0.9.1webZ alpha 1.22.3版本。 - francis duvivier

32

目前为止:

  • 只有频道创建者可以添加机器人。
  • 其他管理员无法将机器人添加到频道。
  • 频道可以是公共的或私人的(不重要)。
  • 机器人只能作为管理员添加,而非成员。*

将机器人添加到您的频道中:

  • 单击频道名称: enter image description here

  • 单击管理员: enter image description here

  • 单击添加管理员: enter image description here

  • 搜索您的机器人名称,如@your_bot_name,然后单击添加:** enter image description here

*在某些平台(例如Mac本地Telegram客户端)中,看起来可以将机器人作为成员添加,但最终不起作用。
**机器人无需在您的联系人列表中。


从桌面(Linux)上,它告诉我“该用户不是此频道的订阅者。将其添加到频道并提升为管理员?”我选择是,但没有任何反应(没有错误消息,但也没有添加成功)。从手机上,我收到一个错误消息,说“您无法将此用户添加为管理员,因为他们不是成员,而且您没有权限添加他们”,这完全是荒谬的。有人能帮忙吗?(该频道已经有200多个订阅者,所以我无法添加用户,但这不应该阻止我添加机器人) - matteo
@matteo,你是这个频道的创建者吗? - apadana
@matteo 我有同样的问题。你找到解决方法了吗? - MortezaE
1
@MortezaE 发现频道的创建者没有给我所需的所有权限。我现在无法记住详细信息,但是错误消息并不够具体,并且在桌面上完全不存在,这都是Telegram的问题。一旦我拥有了所需的所有权限,问题就得到解决了。 - matteo
1
以下是细节:我有添加管理员的权限,但没有添加成员的权限。在移动设备上,当尝试将机器人添加为成员时,它给了我错误的错误消息,告诉我无法添加,因为已经有200个成员(显然是无意义的,这不应该适用于机器人),而实际原因是我根本没有权限。正如我所说,在桌面上没有任何错误消息。 - matteo

6
你确定在地址中使用了正确的chat_id,并且在"bot"之后包含了机器人的token吗?(api.telegram.org/bottoken/sendMessage) 这个页面讲解了关于发送信息的几个问题(在"sendMessage"章节中)。这些都是基础知识,但我经常会忘记。
引用一下: 为了使用sendMessage方法,我们需要使用正确的chat_id。 首先,让我们通过Telegram客户端向我们的机器人发送/start命令。 发送完这个命令后,让我们执行getUpdates命令。
curl -s \
-X POST \ https://api.telegram.org/bot<token>/getUpdates \ | jq .

响应将会像下面这样。
{   "result": [
     {
       "message": {
        "text": "/start",
         "date": 1435176541,
         "chat": {
           "username": "yourusername",
           "first_name": "yourfirstname",
           "id": 65535
         },
         "from": {
           "username": "yourusername",
           "first_name": "yourfirstname",
           "id": 65535
         },
         "message_id": 1
       },
       "update_id": 714636917
     }    ],   "ok": true }

我们感兴趣的是属性result.message [0] .chat.id,请将这个信息保存在其他地方。

请注意,这只是一个示例,您可能想设置一些自动化来处理这些信息。现在我们如何发送消息?很简单,让我们看看这个片段。

curl -s \
-X POST \ https://api.telegram.org/bot<token>/sendMessage \
-d text="A message from your bot" \
-d chat_id=65535 \ | jq .

其中chat_id是之前保存的信息。

希望这能有所帮助。


我可能错误地发布了问题... 你需要理解我的需求... 我有可以向用户发送消息的工作代码,没有问题... 我说的是向频道发送消息... 请注意。 - user4374121
抱歉 - 我没有注意到那个。根据您已经查看的更改日志,似乎您正在尝试的操作尚未实现: “现在您可以在所有方法中传递频道用户名(格式为@channelusername)代替chat_id(在forwardMessage中代替from_chat_id)。为了使其工作,机器人必须是频道的管理员(而这正是Telegram客户端目前不支持的 - 很快就会添加机器人作为管理员)。" - JGR
@Rosini确认了机器人支持-目前无法将机器人添加到频道的管理员中,而这是机器人能够在频道中发布消息的唯一方式。 - JGR
这个 chat_id 会保持不变吗?我需要定期获取更新还是每条消息都要获取更新? - balki

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