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

如何在Java Telegram Bot中仅通过user_id获取用户全部信息?

通过TelegramBots库仅用User ID获取外部用户完整信息

核心前提

Telegram Bot API有严格的权限限制:Bot只能获取与自己有过交互(用户发过消息、加入Bot可见的群组/频道)的用户信息,或者用户主动通过分享操作授权的信息。如果目标用户从未和你的Bot打过交道,也不在Bot能访问的群组里,你无法通过User ID直接获取其信息。

可行实现方案(基于telegrambots库)

对于符合权限要求的用户,你可以通过GetChat接口获取用户信息——因为私人用户的Chat ID和User ID是完全一致的,调用GetChat传入目标User ID即可拿到包含用户核心信息的Chat对象。

修改你的代码示例

在收到UserShared事件后,添加以下逻辑获取用户信息:

public void onUpdateReceived(Update update) {

    if (update.hasMessage() && update.getMessage().hasText()) {
        String massageText = update.getMessage().getText();
        long chatId = update.getMessage().getChatId();
        User user = update.getMessage().getFrom();

        if (massageText.equals("/start")) {
            startCommandReceived(chatId, update.getMessage().getChat().getFirstName());
        } else {
            sendMessage(chatId, "Sorry, command was not recognized");
        }

    } else if (update.hasMessage()){
        long chatId = update.getMessage().getChatId();
        UserShared userShared = update.getMessage().getUserShared();
        
        // 新增:处理用户分享的User ID,获取用户信息
        if (userShared != null) {
            long targetUserId = userShared.getUserId();
            try {
                // 调用GetChat接口,传入目标User ID
                Chat targetUserChat = execute(new GetChat(targetUserId));
                
                // 提取用户公开信息
                StringBuilder userInfo = new StringBuilder();
                userInfo.append("获取到的用户信息:\n");
                userInfo.append("ID: ").append(targetUserId).append("\n");
                userInfo.append("昵称: ").append(targetUserChat.getFirstName());
                if (targetUserChat.getLastName() != null) {
                    userInfo.append(" ").append(targetUserChat.getLastName());
                }
                userInfo.append("\n");
                if (targetUserChat.getUserName() != null) {
                    userInfo.append("用户名: @").append(targetUserChat.getUserName()).append("\n");
                } else {
                    userInfo.append("用户名: 无\n");
                }
                
                sendMessage(chatId, userInfo.toString());
            } catch (TelegramApiException e) {
                // 处理权限不足或其他异常
                sendMessage(chatId, "无法获取用户信息:" + e.getMessage());
                e.printStackTrace();
            }
        }
        
        // 保留原有的输出逻辑
        sendMessage(chatId, "UserShared --> "+ update.getMessage().getUserShared());
        sendMessage(chatId, "ChatShared --> "+ update.getMessage().getChatShared());
        sendMessage(chatId, "CurrentChatId --> "+chatId);
    }
}

注意事项

  1. 权限限制:如果目标用户未与Bot交互过,GetChat会抛出TelegramApiException,错误信息通常为Chat not found。
  2. 可获取的信息范围:Chat对象包含用户的姓名、用户名、头像链接(通过getPhoto()获取),但无法获取手机号等隐私信息——这类信息必须用户主动通过KeyboardButtonRequestContact分享才能拿到。
  3. 异常处理:必须捕获TelegramApiException,避免Bot崩溃,同时给用户反馈错误原因。

内容的提问来源于stack exchange,提问作者Sergei Lobachev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:30