Запоздал с ответом, но может кому-нибудь помогу.
tg://user?id={id} не работает только если пользователь запретил в настройках упоминать себя при пересылке сообщений (Настройки -> Конфиденциальность -> Пересылка сообщений).
Вроде как ещё учитывается тот фактор, писал ли он что-нибудь когда-нибудь в бота, но про это не уверен.
Рекомендую в первую очередь проверять ник. Если ника нет, то проверить не выключил ли пользователь этот параметр в настройках, если выключил, то запрещать пользоваться сервисом. Такой механизм много где реализован.