В aiogram 3.x есть магический фильтр F.
Используя его, отпадает необходимость проводить проверку на числа, так как записать номер контакта на телефоне можно только цифрами. Если вам клиент сам напишет номер телефона, то магический фильтр (F.contact) просто его пропустит, так как он ожидает, что пользователь передаст только контакт.
Для проверки на подлинность номера (подразумевается, что клиент отправил свой номер, а не контакт своего друга), необходимо сравнить два юзер найди (message.contact.user_id и message.from_user.id), если они совпадают, то пользователь отправил свой контакт.
@router.message(F.contact)
async def save_phone_number(message: Message):
phone = message.contact.phone_number
if message.contact.user_id == message.from_user.id:
await message.answer(f'Ваш номер телефона {phone} получен!')