如何获取特定用户的 Telegram chat_id?
How to obtain Telegram chat_id for a specific user?
如何在 Telegram bot API 中获取用户 chat_id
?
文档说:
Integer | Unique identifier for the message recipient — User or GroupChat id
您通过 getUpdates
或您的 webhook 收到的消息更新将包含特定消息的聊天 ID。它将包含在 message.chat.id
键下。
这似乎是您能够检索聊天 ID 的唯一方法。因此,如果您想在机器人发起对话的地方编写一些内容,您可能必须将与用户相关的聊天 ID 存储在某种键-> 值存储中,例如 MemCache 或 Redis。
我相信他们的文档在这里暗示了类似的东西,https://core.telegram.org/bots#deep-linking-example。您可以使用 深层链接 发起对话,而无需用户先输入消息。
使用 Perl API 你可以这样得到它:首先你从 Telegram 向机器人发送消息,然后发出 getUpdates 并且聊天 ID 必须在那里:
#!/usr/bin/perl
use Data::Dumper;
use WWW::Telegram::BotAPI;
my $TOKEN = 'blablabla';
my $api = WWW::Telegram::BotAPI->new (
token => $TOKEN
) or die "I can't connect";
my $out = $api->api_request ('getUpdates');
warn Dumper($out);
my $chat_id = $out->{result}->[0]->{message}->{chat}->{id};
print "chat_id=$chat_id\n";
id 应该在 chat_id 但它可能取决于结果,所以我还添加了整个结果的转储。
您可以从 https://github.com/Robertof/perl-www-telegram-botapi 安装 Perl API。这取决于您的系统,但我很容易 运行 在我的 Linux 服务器上安装了这个:
$ sudo cpan WWW::Telegram::BotAPI
希望对您有所帮助
您可以与您的机器人共享联系人,然后通过 /getUpdates,您可以获得 "contact" 对象
我创建了一个机器人来获取用户或群聊 ID,
只需将 /my_id
发送到电报机器人 @get_id_bot
.
不仅对用户聊天ID有效,对群聊ID也有效
要获取群聊ID,首先你必须将机器人添加到群中,
然后在群里发/my_id
Here 是机器人的 link。
有一个机器人会在开始对话时回显您的聊天 ID。
只需搜索 @chatid_echo_bot
并点击 /start
。它会回显你的聊天 ID。
另一个选项是 @getidsbot
,它可以为您提供更多信息。如果您将消息转发给机器人,此机器人还会提供有关转发消息(从用户、到用户、乍得 ID 等)的信息。
直接从 documentation:
假设网站 example.com 想通过 Telegram 机器人向其用户发送通知。以下是他们可以为 ID 为 123 的用户启用通知的方法。
- 使用合适的用户名创建一个机器人,例如@ExampleComBot
- 为收到的消息设置网络钩子
- 生成足够长度的随机字符串,例如$
memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
- 将键为 $memcache_key 的值 123 放入内存缓存 3600 秒(一小时)
- 向我们的用户显示按钮 https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
- 配置 webhook 处理器以使用在以
/start
开头的传入消息中传递的参数查询 Memcached。如果密钥存在,则将传递给 webhook 的 chat_id 记录为用户 123 的 telegram_chat_id。从 Memcache 中删除密钥。
- 现在,当我们要向用户 123 发送通知时,检查他们是否有字段
telegram_chat_id
。如果是,请使用 Bot API 中的 sendMessage
方法在 Telegram 中向他们发送消息。
首先,post 包含您的机器人的聊天消息(提及机器人的频道、群组或一对一聊天)。然后,只是 运行:
curl https://api.telegram.org/bot<TOKEN>/getUpdates | jq
如果您没有安装 jq,请随意删除 | jq
部分,它只对漂亮的打印有用。你应该得到这样的东西:
您可以在返回的 json 对象中看到聊天 ID,以及聊天名称和相关消息。
每当用户与 bot 通信时,它都会发送如下信息:
$response = {
"update_id":640046715,
"message":{
"message_id":1665,
"from":{"id":108177xxxx,"is_bot":false,"first_name":"Suresh","last_name":"Kamrushi","language_code":"en"},
"chat":{"id":108xxxxxx,"first_name":"Suresh","last_name":"Kamrushi","type":"private"},
"date":1604381276,
"text":"1"
}
}
这样您就可以像这样访问它:
$update["消息"]["聊天"]["id"]
假设您正在使用 PHP。
chat_id 只不过是用户 ID(电报用户帐户 ID)。您可以与 @get_my_chat_id_bot
开始聊天。它会将 chat_id(您的 user_id)发回给您。
常用的id有以下几种:channel id, group id, bot id, chat id(user id).
扩展@Roberto Santalla 的答案,如果您更喜欢将 Telegram API 与 javascript
和 axios
库一起使用,那么您可能需要以下内容:
const method = 'get'
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[method](urlGetUpdates, options)
const chat_id = messages.find(
messageBlock => messageBlock.message.chat.username === username
).message.chat.id
console.info('chat_id': chat_id)
如何在 Telegram bot API 中获取用户 chat_id
?
文档说:
Integer | Unique identifier for the message recipient — User or GroupChat id
您通过 getUpdates
或您的 webhook 收到的消息更新将包含特定消息的聊天 ID。它将包含在 message.chat.id
键下。
这似乎是您能够检索聊天 ID 的唯一方法。因此,如果您想在机器人发起对话的地方编写一些内容,您可能必须将与用户相关的聊天 ID 存储在某种键-> 值存储中,例如 MemCache 或 Redis。
我相信他们的文档在这里暗示了类似的东西,https://core.telegram.org/bots#deep-linking-example。您可以使用 深层链接 发起对话,而无需用户先输入消息。
使用 Perl API 你可以这样得到它:首先你从 Telegram 向机器人发送消息,然后发出 getUpdates 并且聊天 ID 必须在那里:
#!/usr/bin/perl
use Data::Dumper;
use WWW::Telegram::BotAPI;
my $TOKEN = 'blablabla';
my $api = WWW::Telegram::BotAPI->new (
token => $TOKEN
) or die "I can't connect";
my $out = $api->api_request ('getUpdates');
warn Dumper($out);
my $chat_id = $out->{result}->[0]->{message}->{chat}->{id};
print "chat_id=$chat_id\n";
id 应该在 chat_id 但它可能取决于结果,所以我还添加了整个结果的转储。
您可以从 https://github.com/Robertof/perl-www-telegram-botapi 安装 Perl API。这取决于您的系统,但我很容易 运行 在我的 Linux 服务器上安装了这个:
$ sudo cpan WWW::Telegram::BotAPI
希望对您有所帮助
您可以与您的机器人共享联系人,然后通过 /getUpdates,您可以获得 "contact" 对象
我创建了一个机器人来获取用户或群聊 ID,
只需将 /my_id
发送到电报机器人 @get_id_bot
.
不仅对用户聊天ID有效,对群聊ID也有效
要获取群聊ID,首先你必须将机器人添加到群中,
然后在群里发/my_id
Here 是机器人的 link。
有一个机器人会在开始对话时回显您的聊天 ID。
只需搜索 @chatid_echo_bot
并点击 /start
。它会回显你的聊天 ID。
另一个选项是 @getidsbot
,它可以为您提供更多信息。如果您将消息转发给机器人,此机器人还会提供有关转发消息(从用户、到用户、乍得 ID 等)的信息。
直接从 documentation:
假设网站 example.com 想通过 Telegram 机器人向其用户发送通知。以下是他们可以为 ID 为 123 的用户启用通知的方法。
- 使用合适的用户名创建一个机器人,例如@ExampleComBot
- 为收到的消息设置网络钩子
- 生成足够长度的随机字符串,例如$
memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
- 将键为 $memcache_key 的值 123 放入内存缓存 3600 秒(一小时)
- 向我们的用户显示按钮 https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
- 配置 webhook 处理器以使用在以
/start
开头的传入消息中传递的参数查询 Memcached。如果密钥存在,则将传递给 webhook 的 chat_id 记录为用户 123 的 telegram_chat_id。从 Memcache 中删除密钥。 - 现在,当我们要向用户 123 发送通知时,检查他们是否有字段
telegram_chat_id
。如果是,请使用 Bot API 中的sendMessage
方法在 Telegram 中向他们发送消息。
首先,post 包含您的机器人的聊天消息(提及机器人的频道、群组或一对一聊天)。然后,只是 运行:
curl https://api.telegram.org/bot<TOKEN>/getUpdates | jq
如果您没有安装 jq,请随意删除 | jq
部分,它只对漂亮的打印有用。你应该得到这样的东西:
您可以在返回的 json 对象中看到聊天 ID,以及聊天名称和相关消息。
每当用户与 bot 通信时,它都会发送如下信息:
$response = {
"update_id":640046715,
"message":{
"message_id":1665,
"from":{"id":108177xxxx,"is_bot":false,"first_name":"Suresh","last_name":"Kamrushi","language_code":"en"},
"chat":{"id":108xxxxxx,"first_name":"Suresh","last_name":"Kamrushi","type":"private"},
"date":1604381276,
"text":"1"
}
}
这样您就可以像这样访问它:
$update["消息"]["聊天"]["id"]
假设您正在使用 PHP。
chat_id 只不过是用户 ID(电报用户帐户 ID)。您可以与 @get_my_chat_id_bot
开始聊天。它会将 chat_id(您的 user_id)发回给您。
常用的id有以下几种:channel id, group id, bot id, chat id(user id).
扩展@Roberto Santalla 的答案,如果您更喜欢将 Telegram API 与 javascript
和 axios
库一起使用,那么您可能需要以下内容:
const method = 'get'
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[method](urlGetUpdates, options)
const chat_id = messages.find(
messageBlock => messageBlock.message.chat.username === username
).message.chat.id
console.info('chat_id': chat_id)