Создание и хостинг телеграм бота

Привет, хабрчане! Какой бы заезженной не была тема создания телеграм бота на python3, я не нашёл инструкций, где показан путь от первой строчки кода до деплоинга бота (по крайней мере все методы, что я видел, немного устарели). В этой статье я хочу показать процесс создания бота от написания BotFather-у до деплоинга бота на Heroku.

Статья получилась длинной, советую пробежаться глазами по содержанию и кликнуть по интересующему вас пункту.

P.S. Пишите если нужна статья по созданию более сложного бота, т.е. с вебхуками, БД с настройками юзеров и т.д.

  1. BotFather.
  2. Установка и настройка pipenv. Первый запуск.
  3. Хэндлеры. Отвечаем на команды и сообщения.
    • Основы взаимодействия. Ответ на команды.
    • Основы взаимодействия. Ответ на текстовые сообщения.
    • Основы взаимодействия. Ответ на картинки, документы, аудио и прочие.
    • Строим цепочку ответов.
    • Добавляем парсер в цепочку.
    • Теория. Методы взаимодействия с ботом.
  4. Маркапы. Добавляем клавиатуры для быстрого ответа.
  5. Деплоим бота на Heroku.
  6. Ссылки.
  7. Заключение.

BotFather

Для начала нам надо зарегистрировать нашего бота в Telegram. Для этого:

В поиске вбиваем @BotFather и переходим в диалог с Отцом Ботов.

Пишем /newbot. Указываем имя бота (то, что отображается в диалогах). Указываем его логин, по которому его можно булет найти.

P.S. Оно должно заканчиваться на Bot/bot

Вот. Нам дали API ключ и ссылку на бота. Желательно сохранить API ключ и перейти в диалог с ботом, чтобы потом не копаться в переписке с BotFather

Дальше добавим ему пару команд: пропишем /setcommands и одним сообщением, т.к. /setcommands не добавляет команды, а задаёт их с нуля, пошлём ему команды.

all — спарсить заголовки с вкладки «ВСЁ ПОДРЯД»
top — спарсить заголовки с вкладки «ЛУЧШЕЕ»

На этом работа с BotFather закончилась, перейдём к следующей части.

Установка и настройка pipenv. Первый запуск.

Для начала создадим файл, в котором будет основной код бота bot.py. Если бот большой, то сразу создавайте файлы, куда вы вынесете функции, классы и т.д, иначе читаемость кода стремится к нулю. Я добавлю parser.py

Установим pipenv, если его конечно ещё нет.

Установим pipenv в папку проекта.

Установим интересующие нас библиотеки. Я буду работать с PyTelegramBotAPI. Также для парсинга добавим BeautifulSoup4.

Начинаем писать код!

Открываем bot.py, импортируем библиотеки и создаём главные переменные.

Запустим бота. Посмотри наличие ошибок.

Если ошибок не появилось, то продолжим.

Хэндлеры. Отвечаем на команды и сообщения

Пришло время научить бота отвечать нам. Возможно даже сделать его ответы полезными.

Основы взаимодействия. Ответ на команды

Для взаимодействия с пользователем, т.е. для ответа на его команды и сообщения используются хэндлеры.

Начнём с самого простого: ответим на команды /start и /go

Сейчас разберёмся что это и как это работает. Передаём в message_handler параметр commands равный массиву со строками — командами, на которые он будет отвечать описанным ниже образом. (На все эти команды он ответит одинаково). Далее используем send_message, в него записываем id чата (его можно достать из message.chat.id), в который отправить сообщение и, собственно, само сообщение. Нельзя забыть написать bot.polling() в конце кода, иначе бот сразу же выключиться. Почему так мы узнаем позже.

Теперь можно запустить бота и написать ему /start или /go и он ответит.

P.S. Сообщение может быть не только строкой, а, в принципе, чем угодно.

Это json объект, хранящий информацию об отправителе, чате, и самом сообщении.

Основы взаимодействия. Ответ на текстовые сообщения.

Теперь обработаем текстовые сообщения бота. Самое важное что нам нужно знать это то, что текст сообщения храниться в message.text и то, что, чтобы обрабатывать текст в message_handler нужно передавать content_types=[‘text’].

Добавим вот такой код.

Тут мы довабили пару переменных: вынесли текст сообщения (в нижнем регистре, чтобы не было лишних проблем с теми кто пишет капсом, заборчиком и т.д.) в переменную text, вынесли message.chat.id в отдельную переменную, чтобы каждый раз не обращаться к message. Также мы построили небольшое ветвление, для ответа на определённые сообщения, а также ответ на случай непонятного боту сообщения.

Основы взаимодействия. Ответ на картинки, документы, аудио и прочие.

Для ответа на картинки, стикеры, документы, аудио и т.д. нужно всего лишь поменять content_types=[‘text’].

Рассмотрим пример с картинкой, добавив этот код.

Все типы контента:

text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message

Строим цепочку ответов.

Пришло время закончить с элементарными действиями и начать что-то серьёзное. Попробуем построить цепочку ответов. Для этого нам понадобиться register_next_step_handler(). Создадим простой пример, на котором и разберёмся как работает register_next_step_handler().

И так, в первой функции добавился bot.register_next_step_handler(msg, askAge), в него мы передаём сообщение, которые хотим послать, и следующий щаг, к которому перейти после ответа пользователя.

Во второй функции всё поинтересней, здесь идёт проверка ввёл ли пользователь число, и, если нет, то функция рекурсивно вызывает сама себя, с сообщением «Возраст должен быть числом, введите ещё раз.». Если пользователь ввёл всё верно, то он получает ответ.

Но, есть тут проблема. Можно повторно вызвать команду /go или /start, и начнётся бардак.

Пофиксить это несложно, добавим переменную для проверки состояния выполнения скрипта.

С построением простых цепочек мы разобрались, пойдём дальше.

Добавляем парсер в цепочку.

Для начала нужен сам парсер. Обратим внимание на то, что во вкладках «Лучшее» и «Всё подряд» есть дополнительные фильтры: сутки, неделя, месяц и ≥10, ≥25, ≥50, ≥100 соответственно.
Парсер конечно можно написать и в 1 функцию, но я разобью на 2, так будет проще читать код.

По итогу парсер возвращает нам строку с заголовками статей, основываясь на наших запросах.
Пробуем, используя полученные знания, написать бота связанного с парсером. Я решил создать отдельный класс (это скорее всего неправильный метод, но это уже относится к питону, а не к основной теме статьи), и в объекте этого класса хранить изменяемые данные.

Теория. Методы взаимодействия с ботом.

Мы используем long polling для получения данных о сообщениях от бота.

Есть же вариант использовать в корне другой метод — вебхуки. Так бот сам будет отправлять нам данные о получении сообщения и т.д. Но этот метод сложнее в настройке, и, для простого показательного бота я решил его не использовать.

Также в дополнительных материалах будут ссылки на всё, что использовалось и о чём говорилось.

Маркапы. Добавляем клавиатуры для быстрого ответа.

Наконец основной код дописан. Теперь можно передохнуть и написать маркапы. Я думаю вы неоднократно видели их, но всё же, приложу скриншот. [SCREENSHOT]

Я выведу маркапы в отдельный файл — markups.py.

В написании маркапов нет ничего сложного. Нужно лишь создать маркап, указать пару параметров, создать пару кнопок и добавить их в маркап, далее просто указываем reply_markup=markup в send_message .

В параметры маркапа указываем ширину строки и изменение размеров кнопок, иначе они огромны.

Применим полученные знания к нашему боту.

Ура! С кодом впринципе разобрались. Теперь самое важное — деплоинг бота не хероку.

Деплоим бота на Heroku.

Для начала надо зарегистрироваться на Хероку и на Гитхабе.

Теперь создаём репозиторий на гитхабе. (нажмите плюсик слева от вашего аватара)
Сейчас нам нужен Procfile (Procfile.windows для windows). Создаём его и записываем в него bot: python3 bot.py

Теперь удаляем TOKEN из bot.py, здесь он не нужен, ведь мы будем загружать этот файл на гитхаб. Через тот же терминале, что использовали для запуска бота, заливаем файлы на гитхаб. (Предворительно удалите папку __pycache__).

Гит просит логин и пароль, спокойно вводим и преступаем к деплоингу бота на хероку. Пишем всё в том же терминале.

Теперь возвращаем TOKEN в bot.py, здесь он нужен, ведь мы будем загружать этот файл на хероку.

Чтобы выключить бота
И, не забываем перед залитием на гитхаб и удалить TOKEN из нашего bot.py. Ведь нам не нужно, чтобы кто-то им пользовался. Можно конечно воспользоваться .gitignore и вынести токены в отдельный фай.

Поздравляю!

Работа окончена, бот работает удалённо.

Ссылки

Заключение

Если кому-то было интересно, то цель написания статьи выполнена. Если кому-то хочется увидеть статью про более сложного бота (с вебхуками, подключенной БД с настройками пользователей и т.д.) — пишите.

Telegram Bot на Python. Часть 2. PyCharm. Python3. Пишем код.

Привет Друзья. Мы постепенно продвигаемся к цели — создать собственного бота в Telegram. В первой части мы разобрались, кто такие боты и зачем они нужны. При помощи @BotFather создали нашего первого бота — @BotanikRobot. Изучили как при помощи команд провести первоначальную настройку бота, задать аватарку. Заполнили описание бота и приветственное сообщение. Определились с методами взаимодействия с ботом.

PyCharm и Python3

Пришло время установить Python (язык программирования на котором мы будем писать нашего бота ), и среду разработки PyCharm. Конечно по началу можно обойтись стандартными средствами операционной системы, простым Блокнотом или другим текстовым редактором. Но как показывает практика, Python очень привередлив к синтаксису и оформлению кода, поэтому лучшим решением будет, использовать среду разработки.

Писать код я буду под Виндой, поэтому:

Переходим на официальный сайт Python и выбираем нужную нам версию 3.6.4: для 32-разрядных или версию для 64-разрядных систем (зависит от твоего компьютера; узнать разрядность можно, открыв ПроводникЭтот компьютер — и по нажатию на правую кнопку мыши выбрать пункт Свойства).

Когда мы скачали нужную версию Python, запускаем установщик.

Важно: на самом первом этапе установки необходимо отметить Add Python 3.6 to PATH , это очень упростит нашу работу в будущем. Затем нажимаем на Install now и ждём окончания установки.

Чтобы проверить, правильно ли установился Python, открываем меню Пуск и в строке поиска набираем командная строка (в Windows 10 открыть поиск можно, просто нажав на лупу рядом с кнопкой Пуск) или Win+R.

В открывшемся окне командной строки выполняем команду python . В ответ должна открыться консоль Python (начинается с >>> ) как на картинке ниже.

Выполняем команду exit() , чтобы выйти из режима интерпретатора Python. Менеджер пакетов pip так же должен быть установлен, чтобы проверить, выполни команду pip -V . В ответ в консоли должна отобразиться версия pip :

Возвращаемся в терминал (или в командную строку) и выполняем следующую команду:

Что здесь просиходит? Мы обращаемся к pip и хотим установить ( install ) волшебный модуль pyTelegramBotAPI , который и отвечает за создание и работу ботов.

Если модуль успешно установился, то мы должны увидеть надпись Successfully installed pyTelegramBotAPI-x.x.x. Собственно говоря, существует множество других модулей для Python (и не только), с помощью которых можно быстро запустить Telegram-бота; простыми словами pyTelegramBotAPI — это такой “конструктор”, в котором содержатся все необходимые нам компоненты-“кубики”.

Ура. Теперь наш компьютер уже умеет работать с языком программирования Python. Сам программный код можно писать хоть в Блокноте, но это очень неудобно. Нам нужна умная среда, которая будет подсвечивать набираемый код и автоматически указывать на различные ошибки в нем.

Могу порекомендовать отличную и бесплатную среду — PyCharm от JetBrains. Эта компания специализируется на создании профессиональных сред для программирования. Если Microsoft Office практически всегда используется для работы с таблицами/презентациями и текстовыми документами, то программы от JetBrains занимают лидирующее положение среди программистов.

Итак, переходим на страницу скачивания PyCharm. Для скачивания доступно две версии: профессиональная и версия для сообщества. Версия для сообщества бесплатная. Ее и скачаем:

Запускаем скачанный .exe файл. В первом окне нас приветствует сам установщик. Смело кликаем «Next». Дальше надо указать место установки среды.

Важный момент! На следующем окне обязательно выделить галочку «Download and install JRE x86 by JetBrains», если у вас на компьютере не установлена Java. Если вы не знаете, что это такое, то лучше поставьте эту галочку ? Также рекомендую отметить галочку «.py» для того, чтобы все файлы с программным кодом по умолчанию открывались в PyCharm. Это удобно.

После окончания установки запускайте PyCharm. После красивого окна загрузки появится стартовое окно программы. Если поверх стартового окна у вас выскочило второе маленькое окошко, то просто нажмите «OK». Создайте новый проект, кликнув на «Create New Project»

В следующем окне будет два поля. В первом укажите, где будет располагаться новый проект. Второе поле должно быть заполненным по умолчанию. Там содержится путь к установленному ранее Python. Если там пусто, то укажите путь вручную.

Дальше откроется окно самого редактора.

Теперь вы готовы начать писать программы на Python!

Давайте проверим, как все работает. Для этого кликните правой кнопкой на название вашего проекта и в раскрывающемся списке выберите пункт «New > Python file». Появится окно, в котором вы можете задать имя файлу. Задайте какое-нибудь имя и нажмите «OK». Справа откроется сам файл. Пока он пустой.

Начинаем писать код

Можно переходить к самой интересной части — написанию кода нашего бота. Открываем

Перво-наперво подключаем модуль telebot, который мы установили с помощью pip. Делаем это так:

PAFU community

  • СТАТЬИ

С нуля Telegram чат бот на Python за 30 минут

Попробуй себя в новой профессии!

Сегодня мы с вами разберем достаточно интересную тему — создание чат бота в telegram используя язык программирования Python бесплатно. Существует уже множество инструкций в интернете по мимо этой, однако мы постараемся вам рассказать, как сделать нормального и более менее работоспособного telegram бота, используя для этого библиотеку PyTelegramBotAPI и Long Poll. Это значит, что он сможет не только банально отправлять/принимать сообщения, но нечто большее с учётом на возможное расширение функционала. Руководство будет состоять из 4 простых этапов, которые в сумме у вас займут не более 30 минут.

Содержание:

Этап 1: Регистрация бота

Делается это очень просто. Откройте телеграмм и найдите там бота @BotFather . В сообщениях отправьте ему либо /start , либо /newbot , после чего от вас потребуется заполнение соответствующих полей(его имя и которое имя). На выходе вы получите токен бота и ссылку для ознакомления с документации. Здесь очень важно его запомнить, а лучше сохранить токен, так как он нам понадобится для авторизации и последующей работы с ботом.

Этап 2: Подготовка к написанию кода

Для написания бота для telegram мы будем использовать язык программирования Python, как мы уже говорили в самом начале. В следствии этого нам потребуется установленный в системе интерпретатор Пайтон и библиотека PyTelegramBotAPI(Telebot), с помощью который мы и будем писать наш скрипт для бота.

Если у вас не скачен или не установлен Python для вашей операционной системы, то делается это следующим образом:

Linux:

Windows:

Для ОС Windows вам потребуется перейти на официальный сайт разработчиков Python и скачать его оттуда.

После этого открываем консоль на вашем устройстве и вводим туда следующую строчку, которая скачает нам библиотеку PyTelegramBotAPI:

На этом подготовка заканчивается и мы приступаем к написанию скрипта для чат бота Telegram.

Этап 3: Получаем сообщения и говорим «Привет»

Для начала мы вам немного расскажем о том, как происходит взаимодействие между ботом в Telegram и пользователем. Существует два распространенных способа: используя Long Poll, где для этого мы берем ответ на запрос с сервера, и Webhook, где в качестве сервера мы используем Telegram и он сам присылает нам оповещения об событиях с ботом. Второй метод является лучшим выбором, однако для его использования потребуется зарегистрировать новый IP-адрес и при этом иметь установленный протокол SSL на сервере. У нас нет такой возможности, поэтому в данной статье мы рассмотрим только вариант создания telegram бота на Long Poll.

А теперь давайте запустим любой текстовый редактор, который вам нравится, и начнем наконец-то уже писать свой первый скрипт!

Действие 1:

Первый шаг — импортировать в код библиотеку PyTelegramBotAPI и с помощью несложной команды подключить к нему только что созданный токен для нашего бота:

Действие 2:

Далее мы создадим новую функцию, которая будет принимать текстовые сообщения:

Строчка @ tel_bot. message_handler ( content_types = [ ‘text’ ]) помогает найти пользователей принимающих текстовые сообщения и обрабатывает их запросы. Однако аргументу content_types можно передавать несколько параметров, например, вот так:

Таким образом мы сказали боту, чтобы он отвечал на текстовые, аудио и сообщения с документами. Подробнее читайте об этом в документации.

Действие 3:

Далее мы будем создавать базовый функционал для нашего чат бота telegram на Python. Алгоритм очень простой: если пользователь отправит нашему боту «Привет«, то он ответит ему «Здравствуй! Как прошел твой день?«, а если человек напишет «/help» то бот отошлет ему сообщение «Отправь мне в сообщении Привет«. Если пользователь отправил совсем другое, то бот ответит ему следующим сообщением: «Не понял, что ты хочешь мне сказать. Напиши мне /help«.

Затем в конце кода добавляем следующий код:

Данная строчка заставит нашего telegram бота узнавать у сервера Telegram с интервалом в 0 секунд, написал ли ему кто-нибудь? В случае успешного ответа, бот отправит соответствующий ответ прописанных нами. Нам лишь осталось только сохранить скрип на компьютере и запустить его в консоли.

Действие 4:

Откройте консоль у себя на устройстве и запустите ваш скрип, введя следующую команду:

Где tel_bot.py — название вашего скрипта.

Осталось только проверить его работоспособность и насладиться получившимся результатом:

Этап 4: Кнопки и ветки сообщений

Однако пару вариантов ответов бота может быстро наскучить, поэтому давайте вместе с вами заставим его вести более менее полноценный диалог с пользователем. Например, заставим бота спрашивать у человека его имя, фамилию и возраст. Реализовывать мы будем это при помощи встроенного метода register_next_step_handler:

Для этого мы создали переменные, которые будут сохранять данные пользователя. Однако в более серьезных проектах для этого лучше всего использовать полноценную базу данных. В конце мы проверяем корректность введенных данных человеком, используя для этого визуально оформленный кнопки! Просто немного видоизменим функцию get_age:

Осталось только написать код, которые бы обрабатывал введенные данные пользователем с клавиатуры. Делается это следующим образом:

Однако мы забыли в самом начале импортировать дополнительный модуль из библиотеки telebottypes:

Создание на этом заканчивается. Давайте проверим, что у нас получилось в итоге:

Как видите, все работает прекрасно.

А на этом наша статья подходит к концу. Теперь вы знаете, как за полчаса создать простого чат бота в Telegram на Python, используя для этого библиотеку PyTelegramBotAPI и Long Poll. Мы лишь надеемся, что данное руководство было вам полезным.

Weekend Hack: Building an Unsplash bot for Telegram with Python

The goal of this post is to step-by-step build our first python Telegram bot, which will serve hi-res images from Unsplash.

This post is the beginning of the Weekend Hack series, a series of short development stories focused on the exploration of new concepts. Set-by-step instructions and repository links will be provided for a more fundamental understanding.

The article is divided into three main sections: technology choices, architecture overview, and step-by-step setup.

After hearing about chatbots and getting hyped, I decided to try the poison myself by building a simple bot that integrates with a third party API while documenting the process.

Technology choices

Before we go nee deep into development, there are some points I would tike to cover:

Why a Telegram bot?

These days you can build bots with many platforms and tools: Facebook, Amazon Lex, Clever Bot, Botsify, Mobile Monkey. AI-powered bots, conversational bots, you name it.

That said, I am a big fan of incremental learning, so instead of choosing a platform like AWS and diving deep into their specific bot API, I have decided to start small and build a barebone chatbot for Telegram. Telegram has a vibrant bot community and friendly API with tons of examples, perfect for starting.

Why use Python?

While you can write Telegram bots in pretty much any language, I have decided to give Python a try. It is not my day-to-day language, but this seemed like an excellent opportunity to learn more about it.

Why integrate it with Unsplash?

Being my first bot and all, I wanted to integrate with a third-party API. Since Unsplash provides Source API that allows for simple image querying, I said, why not? Everybody likes hi-res images anyway.

Architecture overview

Alright, now that we have the goal and tools that we want to use defined, let’s talk about the internals of a Telegram bot. I won’t go in extreme detail, but rather give some general idea of how it works.

The general concept is that a chat user sends a message to the bot, the message is processed by the Telegram infrastructure, and forwarded to your bot. Then, the bot will execute logic and perhaps send something back to the user. Depending on the bot use case, audios, pictures, text, or other media may be sent to the user.

There are multiple ways to connect the bot with the Telegram infrastructure, WebHooks being one of the most used ones. WebHooks are user-defined HTTP-callbacks that enable the implementation of push subscription models, rather than pull (read more about long-polling pull subscription model).

In a nutshell, when the Telegram infrastructure receives a message sent by a user to your bot, it will call the Webhook of the bot, which has assigned a set of callbacks. This way, the bot is only active when a new event comes from the Telegram servers to the bot, rather than performing constant requests to the Telegram infrastructure.

In our case, the user will message the bot with a set of predefined actions (referred to as commands in the Telegram API), and the bot will interact with the Unsplash API.

Step-by-step setup

Let’s start with the fun part!

1. Setup the bot cloud-infrastructure

First, we need to choose an infrastructure provider to host our bot. They are multiple options when it comes to online server hosting. For this project, we will use Glitch, since it provides out of the box domains, WebHook compatibility, easy code sharing, and the best of all, it is free!

Let’s create an account in Glitch and create an hello-webpage project from the right side drop-down menu.

Деплой Telegram бота на Django с исползованием webhook

Помогите пожалуйста никак не могу найти информации о деплое Telegram бота на pythonenywhere.

Написал бота используя pyTelegramBotAPI (база данных, админка и еще некоторые вещи на Django). Столкнулся с проблемой, что на локальной машине с использованием polling() все работает, а когда выкладываю на pythonenywhere, чтобы не мучать сервер нужно использовать webhook. Только нигде в интернете нет вменяемого объяснения как сделать это для Django. Для Flask куча описаний. Пытался переделать то, что удалось найти, но бот никак не заводится. Вернее само приложение Django работает прекрасно, как и админка бота, только бот ника не реагирует на мои сообщения в телеграм. По логам все ок и теграм говорит, что webhook установлен успешно.

Файл «urls.py» проекта:

Файл «urls.py» бота:

Файл «views.py» бота:

Для Flask (с ним не работал) есть такой пример:

Буду благодарен за помощь.

Рекомендуем хостинг TIMEWEB
Подписчики
  • 3657
  • 0
  • 0
  • 0

  • nayk1982
  • #
  • 3 августа 2019 г. 15:25

Добрый день.
Посмотрите для начала статус установленного WebHook, нет ли ошибок с сертификатом безопасности. Это можно сделать из командной строки:

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 4 августа 2019 г. 16:06

Попробовал реализовать через сертефикат и изменил код:

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 4 августа 2019 г. 17:04

В логах pythonenywhere:

  • 0
  • 0
  • 0

  • nayk1982
  • #
  • 4 августа 2019 г. 18:31

Сертификат не проходит проверку. У меня такое было, когда пытался использовать самоподписанный сертификат. Решилось установкой сертификата Lets Encrypt. После этого WebHook заработал без проблем и сообщения стали приходить.

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 4 августа 2019 г. 20:07
  • (ред.)

Попробовал создать сертефикат при помощи acme-tiny (Let’s Encrypt certificates):

И получил в логах:

Сервер его вообще не принимает. C рекомендуемым certbot то же самое.

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 5 августа 2019 г. 15:16

Решил уйти от сертификата к простому токену.

Файл urls.py приложения бота:

Код views.py приложения бота:

Сразу, когда перезагрузил веб приложение в pythonenywhere пришло куча сообщений от бота (реакция на мои сообщения /start), а затем опять тишина.

При проверке через терминал получаю:

В логах тишина. Немогу понять, что не верно. Особенно если по началу все вроде бы заработало.

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 5 августа 2019 г. 16:44

Только теперь не знаю как быть. Толи я, что-то не то сделал, то ли телеграм тупит.
Постоянно сробатывает Одна и таже процедура в коде, а именно часть ‘Рассказать о боте’:

Подскажите пожалуйста, где я туплю. Спасибо.

  • 0
  • 0
  • 0

  • nayk1982
  • #
  • 5 августа 2019 г. 19:05

Возможно телеграм повторяет одно и то же сообщение, это бывает, если в ответ на сообщение от телеграм ваш бот ничего не отвечает. Нужно на сообщения посылать ответ:

И еще, в каждом сообщении есть счетчик update_id, для каждого чата. Можно его запоминать и сравнивать, чтоб не дублировать ответы.

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 6 августа 2019 г. 14:07
  • Ответ был помечен как решение.

Что-то не особо помогает.

Похоже что у pythonanywhere какие-то проблемы с передачей обновлений боту или у телеграм. То приходят данные, то нет. Сейчас проверка показывает:

А сообщения вообще перестали приходить.

Можете привести пример реализации ответа <"ok": true>или подредактировать мое, может я уже туплю на ровном месте.

urls.py приложения бота:

views.py приложения бота:

Большое спасибо за помощь.

  • 0
  • 0
  • 0

  • nayk1982
  • #
  • 7 августа 2019 г. 5:04

На python не делал, поэтому не подскажу, как правильно.
Бросаются в глаза последние строчки из views.py:

Они что, выполняются каждый раз? Если да, то это не правильно. WebHook устанавливается один раз и после этого ничего с ним делать не нужно (пока адрес вашего сервера не изменится или токен бота). Я бы вообще управление вэбхуком из кода убрал, это можно из консоли сделать одной строчкой, когда понадобится.

Могу рассказать, как делал я своего бота. На сервере для начала создал простой скрипт для приема сообщений и вывода в лог-файлы всего, что принял. Это поможет разобраться, как работает Telegram API. WebHook поставил на этот скрипт, добавил бота в тестовый чат Telegram и просто изучал, как работает API, параллельно читая документацию. Потом начал потихоньку наполнять этот скрипт и делать дополнительные если нужно. По началу лучше логировать все, что только можно, легче разобраться.

  • 0
  • 0
  • 0

  • Arrow
  • #
  • 7 августа 2019 г. 9:24

Спасибо за подсказку.
Да я и не подумал, что код установки webhook можно вообще убрать или вынести.

Adblock
detector