Если вы когда-либо пользовались онлайн-форумом, вы, возможно, видели, что иногда есть способы публиковать сообщения не только непосредственно на форуме, но и, например, через электронную почту.
В данной статье мы создадим общедоступную доску объявлений. Особенностью этой доски будет то, что пользователи смогут посылать свои объявления Telegram-боту, не заходя на сам сайт.
Сообщения будут просто содержать текст, но мы предоставим дополнительную информацию о том, как использовать другие данные, например, имена пользователей. Реализацию этого мы оставим вам в качестве упражнения по расширению функциональности.
Необходимые приготовления
Для получения максимальной пользы от этого руководства читателю нужно:
- знать язык программирования Python
- иметь аккаунт в Телеграм и установить клиентскую часть на свой компьютер
- иметь аккаунт в Replit или создать его прямо сейчас.
Также было бы полезно, если бы вы были знакомы с базой данных Replit, но это не критично.
#5 Инструкция — как создать бот с прогнозами на сайте BETLAB
Регистрация бота
Для начала нам нужно зарегистрировать нашего бота в Telegram, чтобы сгенерировать учетные данные, которые мы будем использовать для подключения к Telegram API. Каждый бот должен быть привязан к конкретной учетной записи пользователя. Это можно сделать с помощью официального управляющего бота Telegram под названием «BotFather».
Для активации BotFather нажмите на кнопку Start :
Для начала рабочего процесса создания нового бота мы должны отправить в BotFather команду /newbot .
Бот у нас спросит следующие данные:
Замечание: полезно иметь короткое имя пользователя, чтобы людям было удобно его вводить. Особенно, если вы планируете добавить встроенный режим.
Как только мы ответим на все вопросы, BotFather отправит нам наш токен аутентификации, который будет выглядеть примерно так:
Обратите внимание, что вся строка (до двоеточия и после) является токеном.
Создание интерфейса бота
Теперь мы можем приступить к написанию той части программы, которая обрабатывает запросы из Telegram. Создадим новую repl-среду, а в качестве языка программирования выберем Python.
Наш бот должен взаимодействовать с Telegram. Для этого нам понадобится доступ к Telegram REST API. Есть много способов сделать это, но в рамках данной статьи мы будем использовать удобную библиотеку, обернутую обернута вокруг API.
Прежде чем мы продолжим, нам нужно сделать наш токен доступным для использования нашим ботом. Создайте переменную среды под названием TOKEN , щелкнув значок замка на боковой панели, как показано ниже, и вставьте свой токен бота, который вы получили ранее, например 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5 :
Как подключить Телеграм Бот к сайту
Это гарантирует, что наш токен доступен как переменная среды и что к нему не смогут получить доступ люди, имеющие доступ к нашей среде repl (в бесплатной версии она открыта для всех, — прим. переводчика).
Создание скелета бота
Теперь, когда все настроено, мы можем приступить к программированию! Начнем с нашего файла main.py :
import os from telegram import Update #upm package(python-telegram-bot) from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext #upm package(python-telegram-bot) def help_command(update: Update, context: CallbackContext) -> None: htext = »’ Welcome Send a message to store it. Send /fetch to retrieve the most recent message»’ update.message.reply_text(htext) def main(): updater = Updater(os.getenv(«TOKEN»)) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», help_command)) dispatcher.add_handler(CommandHandler(«help», help_command)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
Сначала мы импортируем модуль os , чтобы получить доступ к токену как переменной окружения.
Затем мы импортируем некоторые классы из библиотеки Telegram.
Комментарии, начинающиеся с #upm , не являются обязательными. Они используются Replit для загрузки правильного пакета. В общем случае это не нужно, но здесь необходимо, потому что подобных библиотек Telegram очень много.
Функция help_command запускается всякий раз, когда пользователь отправляет нам команду /start или /help . Команда /start также выполняется автоматически, когда новый пользователь запускает ваш бот (как мы ранее запускали BotFather ). Бот будет знать, как использовать эту функцию, потому что мы сообщим ему об этом позже в теле функции main .
В функции main мы инициализируем экземпляр класса updater , который использует наш токен.
updater = Updater(os.getenv(«TOKEN»))
Updater — это класс, который будет постоянно проверять Telegram на наличие новых сообщений в нашем боте.
Когда updater получает новое сообщение, он передает его в класс dispatcher . Тот проверяет, есть ли у нас подходящий обработчик для данного сообщения. Как уже упоминалось выше, нужно задать обработчик для команд /start и /help . Мы cделаем это при помощи функции add_handler , например:
dispatcher.add_handler(CommandHandler(«start», help_command))
dispatcher.add_handler(CommandHandler(«help», help_command))
Чтобы не усложнять задачу, команда /start и команда /help имеют здесь один и тот же обработчик, но при желании для обработки каждой из них вы можете использовать разные функции.
Затем нам нужно сказать классу updater , чтобы он начал проверку новых сообщений. Мы это сделаем при помощи следующей строки.
updater.start_polling()
Важно знать, что start_polling — это неблокирующая функция. Это означает, что код в ней не прекращает выполнение. Он будет исполняться, пока программа не завершится.
Другими словами, если мы оставим это в качестве последней строки функции main , код будет выполнен, а затем немедленно завершится, потому что больше ничего не блокирует его. Поэтому, чтобы наш бот не прекращал прослушку, мы используем строку updater.idle() , чтобы заблокировать скрипт, пока мы слушаем.
Функционал для логирования
Согласно тексту справки, бот должен уметь делать две вещи:
- Если вы отправляете сообщение боту, он должен где-то его сохранить.
- При отправке боту команды /fetch он должен отправить вам последнее сообщение.
Для этого мы будем использовать встроенную в Replit базу данных ключ-значение. Начнем с импорта API:
from replit import db
Модуль db — это объект, который ведет себя как словарь, но сохраняет свое содержимое между запусками. Он также сериализует свои ключи в виде строк.
Чат-помощник на сайт с помощью Telegram за 15 минут
Многие люди продают через интернет товары и услуги. Еще больше людей — покупает что-то через интернет.
Во время выбора покупок, часто возникают вопросы, которые можно решить позвонив и пообщавшись с менеджером.
Скорее всего я — не единственный человек на хабре, который общению с менеджерами по телефону предпочитает переписку.
И тут на помощь приходят всплывающие чаты-помощники, которые вроде-как повышают конверсию, но многих нервируют.
(Для тех, кто не в курсе: в углу сайта всплывает окошко, в котором можно он-лайн переписываться с консультантом).
Есть с десяток подобных сервисов и все они работают по принципу «пробная версия бесплатно, а дальше за деньги».
На хабре есть несколько статей, вот одна из них (http://habrahabr.ru/company/tuthost/blog/165365/), но, я уверен, аудитория Хабрахабра знает о чем речь.
Большинству людей подойдет бесплатный вариант любого такого сервиса: нужно всего-навсего зарегистрироваться и вставить на сайт кусок JS кода. Для тех у кого много менеджеров — придется платить: например Редхелпер на 10 операторов обойдется Вам:
115200 руб. за 1 год
Скорее всего — цена адекватная для тех, кто платит зарплату десяти менеджерам.
Но я решил изобрести бесплатный «велосипед» из подручных материалов.
Запуск у себя на сервере займет 15 минут. Всем, кому идея интересна — прошу под кат.
Telegram BOT
Набирающий популярность за границей мессенджер Telegram недавно представил новое API для разработки ботов. Штука — интересная, ей можно найти множество применений. Теперь можно создать бота (написать программу), который будет отвечать на Ваши вопросы, выполнять определнные команды и все это в окне переписки мессенджера Telegram.
Именно на основе мессенджера Telegram и его API для ботов будет работать наш бесплатный, безлимитный чат-помощник-на-сайт.
Общая схема идеи — на картинке:
Вот так это происходит:
- Пользователи на сайте пишут в чат
- Сообщение это улетает на Ваш сервер
- Оттуда Telegram-бот пересылает его нужному менеджеру
- Менеджер отвечает через Telegram
- Бот отправляет сообщение обратно в чат_на_сайте
Реализация
Итак, для запуска «у себя» Вам понадобится:
- Сервер, VPS или хостинг, на котором есть актуальный PHP, поддержка SQLite и возможность сделать set_time_limit(0) (т.е. сделать работу php скрипта не ограниченной по времени)
- Приложение Telegram (на смартфоне или компьютере)
- Базовые знания PHP
Внимание! Вы запускаете этот код на свой страх и риск! Я потратил на него несколько часов и возможно там полно ошибок!
План действий такой:
(Сообщение в котором фигурирует мой API Key я удалил)
2) Полученный ключ вставляем в TelegramBotConfig.php.
Там же указываем любой придуманный Вами пароль для регистрации новых менеджеров.
3) Заливаем все на свой сервер
4) Запускаем нашего бота — фоновый процесс getUpdates.php
Он должен работать бесконечно, поэтому рекомендую поставить его в автозагрузку сервера.
Для надежности можно поставить запуск скрипта в crontab каждую минуту.
Скрипт будет запускаться в единичном экземпляре, все повторные запуски сразу же завершатся.
5) Регистрируем нового менеджера
Со смартфона менеджера заходим в телеграм и добавляем нашего нового бота (того, которого Вы только что создали)
Пишем ему команду: «/newmanager пароль_для_менеджеров». В ответ получаем приветствие.
Операцию повторяем нужное количество раз, для каждого менеджера.
Если на данном этапе Вы не получили ответ от Бота — значит что-то не работает!
6) Проверяем
Переходим на страницу index.html (то есть заходим на адрес mysite.ru/index.php, а не открываем локально).
Там находится небольшой, на скорую руку сверстанный чат.
Если отправить сообщение в этот чат, бот выберет случайного менеджера и перешлет ему это сообщение.
Вот здесь интересный момент:
Клиентов (покупателей) может быть много, а менеджер — один.
Менеджер общается с клиентами посредством Telegram-бота.
Если одновременно два (или больше) клиентов написали сообщение, а менеджер отвечает им по очереди, Telegram-боту нужно как-то указать, какому из клиентов отправить ответ.
Для этого я сделал команду «/answer_№ЧАТА». После отправки этой команды все письма менеджера уходят в нужный веб-чат.
Минусы, плюсы, что можно доделать
- Сейчас чат сделан «на скорую руку», чтобы скорее запустить в своем проекте. Есть много лазеек, с помощью которых например можно писать в чужой чат и подглядеть чужую переписку.
- Сейчас эти проблемы меня не тревожат, потому как в чате-помощнике на сайте у нас не принято передавать важную и секретную информацию.
- Когда менеджер один а клиентов много — можно запутаться, кому отвечаешь.
- … Буду дополнять из комментариев
- Это работает!
- Бесплатно навсегда и на любое количество менеджеров
- Не нужно лишних приложений, только телеграм, который есть для всех популярных платформ
- Можно переписать и стилизовать чат так, как Вам хочется.
- Telegram работает очень быстро
- … Буду дополнять из комментариев
Что можно сделать:
- Защита от дурака и работа над безопасностью
- Умную систему распределения сообщений между менеджерами (сейчас бот направляет сообщение случайному менеджеру)
- Автоматические ответы от бота, когда менеджер долго молчит
- Добавить имя и фото менеджера, который отвечает в чате
- … Буду дополнять из комментариев
Спасибо за внимание.
Источник: savepearlharbor.com