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

139 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Как работают ссылки Telegram
## Проблема
Ссылки на **личные профили пользователей** через `https://t.me/username` **не работают напрямую** в браузере.
**НЕ РАБОТАЕТ**: `https://t.me/trevor1985` (для личного профиля)
**РАБОТАЕТ**: `https://t.me/smartsoltech` (для каналов, групп, ботов)
## Решение
### 1. Использование tg:// протокола
**Для личных профилей пользователей** используется специальный протокол `tg://`:
```html
<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)
```python
telegram = models.CharField(
max_length=100,
blank=True,
verbose_name='Telegram',
help_text='Username без @ (например: trevor1985)'
)
```
**Важно**: Вводить username **БЕЗ символа @**
- ✅ Правильно: `trevor1985`
- ❌ Неправильно: `@trevor1985`
#### Шаблон team_section.html
```django
{% 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
```html
<span>@{{ member.telegram }}</span>
<small class="text-muted">Найдите в поиске Telegram</small>
```
#### Вариант B: Копировать в буфер обмена
```html
<button onclick="navigator.clipboard.writeText('@{{ member.telegram }}')">
<i class="fab fa-telegram-plane"></i> Копировать username
</button>
```
#### Вариант C: Универсальная ссылка (fallback)
```html
<a href="tg://resolve?domain={{ member.telegram }}"
onclick="window.open('https://t.me/{{ member.telegram }}', '_blank')">
```
### 5. Для ботов и каналов
Если нужно сослаться на **бота** или **канал**, используйте обычные HTTPS ссылки:
```python
# FooterSettings или другие модели
telegram_url = models.URLField(blank=True, verbose_name='Telegram URL')
```
```django
<a href="https://t.me/smartsoltech" target="_blank">
@smartsoltech
</a>
```
### 6. Документация Telegram
Официальная документация по ссылкам:
- https://core.telegram.org/api/links
- https://telegram.org/faq#q-what-are-usernames-how-do-i-get-one
**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 **БЕЗ @** в базе данных