prod
This commit is contained in:
138
TELEGRAM_LINKS_INFO.md
Normal file
138
TELEGRAM_LINKS_INFO.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Как работают ссылки 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 **БЕЗ @** в базе данных
|
||||
Reference in New Issue
Block a user