получить телефон пользователя

Python Telebot — получить телефон пользователя

Привет всем! Собственно, суть проблемы указана в названии записи: как получить телефон пользователя с помощью Python и библиотеки Telebot. Давайте разберемся 😉

Ниже — пример рабочего года, который, надеюсь, вам поможет 🙂 Вдруг что — не стесняйтесь задавать вопросы на почту или в Telegram.

  1. import telebot #Подключили библиотеку Телебот - для работы с Телеграм
  2. from telebot import types #Подключили дополнения
  3. import config #Подключили библиотеку Config, с помощью чего можем хранить токен не в коде программы ;) а в файле config.py. Важно: этот файл должен лежать в той же директории, что и код!
  4.  
  5. bot = telebot.TeleBot(config.token) #Подключили токен
  6.  
  7. @bot.message_handler(commands=['number']) #Объявили ветку для работы по команде <strong>number</strong>
  8. def phone(message):
  9.     keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) #Подключаем клавиатуру
  10.     button_phone = types.KeyboardButton(text="Отправить телефон", request_contact=True) #Указываем название кнопки, которая появится у пользователя
  11.     keyboard.add(button_phone) #Добавляем эту кнопку
  12.     bot.send_message(message.chat.id, 'Номер телефона', reply_markup=keyboard) #Дублируем сообщением о том, что пользователь сейчас отправит боту свой номер телефона (на всякий случай, но это не обязательно)
  13.  
  14. @bot.message_handler(content_types=['contact']) #Объявили ветку, в которой прописываем логику на тот случай, если пользователь решит прислать номер телефона :) 
  15. def contact(message):
  16.     if message.contact is not None: #Если присланный объект <strong>contact</strong> не равен нулю
  17.         print(message.contact) #Выводим у себя в панели контактные данные. А вообщем можно их, например, сохранить или сделать что-то еще.

Специально для вас — видео с более наглядной инструкцией:

Как видите — все очень и очень просто 🙂
Спасибо за внимание!

P.S. На моем канале Youtube один из подписчиков задал интересный вопрос: как скрыть клавиатуру после того, как телефонный номер был отправлен? Ответа на вопрос я не знал 🙁 Впрочем, спустя день подписчик подсказал решение, которым я и делюсь:

keyboard = types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, msg, reply_markup=keyboard)

P.P.S. не так давно возник вопрос — а как полученный от пользователя номер телефона отправить, например, в удобоваримом виде куда-то в группу? Все просто:
1. Добавляете бота, который должен отправить полученную информацию в нужную группу с правами администратора
2. В коде бота вносите следующие изменения в функцию def contact(message):

@bot.message_handler(content_types=['contact'])
def contact(message):
if message.contact is not None:
print(message.contact)
print(type(message.contact))
print('Name: ' + str(message.contact.first_name))
text = 'Пользователь: ' + message.contact.first_name + ': телефон: ' + message.contact.phone_number
bot.send_message(id_channel, text)

Собственно, вы можете выводить все, что угодно — для этого просто используем название нужного поля по схеме:

phone_number': '***', 'first_name': '***', 'last_name': '***', 'user_id': ***, 'vcard': '***'

где звездочками скрыты получаемые в полном виде контактные данные пользователя.