139 lines
5.0 KiB
Markdown
139 lines
5.0 KiB
Markdown
# Как работают ссылки 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 **БЕЗ @** в базе данных
|