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 и в ответ получите «Привет».


