You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Telegram用户ID/用户名获取手机号?(ASP.NET Core实现)

通过用户名或Chat ID获取Telegram用户手机号的可行方案

核心限制说明

Telegram官方出于隐私保护,不允许任何Bot直接通过用户名或Chat ID获取未与该Bot交互过的用户的手机号——哪怕用户将手机号设为公开状态。这是Telegram API的硬性规则,所有合规应用必须遵守。

合规实现方法(ASP.NET Core集成)

唯一合法的途径是引导用户主动与你的Bot交互,并授权提供手机号。具体步骤如下:

  1. 引入Telegram.Bot库:在ASP.NET Core项目中安装Telegram.Bot NuGet包,用于对接Telegram API。
  2. 发送手机号请求按钮:向用户发送带授权功能的键盘按钮,触发用户主动提供手机号的流程:
    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);
    
  3. 处理用户授权后的手机号:当用户点击按钮并授权后,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:25:34