15 сервисов для простого создания ботов в Telegram — Сервисы на vc.ru
{«id»:89824,»url»:»https:\/\/vc.ru\/services\/89824-15-servisov-dlya-prostogo-sozdaniya-botov-v-telegram»,»title»:»15 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432 \u0432 Telegram»,»services»:{«facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/vc.ru\/services\/89824-15-servisov-dlya-prostogo-sozdaniya-botov-v-telegram»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»vkontakte»:{«url»:»https:\/\/vk.com\/share.php?url=https:\/\/vc.ru\/services\/89824-15-servisov-dlya-prostogo-sozdaniya-botov-v-telegram&title=15 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432 \u0432 Telegram»,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter.
137 908 просмотров
Как создать и подключить бота к каналу Telegram для оформления постов!
Сейчас речь идёт именно о посте (т. е. о сообщении) на канал, а не о статье в Telegra.ph!
Но вы же хотите канал вести нормально, а не как попало? 🙂 А нормально — это значит не только годный контент выдавать подписчикам, но и оформлять на уровне!
Чтобы иметь возможность оформлять посты, нужно к своему каналу подключить специального бота.
Система этих ботов в Телеграме на самом деле маленько запутанная 🙂 Я не сразу въехал что к чему и почему, например, одного бота нужно создавать через другого бота 🙂 Но я помогу в этом разобраться и после того как начнете потихоньку работать с ботами, пазл в голове полностью сложится!
Боты ControllerBot, BotFather и собственный наш бот. Что к чему!
Для начала внесу немного ясности, чтобы сразу хоть немного прояснить ситуацию с этими ботами 🙂
ControllerBot — это, проще говоря, основной управляющий бот в Телеграме. Через него вы можете управлять своими каналами (подключать к каналам собственных ботов и отключать), перейти к публикации поста в канале.
С этого бота мы начнём работу по созданию своего бота и подключению его к каналу.
BotFather — служит непосредственно для управления вашими ботами. Через него можно создать и редактировать своих ботов.
Наш собственный бот, которого мы создадим и назовём как душе угодно, уже будет нам нужен именно для создания и оформления постов на наш канал.
Создаём собственного бота через ControllerBot и BotFather
Бот предложит выбрать язык, на котором вам будут выдаваться его инструкции. Выбирайте родной язык:
Бот предлагает нам список возможных действий. Сейчас нам необходимо подключить свой канал. Кликаем по предложенной ссылке «/addchannel» (добавить канал).
Получаем инструкцию по подключению бота. Кликаем по имени бота «@BotFather», указанного в пункте 1.
Вы перейдёте сразу в окно бота BotFather, через которого уже будем создавать своего бота. Нажмите «Запустить» внизу.
Бот ответит нам, после чего кликните по команде «/newbot»:
Теперь нужно указать имя создаваемого бота и отправить сообщение. Можно указывать любое, например, часть имени фамилии или часть названия канала, как удобно. Пример:
Теперь необходимо указать ник для создаваемого бота. Здесь можно указать тоже самое, но обязательно на конце должно стоять «bot» либо через знак нижнего подчёркивания «_bot». Пример:
Если вы вдруг получили сообщение «Sorry, this username is already taken. Please try something different.», то значит такой ник уже занят и нужно указать другой.
Если всё верно сделали, получите сообщение об успешном создании бота и специальный длинный ключ (токен):
Его нужно скопировать в ControllerBot, с которым мы сразу начинали работу.
Вставив ключ в окно чата ControllerBot, он в ответ выдаст инструкцию по добавлению канала к нему. Выполняем её…
Скопируйте из пункта 1 имя бота, которого вы только что создавали:
Затем открываем созданный нами канал для работы, переходим в его меню и выбираем «Управление каналом».
Открываем раздел «Администраторы».
Внизу нажимаем «Добавить администратора».
В строке поиска вверху [1] вставьте имя скопированного бота и после, когда он появится в результатах поиска, кликните по нему [2].
Нажимаем «ОК» в окне с вопросом о назначении бота администратором.
Ничего не изменяя в настройках, нажмите «Сохранить» в следующем окне.
Всё, бот в качестве администратора канала добавлен и теперь окно можно закрыть:
Теперь, выполняя пункт 2, нам нужно переслать в чат «Controller Bot» любое сообщение с вашего канала или его адрес.
Открываем снова меню канала и выбираем «Описание канала».
Копируем ссылку, которая является адресом вашего канала (кликните по ней правой кнопкой мыши и выберите «Копировать ссылку»).
Отправляем эту ссылку боту «Controller Bot».
Следующим сообщением он предложит выбрать часовой пояс. Нужно отправить в ответ название вашего города.
На этом всё. Канал к боту «Controller Bot» был подключен, основные настройки выполнены, о чём свидетельствует очередной ответ бота:
Если теперь вам потребуется отредактировать бота, то воспользуйтесь для этого ботом BotFather, т.е. перейдите в чат с ним и выбирайте из его меню нужные команды. Если захотите отключить бота от канала или подключить к каналу другого бота, то тогда вам нужен ControllerBot и его меню подскажет вам, что нужно сделать.
Заключение
Без ботов, работая со своим каналом, пожалуй, не обойтись. Ну или обойтись, но тогда канал будете вести не совсем качественно и упустите разные возможности! Поэтому, скорее всего, придётся с этими всеми нюансами столкнуться, если решите всерьёз заниматься работой в Telegram, т.е. развитием своего канала.
Как видно, не так уж всё и сложно, причём боты все сами подсказывают, говорят куда нажать и для чего.
Буду рад адекватным комментариям и готов подискутировать по теме статьи 🙂
Подборка самых полезных ботов в Телеграм
Предлагаем вашему вниманию список самых полезных и востребованных ботов в Телеграм.
Список постоянно обновляется, дополняется и улучшается. Поэтому можете смело добавлять эту страницу в закладки.
Боты разделены по категориям для вашего удобства.
Официальный боты
@BotFather — главный и официальный бот Telegram. С помощью него создаются все остальные боты.
@telegraph — бот поможет закрепить ваши статьи Telegra.ph за вашим аккаунтом для дальнейшей работы с ними.
@SpamBot — официальный информационный спам Bot. Помогает пользователям с аккаунтами «под спамом» восстановить полную функциональность.
Боты для Администраторов каналов
@ControllerBot — бот для создания красиво оформленных постов, отложенных постов, позволяет просматривать статистику.
@markdownrobot — бот для создания постов в формате маркдаун.
@clwd_bot — бот для постинга. Доступен только для участников Телегачата.
@like — бот поможет вам добавить к посту до 6 кнопок с реакциями-эмодзи.
@vote — бот поможет вам создавать опросы и делиться ими с друзьями.
@groupagreebot — бот для создания опросов, проголосовавших видят все.
@SecretgramBot — бот для создания анонимных комментариев к посту.
@LivegramBot — бот помогает разработать собственного бота обратной связи для вашего канала.
@myproxybot — ещё один бот для обратной связи.
@ShortUrlRUBot — бот для сокращения ссылок.
@crssbot — бот для создания RSS-ленты для вашего Telegram канала.
@chotamreaderbot — бот мгновенно переносит содержимое любых статей в Telegraph.
@crosser_bot — считает пересечения в каналах. Показывает аудиторию вашего канала. Спасает от неэффективных ВП.
Боты для интеграции сайтов и служб c Телеграм
@IFTTT — бот помогает интегрировать ваши каналы и группы Telegram с другими сайтами и службами.
@vk_bot — бот для интеграции с группами vk.com (для админов).
@pstrbot — отправляет записи из разных социальных сетей в ваши каналы.
@aximobot — бот агрегатор потоков RSS и социальных сетей.
@telefeedbot — бот для чтения RSS и социальных сетей прямо в Telegram
@ChannelBrobot — бот для постинга сообщений, поддерживает RSS, интеграцию Zapier.
@TheFeedReaderBot — постит из RSS (вебсайты, блоги), FB, YouTube, Instagram, Twitter.
@re_postBot — Repost VK —> Telegram
Боты для работы с Instagram
@socialsaverbot — бот помогает сохранить фото и видео из Instagram.
@InstaRusBot — бот помогает скачать фото и видео из Instagram.
@InstaBot — бот позволяет скачивать фотографии, видео и аватарки из Instagram по отправленной ссылке.
@text4instabot — бот делает правильные абзацы для Instagram.
Боты для статистики и аналитики
@TGStat_Bot — бот показывает статистику любого канала Telegram, которые есть у него в базе, а также количество подписчиков в динамике, охват публикаций и много другое.
@GramMetricaBot — бот для ежедневного отслеживания количества подписчиков твоего канала или группы.
Боты для чатов
@banofbot — бот, позволяющий удалять участников из чата путём голосования.
@GBReborn_bot — бот модератор. Краткий гайд по установке и использованию (русский).
@joinhider_bot — бот для удаления сообщений о том, что пользователь зашёл или покинул чат.
@combot — многофункциональный бот для администрирования чата со статистикой.
Финансовые боты
@BTC_CHANGE_BOT — бот для покупки/продажи классического Биткоина
@BCC_CHANGE_BOT — бот для покупки/продажи Биткоин кэш
@ETH_CHANGE_BOT— бот для покупки/продажи Эфириум
Кино и фильмы
@cnxbot — позволяет смотреть любимые фильмы и сериалы в отличном качестве, без ограничений.
@kinomanbot — позволяет выбрать себе кино на вечер.
@VidusBot — поиск видео не выходя из Телеграм. Доступно в инлайне.
@smotribot — новинки, «старинки» и просто классные фильмы.
@smo3bot — смотри кино в Telegram-боте.
Книжные боты
@flibustafreebookbot — бот для быстрого поиска и скачивания книг.
@mybookbot — бот для поиска и скачивания художественных книг. Умеет искать по авторам и названиям книг.
@KnizhkaBot — поиск аудиокниг.
@bzdnbot — поиск книг по IT, программированию, взлому.
@eKnigaBot — позволяет читать книги онлайн, без скачивания.
@DualBookBot — параллельное чтение — это чтение одного и того же текста на двух языках: родном и изучаемом.
Боты для автолюбителей
@AvinfoBot — проверка продавца автомобиля по сотовому телефону, госномеру или VIN-коду автомобиля.
@CarModelBot — распознает модель автомобиля по его изображению
Напишите нам в комментариях, каких ботов используете Вы?
Создание бота в Телеграмм: всего 3 простых шага
Привет, на связи Игорь Зуевич. Мессенджер пользуется такой популярностью не только за ряд особенностей, которые выделяют его среди похожих программ, но и из-за ботов. Их здесь огромное количество. Найти определенную программу, позволяющую облегчить работу, можно. В интернете полно информации, где блогеры советуют и составляют ТОП-10 наиболее популярных роботов.
Если многообразие не устраивает и хочется создать самостоятельно бота, который будет выполнять именно ваши команды, следует воспользоваться советами этой статьи. Мы предлагаем пользователям 3 шага для создания бота в Телеграмм.
Действия
На первый взгляд, создание бота кажется сложным, поэтому хочется обратиться к специалисту, но стоит немного вооружиться информацией, как становится идея более реальной и выполнимой.
Чтобы создать бота, нужно знать язык программирования и зарегистрированный хостинг. Если знания в этой области минимальны, обратимся к серверу Manybot.io. Здесь создаются помощники, способные рассылать сообщения, делать автопостинг и создавать меню. Если действия устраивают, можно начать создание бота.
Шаг №1
Заходим на сервер и проходим регистрацию. Выбираем меню на русском языке и находим окошко с надписью “Создать нового бота”.
Шаг №2
Следующее действие — зарегистрироваться в @BotFather. Для этого нужно перейти по возникшей ссылке и заполнить нужные поля. Введем команду /newbot. После нужно придумать имя для своего бота. Оно должно быть легким и логичным и иметь обязательную приставку bot.
Шаг №3
Копируем ключ-токен, полученный в результате предыдущих действий. Возвращаемся обратно в Moneybot и нажимаем там на окно “Я скопировал токен”. Осталось всего лишь придумать описание и все, собственный бот готов.
Оформляем меню
Создание робота не занимает много времени, а с настройками придется немного повозиться. Нужно найти свою разработку в поисковике и задать ей программы для работы. Чтобы он смог в дальнейшем выполнять команды, следует их прописать в определенной строке. Для этого нужно зайти в настройки и ввести текст и имя команды. Осталось дождаться оповещения об успешном завершении создания.
Главное меню настраиваем по тому же принципу. Входим в настройки, находим окно с соответствующей надписью и входим туда. Нажимаем на значок “Добавить пункт меню”, выбираем ранее созданную команду и называем ее. Меню готово.
Отдельный плюс программы Manybot заключается в том, что создается моментальная настройка автопостинга. Эта функция позволяет читателям быстро получать новости и обновления в соцсетях, не выходя из Телеграмм. Чтобы его запустить, укажите RSS-поток своего блога. Придется немного подождать, чтоб прошла автоматическая проверка и пришло сообщение об успешном завершении.
Всего несколько минут понадобится потратить на создание своего бота в Телеграмм. С его помощью мы можем оформить отложенное сообщение. Для этого нужно набрать команду “newpost”. Затем нужно ввести в свободное поле соответствующий пост и указать время отправки. Все готово!
С помощью своих ботов многие компании проводят опросы. Как это сделать? Набираем в командной строке commands, вводим нужную команду и создаем вопрос с предполагаемым ответом. Просмотреть ответы есть возможность в главном меню, где расположено окошко с надписью “Ответы на формы”.
Начиная с простого бота, в дальнейшем можно научиться создавать сложные запросы, которые будет выполнять робот, помогая в работе бизнесмена, блогера или рекламщика.
Как видите, если вы уже знаете о том, чем полезны боты для пользователей Телеграмм, то создавайте бота самостоятельно, с нашей инструкцией, всего за три простых шага. Действовать лучше сообща и вместе с теми людьми, у которых уже есть опыт и результаты. Приходите в наши программы, заодно и заработаете больше!
С Вами,
— Игорь Зуевич.
Обязательно скачайте:
Если следующие 5 минут вы можете инвестировать в самообразование, то переходите по ссылке и читайте следующую нашу статью: 3 совета людям с инвалидностью: как начать зарабатывать в интернете
Оставьте комментарий к этой статье ниже
Как создать бота в Telegram: найти ботов в Телеграмм
Боты — это особые аккаунты в Telegram, которые могут выполнить различные функции и тем самым упрощать жизнь пользователей. Боты могут принимать и отправлять сообщения. Непосредственно рабочий код бота размещаете на сервере разработчика, а не на серверах Telegram. Исключением являются фирменные боты мессенджера (например для работы со стикерами).
Когда вы отправляете боту сообщение (или встроенную команду), она обрабатывается на сервере и бот предоставляет вам ответ или результат выполнения какого-то запроса. Этот результат вы получаете прямо в интерфейсе мессенджера. Ответом может быть что угодно, обработанное фото или текущий курс валют, зависит от того, что бот умеет делать.
Зачем нужны боты в Телеграмм?
Поскольку боты способны выполнять сотни функций, можно условно разделить их по видам:
- Развлечения. Сюда попадают бота, которые предоставляют развлекательный контент, например игры, викторины, смешные картинки, анекдоты, подберут вам фильм или книгу.
- Информационные. Эти боты могут оперативно отправлять вам информацию о какой-нибудь сфере, которой вы интересуетесь или присылать какую-то статистику.
- Услуги. Любой бот, способный стать посредником какой-то услуги. Например, выставить что-то на продажу, заказать пиццу, отследить билет на поезд.
- Продажи. Удивительно, но с помощью ботов можно совершать покупки в интернете.
- Чат-боты. Этих ботов можно добавить в чат. Будут собирать статистику или развлекать пользователей. Могут выводить какую-то полезную информацию.
И много-много других категорий. Посмотреть полный список вы можете на нашем сайте в разделе каталог ботов для Телеграмм. Так вы сможете понять какие вообще бывают боты.
Как найти ботов в Телеграмм?
Проще всего найти бота в интернете или тематическом канале. Там будет ссылка, которая откроет диалог с ним. Если такой ссылки нет, найдите название бота и вставьте его в поисковую строку мессенджера.
Можно искать ботов наугад, по названию с помощью поисковой строки внутри мессенджера Телеграмм, но что-то полезное найти будет сложно.
Есть бот @Storebot, его основная задача помочь вам найти других полезных ботов.
Несколько тысяч ботов вы сможете найти в нашем каталоге с ботами.
Как добавить бота и как им пользоваться?
Для того, чтобы бот сохранился в списке ваших диалогов, достаточно начать с ним диалог с помощью кнопки Start. После этого бот будет подключен и можно будет начать им пользоваться. Рассмотрим на примере бота Яндекса.
Находим бота
Шаг 1
Шаг 2
Делаем запросу боту
Шаг 3
Шаг 4
Работа остальных ботов идентична. Разве что у некоторых большой список команд, которые начинаются с символа / и позволяют давать разные поручения, которые предусмотрел автор бота.
Кстати, у большинства ботов есть базовая команда /help
с помощью которой можно узнать что бот умеет делать и другую полезную информацию.
Чтобы поделиться ботом с друзьями, можно переслать какое-нибудь сообщение от бота нужному контакту, либо скопировать его @username для поиска. Еще бота можно добавить в чат по аналогии с добавлением пользователей.
Как удалить бота в Телеграмм?
Некоторые боты могут стать слишком навязчивыми. Чтобы удалить бота проделайте следующее:
- Откройте чат с ботом.
- Нажмите на его имя или аватарку сверху.
- Найди кнопку Остановить и заблокировать.
- После этого можете очистить/удалить чат, бот вас больше не побеспокоит.
Что делать, если бот в Телеграмм не отвечает?
Если бот игнорирует ваши команды, то вариантов может быть несколько: не работает сервер, где живет бот; разработчик допустил ошибки при создании бота; бота заблокировали.
Все случаи, кроме последнего, решаются сами собой постепенно. В случае блокировки бота, пользоваться им уже вряд ли получится. Так что совет: просто ждите, пока бот заработает, сами вы никак не это на повлияете.
На этом мы заканчиваем часть статьи, которая описывает как пользоваться ботами в Телеграмм и идем дальше.
Как создать бота в Telegram?
Если отбросить варианты написания бота на одном из языков программирования и размещения функционала на отдельном сервере, то есть 1 простой способ, для начала:
- Начните диалог с ботом @BotFather.
- Напишите ему команду
/newbot
. - Придумайте уникальное имя боту, которое будет заканчиваться словом bot.
- Выберите аватар бота.
- Получите уникальный токен на своего бота и обязательно сохраните его в текстовом файле, очень важно его не потерять.
- На этом этапе бот создан, чтобы научить его чему-то, есть другой бот.
- Напишите боту @Paquebot, он умеет создавать ботов по принципу конструктора, писать какой-то код и размещать его на сервере не потребуется.
Если же вам нужен бот со сложным функционалом или интеграцией с вашим сайтом/сервисом, то создать его самому не получится, необходимо обратиться к специалисту, которые реализует весь функционал по вашему техническому заданию.
Список полезных ботов
Небольшой ТОП ботов для того, чтобы вы быстрее смогли понять их возможности:
-
- @delorean_bot бот-напоминалка, задаете сообщение и время, в которое бот должен вам о чем-нибудь напомнить.
- @movie_bot — бот поможет подобрать интересный фильм.
- @instasave_bot — скачивает любое фото из Инстаграмма.
- @cbr_bot — бот выдает курс валют, умеет конвертировать валюты.
- @ytranslatebot — бот-переводчик, поддерживает все языки мира.
- @imagesearchbot — бот ищет картинки по запросу прямо в чате.
- @Weatherman — бот показывает прогноз погоды.
- @Pikabubestbot ― присылает популярные посты с сайта Pikabu.
- @PollBot ― бот для создания опросов в чатах.
- @vkmusic_bot ― позволяет находить и слушать музыку.
Больше интересных ботов вы найдете в нашем каталоге ботов.
Как создать чат-бота Telegram
Чат-бот — это автоматизированный многофункциональный помощник, который может принимать отправленные и отправленные инициированные сообщения, а с помощью SendPulse ваш бот может сохранять информацию в виде переменных для дальнейшего использования.
Следуйте пошаговой инструкции, чтобы создать своего первого чат-бота для мессенджера Telegram, или подключите существующего к SendPulse для дальнейшей настройки.
Если у вас уже есть бот, пропустите первый абзац и посмотрите следующий раздел.
Как создать нового бота для Telegram
Откройте мессенджер Telegram, войдите в свою учетную запись или создайте новую.
Шаг 1. Введите @Botfather во вкладке поиска и выберите этого бота.
Обратите внимание, у официальных ботов Telegram рядом с их именем есть синяя галочка
Нажмите «Пуск», чтобы активировать бота BotFather.
В ответ вы получите список команд для управления ботами.
Шаг 2 . Выберите или введите команду / newbot
и отправьте ее.
Шаг 3. Выберите имя для своего бота — ваши подписчики увидят его в разговоре. И выберите логин для своего бота — бота можно будет найти в поиске по логину. Имя пользователя должно быть уникальным и заканчиваться словом «бот».
После выбора подходящего имени для своего бота — бот создан. Вы получите сообщение со ссылкой на вашего бота t.me /
Для подключения бота к SendPulse необходим токен. Скопируйте значение токена и найдите дополнительную информацию о подключении бота к SendPulse в последнем разделе этой статьи.
Как найти токен для существующего бота
Шаг 1. Перейдите к боту @BotFather и отправьте команду / token
.
Вы увидите кнопки со всеми созданными вами ботами.
Шаг 2. Выберите тот, для которого вам нужен токен, чтобы вы могли подключить его к Sendpulse.
Скопируйте значение токена.
Как подключить бота к SendPulse
Перейдите в раздел «Чат-боты» в своей учетной записи SendPulse. Если вы впервые заходите на эту страницу и не подключили чат-ботов, нажмите кнопку «Подключить каналы».Если вы уже подключали ботов раньше — перейдите на вкладку «Основные» и нажмите кнопку «Управление ботами».
Затем выберите Telegram и нажмите кнопку «Включить Telegram».
Введите свой токен от нужного бота и нажмите «Подключиться».
В следующем окне нажмите кнопку «Подписаться».
Вы будете перенаправлены в приложение Telegram, нажмите кнопку «Пуск», и вы будете подписаны на своего бота.
Поздравляем! Вы успешно добавили своего чат-бота в SendPulse.
Вы можете выбрать своего бота и начать создавать приветственные и инициируемые потоки или массовые кампании.
Обратите внимание, существующие подписчики не импортируются в аудиторию вашего чат-бота SendPulse. После подключения бота вы можете собирать подписчиков с помощью виджета веб-сайта или напрямую делиться ссылкой на своего бота t.me/
Подключите своего бота Telegram
Последнее обновление: 2020-11-27
Как создать бота Telegram с нуля (Учебник)
Всем привет! Все мы знаем, что эта тема с созданием бота Telegram много раз обсуждалась в Интернете.
И если вы следите за нашим постом, то, возможно, знаете, что мы уже создали пару наших собственных ботов Telegram ранее и показали вам тем или иным способом, как этого можно достичь, просто используя соответствующие инструменты.
В этом уроке мы покажем вам, как вы можете создать своего собственного чат-бота Telegram с нуля, используя BotFather и Heroku.
Контент сообщения
- BotFather.
- Установка и настройка pipenv. Первый старт.
- Обработчики. Ответ на команды и сообщения.
- Основы взаимодействия. Ответ на команды.
- Основы взаимодействия. Отвечайте на текстовые сообщения.
- Основы взаимодействия. Отвечайте изображениями, документами, аудио и прочим.
- Построение цепочки ответов.
- Добавить парсер в цепочку.
- Теория. Способы взаимодействия с ботом.
- Наценки. Добавление клавиатуры для быстрого ответа.
- У нас есть бот на Heroku.
Для начала необходимо определиться, что будет делать наш бот. Мы решили написать банально простого бота, который будет разбирать и выдавать нам заголовки из SmartSpate
И так, приступим.
BotFather
Для начала нам нужно зарегистрировать нашего бота в Telegram.
- В поиске набираем @BotFather и заходим в диалог с Отцом ботов.
- Затем напишите / newbot. Укажите имя бота (то, что отображается в диалогах).Указываем его логин, по которому его можно найти.
Он должен заканчиваться на Bot / botSmartSpate
- После этого нужно получить API-ключ и ссылку на бота. Желательно сохранить ключ API и перейти в диалог с ботом, чтобы вам не пришлось копаться в переписке с BotFather
- Далее мы добавляем к нему пару команд: assign / setcommands и одно сообщение, т.к. / setcommands не добавляет команды, а устанавливает их с нуля, отправляет на нее команды.
все — разреженные заголовки из вкладки «Умные темы»
верх — разреженные заголовки из «Темы для веб-разработчиков»
На этом работа с BotFather окончена, перейдем к следующей части.
Установка и настройка pipenv. Первый старт.
Сначала создайте файл, который будет основным кодом bot. py бота. Если бот большой, то сразу создавайте файлы, куда будете помещать функции, классы и т. Д., Иначе читаемость кода стремится к нулю.Мы добавим parser.py
Установите pipenv , если он еще не доступен.
Для Windows:
pip install pipenv
Для Linux:
sudo pip3 установить pipenv
Установите pipenv в папку проекта:
pipenv установить
Установите библиотеки. Будем работать с PyTelegramBotAPI. Но для правильной работы на серверах Heroku мы указываем версию 2.2.3. Также для разбора добавляем BeautifulSoup4.
pipenv установить PyTelegramBotAPI == 2.2.3 pipenv установить beautifulsoup4
Начинаем писать код!
Открываем bot.py , импортируем библиотеки и создаем основные переменные.
импортный телебот синтаксический анализатор импорта # основные переменные ТОКЕН = "555555555: AAAAaaaAaaA1a1aA1AAAAAAaaAAaa4AA" bot = telebot. TeleBot (ТОКЕН)
Запустите бота и проверьте наличие ошибок.
Для Windows:
python bot.py
Для Linux:
python3 бот.ру
Если ошибок нет, продолжим.
Обработчики. Реагируем на команды и сообщения
Пора научить бота отвечать нам. Его ответы даже можно сделать полезными.
Основы взаимодействия. Ответ на команды
Для взаимодействия с пользователем, т.е. обработчики используются для ответа на его команды и сообщения.
Начнем с самого простого: ответим на команды / start и / go
@ бот.message_handler (commands = ['начать', 'идти']) def start_handler (сообщение): bot.send_message (message.chat.id, 'Здравствуйте, когда вырасту, буду разбирать заголовки с Hub') bot.polling ()
Теперь давайте посмотрим, что это такое и как работает. Мы передаем в message_handler параметр команды, равный массиву со строками — командам, на которые он будет реагировать, как описано ниже. (Он будет реагировать на все эти команды одинаково). Далее мы используем send_message, пишем ему идентификатор чата (его можно получить из message.chat.id), в котором нужно отправить сообщение и собственно само сообщение. Нельзя забывать писать bot.polling () в конце кода, иначе бот сразу выключится.
Теперь вы можете запустить бота и написать ему / start или / go , и он ответит.
Он должен заканчиваться на Bot / botSmartSpate
Это json-объект, в котором хранится информация об отправителе, чате и самом сообщении.
{ 'content_type': 'текст', 'message_id': 5, 'from_user': { 'id': 333960329, 'first_name': 'Nybkox', 'имя пользователя': 'nybkox', "last_name": нет }, 'дата': 1520186598, 'чат': { 'тип': 'частный', "last_name": нет, 'first_name': 'Nybkox', 'имя пользователя': 'nybkox', 'id': 333960329, 'title': Нет, 'all_members_are_administrators': Нет }, 'forward_from_chat': нет, 'forward_from': нет, 'forward_date': нет, 'reply_to_message': нет, 'edit_date': нет, 'текст': '/ начало', 'сущности': [& amp; amp; lt; telebot. объект types.MessageEntity по адресу 0x7f3061f42710 & amp; amp; gt;], 'audio': нет, 'документ': Нет, 'photo': нет, стикер: нет, "видео": нет, 'voice': Нет, 'caption': Нет, 'contact': Нет, 'location': Нет, "место проведения": Нет, 'new_chat_member': нет, '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': нет }
Основы взаимодействия.Ответить на текстовые сообщения
Теперь займемся обработкой текстовых сообщений бота. Самое важное, что нам нужно знать, это то, что текст сообщения хранится в message.text и что для обработки текста в message_handler необходимо передать content_types = [‘text’] .
Давайте добавим этот код.
@ bot.message_handler (content_types = ['текст']) def text_handler (сообщение): текст = message. text.lower () chat_id = message.chat.id если текст == "привет": бот.send_message (chat_id, 'Привет, я бот-парсер huber.') elif text == "как дела?": bot.send_message (chat_id, 'Окей, а ты?') еще: bot.send_message (chat_id, 'Извините, я не понял :(')
Здесь мы добавили пару переменных: текст сообщения был вынесен (в нижнем регистре, чтобы не возникало лишних проблем с теми, кто писал шапки, забор и т. Д.) В переменный текст, принес сообщение .chat.id в отдельную переменную, чтобы каждый раз не ссылался на сообщение.Мы также создали небольшую ветку для ответа на определенные сообщения, а также ответа на случай непонятного сообщения бота.
Окончательный код
импорт bs4 синтаксический анализатор импорта # основные переменные TOKEN = "555555555: AAAAaaaAaaA1a1aA1AAAAAAaaAAaa4AA" bot = telebot.TeleBot (ТОКЕН) # обработчики @ bot.message_handler (commands = ['start', 'go']) def start_handler (сообщение): bot.send_message (message.chat. id, 'Здравствуйте, когда вырасту, буду разбирать заголовки хабом') @ bot.message_handler (content_types = ['текст']) def text_handler (сообщение): текст = сообщение.text.lower () chat_id = message.chat.id если текст == "привет": bot.send_message (chat_id, 'Привет, я бот-парсер huber.') elif text == "как дела?": bot.send_message (chat_id, 'Окей, а ты?') еще: bot.send_message (chat_id, 'Извините, я вас не понял :(') bot.polling ()
Основы взаимодействия. Ответить изображениями, документами, аудио и т. Д.
Чтобы отвечать изображениями, наклейками, документами, аудио и т. Д., Вам просто нужно изменить content_types = [‘text’] .
Рассмотрим пример с картинкой, добавив этот код.
@ bot.message_handler (content_types = ['фото']) def text_handler (сообщение): chat_id = message.chat.id bot.send_message (chat_id, 'Красиво.')
Все типы содержимого:
текст, аудио, документ, фотография, стикер, видео, video_note, голос, местоположение, контакт, 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_me_chat_id, migrate_from_me_chat_id
Построение цепочки ответов
Пора закончить элементарными действиями и начать что-то серьезное. Попробуем построить цепочку ответов. Для этого нам понадобится register_next_step_handler () . Давайте создадим простой пример, на котором мы поймем, как работает register_next_step_handler () .
@ bot.message_handler (commands = ['start', 'go']) def start_handler (сообщение): chat_id = message.chat.id text = message.text msg = bot.send_message (chat_id, 'Сколько тебе лет?') bot.register_next_step_handler (сообщение, askAge) def askAge (сообщение): chat_id = message.chat.Я бы text = message.text если не text.isdigit (): msg = bot.send_message (chat_id, 'Возраст должен быть числом, введите еще раз.') bot.register_next_step_handler (msg, askAge) #askSource возвращение msg = bot.send_message (chat_id, 'Спасибо, я вспомнил, что вы' + текст + 'йоу.')
Итак, в первой добавленной функции bot.register_next_step_handler (msg, ask) мы отправляем ей сообщение, которое хотим отправить, и следующую ссылку, на которую нужно перейти после ответа пользователя.
Во второй функции все поинтереснее, есть проверка, ввел ли пользователь число, а если нет, то функция рекурсивно вызывает себя, с сообщением «Возраст должен быть числом, введите еще раз.». Если пользователь все ввел правильно, он получает ответ.
- Но здесь есть проблема. Вы можете повторно вызвать команду / go или / start, и начнется беспорядок.
Исправить это несложно, добавим переменную для проверки статуса выполнения скрипта.
@ bot.message_handler (commands = ['start', 'go']) def start_handler (сообщение): глобальный isRunning если не isRunning: chat_id = message.chat.id text = message.text msg = bot.send_message (chat_id, 'Сколько тебе лет?') бот.register_next_step_handler (msg, askAge) #askSource isRunning = True def askAge (сообщение): chat_id = message.chat.id text = message.text если не text.isdigit (): msg = bot.send_message (chat_id, 'Возраст должен быть числом, введите еще раз.') bot.register_next_step_handler (msg, askAge) #askSource возвращение msg = bot. send_message (chat_id, 'Спасибо, я вспомнил, что вы' + текст + 'йоу.') isRunning = False
С построением простых цепочек разобрались, идем дальше.
Добавление парсера в цепочку
Для начала вам понадобится сам парсер.Обратим внимание на то, что во вкладках «Умные темы» и «Лидеры просмотров» есть дополнительные фильтры: страницы соответственно.
Парсер, конечно, можно записать в 1 функцию, но мы разделим его на 2, чтобы код было легче читать.
Парсер:
импортировать urllib.request из bs4 импорт BeautifulSoup def getTitlesFromAll (количество, рейтинг = 'все'): выход = '' для i в диапазоне (1, количество + 1): пытаться: если рейтинг == 'все': html = urllib.request.urlopen ('https://smartspate.com/smart-topics/page'+ str (i) +' / '). читать () еще: html = urllib.request.urlopen ('https://smartspate.com/smart-topics/'+ rating +' / page '+ str (i) +' / '). читать () кроме urllib.error.HTTPError: print ('Ошибка 404 не найдена') сломать soup = BeautifulSoup (html, 'html. parser') title = soup.find_all ('а', class_ = 'post__title_link') для i в заголовке: я = я.get_text () вывод + = ('- "' + i + '", \ n') возвратный вывод def getTitlesFromTop (количество, возраст = 'ежедневно'): выход = '' для i в диапазоне (1, количество + 1): пытаться: html = urllib.request.urlopen ('https://smartspate.com/webdeveloper-topics/'+ age +' / page '+ str (i) +' / '). читать () кроме urllib.error.HTTPError: print ('Ошибка 404 не найдена') сломать soup = BeautifulSoup (html, 'html.parser') title = soup.find_all ('а', class_ = 'post__title_link') для i в заголовке: я = я.get_text () вывод + = ('- "' + i + '", \ n') возвратный вывод
В результате парсер возвращает строку с заголовками статей на основе наших запросов.
Пытаемся, используя полученные знания, написать связанного с парсером бота.Мы решили создать отдельный класс (вероятно, это неправильный метод, но это уже относится к питону, а не к основной теме статьи) и хранить данные в объекте этого класса.
Конечный код:
Bot. py:
импортный телебот импорт bs4 из задачи импорта задачи синтаксический анализатор импорта # основные переменные ТОКЕН = '509706011: AAF7ghlYpqS5n7uF8kN0VGDCaaHnxfZxofg' bot = telebot.TeleBot (ТОКЕН) task = Задача () # обработчики @ bot.message_handler (commands = ['start', 'go']) def start_handler (сообщение): если не задача.это работает: chat_id = message.chat.id msg = bot.send_message (chat_id, 'Где разбирать?') bot.register_next_step_handler (сообщение, askSource) task.isRunning = Верно def askSource (сообщение): chat_id = message.chat.id текст = message.text.lower () если текст в task.names [0]: task.mySource = 'вверху' msg = bot.send_message (chat_id, 'На какой период времени?') bot.register_next_step_handler (сообщение, askAge) elif текст в task.names [1]: task.mySource = 'все' msg = bot.send_message (chat_id, 'Какой минимальный порог рейтинга?') бот.register_next_step_handler (сообщение, askRating) еще: msg = bot.send_message (chat_id, 'Правильно войдите в раздел. ') bot.register_next_step_handler (сообщение, askSource) возвращение def askAge (сообщение): chat_id = message.chat.id текст = message.text.lower () Filters = task.filters [0] если текста нет в фильтрах: msg = bot.send_message (chat_id, 'Такого временного интервала нет. Введите порог правильно.') bot.register_next_step_handler (сообщение, askAge) возвращение task.myFilter = task.filters_code_names [0] [фильтры.index (текст)] msg = bot.send_message (chat_id, 'Сколько страниц анализируется?') bot.register_next_step_handler (сообщение, askAmount) def askRating (сообщение): chat_id = message.chat.id текст = message.text.lower () Filters = task.filters [1] если текста нет в фильтрах: msg = bot.send_message (chat_id, 'Такого порога нет, введите его правильно.') bot.register_next_step_handler (сообщение, askRating) возвращение task.myFilter = task.filters_code_names [1] [filters.index (текст)] msg = bot.send_message (chat_id, 'Сколько страниц анализируется?') бот.register_next_step_handler (сообщение, askAmount) def askAmount (сообщение): chat_id = message. chat.id текст = message.text.lower () если не text.isdigit (): msg = bot.send_message (chat_id, 'Количество страниц должно быть числом. Пожалуйста, введите правильное число.') bot.register_next_step_handler (сообщение, askAmount) возвращение если int (текст) <1 или int (текст)> 11: msg = bot.send_message (chat_id, 'Количество страниц должно быть> 0 и <11. Введите правильно.') bot.register_next_step_handler (сообщение, askAmount) возвращение задача.isRunning = False выход = '' если task.mySource == 'top': output = parser.getTitlesFromTop (int (текст), task.myFilter) еще: output = parser.getTitlesFromAll (int (текст), task.myFilter) msg = bot.send_message (chat_id, вывод) bot.polling (none_stop = True)
Task.py:
класс Задача (): isRunning = False имена = [ ['smart-themes', 'smart-themes', 'top'], ['веб-разработчик-темы', 'веб-разработчик-темы', 'все'] ] фильтры = [ ['страница'], ["без порога", "1", "2", "3", "4"] ] mySource = '' myFilter = '' def __init __ (сам): возвращение
Парсер. py:
импортировать urllib.request из bs4 импорт BeautifulSoup def getTitlesFromAll (количество, рейтинг = 'все'): выход = '' для i в диапазоне (1, количество + 1): пытаться: если рейтинг == 'все': html = urllib.request.urlopen ('https://smartspate.com/smart-topics/page'+ str (i) +' / '). читать () еще: html = urllib.request.urlopen ('https://smartspate.com/smart-topics/'+ rating +' / page '+ str (i) +' / '). читать () кроме urllib.error.HTTPError: print ('Ошибка 404 не найдена') сломать soup = BeautifulSoup (html, 'html.парсер ') title = soup.find_all ('а', class_ = 'post__title_link') для i в заголовке: я = я.get_text () вывод + = ('- "' + i + '", \ n') возвратный вывод def getTitlesFromTop (количество, возраст = 'ежедневно'): выход = '' для i в диапазоне (1, количество + 1): пытаться: html = urllib.request.urlopen ('https://smartspate.com/webdeveloper-topics/'+ age +' / page '+ str (i) +' / '). читать () кроме urllib.error.HTTPError: print ('Ошибка 404 не найдена') сломать soup = BeautifulSoup (html, 'html. parser') title = soup.find_all ('а', class_ = 'post__title_link') для i в заголовке: я = я.get_text () вывод + = ('- "' + i + '", \ n') возвратный вывод
Теория. Способы взаимодействия с ботом.
Мы используем длинный опрос для получения данных о сообщениях от бота.
bot.polling (none_stop = True)
Есть такой же вариант использования корня другого метода - webhooks. Так что бот сам пришлет нам данные о получении сообщения и т. Д. Но этот способ сложнее настроить, и для простого показа бота мы решили не использовать его.
Также в дополнительных материалах будут ссылки на все, что было использовано и что было сказано.
Наценки. Добавление клавиатуры для быстрого ответа.
Наконец, основной код завершен. Теперь можно отдыхать и писать макияж. мы думаем, вы видели их много раз, но все же приложу скриншот. [СКРИНШОТ]
- Разметку выведем в отдельный файл - markups. py .
В написании разметки нет ничего сложного.Вам просто нужно создать разметку, указать пару параметров, создать пару кнопок и добавить их в разметку, а затем просто указать reply_markup = markup в send_message .
Например:
markups.py:
из типов импорта телеботов source_markup = types.ReplyKeyboardMarkup (row_width = 2, resize_keyboard = True) source_markup_btn1 = types.KeyboardButton ('умные-темы') source_markup_btn2 = types.KeyboardButton ('Webdeveloper-themes') source_markup.добавить (source_markup_btn1, source_markup_btn2)
В параметрах разметки укажите ширину линии и размер кнопок, иначе они огромные.
Вы, конечно, можете заполнить каждую строку отдельно.
markup = types.ReplyKeyboardMarkup () itembtna = types.KeyboardButton ('a') itembtnv = types.KeyboardButton ('v') itembtnc = types.KeyboardButton ('c') itembtnd = types. KeyboardButton ('d') itembtne = types.KeyboardButton ('e') разметка.строка (itembtna, itembtnv) markup.row (itembtnc, itembtnd, itembtne)
bot.py
def start_handler (сообщение): если не task.isRunning: chat_id = message.chat.id msg = bot.send_message (chat_id, 'Где разбирать?', reply_markup = m.source_markup) bot.register_next_step_handler (сообщение, askSource) task.isRunning = Верно
Примените знания к нашему боту.
из типов импорта телеботов start_markup = types.ReplyKeyboardMarkup (row_width = 1, resize_keyboard = True) start_markup_btn1 = типы.KeyboardButton ('/ начало') start_markup.add (start_markup_btn1) source_markup = types.ReplyKeyboardMarkup (row_width = 2, resize_keyboard = True) source_markup_btn1 = types.KeyboardButton ('умные-темы') source_markup_btn2 = types.KeyboardButton ('webdeveloper-themes') source_markup.add (source_markup_btn1, source_markup_btn2) age_markup = types. ReplyKeyboardMarkup (row_width = 3, resize_keyboard = True) age_markup_btn1 = types.KeyboardButton ('страница') age_markup.add (age_markup_btn1, age_markup_btn2, age_markup_btn3) amount_markup = типы.ReplyKeyboardMarkup (row_width = 3, resize_keyboard = True) amount_markup_btn1 = types.KeyboardButton ('1') amount_markup_btn2 = types.KeyboardButton ('3') amount_markup_btn3 = types.KeyboardButton ('5') amount_markup.add (amount_markup_btn1, amount_markup_btn2, amount_markup_btn3)
импортный телебот импорт bs4 из задачи импорта задачи синтаксический анализатор импорта импортировать наценки как m # основные переменные ТОКЕН = '509706011: AAF7aaaaaaaaaaaaaaaaaaaAAAaaAAaAaAAAaa' bot = telebot.TeleBot (ТОКЕН) task = Задача () # обработчики @ бот.message_handler (commands = ['начать', 'идти']) def start_handler (сообщение): если не task.isRunning: chat_id = message.chat.id msg = bot.send_message (chat_id, 'Где разбирать?', reply_markup = m.source_markup) bot.register_next_step_handler (сообщение, askSource) task. isRunning = Верно def askSource (сообщение): chat_id = message.chat.id текст = message.text.lower () если текст в task.names [0]: task.mySource = 'вверху' msg = bot.send_message (chat_id, 'На какой период времени?', reply_markup = m.age_markup) bot.register_next_step_handler (сообщение, askAge) elif текст в задаче.имена [1]: task.mySource = 'все' msg = bot.send_message (chat_id, 'Какой минимальный порог рейтинга?', reply_markup = m.rating_markup) bot.register_next_step_handler (сообщение, askRating) еще: msg = bot.send_message (chat_id, 'Правильно войдите в раздел.') bot.register_next_step_handler (сообщение, askSource) возвращение def askAge (сообщение): chat_id = message.chat.id текст = message.text.lower () Filters = task.filters [0] если текста нет в фильтрах: msg = bot.send_message (chat_id, 'Такого временного интервала нет.Пожалуйста, введите порог правильно. ') bot.register_next_step_handler (сообщение, askAge) возвращение task.myFilter = task.filters_code_names [0] [filters.index (текст)] msg = bot. send_message (chat_id, 'Сколько страниц вы анализируете?', reply_markup = m.amount_markup) bot.register_next_step_handler (сообщение, askAmount) def askRating (сообщение): chat_id = message.chat.id текст = message.text.lower () Filters = task.filters [1] если текста нет в фильтрах: msg = bot.send_message (chat_id, 'Такого порога нет, введите его правильно.') bot.register_next_step_handler (сообщение, askRating) возвращение task.myFilter = task.filters_code_names [1] [filters.index (текст)] msg = bot.send_message (chat_id, 'Сколько страниц вы анализируете?', reply_markup = m.amount_markup) bot.register_next_step_handler (сообщение, askAmount) def askAmount (сообщение): chat_id = message.chat.id текст = message.text.lower () если не text.isdigit (): msg = bot.send_message (chat_id, 'Количество страниц должно быть числом. Пожалуйста, введите правильное число.') bot.register_next_step_handler (сообщение, askAmount) возвращение если int (текст) <1 или int (текст)> 5: msg = бот.send_message (chat_id, 'Количество страниц должно быть> 0 и <6. Введите правильно.') bot.register_next_step_handler (сообщение, askAmount) возвращение task.isRunning = Ложь print (task.mySource + "|" + task.myFilter + '|' + text) # выход = '' если task.mySource == 'top': output = parser.getTitlesFromTop (int (текст), task.myFilter) еще: output = parser.getTitlesFromAll (int (текст), task.myFilter) msg = bot.send_message (chat_id, output, reply_markup = m.start_markup) bot.polling (none_stop = True)
Теперь снимаем ТОКЕН с бота.py, здесь он не нужен, потому что мы загрузим этот файл на GitHub.
Ура! С кодом, впринципе разобрались. Теперь самое главное, что депортация бота не неуклюжая.
Развертывание бота на Heroku.
Для начала вам нужно зарегистрироваться в Heroku и Github .
Теперь создайте репозиторий на GitHub. (щелкните значок плюса слева от своего аватара)
Нам нужен Procfile (Profile.windows для windows).Создайте его и напишите ему bot: python3 bot. py
Через тот же терминал, который использовался для запуска бота, мы загружаем файлы в GitHub. (Предварительно удалите папку __pycache__).
echo "# HabrParser_Bot" >> README.md git init git add. git add * git commit -m "Начальная фиксация" -a git remote add origin origin https://github.com/name/botname.git # Укажите свою ссылку git push -u origin master
GitHub запрашивает логин и пароль, незаметно входит и отменяет деблокировку бота для хакера.Пишем все в одном терминале.
heroku login # Введите свой адрес электронной почты и пароль heroku create --region eu habrparserbot # Не забываем сменить название приложения # P.S. В имени могут быть только буквы в нижнем регистре, цифры и тире. аддоны heroku: создать heroku-redis: hobby-dev -a habrparserbot # И снова изменить имя! Сборочные пакеты heroku: установить heroku / python git push heroku мастер heroku config: set TOKEN = 55555555: AAF7aaaaaAaAAA5AAaaaAAaaAA5aA1a # Укажите свой токен heroku ps: scale bot = 1 # запустить бота heroku logs --tail # включить журналы
Для выключения бота
героку пс: останови бота
Поздравляем!
Работа завершена, ваш бот должен работать удаленно.
Создание простого бота Telegram с использованием PythonAnywhere
Обновление 2020-01-12
По какой-то причине Telegram прекратил принимать сертификаты HTTPS с подстановочными знаками для ботов, поэтому, к сожалению, это руководство больше не будет работать в бесплатной учетной записи PythonAnywhere. Чтобы часть руководства, посвященная веб-перехватчикам, работала, вам необходимо получить платную учетную запись с персональным доменом. Спасибо Fivechar за то, что сообщили нам об этом в комментариях.
Оригинальный пост
Сейчас огромное количество чат-приложений и ботов, и это легко понять почему.Это новый полезный способ взаимодействия с компьютерные системы, их интересно кодировать, и они на самом деле удивительно легко создать.
В этом сообщении блога показано, как настроить и запустить простого бота, используя Telegram. Telegram не так популярен платформа обмена сообщениями, такая как WhatsApp или Skype, но намного проще создавать ботов для. Вам понадобится обычный компьютер, а также телефон, на котором вы можете установить приложение Telegram. Когда вы закончите работать шаги здесь, у вас будет бот, который может иметь почти правдоподобный разговор с вами.
Он использует PythonAnywhere, что, наверное, неудивительно, учитывая название этого блога 😉 Здесь вы можете делать все, используя бесплатную учетную запись PythonAnywhere, и бот, с которым вы столкнетесь, будет быть полностью функциональным. Вам понадобится только платный аккаунт, если у вас бот начинает получать много пользователей - порядка тысяч сообщений в день.
Итак, без лишних слов, приступим!
Создание бота
Первое, что вам нужно сделать, это сообщить Telegram, что вы хотите создать бот.Для этого вам понадобится аккаунт Telegram - установите их приложение на вашем телефоне и настройте его.
Затем начните разговор с «BotFather». Это бот которые запускают сами Telegram, и он контролирует создание и регистрация ботов на своей платформе. В Android-версии их app, вот что вы делаете (другие платформы похожи)
- Нажмите кнопку начала разговора в правом нижнем углу, чтобы начать новый разговор.
- Коснитесь значка увеличительного стекла «Поиск» в правом верхнем углу.
- Типа «отец-бот».
- Нажмите на появившийся «@BotFather». Убедитесь, что рядом с ним стоит синяя галочка
- Появится приветственное сообщение.
- Щелкните кнопку «Пуск».
- Отправить сообщение «/ newbot»
- Он попросит имя для вашего бота. Я собираюсь называть свое "GTDemo", но вы должны выбрать уникальное для вас имя.
- Далее он запросит имя пользователя; Я буду использовать GTDemoBot
- Если все пойдет хорошо, он распечатает сообщение о том, что бот был создан.Там есть одна важная информация, которая вам понадобится позже: токен для доступа к HTTP API. Это будет длинная строка буквенно-цифровых символов, возможно, с двоеточием. Чтобы сохранить это на потом, я скопировал сообщение на свой телефон, а затем отправил его себе по электронной почте - не супер-безопасно, но, вероятно, достаточно безопасно, если вы не собираетесь вкладывать в своего бота что-то секретное.
Хорошо, давайте проверим, что ваш бот создан, даже если он пока не очень разговорчивый.Начните с ним разговор, используя тот же метод, что и с BotFather. Надеюсь, вы сможете найти его и начать чат, но когда вы нажмете кнопку «Пуск», ничего не произойдет.
Ничего особенного. Давай заставим его что-нибудь сделать.
Первый простой бот
На вашем компьютере:
Я рекомендую вам создать новую учетную запись PythonAnywhere для этого руководства - мы создадим веб-сайт позже, и если у вас уже есть веб-сайт, мы не хотим путать их.У вас может быть несколько бесплатных учетных записей, даже если вы используете один и тот же адрес электронной почты, поэтому нет ничего страшного в том, чтобы создать новый. Просто создайте бесплатную «Новичку».
Запустить консоль «Bash»
Там бегите
pip3.6 install --user telepot
, это установит (для вашей учетной записи PythonAnywhere) отличную библиотеку Python телепота, которая скрывает некоторые сложности взаимодействия с API Telegram. Подождите, пока процесс завершится.
Затем щелкните логотип PythonAnywhere в левом верхнем углу, чтобы вернуться на панель управления PythonAnywhere.
Перейдите во вкладку «Файлы».
В поле «Введите новое имя файла» введите имя файла, заканчивающееся на «.py», для кода вашего бота, например
firstsimplebot.py
, и нажмите кнопку «Новый файл».Введите следующий код, заменив «YOUR_AUTHORIZATION_TOKEN» на токен, который BotFather дал вам ранее:
#! / Usr / bin / python3.6 импортный телепот время импорта импортировать urllib3 # Вы можете пропустить этот бит, если используете платную учетную запись PythonAnywhere proxy_url = "http: //proxy.server: 3128" telepot.api._pools = { 'по умолчанию': urllib3.ProxyManager (proxy_url = proxy_url, num_pools = 3, maxsize = 10, retries = False, timeout = 30), } telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict (proxy_url = proxy_url, num_pools = 1, maxsize = 1, retries = False, timeout = 30)) # конец того, что нужно только для бесплатных аккаунтов bot = telepot. Bot ('ВАША_АВТОРИЗАЦИЯ_ТОКЕН') дескриптор def (сообщение): content_type, chat_type, chat_id = телепот.взгляд (сообщение) print (content_type, chat_type, chat_id) если content_type == 'text': bot.sendMessage (chat_id, "Вы сказали '{}'". format (msg ["text"])) bot.message_loop (дескриптор) print ('Слушаю ...') # Продолжить работу программы. а 1: время сна (10)
Нажмите кнопку «»> Запустить этот файл »внизу страницы.
Внизу страницы появится консоль. Через некоторое время должно появиться сообщение «Прослушивание…»
Теперь вернитесь к телефону.В чате с ботом наберите «Привет». Он должен почти сразу же ответить: «Вы сказали« Привет »».
Если вы еще раз взглянете на консоль PythonAnywhere, вы увидите, что она распечатала некоторую информацию о сообщении - вероятно, что-то вроде
текст частный 321518746
У-у! Рабочий бот 🙂
Давайте проработаем этот код по крупицам.
Это говорит PythonAnywhere, что вы хотите запустить код с использованием Python 3.6, это версия Python, для которой мы установили telepot
.
импортный телепот
время импорта
импортировать urllib3
Этот бит просто импортирует модули Python, которые мы собираемся использовать.
# Вы можете пропустить этот бит, если используете платную учетную запись PythonAnywhere
proxy_url = "http: //proxy.server: 3128"
telepot.api._pools = {
'по умолчанию': urllib3.ProxyManager (proxy_url = proxy_url, num_pools = 3, maxsize = 10, retries = False, timeout = 30),
}
телепот.api._onetime_pool_spec = (urllib3.ProxyManager, dict (proxy_url = proxy_url, num_pools = 1, maxsize = 1, retries = False, timeout = 30))
# конец того, что нужно только для бесплатных аккаунтов
Как говорится в комментариях, этот материал необходим только в том случае, если вы используете бесплатную учетную запись PythonAnywhere «для начинающих» - мы, конечно, для этого учебника, но вы можете удалить его, если хотите повторно использовать код в платный аккаунт позже. Это происходит потому, что бесплатные учетные записи могут подключаться только к определенным внешним веб-сайтам, и эти подключения должны проходить через прокси-сервер.Многие API-интерфейсы автоматически получают информацию о прокси-сервере из своей системной среды, когда они работают, но телепот - нет. Это не проблема, это просто означает, что мы должны быть более откровенными и сказать «используйте этот прокси здесь».
бот = telepot.Bot ('YOUR_AUTHORIZATION_TOKEN')
Теперь мы переходим к сути кода. Эта линия использует телепот для подключения к серверу Telegram.
Далее мы определяем функцию, которая знает, как обрабатывать сообщения от Telepot.
def handle (msg):
content_type, chat_type, chat_id = telepot.glance (сообщение)
Первое, что мы делаем, это извлекаем полезную информацию из сообщения, используя служебную функцию telepot glance
.
печать (content_type, chat_type, chat_id)
… мы распечатываем некоторую информацию только в целях отладки.
если content_type == 'text':
bot.sendMessage (chat_id, "Вы сказали '{}'". format (msg ["text"]))
Мы пока обрабатываем только текстовые сообщения; Распознавание речи немного выходит за рамки этого учебника ... Когда мы получаем текстовое сообщение, мы просто отвечаем, рассказывая человеку, что он сказал.
Итак, это конец функции обработчика сообщений. Вернуться к основному коду:
Это указывает телепоту запускать цикл сообщений. Это фоновый поток, который будет работать до завершения программы; он прослушивает открытое соединение с Telegram и ждет входящих сообщений. Когда они входят, он вызывает нашу функцию handle
с деталями.
Итак, мы распечатываем сообщение на нашу собственную консоль, чтобы показать, что мы работаем ...
# Продолжить работу программы.а 1:
время сна (10)
А дальше будем ждать вечно. Как я уже сказал, цикл сообщений телепота будет продолжаться только до выхода из нашей программы, поэтому мы хотим остановить его от выхода.
Итак, теперь у нас есть рабочий бот, и мы знаем, как он работает. Давайте сделаем это лучше.
Переход на веб-перехватчики
Бот, который у вас сейчас есть, просто работает в консоли под вашим редактором. На самом деле он будет работать довольно долго, но если PythonAnywhere выполнит какие-либо работы по обслуживанию системы, требующие перезапуска сервера, на котором он находится, он остановится и не перезапустится.Для бота это явно не очень хорошо, так что давайте исправим.
Мы будем использовать API веб-перехватчиков Telegram. Веб-перехватчики - это другой способ подключения к Telegram. Наш предыдущий код установил исходящее соединение от PythonAnywhere к Telegram, а затем полагался на то, что Telegram отправлял сообщения по этому соединению для обработки. С веб-перехватчиками все наоборот. По сути, мы говорим Telegram: «Когда мой бот получает сообщение, подключаюсь к PythonAnywhere и передаю сообщение». А бит «подключиться к PythonAnywhere» выполняется путем создания веб-приложения для запуска внутри вашей учетной записи PythonAnywhere, которое будет обслуживать действительно простой API.
Если что-то из этого звучит устрашающе, не волнуйтесь. На самом деле это довольно просто, а инструкция подробна 🙂
- Щелкните логотип PythonAnywhere, чтобы вернуться на панель управления PythonAnywhere.
- На вкладке «Консоли» щелкните маленький значок «X» рядом с консолью firstsimplebot.py. Это важно - он убьет запущенного бота, которого мы уже создали, чтобы он не мешал работе нового, который мы собираемся создать.
- Перейдите на вкладку «Интернет».
- Нажмите кнопку «Добавить новое веб-приложение».
- Первая страница просто сообщит вам, что веб-приложение будет размещено по адресу your-pythonanywhere-username
.pythonanywhere.com
. Нажмите "Далее. - На следующей странице выберите веб-фреймворк «Flask». Flask - отличный выбор для простых веб-сайтов, предназначенных для API.
- На следующем шаге выберите «Python 3.6». Для этой версии мы установили телепот.
- На следующей странице просто примите расположение по умолчанию для вашего приложения Flask. Это будет что-то вроде
/ home /
your-pythonanywhere-username/mysite/flask_app.py
- Через некоторое время вы увидите сообщение «Готово!» сообщение, и ваш сайт будет настроен. На нем будет ссылка - перейдите по ссылке, и вы увидите сообщение «Hello from Flask!»
Итак, теперь у вас есть простой веб-сайт, который отображает только одно сообщение. Что нам нужно сделать дальше, так это настроить его так, чтобы вместо этого он запускал API, к которому Telegram мог подключиться.И мы также должны сообщить Telegram, что он есть и с каким ботом он должен работать.
- Нажмите в браузере кнопку «Назад», чтобы вернуться на вкладку «Интернет».
- Посмотрите немного вниз на страницу, и вы увидите раздел «Код».
- В этом разделе откройте ссылку «Перейти в каталог» для «Исходный код» в новой вкладке браузера. (Было бы полезно оставить вкладку «Интернет» на потом.)
- В новой вкладке вы увидите страницу «Файлы». Один файл будет называться «flask_app.ру »; щелкните по нему, чтобы перейти в редактор.
Введите следующий код. Пока не беспокойтесь о том, что он делает, мы рассмотрим это через секунду. Но не забудьте заменить YOUR_AUTHORIZATION_TOKEN
своим токеном Telegram HTTP API, а YOUR_PYTHONANYWHERE_USERNAME
- своим именем пользователя PythonAnywhere. Также замените A_SECRET_NUMBER
номером, который известен только вам; Хороший способ получить правильный случайный номер - обратиться к этому онлайн-генератору GUID, который сгенерирует уникальный номер, например «c04a4995-a7e2-4bf5-b8ab-d7599105d1d1».
из колбы импортная Колба, запрос
импортный телепот
импортировать urllib3
proxy_url = "http: //proxy.server: 3128"
telepot.api._pools = {
'по умолчанию': urllib3.ProxyManager (proxy_url = proxy_url, num_pools = 3, maxsize = 10, retries = False, timeout = 30),
}
telepot.api._onetime_pool_spec = (urllib3. ProxyManager, dict (proxy_url = proxy_url, num_pools = 1, maxsize = 1, retries = False, timeout = 30))
secret = "A_SECRET_NUMBER"
bot = telepot.Bot ('ВАША_АВТОРИЗАЦИЯ_ТОКЕН')
bot.setWebhook ("https: // YOUR_PYTHONANYWHERE_USERNAME.pythonanywhere.com/{}".format(secret), max_connections = 1)
app = Flask (__ имя__)
@ app.route ('/ {}'. format (secret), methods = ["POST"])
def telegram_webhook ():
update = request.get_json ()
если "сообщение" в обновлении:
chat_id = update ["сообщение"] ["чат"] ["идентификатор"]
если "текст" в обновлении ["сообщение"]:
текст = обновление ["сообщение"] ["текст"]
bot.sendMessage (chat_id, "Из Интернета: вы сказали '{}'". format (text))
еще:
bot.sendMessage (chat_id, «Из Интернета: извините, я не понял такого сообщения»)
вернуть "ОК"
После того, как вы ввели код и убедились, что сделали три замены:
- Сохранить файл
- Переключитесь на вкладку браузера с установленным на ней веб-приложением.
- Щелкните зеленую кнопку «Обновить» вверху.
- Подождите, пока "счетчик" закончит.
Вернитесь к телефону и отправьте другое сообщение. На этот раз вы должны получить ответное сообщение, ясно говорящее, что оно пришло из Интернета. Итак, теперь у нас есть бот, использующий веб-перехватчики!
Давайте проработаем код сейчас:
из колбы импортная Колба, запрос
импортный телепот
импортировать urllib3
Итак, мы снова импортируем некоторые модули Python. На этот раз, помимо телепота и urllib3, которые нам нужны для общения с Telegram, мы используем кое-что из Flask.
proxy_url = "http: //proxy.server: 3128"
telepot.api._pools = {
'по умолчанию': urllib3.ProxyManager (proxy_url = proxy_url, num_pools = 3, maxsize = 10, retries = False, timeout = 30),
}
telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict (proxy_url = proxy_url, num_pools = 1, maxsize = 1, retries = False, timeout = 30))
И снова то, что нам нужно для доступа к Telegram из бесплатной учетной записи PythonAnywhere.
секрет = "A_SECRET_NUMBER"
Теперь это немного передовой практики для ботов Telegram, использующих веб-перехватчики.Ваш бот работает как общедоступный веб-сайт. К нему мог подключиться любой желающий в мире. И, конечно же, мы действительно не хотим, чтобы случайные люди могли подключаться, выдавая себя за Telegram, и заставляли его говорить неуместные вещи ... поэтому мы скажем, что веб-сайт обслуживает только одну страницу, а URL-адрес для эту страницу невозможно угадать. Это должно сделать вещи относительно безопасными. Вы увидите код для этого через мгновение.
бот = telepot.Bot ('YOUR_AUTHORIZATION_TOKEN')
Мы подключаемся к Telegram через телепот, как и раньше.
bot.setWebhook ("https://YOUR_PYTHONANYWHERE_USERNAME.pythonanywhere.com/ {}" .format (секрет), max_connections = 1)
Мы используем телепот, чтобы отправить сообщение в Telegram, в котором говорится: «Когда мой бот получает сообщение, это URL-адрес для отправки». Это, конечно, не только содержит имя хоста для вашего веб-сайта с вашим именем пользователя PythonAnywhere, но также включает в себя, надеюсь, нераспознаваемый секрет, который мы определили ранее. Также стоит отметить, что он использует безопасный HTTPS, а не HTTP - все веб-сайты на PythonAnywhere, даже бесплатные, по умолчанию получают HTTPS, а Telegram (что вполне разумно) будет отправлять веб-перехватчики только через HTTPS.
Теперь мы создаем приложение Flask для обработки запросов.
@ app.route ('/ {}'. Format (secret), methods = ["POST"])
def telegram_webhook ():
Это код Flask, который говорит: «Когда вы получите запрос POST по секретному URL, запустите следующую функцию». Если вы хотите узнать больше о том, как работает Flask, у нас есть руководство по этому вопросу.
обновление = request.get_json ()
Telegram отправляет данные ботам с использованием кодировки JSON, поэтому мы декодируем их, чтобы получить словарь Python.
Если от Telegran мы получили сообщение…
chat_id = update ["сообщение"] ["чат"] ["идентификатор"]
…. Получить идентификатор сеанса чата, частью которого он является…
если "текст" в обновлении ["сообщение"]:
… проверьте, содержит ли он текст (чего не будет, если кто-то, скажем, отправит ему фотографию)…
текст = обновление ["сообщение"] ["текст"]
bot.sendMessage (chat_id, "Из Интернета: вы сказали '{}'".формат (текст))
… затем отправьте ответ через телепорт…
еще:
bot.sendMessage (chat_id, «Из Интернета: извините, я не понял такого сообщения»)
… если это не текст, просто скажите пользователю, что мы его не поняли…
… и, наконец, как только какое-то сообщение было отправлено, верните что-нибудь в Telegram, чтобы сказать, что все в порядке.
Итак, теперь у нас есть и, надеюсь, мы понимаем, простой бот Telegram, который будет работать почти вечно! Сайты на бесплатных учетных записях PythonAnywhere существуют в течение трех месяцев, а затем вы можете продлить их еще на три месяца, а через три месяца вы можете продлить снова и так далее, сколько угодно раз.Итак, если вы хотите входить в PythonAnywhere четыре раза в год, у вас все готово 🙂
Но на данный момент бот довольно скучный. Давайте сделаем это немного интереснее.
Представляем Элизу
Извините, поклонники Гамильтона, а не сестра Анжелики и Пегги. Eliza - это ранняя система обработки естественного языка, и обычная реализация имитирует психотерапевта Роджера - своего рода терапевта, который просто возвращает каждый вопрос пациенту. Это упрощает реализацию и использование в таком боте.
Вдвойне удобно, что пакет Python nltk
предоставляет реализацию Eliza, поэтому нам даже не нужно его кодировать самостоятельно.
Давайте посмотрим, как это работает. Перейдите на панель управления PythonAnywhere и запустите новую консоль Bash. В нем вы можете попробовать Элизу в интерпретаторе Python 3.6, подобном этому (ответы, которые он дает, могут отличаться):
19:20 ~ $ python3.6
Python 3.6.0 (по умолчанию, 13 января 2017 г., 00:00:00)
[GCC 4.8.4] в Linux
Для получения дополнительной информации введите «помощь», «авторские права», «кредиты» или «лицензия».>>> из nltk.chat.eliza import eliza_chatbot
>>> eliza_chatbot.respond ("Привет")
«Привет ... как ты сегодня?»
>>> eliza_chatbot.respond («Я в порядке»)
"Почему ты думаешь, что ты здоров?"
>>> eliza_chatbot.respond («Не уверен»)
«Как ты чувствуешь себя неуверенно?»
>>> eliza_chatbot.respond ("Немного запутался, если честно")
'Очень интересно.'
>>> eliza_chatbot.respond ("Это?")
'Почему ты спрашиваешь это?'
Хорошо, это должно дать вам представление о том, как это работает.Давайте запрограммируем это.
Вернитесь на панель управления, на вкладку «Файлы», затем в код вашего приложения Flask (возможно, внутри
mysite / flask_app.py
).Добавьте новый импорт в начало:
из nltk.chat.eliza import eliza_chatbot
В функции
telegram_webhook
замените эту строку:bot.sendMessage (chat_id, «Из Интернета: вы сказали '{}'». Формат (текст))
с этим:
если text == "/ start": бот.sendMessage (chat_id, «Здравствуйте, я терапевт. Чем могу помочь?») еще: bot.sendMessage (chat_id, eliza_chatbot.respond (текст))
Когда кто-то впервые подключается к боту Telegram, приложение отправляет вам текстовое сообщение с надписью «/ start», поэтому у нас есть особый случай для этого, чтобы Элиза не сказала что-то странное, например: «Почему ты так говоришь / start? ". Но все остальные сообщения мы просто отправляем Элизе для обработки, а затем возвращаем.
Сохраните файл, затем перейдите на вкладку «Интернет» и нажмите зеленую кнопку «Обновить».
Вернувшись к телефону, давайте начнем новый сеанс, чтобы мы могли снова поговорить с Элизой.
- В старом сеансе щелкните меню «Гамбургер» в правом верхнем углу и выберите «Удалить чат»
- Нажмите кнопку, чтобы снова начать чат, затем снова найдите своего бота, нажмите его.
- Запустите чат, нажав кнопку «Пуск».
И теперь вы можете общаться со своим чат-ботом! Много счастливых часов не очень полезной терапии 🙂
Вот и все!
Это все для этого руководства.Если у вас возникнут какие-либо проблемы, оставьте комментарий ниже. И если у вас есть какие-либо мысли о том, как мы могли бы его расширить, просто дайте нам знать. Удачи и удачи!
.