Создаем бота в telegram

Пара слов от автора

Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.

Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.

Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)

Приглашаю прочесть мои статьи:Применение библиотеки FuzzyWuzzy для нечёткого сравнения в Python. Расстояние Левенштейна (редакционное расстояние)Как открыть ссылку в Python. Работа с WebBrowser и решение проблемы с Internet Explorer

Соединение

Чем больше я работал с библиотекой telebot, тем больше она мне нравилась. Хотелось бы, используя приложение на flask’e, не терять эту возможность. Но как это сделать? Во-первых, мы можем вместо нашей функции send_message использовать готовую из библиотеки. Это будет выглядеть так:

Но, если присмотреться, можно заметить, что мы потеряли часть функционала, а именно @bot.message_handler — декораторы, которые отслеживают тип введенного боту сообщения (картинка, документ, текст, команда и т. д.). Получается, что если мы используем в качестве сервера наше flask приложение, то мы теряем некоторый функционал библиотеки telebot. Если же мы используем bot.polling(), то мы не можем обращаться к серверу “со стороны”. Конечно, хотелось бы как-то все соединить без потерь. Для этого я нашел немного костыльный способ, однако рабочий:

Здесь мы пользуемся методом set_webhook, аналогично тому, как мы делали это ранее через postman, а на пустом роуте прописываем «немного магии», чтобы успешно получать обновления бота. Конечно, это не очень хороший способ, и в дальнейшем лучше самостоятельно прописывать функционал для обработки входящих сообщений. Но для начала, я считаю, это лучшее решение.

Встроенные боты (роботы) в Телеграм

Помимо программных роботов, которые выглядят, как отдельный диалог, в Телеграм есть боты, работающие в любой беседе. Чтобы ими воспользоваться, начните вводить их имя прямо в окне набора текста!

Таких роботов несколько:

@pic — ищет картинки;

@gif — ищет гифки;

@imdb — ищет фильмы;

@youtube — любое видео на Ютубе к вашим услугам;

@wiki — можно найти интересную статью на Википедии;

@vkmusic_bot — помогает найти и скачать музыку из Вконтакте;

@ya — поиск в Яндексе. 

Чтобы запустить такого бота нужен минимум усилий:

  1. Заходим в Телеграм чат с любым собеседником;
  2. Пишем в строке набора сообщения имя бота. Например, @youtube;
  3. После имени робота вводим поисковый запрос, «Enter» пока не нажимаем;
  4. Просматриваем результаты выдачи и отправляем нужное видео собеседнику.

Встроенные роботы в Телеграм позволяют быстро найти практически любую информацию. При этом не нужно выходить из мессенджера и пользоваться другими приложениями или браузером.

Удачных поисков!

Что такое IFTTT?

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

Примеры:

ЕСЛИ опубликовано новое фото в Instagram, ТО сохранить его в Dropbox;
ЕСЛИ пришло новое письмо c отметкой «важное» на почту ТО изменить цвет лампочек в спальне;
ЕСЛИ не пройдена дневная норма шагов в Fitbit ТО отправить напоминание в iOS.

Подобные правила называются апплеты (ранее назывались «рецепты»). На сайте IFTTT можно выбрать среди десятков тысяч готовых апплетов или создать свой.

Категории сервисов для которых можно создавать апплеты: платформы для ведения блогов, соцсети, облачные хранилища, «умная» техника для дома и автомобили, сервисы для создания заметок и списков дел, фитнес-трекеры, платформы для проведения опросов и массовых почтовых рассылок. Полный список здесь.

А теперь вернемся к теме статьи и посмотрим, чем может быть полезен IFTTT для пользователей Telegram.

Настройка запроса POST

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

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

Я объясню, что он делает, в ближайшее время:

function doPost(e) {var contents = JSON.parse(e.postData.contents);var chat_id = contents.message.from.id; var text = "Beep boop bop, message received.";sendMessage(chat_id,text)}

Нам нужна эта функция, потому что она — наш способ отправки данных в Telegram и сам Google требует, чтобы его пользователи сценариев приложений — то есть мы — включали либо функцию , либо , когда публикуем веб-приложение. Вот документация об этом. В этом документе Google объясняет, что означает аргумент () в функции. Он представляет собой данные из события, созданного человеком внутри приложения, к которому подключен наш веб-хук. В нашем случае аргумент содержит все данные, генерируемые всякий раз, когда человек отправляет сообщение Telegram-боту. И именно в аргументе мы получим идентификатор чата пользователя. В конце концов, все предыдущие бредни оправдались (может быть).

Итак, вот история нашего бота:

  1. Когда пользователь общается с нашим ботом Telegram, происходит событие. Оно генерирует данные, получаемые нами из .
  2. Веб-хук автоматически отправляет на URL-адрес веб-приложения.
  3. Как только e попадёт в URL-адрес веб-приложения, оно захочет отправить запрос в Telegram. Он запросит Telegram об отправке сообщения пользователю.
  4. Однако он не может отправить запрос с неполными требованиями. Нам нужен идентификатор чата человека и сообщение, которое мы хотим отправить в Telegram. Функция переносит сообщение внутри переменной .
  5. также обрабатывает идентификатор , но сначала ей нужно проанализировать , чтобы найти его.
  6. После обнаружения она передаёт параметры в Telegram с помощью функции . Всё: сообщение передаётся пользователю. Запрос завершен. И вот — работающий бот:

На случай, если ты запутался…

Весь код:

var token = "1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM"; var telegramUrl = "https://api.telegram.org/bot" + token;var webAppUrl = "https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec";function setWebhook() {var url = telegramUrl + "/setWebhook?url=" + webAppUrl;var response = UrlFetchApp.fetch(url);}function sendMessage(chat_id, text) {var url = telegramUrl + "/sendMessage?chat_id=" + chat_id + "&text="+ text;var response = UrlFetchApp.fetch(url);Logger.log(response.getContentText()); }function doPost(e) {var contents = JSON.parse(e.postData.contents);var chat_id = contents.message.from.id; var text = "Beep boop bop, message received.";sendMessage(chat_id,text)}
  • Использование компонентов между фреймворками
  • Упрощаем работу с Google-формами: Apps Script и выпадающее меню
  • Как избежать CORS в одностраничных приложениях

Читайте нас в Telegram, VK и

Поиск человека по номеру телефона в мессенджерах

В мессенджерах искать людей чуть проще – здесь нет возможности выключить поиск по номеру. Главное условие – телефон искомого человека должен быть сохранен у вас в контактах. Мессенджер просканирует вашу телефонную книгу и найдет номера, которые зарегистрированы в его системе.

Ватсап

Для WhatsApp инструкция следующая:

  1. Запустите приложение. Во вкладке «Чаты» (список диалогов с другими людьми) нажмите на зеленую иконку внизу справа. Откроется список ваших контактов, которые пользуются Ватсапом.
  2. Найдите нужного человека и нажмите на его имя. Запустится диалог – можете сразу написать сообщение.
  3. Если вам нужно узнать больше информации о профиле, кликните по трем точкам. Выберите «Просмотр контакта». Либо нажмите на имя человека на верхней панели.
  4. Просмотрите профиль: здесь будет фотография, имя человека, дата, когда он зарегистрировался в WhatsApp, когда последний раз заходил в мессенджер.
  5. Если вы не сохраняли телефон человека в своих контактах, в списке профилей нажмите на кнопку «Новый контакт».
  6. Запустится ваша телефонная книга – заполните форму: введите имя искомого человека, его номер. Нажмите на галочку справа вверху, чтоб сохранить контакт.
  7. Номер человека появится в списке контактов. Если не появился, нажмите на три точки справа вверху. Кликните «Обновить».

Вайбер

Как найти человека по номеру телефона в Вайбере:

  1. Запустите приложение. На вкладке «Чаты» нажмите на иконку в виде сообщения. Она расположена справа внизу.
  2. Сразу появится список ваших сохраненных телефонов. Здесь будут отображаться люди, которые зарегистрированы в Viber. Пролистайте список, чтобы найти нужного человека. Либо введите в поисковую строку имя или номер телефона.
  3. Нажмите на аватарку, чтобы открыть диалог с человеком, а затем его профиль, чтобы приблизить фотографию.

Телеграм

Как найти человека по номеру телефона в Телеграме:

  1. Запустите приложение. На странице с чатами кликните по иконке с карандашом.
  2. Нажмите «Продолжить».
  3. Разрешите мессенджеру доступ к телефонной книге. На странице появятся люди из вашего телефона – те, кто уже подключил Телеграм.
  4. Найдите нужного человека и нажмите на его имя. Откроется пустой диалог. Можете написать человеку либо кликнуть по его имени на панели вверху – появится профиль. Там может быть фотография, статус, немного информации о человеке (ту, что он сам указал в своих настройках).

Еще один способ поиска: нажмите на три линии слева вверху. В меню выберите «Контакты». Откроется тот же список возможных друзей.

Если у вас не загрузились контакты из телефонной книги, скорее всего, в программе отключена синхронизация. Как ее включить:

  1. Нажмите на три линии слева вверху. Выберите пункт «Настройки».
  2. Зайдите в раздел «Конфиденциальность».
  3. Прокрутите страницу до конца. Посмотрите на пункт «Синхронизировать контакты». Если переключатель серого цвета, значит, функция отключена. Чтобы ее активировать, нажмите на этот же тумблер – он загорится синим.

Общий способ для Viber, WhatsApp и Телеграм – через сам список «Контактов»

Во встроенном приложении «Контакты» (это и есть телефонная книга) также отображаются профили людей в мессенджерах. Причем сразу все страницы – в Viber, WhatsApp, Telegram и в других программах для переписки.

Объясню, что вам нужно сделать:

  1. Откройте приложение «Контакты». В списке найдите номер человека: вручную или через поисковую строку. Откройте его профиль.
  2. Оцените результат: на экране будет указан номер человека, имя, которое вы дали контакту, а также мессенджеры, в которых этот номер зарегистрирован. Это может быть Viber, WhatsApp, Telegram. Чтобы открыть диалог с человеком в конкретной программе, нажмите на иконку в виде сообщения.
  3. Через сам диалог откройте профиль человека: нажмите на его аватарку либо имя на панели вверху.

Финансы

CoinPost – курс валют, индексов, криптовалют, акций

Этот бот позволяет в режиме 24/7 следить за курсами валют, криптовалют, индексов и акций различных компаний. 

Вы можете выбрать также и акции компаний. 

Такой бот должен быть у каждого под рукой.

Ссылка на бот «Coin Post – курс валют, индексов, криптовалют, акций»

Семейный бюджет

Бот под названием “Семейный бюджет” поможет, как уже понятно из названия, вести семейный бюджет и контролировать расходы. Мало того, что можно контролировать свои личные доходы, но также это можно делать всей семьей.

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

Ссылка на бот «Семейный бюджет»

WhereIsMyMoney

Бот в Телеграме WhereIsMyMoney умеет сохранять ваши расходы и показывает статистику по ним. Можно отметить удобность и простоту его использования.

Пока что бот позволяет сохранять ваши расходы по одному слову. Например, просто напишете «100 еда», затем, когда вы снова напишите еще одну трату на еду, он добавит ее к общей сумме.

Бот позволяет прямо в мессенджере увидеть статистику, а также экспортировать ее в таблицу Excel.

Ссылка на WhereIsMyMoney

StockAlertingBot

Глядя на то, что прямо сейчас творится на всевозможных финансовых рынках, кому-то очень полезно будет следить за акциями компаний. Здесь на помощь может прийти @StockAlertingBot. Просто отправляете боту название любой публичной компании и он пришлет вам актуальную информацию.

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

Ссылка на StockAlertingBot

Lavkagram

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

Lavkagram — площадка для создания своих Телеграм‑магазинов и управления ими. Это абсолютно бесплатно.

При старте бота вам сразу покажут пример, как это может работать и дальше пошагово помогут запустить собственного бота!

Ссылка на Lavkagram

Начало работы

Telegram API vs Telegram Bot API

Рассказываю по порядку.

Телеграм использует собственный протокол шифрования MTProto. MTProto API (он же Telegram API) — это API, через который ваше приложение Телеграм связывается с сервером. Telegram API полностью открыт, так что любой разработчик может написать свой клиент мессенджера.

Для написания ботов был создан Telegram Bot API — надстройка над Telegram API. Перевод с официального сайта:

Среди упрощений Bot API: работа через вебхуки, упрощенная разметка сообщений и прочее.

Почему-то мало кто знает о том, что боты могут работать напрямую через Telegram API. Более того, таким образом можно даже обойти некоторые ограничения, которые даёт Bot API.

Вся информация ниже будет по умолчанию относиться и к Bot API, и к Telegram API. О различиях я буду упоминать. От некоторых ограничений Bot API можно избавиться с помощью локального сервера, об этом в конце статьи.

На чём пишут Телеграм-ботов

Бот должен уметь отправлять запросы Телеграм-серверу и получать от него апдейты (updates, обновления).

Конечно, удобнее использовать библиотеки, чем делать http-запросы «руками».

Если вы попробуете загуглить, как написать Телеграм-бота на Python, вам предложат воспользоваться библиотеками python-telegram-bot и telebot. Но не стоит.

Ну, если вы только хотите познакомиться с разработкой ботов и написать своего hello-world-бота, то можете, конечно использовать и их. Но эти библиотеки могут далеко не всё. Среди разработчиков ботов лучшей библиотекой для ботов на Python считается aiogram. Она асинхронная, использует декораторы и содержит удобные инструменты для разработки. Ещё был хороший Rocketgram, но он давно не обновлялся.

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

Если же вы хотите использовать Telegram API, то можете воспользоваться Python’овскими Telethon и Pyrogram.

Создание бота

Единственная информация о Телеграм-ботах, которой в интернете полным-полно: как создать бота. Это делается через специального бота BotFather. Когда вы создадите бота, BotFather даст вам его токен. Токен выглядит примерно так: . Именно с помощью токена вы сможете управлять ботом.

Один пользователь может создать до 20 ботов.

В BotFather удобно управлять ботами своими командой .

Юзернеймы

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

Юзернейм бота выглядит как обычный юзернейм, но он должен заканчиваться на «bot».Вы могли видеть ботов с именами @pic, @vid, @sticker, @gamee — это официальные боты Телеграма. Им можно нарушать все правила :)

Очень многие юзернеймы уже заняты. Свободных коротких юзернеймов осталось очень мало. И что самое грустное: почти все эти боты мертвы. Просто не отвечают на сообщения. Наверное, это просто разные любопытные люди хотят сделать бота, создают его, а потом забивают. У меня самого есть несколько лежащих ботов. Так что, думаю, лимит в 20 ботов на одного владельца вполне оправдан :)

Оформление бота

Открыв бота, пользователи могут увидеть его профиль.

Оформление бота настраивается в BotFather: меню → . Там можно изменить:

  1. Имя бота.

  2. Описание (Description) — это текст, который пользователи будут видеть в начале диалога с ботом под заголовком «Что может делать этот бот?»

  3. Информация (About) — это текст, который будет виден в профиле бота.

  4. Аватарка. Аватарки ботов, в отличие от аватарок пользователей и чатов, не могут быть анимированными. Только картинки.

  5. Команды — тут имеются ввиду подсказки команд в боте. Подробнее о командах .

  6. Inline Placeholder — об инлайн-режиме см. .

Стандартный совет: Потратьте свое время и заполните описание и информацию бота, чтобы пользователям было понятнее и проще его использовать. Можете оставить там свои контакты. И поставьте аватарку, чтобы бота было проще отличать от других чатов в списке.

Что такое роботы в Телеграм

Бот — это программный робот, который может делать самые разные вещи. Спектр применения таких роботов очень обширен: заказ билетов, банковские операции, курсы валют, новости, развлечения, онлайн игры, информация. Короче говоря, всё, на что способна фантазия разработчика.

Рекомендуем: КредоБот — удобный бот для подбора кредитов и займов в 2019 году с возможностью узнать бесплатно свой кредитный рейтинг.

Так как у Телеграм открытое API (интерфейс прикладного программирования), любой желающий может создать собственных роботов. Однако для этого все же потребуются навыки программирования.

Безопасны ли Telegram-боты?

Да, вы можете не волноваться, главное запомнить основной принцип: относиться к Телеграм-роботу так, как вы относитесь к пользователям, с которыми не знакомы. В общем, актуальны стандартные правила безопасности.

Это означает, что не стоит давать ботам личную информацию, пароли, банковские данные и т.д. По умолчанию они видят ваше публичное имя, а также фотографию аккаунта. И, конечно, те сообщения, что вы им отправляете.

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

Как найти и запустить бота в Телеграм

Способ №1: зная юзейрнем

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

Чтобы найти робота в Телеграм, самый простой способ — вставить в поисковую строку его юзернейм. Если вы, конечно, его знаете

Что делаем:

  1. Вставляем в строку поиска телеграм имя бота — @EasyStrongPasswordBot;
  2. Проверяем результаты поисковой выдачи. У нужного нам робота имя должно полностью совпадать с тем, что мы указали;
  3. Выбираем команду «/start». Робот запускается;
  4. Выбираем команду «/lang». Указываем нужный язык нажатием кнопки;
  5. Робот предлагает выбрать просто или сложный пароль. Выбираем. Видим результаты.

На примере этого Телеграм бота вы видите, что пользоваться программными помощниками очень просто.

Все роботы действуют по одному принципу — через команды. Где-то команды вводятся через строку набора сообщения, где-то — через специальные кнопки под этой строкой.

Любой Телеграм бот реагирует на определенные команды

Стикеры и мемы

EzStickerBot

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

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

Ссылка на EzStickerBot

fStikBot

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

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

Ссылка на fStikBot

Всратослав

Бот со странным название “Всратослав”. Этот бот в Телеграм превращает любое фото в мем. Отправляете ему нужную фотокарточку, а в ответ бот напишет что-то интересное на ней.

Чаще всего это выглядит очень смешно. Советуем иметь данный бот где-то рядом.

Ссылка на Всратослав

Кстати, именно этот бот в Телеграм, который созда в конце декабря 2019 года, добился невероятного успеха и результатов. О нем писали такие известные издания как tjournal, vc.ru и многие многие другие. Создателями этого нашумевшего бота является студия nativegames, занимающаяся интерактивными разработками для соцсетей. 

Студия создает на заказ боты для Телеграм и VKontakte, маски в Instagram и рисуют анимированные стикеры в Телеграм. Если вдруг у вас появилось желание создать что-то из вышеупомянутого, можете обратиться к ним. 

DistortBot

Бот DistortBot позволяет сделать из ваших картинок, видео, гифок, аудио и видео сообщений, что-то смешное. Distortion в переводе значит искажение, соответственно бот будет искажать все что угодно и как захочет.

В настройках можно установить русский язык и изменять уровень искажения. Попробуйте и повеселитесь. 

Ссылка на DistortBot

Как найти по номеру телефона местонахождение человека

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

Услуга «МТС Поиск» от МТС

Естественно, отыскать настоящее местоположение другого абонента, без его согласия, невозможно. Геолокация работает только с согласия и преимущественно с использованием соответствующих услуг от операторов сотовой связи. Например, в сети оператора МТС работает единая услуга «МТС Поиск» — с ее помощью мы можем быстро определять положение своих друзей и родственников, являющихся абонентами МегаФона, МТС и Билайна.

Услуга предоставляется с абонентской платой, её размер зависит от количества отслеживаемых людей и дополнительных функций:

  • «Базовая» – 3 руб/сутки или 90 руб/мес, до 3 контактов, запись истории перемещения за 7 дней;
  • «Оптимальная» – 5 руб/сутки или 120 руб/мес, до 7 контактов, запись истории перемещения за 7 дней;
  • «Премиальная» – 7 руб/сутки или 190 руб/мес, до 15 контактов, запись истории перемещения за 90 дней плюс режим невидимки.

Дополнительные функции:

  • Контроль входа и выхода из геозон;
  • Отправка уведомлений;
  • Родительский контроль с получением уведомлений о состоянии детского телефона;
  • Отображение чужого баланса;
  • Возможность поделиться своими координатами с членами семьи;
  • Определение собственного местоположения;
  • Возможность контроля геопозиции по спутникам.

Также поддерживается отправка сигнала SOS.

Услуга «Билайн.Координаты» от Билайн

Геолокация от Билайна представлена услугой «Билайн.Координаты». Ее недостатком является то, что она работает только для абонентов Билайна. Определить местоположение абонентов других сетей не получится. Как и в случае с МТС, услуга предоставляется с абонентской платой и требует получения разрешения искомых абонентов. Подключение – бесплатное, абонплата – 1,7 руб/сутки, первые 7 дней – бесплатно.

Услуга «Радар» от оператора МегаФон

Услуга «Радар» от МегаФона позволит быстро найти местонахождение того или иного абонента, но только с его согласия. Она позволяет определять местоположение абонентов МегаФон, Билайн и МТС. Отслеживание осуществляется на сайте услуги, в мобильном приложении «Радар» для Android и iOS, а также в виде SMS и MMS.

Параметры услуги:

  • Подключение – бесплатно;
  • Абонентская плата – 7 руб/сутки;
  • Максимальное количество отслеживаемых абонентов – 5 шт;
  • Количество определений – не ограничивается;
  • Контроль маршрутов и геозон.

Также услуга предусматривает определение своего местоположения.

Услуга «Геопоиск» от Теле2

Данная услуга позволяет определять местоположение абонентов Теле2 – другие операторы не поддерживаются, что является определенным минусом. Также особенностью услуги является то, что искомый абонент должен находиться только в домашней зоне обслуживания. Геолокация от Теле2 предусматривает наличие абонентской платы в размере 3 руб/сутки. Первые 3 дня – бесплатно.

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

Как задеплоить в продакшн

Выше я перечислил большой набор технологий, с которыми многие напрямую не работали. Всякие Redis и load balancers …. звучит сложно.

Год назад до меня дошло, что все, что я перечислил выше уже кто-то делал. И да, это стандартные задачи, которые приходится решать, когда ваш продукт начинает сильно расти. Значит ли это, что кто-то взял и автоматизировал весь процесс, позволив разработчикам не тратить время на уже стандартные действия? КОНЕЧНО.

Создание базы данных Postgres и Redis. Повесить домен и прикрутить HTTPs. Запуск еще одного инстанса приложения и запуск load balancer между ними. Автоматическая сборка новой версии приложения и, в случае успеха, zero-downtime замена старого приложения на новое?

Все эти и другие задачи уже давно автоматизированы. Есть платные платформы, которые это умеют (Google App Engine, Digital Ocean App Platform, Heroku). А есть и self-hosted решения (Dokku, CapRover). Self-hosted означает, что вы снимаете где-нибудь сервер (например, Digital Ocean), а потом простым запускаете бесплатный аналог платных платформ.

Почему я пользуюсь Dokku?

Я люблю Heroku за его простоту. Мне очень нравится их интеграция с GitHub репозиторием, которая максимально автоматизирует процесс деплоя. В итоге код, оказавшись в репозитории, автоматически превращается в рабочий сервис. Больше не надо заходить на серверы, скачивать свежую версию кода, собирать из этого контейнер, запускать его и ждать, что он не упадет сразу же по глупой ошибке, перенаправлять траффик со старого контейнера на новый и гасить старый контейнер. Это все происходит автоматически.

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

Основная проблема Heroku в том, что он становится очень дорогим, когда бесплатного инстанса перестает хватать: отдельно плати за сервер, отдельно за БД. Что же делать?

Как это обычно бывает, умельцы сделали Open Source self-hosted версию. Называется Dokku. Да, у нее нет красивого UI с кнопочками и one-click github integration, но зато есть очень понятная документация.

Аналогично Heroku, Dokku собирает ваш проект, используя open-source технологию Buildpacks, и позволяет в 2 строчки подключить базы данных и HTTPS шифрование траффика к проекту.

Dokku + Django

Чтобы buildpacks поняли, как запускать ваш проект, нужно указать а) какие зависимости поставить и б) какие команды запускать. Я предпочитаю это все указывать в файлах requirements.txt и Procfile.

В случае с Dokku существует еще третий вспомогательный файл DOKKU_SCALE, в котором указывается сколько копий сервисов нужно запустить. Например, если указать worker=4, это будет значит: возьми из Procfile команду под названием worker (в нашем случае, это Celery worker), запусти ее 4 раза в разных контейнерах, а потом между ними настрой load balancer. Удобно? Удобно.

Прелесть Dokku в том, что когда вы создаете «плагины» с Postgres или Redis, а потом прикрепляете их к вашему приложению, к нему автоматически добавляются переменные окружения и , поэтому возможно понадобится немного пошаманить в settings.py, чтобы код был готов читать эти переменные.

Автодеплои по коммиту делаются очень легко. Достаточно настроить CI так, чтобы во время нового изменения ветки Main он заходил по ssh на сервере и делал условный git pull (во внутренний репозиторий Dokku). Этот процесс легко автоматизируется через GitHub Actions, вот код.

Если вам нужна пошаговая инструкция, как создать Dokku приложение, как подключить к нему базы данных, как прикрутить HTTPs, автоматическую сборку через GitHub Actions по коммиту в мастер, читайте в Wiki страничке.

Очень надеюсь, что такая сумбурная статья кому-то будет полезной. Напомню, что вот сюда я выложил рабочий код — шаблон телеграм бота, где реализовано все, что упоминалось в статье. Также у меня есть свой Телеграм канал, где я делюсь своим опытом разработки ТГ ботов и не только.

Настраиваем команды и меню в боте

Далее переходим к настройкам нашего бота и переключаемся на диалог с ним. Жмем внизу чата «Начать».

В ответ получаем сообщение с описанием нашего бота (то, что мы указали на предыдущем шаге). Его же будут видеть и подписчики вашего бота.

В сообщении ниже отобразится меню для управления вашим ботом (его видите только вы, как владелец бота). Если это сообщение не появилось, вы можете вызвать его сами, введя в чат команду /help или выбрав раздел «Помощь» в меню бота.

В этом сообщении отображаются команды, которые вы можете использовать для управления ботом. Например, чтобы отправить новое сообщение подписчикам, воспользуйтесь командой /newpost. Просто кликните по ней, либо отправьте в диалог боту и следуйте дальнейшим подсказкам. То же и с другими командами.

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

Для этого в меню под полем ввода сообщения кликаем по пункту «Пользовательские команды».

Выбираем «Создать команду».

Указываем название нашей команды – оно должно быть латиницей и без пробелов. Название может содержать цифры и нижнее подчеркивание (для разделения слов). Перед командой используем значок слеш (косую черту) /.

Вводим команду в поле сообщения и жмем Enter.

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

Мой пример ответа ниже, чтобы его сохранить, жмем «Enter», а затем кнопку «Сохранить».

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

Кстати, при создании команды мы можем добавить вопрос – обычный, развернутый, с вариантами ответа. Чтобы добавить вопрос, следуйте подсказкам бота.

Если вы хотите отредактировать или удалить команду, кликните по ней в меню.

Откроется новое меню, в котором вы сможете выбрать желаемое действие.

Например, выбираем редактирование. Здесь действия будут следующими:

1) Сначала нам нужно удалить предыдущий ответ на команду и подтвердить действие.

2) Затем нажать «Добавить сообщения к команде».

3) Вводим новый ответ, отправляем боту, сохраняем.

4) Получаем сообщение, что команда успешно отредактирована.

Чтобы вернуться к предыдущему меню, нажимаем «Назад».

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: