如何获取私有 Telegram 频道的 chat_id

How to obtain the chat_id of a private Telegram channel

我使用 curl 更新我的 public 频道。这种语法:

curl -X POST "https://api.telegram.org/bot144377327:AAGqdElkZ-77zsPRoAXXXXXXXXXX/sendMessage" -d "chat_id=@MyChannel&text=my sample text"

但是私人频道的chat_id是什么?这不是你在私人邀请中的那个。

因为现在我们可以在所有方法中传递频道用户名(格式为@channelusername)来代替 chat_id(而不是 forwardMessage 中的 from_chat_id)。但是我管理的私人频道的@channelusername 是什么?

我找到私信的方法了

  1. 你应该用一些@channelName

    把它转换成public
  2. 通过机器人向该频道发送消息API:

    https://api.telegram.org/bot111:222/sendMessage?chat_id=@channelName&text=123

  3. 作为响应,您将获得有关您频道的 chat_id 的信息。

    {
      "ok" : true,
      "result" : {
        "chat" : {
          **"id" : -1001005582487,**
          "title" : "Test Private Channel",
          "type" : "channel"
        },
        "date" : 1448245538,
        "message_id" : 7,
        "text" : "123ds"
      }
    }
    
  4. 现在您可以将频道转换回私人频道(通过删除频道的 link)并直接向 chat_id "-1001005582487":

    https://api.telegram.org/bot111:222/sendMessage?chat_id=-1001005582487&text=123

您也可以这样做:

第 1 步。将您的私人频道转换为 public 频道

第 2 步。为此频道设置 ChannelName

第3步。然后你可以把这个频道改成私人

第 4 步。现在使用您在第 3 步中设置的@ChannelName 发送消息

注意:对于第 1 步,您可以将其中一个 public 频道暂时更改为私人频道。

最简单的方法:

只需将您的邀请 link 发送到您的私人频道给 @username_to_id_bot (https://t.me/username_to_id_bot) 机器人。它将 return 它的 ID。最简单的级别:最大! :)

PS。我不是这个机器人的所有者。

PS 2. Bot不会加入你的群,但要确保安全。如果在使用机器人后对您来说很重要,只需撤销您的旧邀请link。

比较麻烦的方法:

创建频道public不能由用户完成至少有五个publicgroups/channels,所以...问题没有解决。是的,您可以撤销其中一个,但目前我们无法通过其他方式检索聊天 ID。

一个疯狂的解决方案:

  1. 在网页版 Telegram 使用您的帐户登录:https://web.telegram.org
  2. 找到您的频道。看看你的 URL。应该是 https://web.telegram.org/#/im?p=c**1055587116**_11052224402541910257
  3. 从中抓取“1055587116”,并添加“-100”作为前缀。

所以...您的频道 ID 将为“-1001055587116”。奇迹发生了:)

Web Channel ID 处找到了解决方案。

最简单的方法是在您的聊天中邀请@get_id_bot,然后输入:

/my_id @get_id_bot

在您的聊天中

不需要将频道转换为 public 然后将其设为私有。

  1. 找到您的私人频道的 ID。 (有很多方法可以做到这一点,例如参见 [​​=10=]。)

  2. curl -X POST "https://api.telegram.org/botxxxxxx:yyyyyyyyyyy/sendMessage" -d "chat_id=-100CHAT_ID&text=我的示例文本"

将 xxxxxx:yyyyyyyyyyy 替换为您的机器人 ID,将 CHAT_ID 替换为在步骤 1 中找到的频道 ID。因此,如果频道 ID 为 1234,则为 chat_id=- 1001234.

全部完成!

我的选择是在 Android 上使用流行的 Plus Messenger

您可以点击频道,然后在群组名称下方的频道信息中,您可以找到频道ID。

超级组和频道 ID 在 Plus Messenger 上看起来像 1068773197。对于 API 上的用法,您可以添加 -100 前缀,这将使它成为 -1001068773197。

您的私人频道的 id 是 XXXXXX 部分(在“p=c”和下划线之间)。

要使用它,只需在它前面加上“-100”。因此,如果“XXXXXX”是“4785444554”,您的私人频道 ID 是“-1004785444554”。

打开私密频道,然后:


WARNING 使用 Telegram Bot 时务必 添加 -100 前缀 API:

  • if 频道 ID 例如 1192292378
  • then 你应该使用 -1001192292378

您应该添加并使您的机器人成为私人频道的管理员。否则,会发生 找不到聊天 错误。

现在你可以写一个邀请 link 到 bot @username_to_id_bot 你会得到 id:

示例:

它也适用于 public 聊天、频道甚至用户。

我找到了 Python 的 TelegramBotApi 解决方案。也许它适用于其他语言。

我只是将我的机器人添加到私人频道,然后执行此操作:

@your_bot_name hi

在控制台中,我收到包含我需要的所有信息的响应。

我使用了 Telegram.Bot 并通过以下方式获得了 ID:

  1. 将机器人添加到频道
  2. 运行 机器人
  3. 在频道中写点东西(例如,/authenticatefoo

Telegram.Bot:

private static async Task Main()
{
    var botClient = new TelegramBotClient("key");
    botClient.OnUpdate += BotClientOnOnUpdate;
    Console.ReadKey();
}

private static async void BotClientOnOnUpdate(object? sender, UpdateEventArgs e)
{
    var id = e.Update.ChannelPost.Chat.Id;
    await botClient.SendTextMessageAsync(new ChatId(id), $"Hello World! Channel ID is {id}");
}

普通 API:

这转换为 getUpdates method in the plain API, which has an array of update,然后包含 channel_post.chat.id

其实很简单

您需要做的就是:

  1. 邀请机器人加入 channel/group(私密与否无关紧要)。
  2. 发送 channel/group 中的任意消息。
  3. 在浏览器中转到getUpdatesAPIURL:
    https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
    

现在,看看结果。
您将看到 JSON 输出。 在此 JSON 中查找 chat 数据。通常,最新更新在最后。

{
   "ok":true,
   "result":[
      ... 
      {
         ... 
         "my_chat_member":{
            "chat":{
               "id":-100987654321,
               "title":"My Channel",
               "type":"channel"
            },
            ...
         }
      }
   ]
}

您的聊天 ID 是 -100987654321

另一种使用 JavaScript 和 Axios 库的方法。所以你可能想探索 Telegram /getUpdates 的方法 API:

const headers: any = {
  'Access-Control-Allow-Origin': '*',
  'Content-Type': 'application/json',
  timestamp: +new Date(),
}

const options = { headers: { ...headers } }

const urlTelegramBase =
  'https://api.telegram.org/bot123456:ABCDEF'

const urlGetUpdates = `${urlTelegramBase}/getUpdates`
const username = 'user_name'

const {
  data: { result: messages },
} = await axios.get(urlGetUpdates, options)

const chat_id = messages.find(
  messageBlock => messageBlock.message.chat.username === username
).message.chat.id

console.info('chat_id': chat_id)