Files
smartsoltech_site/TELEGRAM_LINKS_INFO.md
2025-11-24 11:31:29 +09:00

5.0 KiB
Raw Blame History

Как работают ссылки 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. Проверка в проекте

После изменений:

  1. Обновлен team_section.html - использует tg://resolve?domain=
  2. Добавлен help_text в модель TeamMember
  3. Применена миграция 0012_alter_teammember_telegram.py
  4. В админке теперь подсказка: "Username без @"

8. Тестирование

Для проверки корректности:

  1. Откройте страницу /about/ (О нас)
  2. Нажмите на иконку Telegram у члена команды
  3. Должно открыться Telegram приложение с профилем пользователя

Примечание: Если Telegram не установлен, браузер может показать ошибку "Protocol not supported" - это нормально.

Вывод

Используйте:

  • tg://resolve?domain=username для личных профилей
  • https://t.me/botname для ботов и каналов
  • Username БЕЗ @ в базе данных