java - Telegram api,无法获取电话号码

标签 java telegram telegram-bot

在代码中我写了一些注释。 我需要获取用户的电话号码。 Api telegraph 允许您使用 keyboardButton.setText("Share your number>").setRequestContact(true); 用户收到一条消息,然后单击一下即可发送联系人。之后,我尝试在控制台中显示联系人 System.out.println(update.getMessage().getContact());,但我总是得到 null

public void onUpdateReceived(Update update) {

if (update.hasMessage() && update.getMessage().hasText()) {
    long chat_id = update.getMessage().getChatId();

    if (update.getMessage().getText().equals("/start")) {

        SendMessage sendMessage = new SendMessage()
                .setChatId(chat_id)
                .setText("You send /start");

        // create keyboard
        ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
        sendMessage.setReplyMarkup(replyKeyboardMarkup);
        replyKeyboardMarkup.setSelective(true);
        replyKeyboardMarkup.setResizeKeyboard(true);
        replyKeyboardMarkup.setOneTimeKeyboard(true);

        // new list
        List<KeyboardRow> keyboard = new ArrayList<>();

        // first keyboard line
        KeyboardRow keyboardFirstRow = new KeyboardRow();
        KeyboardButton keyboardButton = new KeyboardButton();
        keyboardButton.setText("Share your number >").setRequestContact(true);
        keyboardFirstRow.add(keyboardButton);

        // add array to list
        keyboard.add(keyboardFirstRow);

        // add list to our keyboard
        replyKeyboardMarkup.setKeyboard(keyboard);

        try {
            sendMessage(sendMessage);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }

        System.out.println("#############");
        System.out.println(update.getMessage().getContact());
        System.out.println("#############");

    }
 }
}

最佳答案

当用户按下“分享你的号码>”按钮时,对象 update.getMessage().getContact() 不为 null

尝试像这样更改您的代码:

if (update.getMessage().getText().equals("/start")) {

    SendMessage sendMessage = new SendMessage()
            .setChatId(chat_id)
            .setText("You send /start");

    // create keyboard
    ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
    sendMessage.setReplyMarkup(replyKeyboardMarkup);
    replyKeyboardMarkup.setSelective(true);
    replyKeyboardMarkup.setResizeKeyboard(true);
    replyKeyboardMarkup.setOneTimeKeyboard(true);

    // new list
    List<KeyboardRow> keyboard = new ArrayList<>();

    // first keyboard line
    KeyboardRow keyboardFirstRow = new KeyboardRow();
    KeyboardButton keyboardButton = new KeyboardButton();
    keyboardButton.setText("Share your number >").setRequestContact(true);
    keyboardFirstRow.add(keyboardButton);

    // add array to list
    keyboard.add(keyboardFirstRow);

    // add list to our keyboard
    replyKeyboardMarkup.setKeyboard(keyboard);

    try {
        sendMessage(sendMessage);
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }


}else{
    System.out.println("#############");
    System.out.println(update.getMessage().getContact());
    System.out.println("#############");

}

关于java - Telegram api,无法获取电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46315088/

相关文章:

python - 如何在 Telegram Bot 中获得身份验证?

php - 如何使用 Telegram 机器人聊天 API 获取某人的用户个人资料图片?

java - Spring 动态 JPA 存储库类型

java - JSON 响应中的重复字段

java - 检查 int[] 的值是否可以很长

我不参与的 Telegram API : How do I get messages from a public channel,?

node.js - 从我已加入Node.js的 Telegram channel 获取更新

php - 如何从服务器为 Telegram BOT 定义命令

javascript - 通过 Google Scripts 从 Google Sheet 向 Telegram 发送消息

java - Talend 作业未提供响应