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))