Telegrambot.pro — Telegram Bot Professional Development

Как написать Telegram бота: практическое руководство

6 Апрель 2016, Python, 157866 просмотров

В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом. Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов — telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.

Как создать Telegram бота?

Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

  • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
  • Добавляем к себе в контакт-лист бота с именем BotFather
  • Запускаем процедуру «общения» с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.
  • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, DjangoBot или Django_bot.

  • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂

После создания бота, обратите внимание на строку с текстом:

Use this token to access the HTTP API:

За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

  • Присвоить боту описание
  • Установить аватар
  • Поменять token

и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.

Приступаем к кодированию

Как я ранее уже упоминал, мы будем писать веб-приложение на Django. Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

  • Использование вызова API метода getUpdates
  • Установка Webhook

Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook. Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.

Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

Итак, вернёмся к python библиотеке для работы с Telegram — telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:

Поздра
вляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

Выполняем код:

Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

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

Простая функция парсинга RSS фида Planet Python выглядит вот так:

Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:

CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage. Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.

Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂

Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates.

После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:

http://127.0.0.1:8000/planet/b…BOT_TOKEN/

где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:

 

А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

HYIP Demo Bot — crowdfunding, crowdinvesting, pyramide, hyip project Telegram bot

This is the demo bot for the investment project in Telegram. This bot is for only demonstration purposes so it dont use the real money. You can just simulate an investment and get your simulated profit. Also you can see actual project balance (all investments — all withdrawals). This bot can be used for different type of investment projects in Telegram like crowdfunding project, crowdinvesting bot, pyramide scheme, mmm in telegram, hyip project bot, etc.

Implemented features:
⚡ Money input (Bitcoin, Litecoin, Dogecoin).
⚡ Money output (Bitcoin, Litecoin, Dogecoin).
⚡ Transaction history.
⚡ Different investment plans.

Блог Виктории Карповой

⚡ Referral system (up to 5 levels).
⚡ Cron-script for profit countings.
⚡ Admin commands for loading and withdrawal funds and set up the bot options.
⚡ Protection from DDOS attacks.

Warning! Do not use this software for a scam or other illegal purposes! You, as owner and administrator of the bot, take all responsibility for the bot using. Also you take all responsibility to the users who do the investments according to your country laws.

We help you to start your own investment project for only 1BTC.

Start the bot

Проект фактически представляет собой онлайн хранилище свободно распространяемого программного кода.

Чат-боты для Телеграм

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

  • Рады видеть вас в приложении! Если вы здесь впервые то перейдите на страницу помощи.

Пишем бота для сайта на javascript

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

Волею судьбы мне понадобилось написать бота для сайта, навигация по которому полностью построена на ajax. Я уже сталкивался с такой проблемой и прекрастно понимаю, что php-шная библиотека curl вполне справляется со своей задачей и в этом случае с ajax-ом, но, видать, я был не первым таким умником и разработчики сайта защитились от ботов постоянно меняя ajax-запросы, да еще и генерируя их с помощью javascript.

Все статьи цикла
Промучившись три ночи, я осознал, что нужно писать интерпретатор javascript, вот только занятие это, мягко говоря, не благодарное, покопавшись в интернете я нашел уже 2 готовых (весь остальной абзац к делу фактически не относится):

Для java. (пользуясь случаем хочу отметить, что вопреки распространенному мнению, java и javascript – два совершенно разных языка, а приставку «java» javascript приобрел в последний момент и только в маркетинговых целях).

Благодаря случайно попавшейся месяц назад на глаза батиной книжке Питера Нотона за 1996 год я понял, что java – язык без сомнения интересный и позволяющий решить много специфических задач язык. Вот только я, как и большинство, думаю, не смогу взять и написать бота на нем, java требует не малых усилий по изучению, и если и изучать его, то не для написания одной маленькой программки.
Для python. Наверно в начале весны от одного человека (руководителя одной из конторок по производству сайтов, как он сам себя называет) слышал восторженный отзыв об этом языке программирования, в котором обсирались все известные мне серверные языки и прославлялся великий и могучий python. Из этого монолога я также узнал, что для конторы, по заказу на python-е сейчас пишется CMS и почти завершена. Вот только:
говорил он не своими словами, а словами программиста, который эту CMS пишет, сам же он даже не знает, как этот самый python выглядит.
в программировании этот человек не идет дальше лабороторок в институте и даже плохо в нем соображает, все его программирование ограничивается навигацией в интерактивных flesh мультиках,
даже после полутора лет своей работы контора убыточна,
возможно из-за предыдущего пункта она, по сути, не легальна и представляет собой просто N-ое количество друзей работающих за идею,
CMS все еще не доработана даже до beta-версии.

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

После еще одной бессонной ночи впустую, мой засыпающий мозг вспомнил о Delphi. О той старенькой 7-ой версии, которую машинально устанавливаю после каждого форматирования диска, но с которой, по сути, не работал уже лет пять или даже семь. (Кстати, думаю, в C++Builder все те же самые огурцы лежат, но лично не проверял.)

Там, на вкладке internet притаился компонент TWebBrowser, он является встроенным в Delphi экземпляром Internet Explorer-а, в котором уже есть так нужный мне интерпретатор javascript. При этом мы получаем почти безграничную власть над этим творением Microsoft-а.

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

Дальше пойдут примеры кода, которые собирались еще в лохматые времена для Delphi 6 и я не уверен, что они будут работать на новых версиях. (в 7-ой версии работают точно)

Итак, перво-наперво, после размещения компонента TWebBrowser на форме, нам нужно загрузить в него страницу, для этого служит метод Navigate:
WebBrowser.Navigate(‘http://vvy.me’);

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

После того, как страница загрузится произойдет событие onDocumentComplete, в котором мы уже и можем приступить к работе со страницей, но для начала нам нужно:

добавляем в uses модуть MSHTML
добавляем переменные:
WB_Doc : IHTMLDocument2; // В этой переменной будет хранится интерфейс взаимодействия со всем WebBrowser-ом WB_HTMLWindow : IHTMLWindow2; // А тут уже наше окно, с которым и работает javascript

и конечно кусок кода в процедуре onDocumentComplete
WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc); WB_HTMLWindow := WB_Doc.parentWindow; if not Assigned(WB_HTMLWindow) then showmessage(‘авот фих тебе’) else showmessage(‘ все OK’);

Но на самом деле все немного сложнее, событие onDocumentComplete возникает при:

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

При этом во время возникновения события объект браузера может быть не доступен, но мы можем убедится в возможности взаимодействия с WebBrowser-ом по его свойству ReadyState, если все хорошо, то оно должно быть равно 4 или READYSTATE_COMPLETE, кому как нравится. Все остальные значения от 0 до 3 в нашем контексте мало интересны и лишь обозначают степень готовности WebBrowser-а к работе с ним.

Что бы добраться до html-кода страницы мы можем применить вот такую функцию:
function GetHtml(doc: IHtmlDocument2): string; var iDisp: IDispatch; iCollection: IHTMLElementCollection; begin result := »; iCollection := doc.all.Tags(‘HTML’) as IHTMLElementCollection; iDisp := iCollection.item(0, 0); result := (iDisp as IHTMLElement).outerHTML; end;

Хоть она и вернула все содержимое в виде одной строки, кодовые символы
в наличии, и все прекрасно загружается например в TMemo с переносом строк:
Memo.Lines.Add(GetHtml(WB_Doc));

Смертельный номер! Функция Get
Html вернет нам не просто html-код страницы, а код, в котором выполнились уже все скрипты, т.е вместо
<script language="javascript"> document.write(‘Я работаю!’); </script>

Мы получим
<script language="javascript"> document.write(‘Я работаю!’); </script> Я работаю!

И даже больше: мы можем обращаться к html-элементам страницы, например заполнять input-ты или отправлять формы средствами Delphi, но что б не курить мануалы еще и по этому вопросу я поступаю хитрее, а точнее выполняю javascript, например:
WB_HTMLWindow.execScript(‘alert(“Тадам!”)’, ‘javascript’);

Схема работы получается предельно простая (с примерами как получилось у меня):

Загружаем первую страницу
Например, код ссылки, в том виде как ее получил WebBrowser
<a>Далее</a>

Получаем цункцией GetHtml ее html-код с уже отработавшими скриптами
Наша ссылка получилась вот такой
<a onclick="qwerty()">Далее</a>

И малого того, что событие onclick задается в самом javascript, так еще и функцию qwerty явно прогнали через абсфукатор, но это нам не помешает
Регулярками вытаскиваем код из события onclick
qwerty()

С помощью .execScript запускаем событие onclick, вернее код из него
Из многочисленных событий onDocumentComplete ифом(if) выбираем то, в котором WebBrowser.ReadyState равно 4 и только тогда продолжаем работу. Лично я, для верности, еще и потом включаю TTimer, в любом случае он создаст задержку в выполнении программы, и наш будет больше похож на человека.
Регулярками вынимаем нужную информацию
Находим следующую ссылку «Далее»

И так по кругу

Кстати, в TWebBrowser частенько не выполняются правильно написанные скрипты, которые выполняются в обычном IE, в этом случае на экран выскакивает стандартное окошко об ошибке в javascript, с предложением запустить отладку. И, кроме того, что они мельтешат перед глазами, они еще иступарят нам весь компонент делая его не доступным до момента загрузки нового url-а, да и всю программу, подобно процедуре showmessage(). Это можно решить, назначив свойству Silent значение true. Оно поможет нам отключить все ошибки javascript в TWebBrowser, но оставит нам сообщения об ошибках взаимодействия с самим компонентом, что жизненно важно при отладке.

У TWebBrowser еще куча плюшек, но лично мне хватило перечисленных, а еще все это работает не только в компонентах WebBrowser, но и окнах Internet Explorer-а, достаточно получить указатель на окно программы и вперед!

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

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

Боты Телеграмм

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

Как написать свой чат на PHP

Что вам понадобится:

Базовые знания PHP и HTML
Хостинг с поддержкой PHP+MySQL

1 шаг

Создаем Базу данных и выполняем запрос на создание таблиц:
CREATE TABLE `message` ( `nick` TINYTEXT NOT NULL , `sex` TINYTEXT NOT NULL , `message` TEXT NOT NULL );
2 шаг

Создаем файл “write.php” и прописываем в нем следующее:
<?php include(‘xyz.txt’); if ($POST[submit]) { if ($POST[nick]!=‘’) { SetCookie(“nick”,$POST[nick]); SetCookie(“sex”,$POST[radio]); echo $text0.$text1.$text3; } else echo $text0.$text2.$text3; } elseif ($POST[submit2]) { mysqlconnect(“Имя сервера MySql”,“Логин”,“Пароль”); mysqlselectdb(“Имя БД”); $sql="INSERT INTO `message` (`nick`, `sex`, `message`) VALUES (’“.$HTTP_COOKIE_VARS[”nick"].“’, ’”.$HTTP_COOKIE_VARS[“sex”].“’, ’”.$_POST[text].“’);”; mysqlquery($sql); mysqlclose(); echo $text0.$text1.$text3; } else echo $text0.$text2.$text3; ?>
3 шаг

Создаем файл переменных “xyz.txt”:
<?php $title=‘Простейший чат’; $text0=‘<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2 Final//EN”><html><head><title>’.$title.‘</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head><body><iframe src="chat.php" width="80%" height="80%" align="bottom">Ваш браузер не поддерживает плавующие фреймы!</iframe><br><br>’; $text1=‘<form method="post" action="write.php">Сообщение: <input type="text" name="text" size="80" value=""><input type="submit" name="submit2" value="Отправить"></form>’; $text2=‘<form method="post" action="write.php">Ваш ник: <input type="text" name="nick" size="30" value=""> Пол: <input type="radio" name="radio" value="m" checked>Мужской<input type="radio" name="radio" value="d">Женский<input type="submit" name="submit" value="Войти"></form>’; $text3=‘</body></html>’; ?>
В этом файле – все описание интерфейса.

Зная html – исправить проще простого.
4 шаг

И последний файл “chat.php”:
<html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <meta http-equiv="refresh" content="2"> </head> <body ONLOAD="scroll(0,1000)"> <?php mysql_connect(“localhost”,“a8668656_wzi”,“qwe2013”); mysql_select_db(“chat1”); $sql=“SELECT * FROM `message` LIMIT 0, 50”; $chat=mysql_query($sql); mysql_close(); while($msg=mysql_fetch_row($chat)) { echo ‘’; if ($msg==m) echo ‘blue’; else echo ‘red’; echo ‘“>’.$msg.‘</font>: ’; echo $msg.’<br>’; } ?> </body> </html>
Этот скрипт выводит сообщения.
5 шаг

Вот и все. Разумеется, у чата много недостатков: нет смайлов, нет списка пользователей и еще много чего нет. Но, как говориться, главное дело начать… )
Советы и предупреждения:

Разумеется, взломать такой чат — дело 10 секунд.

Как написать Telegram бота: практическое руководство

6 Апрель 2016, Python, 157864 просмотров

В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом. Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов — telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.

Как создать Telegram бота?

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

Боты Телеграмм (Топ-200 Лучших Ботов 2018)

Это делается следующим образом:

  • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
  • Добавляем к себе в контакт-лист бота с именем BotFather
  • Запускаем процедуру «общения» с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.
  • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, DjangoBot или Django_bot.

  • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂

После создания бота, обратите внимание на строку с текстом:

Use this token to access the HTTP API:

За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

  • Присвоить боту описание
  • Установить аватар
  • Поменять token

и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.

Приступаем к кодированию

Как я ранее уже упоминал, мы будем писать веб-приложение на Django. Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

  • Использование вызова API метода getUpdates
  • Установка Webhook

Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook. Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.

Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

Итак, вернёмся к python библиотеке для работы с Telegram — telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения э
тих команд мы получим:

Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

Выполняем код:

Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

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

Простая функция парсинга RSS фида Planet Python выглядит вот так:

Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:

CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage. Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.

Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂

Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates.

После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:

http://127.0.0.1:8000/planet/b…BOT_TOKEN/

где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:

 

А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей.

Об этом мы поговорим в следующей заметке.

Компонент позволяет подружить InstantCMS и мессенджер Telegram и упростить пользователям мессенджера использование сайта.

Возможности компонента:

  1. Отправка любых уведомлений в мессенджер Телеграм (настраивается пользователем)
  2. Выгрузка в заданный админом канал Ленты событий сайта (можно настроить типы выгружаемых событий)
  3. Выгрузка в заданный владельцем группы канал событий Группы (можно настроить типы выгружаемых событий)
  4. Поддержка компонента SmartChat — транслирование сообщений в Телеграм канал (заданный в виджете или в настройке группы если это чат Группы)
  5. Массовая или выборочная отправка сообщений пользователям в мессенджер Телеграм.
  6. Выгрузка событий друзей в приват пользователю (реализуется с помощью дополнительного компонента)
  7. Выгрузка событий по созданию записей в типах контента с иллюстрациями
  8. Хештеги для типов контента
  9. Выгрузка собственной ленты пользователя в свой собственный канал Телеграм
  10. Поле в профиль для авторизации в Телеграм, которое отображается только в своем профиле
  11. Поддержка коротких ссылок goo.gl — реализуется дополнительным компонентом (бесплатным).


В комплект входят три поля

  1. «URL канала Telegram», которое можно добавить в профиль или типы контента.
  2. «Число подписчиков на telegram канале’»
  3. «QR код для авторизации в Телеграм»

Важно! В этой версии обязательное условие для работы компонента — ssl сертификат. Это необходимое требование для того, чтобы бот мог получать и обрабатывать новые сообщения. Без этого бот не сможет авторизовать пользователей (и соответственно не сможет слать им уведомления) и не сможет выводить в чат сообщения из Телеграм. Будет работать только выгрузка сообщения компонента SmartChat (из виджета или группы) в Телеграм и вывод Ленты событий в Телеграм.

Настройка компонента в админке

1.

Самые интересные и удобные боты в Telegram

нужно создать специального бота для сайта (если сайтов у вас много, то для каждого создаем отдельного бота)

2. создаем новый Телеграм канал (например, для выгрузки Ленты событий или чата). И добавляем в него нашего бота в качестве Администратора — чтобы он мог писать в канал новые сообщения. Делаем канал публичным и заполняем публичную ссылку, которая пригодится для заполнения на сайте. После этого если нужно — можно сделать канал приватным (чтобы посторонние не смогли его найти и читать сообщения).

3. Заполняем настройки для работы с Лентой активности и Группами.

4. Включить флаг вывода закладки в профиле. Для подключения Телеграм пользователями сайта.

Инструкция по созданию бота

Создается новый бот при помощи еще одного бота: @BotFather.

  1. ввести команду /newbot – создание нового бота. Затем BotFather попросит придумать новое уникальное имя для этого бота. Оно обязательно должно заканчиваться на «bot»;
  2. можно также добавить аватар для бота и его описание;
  3. далее BotFather присылает уникальный токен API, который нужно будет указать в админке вместо с именем бота

Что нужно сделать пользователю для подключения уведомлений:

  1. Открыть вкладку Телеграм в своем профиле и считать QR код (или кликнуть на него) — открыть ссылку в приложении Telegram
  2. Нажать Start в чате с ботом, бот должен ответить «НикнеймПользователя, вы успешно авторизовались.»
  3. Настроить уведомления в редактировании профиля (вкладка «Уведомления»)

Видео — делаем нового бота и назначаем его админом Телеграм канала.

Работу компонента можно посмотреть на демо сайте (http://v28.smartcontrol.today).

t1@t1.ru
……..
t10@t10.ru

пароль у всех 123123

Код открыт. Компонент можно установить на все свои сайты. Купив это дополнение, вы получаете 6 месяцев бесплатных обновлений.

После установки компонента

1. необходимо добавить события на странице Компоненты -> Управление событиями.

2. Добавить два хука (события) в файлы. Нужные строки выделены жирным.

/system/controllers/users/model.php

~#448 строка
public function getUserNotifyTypes($only_default_values = false) {

$notify_types = cmsEventsManager::hookAll(‘user_notify_types’);
$notify_types = cmsEventsManager::hook(‘update_user_notify_types’,$notify_types); //добавить эту строку

/system/controllers/messages/frontend.php
~#145 строка

public function sendNoticeEmail($letter_name, $notice = array(), $notice_type = false){

//добавить эту строку

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *