Telegram
Часть первая
Здесь напишу, как создать Telegram бота и общаться с ним, используя webhook
Необходимо настроить протокол https на своем домене.
Для выполнения данного пункта я использую Letsencrypt
Делаем бота через BotFather внутри приложения Telegram.
- Добавляем пользователя @BotFather, если его еще нет.
- Пишем ему
/newbot
, далее используем подсказки самого ботпапы. Для просмотра всех возможностей используем команду/start
.
На выходе получаем токен бота.
В данный момент сайты Telegram заблокированы и чтобы почитать документацию на официальном сайте можно воспользоваться tor-браузером, либо русскоязычной документацией.
Устанавливаем Webhook
Следующий шаг — сообщить телеграму, что наш бот будет работать через Webhook. Для этого нужно через tor открыть страницу:
https://api.telegram.org/bot{ТокенБота}/setWebhook?url={АдресСвоегоWebhook}
Например:
https://api.telegram.org/bot764681082:AAqFQHJ0Hy1ZR00000VcNt81GsoT0K-0000/setWebhook?url=https://omoroot.ru/telegram/OmoTestBot/
Проверить, правильно ли установлен Webhook можно следующим запросом к api
https://api.telegram.org/bot{ТокенБота}/getWebhookInfo
Например:
https://api.telegram.org/bot764681082:AAqFQHJ0Hy1ZR00000VcNt81GsoT0K-0000/getWebhookInfo
Делаем обработчик
Все приложения у меня лежат в папке ./apps
, подробнее здесь
Консоль:
(env) ./project $ cd apps (env) ./project/apps $ ../manage.py startapp telegram
Необходимо подготовить приложение к работе
- Изменить
__init__.py
- Переименовать и изменить
apps.py
- Создать
urls.py
- Изменить
views.py
Содержание __init__.py
default_app_config = "apps.telegram.app.TelegramConfig"
Файл apps.py
нужно переименовать в app.py
Содержание app.py
# -*- coding:utf-8 -*- from __future__ import unicode_literals from django.apps import AppConfig class TelegramConfig(AppConfig): name = 'apps.telegram' verbose_name = u"Телеграм"
Содержание urls.py
# -*- coding:utf-8 -*- from django.conf.urls import url from apps.telegram.views import process urlpatterns = [ url(r'^OmoTestBot/$', process), ]
Содержание views.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.conf import settings from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse import random import telebot from telebot import types import logging logger = telebot.logger telebot.logger.setLevel(logging.DEBUG) bot = telebot.TeleBot(settings.TELEGRAM_TOKEN, threaded=False) # устанавливаем webhook if settings.TELEGRAM_TOKEN and random.randint(1, 50) == 1: webhook = bot.get_webhook_info() if webhook.url != settings.TELEGRAM_URL: bot.remove_webhook() bot.set_webhook(url=settings.TELEGRAM_URL) # Обработчик /start @bot.message_handler(commands=['start']) def start_screen(message): bot.send_message(message.chat.id, u'Привет', parse_mode="Markdown") # Обработчик @csrf_exempt def process(request): try: update = telebot.types.Update.de_json(request.body) if update.message: bot.process_new_messages([update.message]) except Exception as e: logger.exception(e) return HttpResponse("")
Подключаем приложение в проект
Содержание project/settings.py
INSTALLED_APPS = [ ... 'apps.telegram', ... ] ... TELEGRAM_TOKEN = '764681082:AAqFQHJ0Hy1ZR00000VcNt81GsoT0K-0000'
Содержание project/urls.py
urlpatterns = [ ... url(r'^telegram/', include('apps.telegram.urls')), ... ]
Все должно работать. Отправьте своему боту команду /start
в Telegram и в ответ получите «Привет».