Для создания чата между пользователем в телеграм-боте и посетителем сайта можно использовать Django и Telegram Bot API.
1. Создайте Django-приложение:
- Установите Django, если его у вас еще нет: pip install django
- Создайте новый проект Django: django-admin startproject mysite
- Перейдите в папку проекта: cd mysite
- Создайте новое приложение Django: python manage.py startapp chat
2. Настройте Django-приложение:
- В файле mysite/settings.py
добавьте chat
в список INSTALLED_APPS
- В файле mysite/urls.py
добавьте маршрут для приложения chat
3. Создайте модели базы данных:
- В файле chat/models.py
создайте модели User
и Message
для хранения информации о пользователях и сообщениях:
from django.db import models class User(models.Model): telegram_id = models.CharField(max_length=255) username = models.CharField(max_length=255) first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Message(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) text = models.TextField() created_at = models.DateTimeField(auto_now_add=True)
- Примените миграции для создания таблиц в базе данных: python manage.py makemigrations
и python manage.py migrate
4. Создайте веб-страницы для отправки и просмотра сообщений:
- В файле chat/views.py
создайте вьюхи для отображения страниц и обработки данных:
from django.shortcuts import render, redirect from .models import User, Message def home(request): if request.method == 'POST': text = request.POST.get('text') user, _ = User.objects.get_or_create( telegram_id=request.POST.get('telegram_id'), defaults={ 'username': request.POST.get('username'), 'first_name': request.POST.get('first_name'), 'last_name': request.POST.get('last_name') } ) Message.objects.create(user=user, text=text) return redirect('home') else: users = User.objects.all() return render(request, 'chat/home.html', {'users': users})
- Создайте шаблон home.html
в папке chat/templates/chat/
для отображения страницы:
<!DOCTYPE html> <html> <head> <title>Chat</title> </head> <body> <h1>Chat</h1> <form method="post"> {% csrf_token %} <input type="hidden" name="telegram_id" value="{{ user.telegram_id }}" required> <input type="hidden" name="username" value="{{ user.username }}" required> <input type="hidden" name="first_name" value="{{ user.first_name }}" required> <input type="hidden" name="last_name" value="{{ user.last_name }}" required> <input type="text" name="text" placeholder="Enter your message" required> <button type="submit">Send</button> </form> <hr> <h2>Recent messages:</h2> {% for user in users %} <h3>{{ user.username }}</h3> {% for message in user.message_set.all %} <p>{{ message.text }} ({{ message.created_at }})</p> {% endfor %} {% empty %} <p>No messages yet.</p> {% endfor %} </body> </html>
- В файле mysite/urls.py
добавьте маршрут для вьюхи home
5. Создайте телеграм-бота и подключите его к Django:
- Создайте нового бота через BotFather в Telegram и получите токен доступа
- Установите библиотеку python-telegram-bot: pip install python-telegram-bot
- В файле chat/views.py
импортируйте необходимые классы для работы с телеграм-ботом:
from django.conf import settings from telegram import Update, Bot from telegram.ext import CallbackContext, CommandHandler, MessageHandler, Filters, Updater
- В файле chat/views.py
добавьте функцию для обработки входящих сообщений от телеграм-бота:
def telegram_webhook(request): bot = Bot(token=settings.TELEGRAM_BOT_TOKEN) update = Update.de_json(request.body, bot) dispatcher = Dispatcher(bot, None, workers=0) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message)) dispatcher.process_update(update) return HttpResponse()
- В файле chat/urls.py
создайте маршрут для вебхука телеграм-бота:
from django.urls import path from .views import telegram_webhook urlpatterns = [ path('telegram-webhook/', telegram_webhook, name='telegram_webhook'), ]
- В файле mysite/urls.py
добавьте маршрут для включения маршрутов из chat/urls.py
6. Настройте вебхук телеграм-бота:
- Запустите Django-сервер: python manage.py runserver
- Через curl или другое средство отправьте POST-запрос на http://yourdomain.com/telegram-webhook/
с параметрами url
и certificate
.
7. Добавьте кнопку для чата на вашем сайте:
- Вставьте следующий HTML-код на нужную страницу вашего сайта:
<script src="https://telegram.org/js/telegram-widget.js?11" async></script> <script data-telegram-login="{{ telegram_bot_username }}" data-size="large" data-auth-url="/telegram-login/" data-request-access="write" data-userpic="false" data-onauth="onTelegramAuth(user)" data-radius="0" data-mode="popup"></script>
- Через переменную telegram_bot_username
передайте веб-приложению имя вашего телеграм-бота
- Создайте вьюху для обработки запроса авторизации пользователя через Telegram:
from django.http import JsonResponse def telegram_login(request): telegram_id = request.GET.get('id') username = request.GET.get('username') first_name = request.GET.get('first_name') last_name = request.GET.get('last_name') return JsonResponse({'telegram_id': telegram_id, 'username': username, 'first_name': first_name, 'last_name': last_name})
- В файле chat/urls.py
добавьте маршрут для вьюхи telegram_login
Теперь вы создали чат между пользователем в телеграм-боте и посетителем вашего сайта. Ваши пользователи могут отправлять сообщения через форму на странице вашего сайта и видеть последние сообщения от других пользователей. Они также могут получать входящие сообщения от вашего телеграм-бота, которые затем будут отображаться на странице чата. Таким образом, обеспечивается двухсторонняя коммуникация между пользователями в телеграм-боте и посетителями вашего сайта.