Привет всем! Собственно, суть проблемы указана в названии записи: как получить телефон пользователя с помощью Python и библиотеки Telebot. Давайте разберемся 😉
Ниже — пример рабочего года, который, надеюсь, вам поможет 🙂 Вдруг что — не стесняйтесь задавать вопросы на почту или в Telegram.
-
import telebot #Подключили библиотеку Телебот - для работы с Телеграм
-
from telebot import types #Подключили дополнения
-
import config #Подключили библиотеку Config, с помощью чего можем хранить токен не в коде программы ;) а в файле config.py. Важно: этот файл должен лежать в той же директории, что и код!
-
-
bot = telebot.TeleBot(config.token) #Подключили токен
-
-
@bot.message_handler(commands=['number']) #Объявили ветку для работы по команде <strong>number</strong>
-
def phone(message):
-
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) #Подключаем клавиатуру
-
button_phone = types.KeyboardButton(text="Отправить телефон", request_contact=True) #Указываем название кнопки, которая появится у пользователя
-
keyboard.add(button_phone) #Добавляем эту кнопку
-
bot.send_message(message.chat.id, 'Номер телефона', reply_markup=keyboard) #Дублируем сообщением о том, что пользователь сейчас отправит боту свой номер телефона (на всякий случай, но это не обязательно)
-
-
@bot.message_handler(content_types=['contact']) #Объявили ветку, в которой прописываем логику на тот случай, если пользователь решит прислать номер телефона :)
-
def contact(message):
-
if message.contact is not None: #Если присланный объект <strong>contact</strong> не равен нулю
-
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': '***'
где звездочками скрыты получаемые в полном виде контактные данные пользователя.