如何通过Telegram用户ID/用户名获取手机号?(ASP.NET Core实现)
通过用户名或Chat ID获取Telegram用户手机号的可行方案
核心限制说明
Telegram官方出于隐私保护,不允许任何Bot直接通过用户名或Chat ID获取未与该Bot交互过的用户的手机号——哪怕用户将手机号设为公开状态。这是Telegram API的硬性规则,所有合规应用必须遵守。
合规实现方法(ASP.NET Core集成)
唯一合法的途径是引导用户主动与你的Bot交互,并授权提供手机号。具体步骤如下:
- 引入Telegram.Bot库:在ASP.NET Core项目中安装
Telegram.BotNuGet包,用于对接Telegram API。 - 发送手机号请求按钮:向用户发送带授权功能的键盘按钮,触发用户主动提供手机号的流程:
using Telegram.Bot; using Telegram.Bot.Types.ReplyMarkups; // 构建请求手机号的专属键盘 var requestPhoneKeyboard = new ReplyKeyboardMarkup( new[] { new[] { new KeyboardButton("分享我的手机号") { RequestContact = true } } }) { ResizeKeyboard = true }; // 向目标用户发送请求消息 await botClient.SendTextMessageAsync( chatId: targetChatId, text: "请分享你的手机号以完成验证", replyMarkup: requestPhoneKeyboard); - 处理用户授权后的手机号:当用户点击按钮并授权后,Bot会收到包含联系方式的更新,从中提取手机号并关联用户信息:
public async Task HandleTelegramUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { if (update.Message?.Contact != null) { // 提取用户核心信息与手机号 var user = update.Message.From; string phoneNumber = update.Message.Contact.PhoneNumber; long chatId = update.Message.Chat.Id; string username = user.Username; // 将信息存入数据库,后续可通过chatId或username查询对应手机号 await _userRepository.SaveUserContactAsync(user.Id, username, chatId, phoneNumber); } }
关于第三方工具的说明
你提到的第三方工具能获取手机号的前提是:目标用户曾与该工具的Bot交互并授权过手机号,并非直接通过用户名/ID抓取公开资料。若你尝试模仿此类逻辑,本质上仍需用户先与你的Bot完成授权交互,否则无法通过官方API拿到数据。
重要提醒
任何绕过Telegram官方API限制的行为(如使用非官方客户端、第三方爬虫工具)均违反Telegram服务条款,可能导致你的Bot被封禁、账号受限,绝对不建议尝试。
内容的提问来源于stack exchange,提问作者Furrukh Nadeem
相关产品推荐
相关产品推荐

