5.0 KiB
5.0 KiB
Как работают ссылки Telegram
Проблема
Ссылки на личные профили пользователей через https://t.me/username не работают напрямую в браузере.
❌ НЕ РАБОТАЕТ: https://t.me/trevor1985 (для личного профиля)
✅ РАБОТАЕТ: https://t.me/smartsoltech (для каналов, групп, ботов)
Решение
1. Использование tg:// протокола
Для личных профилей пользователей используется специальный протокол tg://:
<a href="tg://resolve?domain=trevor1985">Открыть в Telegram</a>
Этот формат:
- ✅ Открывает Telegram приложение (Desktop или Mobile)
- ✅ Работает на всех платформах (Windows, macOS, Linux, iOS, Android)
- ❌ Не работает в браузере, если Telegram не установлен
2. Типы ссылок Telegram
| Тип | Формат для браузера | Формат для приложения |
|---|---|---|
| Бот | https://t.me/botusername |
tg://resolve?domain=botusername |
| Канал/Группа | https://t.me/channelname |
tg://resolve?domain=channelname |
| Личный профиль | ❌ Не поддерживается | tg://resolve?domain=username |
| Номер телефона | https://t.me/+1234567890 |
tg://resolve?phone=+1234567890 |
3. Реализация в проекте
TeamMember модель (web/models.py)
telegram = models.CharField(
max_length=100,
blank=True,
verbose_name='Telegram',
help_text='Username без @ (например: trevor1985)'
)
Важно: Вводить username БЕЗ символа @
- ✅ Правильно:
trevor1985 - ❌ Неправильно:
@trevor1985
Шаблон team_section.html
{% if member.telegram %}
<a href="tg://resolve?domain={{ member.telegram }}"
title="Открыть в Telegram: @{{ member.telegram }}"
class="btn btn-outline-primary btn-sm rounded-circle">
<i class="fab fa-telegram-plane"></i>
</a>
{% endif %}
4. Альтернативные варианты
Вариант A: Только показывать username
<span>@{{ member.telegram }}</span>
<small class="text-muted">Найдите в поиске Telegram</small>
Вариант B: Копировать в буфер обмена
<button onclick="navigator.clipboard.writeText('@{{ member.telegram }}')">
<i class="fab fa-telegram-plane"></i> Копировать username
</button>
Вариант C: Универсальная ссылка (fallback)
<a href="tg://resolve?domain={{ member.telegram }}"
onclick="window.open('https://t.me/{{ member.telegram }}', '_blank')">
5. Для ботов и каналов
Если нужно сослаться на бота или канал, используйте обычные HTTPS ссылки:
# FooterSettings или другие модели
telegram_url = models.URLField(blank=True, verbose_name='Telegram URL')
<a href="https://t.me/smartsoltech" target="_blank">
@smartsoltech
</a>
6. Документация Telegram
Официальная документация по ссылкам:
Deep Links схема:
tg://resolve?domain=USERNAME- открыть профиль/каналtg://resolve?phone=PHONE_NUMBER- открыть по номеруtg://msg?to=USERNAME&text=TEXT- отправить сообщениеtg://join?invite=HASH- присоединиться к группе по инвайту
7. Проверка в проекте
После изменений:
- ✅ Обновлен
team_section.html- используетtg://resolve?domain= - ✅ Добавлен
help_textв модельTeamMember - ✅ Применена миграция
0012_alter_teammember_telegram.py - ✅ В админке теперь подсказка: "Username без @"
8. Тестирование
Для проверки корректности:
- Откройте страницу
/about/(О нас) - Нажмите на иконку Telegram у члена команды
- Должно открыться Telegram приложение с профилем пользователя
Примечание: Если Telegram не установлен, браузер может показать ошибку "Protocol not supported" - это нормально.
Вывод
✅ Используйте:
tg://resolve?domain=usernameдля личных профилейhttps://t.me/botnameдля ботов и каналов- Username БЕЗ @ в базе данных