Aiogram, python, номер телефона

Нужно запросить номер телефона из инлайн-кнопки и обработать принятие номера телефона

nomer_key = InlineKeyboardMarkup()
nomer_key.add(InlineKeyboardButton("Отправить номер", callback_data="nomer", request_contact=True))    
await bot.send_message(message.from_user.id, "Нужен номер для связи.", reply_markup=nomer_key)

Вот как обработать не знаю, просто вывести полученный телефон


Ответы (2 шт):

Автор решения: DavidRomanov

В Telegram боте невозможно получить номер телефона, используя Inline Keyboard, но можно использовать Reply Keyboard Markup

Чтобы обработать клавиатуру, мы должны использовать ContentType

# keyboards.py
async def contact_keyboard():
    markup = ReplyKeyboardMarkup(resize_keyboard=True)
    first_button = KeyboardButton(text=_("? Отправить"), request_contact=True)
    markup.add(first_button)
    return markup


# handlers.py
@dp.message_handler(Command("contact"))
async def share_number(message: types.Message):
    await message.answer("Нажмите на кнопку ниже, чтобы отправить контакт", reply_markup=await contact_keyboard())

@dp.message_handler(content_types=types.ContentType.CONTACT)
async def get_contact(message: types.Message):
    contact = message.contact
    await message.answer(f"Спасибо, {contact.full_name}.\n"
                         f"Ваш номер {contact.phone_number} был получен",
                         reply_markup=ReplyKeyboardRemove())
→ Ссылка
Автор решения: Stop-TussiN
@bot.callback_query_handler(func=lambda call: call.data == "nomer")
def callback_inline(call):
    if call.message:
        if call.message.contact:
            #  Здесь можно проверить номер телефона и принять его.
            user_phone = call.message.contact.phone_number
            # Например, отправить сообщение администратору с полученным номером телефона пользователя.
            bot.send_message(ADMIN_ID, "Получен номер телефона пользователя: {}".format(user_phone))
→ Ссылка