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

Необходимые библиотеки

Консоль:


(env) ./project $ pip install  pyTelegramBotAPI

Делаем обработчик

Все приложения у меня лежат в папке ./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 и в ответ получите «Привет».