Чат-бот — это автоматизированный многофункциональный помощник, который может показывать информацию подписчикам и собирать информацию по запросу согласно заранее подготовленным сценариям.
Следуйте пошаговой инструкции, чтобы создать своего первого чат-бота для Telegram мессенджера или подключить существующий к сервису SendPulse для дальнейшей настройки.
Если у вас уже создан бот, пропустите первый пункт и переходите сразу ко второму.
Откройте мессенджер Telegram, войдите в вашу учетную запись или создайте новую.
Шаг 1. Введите в поле поиска @BotFather и выберите бота.
Обратите внимание, что у официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.
Шаг 2. Нажмите «Запустить» для активации бота BotFather.
В ответ вы получите список команд по управлению ботов.
Шаг 3. Выберите или напечатайте и отправьте команду /newbot
.
Шаг 4. Дайте имя боту — клиенты увидят это имя при общении с ботом. И никнейм бота — по нему можно будет найти бота в Telegram. Никнейм должен быть уникальным, не повторять существующие в базе и заканчиваться на слово «bot».
После того как вы выберите подходящее имя бот будет создан. Вы получите сообщение со ссылкой на бота t.me/<никнейм_бота>, рекомендации по настройке аватарки, описание бота и список команд для настройки бота.
Для подключения бота в SendPulse вам понадобится токен. Скопируйте значение токена и перейдите к последнему пункту.
Шаг 1. Перейдите к боту @BotFather и введите команду /token
.
Вы увидите кнопки с созданными ботами.
Шаг 2. Выберите бота, которого нужно подключить.
Скопируйте значение токена.
Перейдите в раздел «Чат-боты» в вашем аккаунте SendPulse. Если ранее у вас не было подключенных каналов, нажмите на кнопку «Подключить каналы». Если же вы уже подключали ботов, перейдите в раздел «Управление ботами».
Затем выберите нужный канал и нажмите на кнопку «Подключить Telegram».
Введите ключ доступа — токен полученный в созданном боте. Нажмите «Подключить».
Нажмите на кнопку «Подписаться на бота». Таким образом вы сможете тестировать каждое сообщение и цепочку и отправлять их себе перед реализацией.
Вы будете перенаправлены в приложение «Telegram», нажмите на кнопку «Запустить» и вы подпишетесь на своего бота.
Чат-бот будет успешно добавлен.
Можете переходить в него и начинать создавать приветственные и триггерные цепочки, массовые рассылки.
Обратите внимание, что подписчики не импортируются автоматически. После подключения вы сможете собирать аудиторию с помощью виджета подписки или делясь ссылкой на бота t.me/<никнейм_бота> напрямую. Также вы можете вручную загрузить файл с ранее собранными подписчиками.
Подключить чат-бота Telegram
Обновлено: 29.03.2021
С помощью ботов можно упростить себе задачу коммуникации с пользователями, создав для них умного помощника. Боты понимают текстовые команды и могут обращаться к API вашего вебсайта, сервиса или быть самостоятельным продуктом с уникальными услугами.
Обычно, для создания бота требуется сервер, но в этой статье мы разберём подход, позволяющий обойтись без него.
Чтобы упростить задачу, мы написали пример такого бота. Его исходный код доступен по ссылке github.com/selectel/cloud-telegram-bot. Он понимает команды:
/start
с приветственным сообщением;/sticker
с ответом в виде стикера;/getwebhook
чтобы вы могли получить информацию о настройках вашего бота;/setwebhook
для настройки вашего бота, но об этом позже.Пройдите следующие шаги с нашим примером бота, чтобы освоиться:
Bot
./bot/tele_bot.py
.main
.Теперь у нас есть API, реализующее логику ответов бота. Следующим этапом мы зарегистрируем его в Telegram.
Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:
Отправьте ему команду:
/newbot
@BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».
Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.
Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.
На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:
Далее нужно направить сообщения, которые пользователи отправляют в Telegram, нашему боту — в то API, которое для него создали.
Введите команду:
/setwebhook <Токен от вашего бота> <URL от облачной функции>
Бот ответит тем, что получит из Telegram API. Если всё хорошо, это будет «true».
Чтобы удостовериться в том, что всё корректно, отправьте команду:
/getwebhook <Токен от вашего бота>
В ответ должна прийти информация о webhook, в том числе указанный вами URL.
Откройте форму (или скопируйте её к себе в Облачное хранилище). Вставьте токен от вашего бота в первое поле, URL облачной функции во второе и нажмите на кнопку «Set Webhook». Произойдёт обращение к api.telegram.org, и вы увидите результат.
Примечание: может понадобиться наличие VPN.
Готов для работы бот, доступный в Телеграме, отвечающий на команды и способный автоматически масштабироваться под нагрузкой и без сервера.
24 июня разработчики Telegram
открылиплатформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов.
Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к
Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.
Рассмотрим API на примере создания тривиального бота:
Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот —
@BotFather.
Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.
Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.
Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/getMe, говорят, не всегда работает с первого раза.
Создавать бота буду на Python3, однако благодаря адекватности этого языка алгоритмы легко переносятся на любой другой.
Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)
Каркас бота:
URL = "https://api.telegram.org/bot%s/" % BOT_TOKEN
MyURL = "https://example.com/hook"
api = requests.Session()
application = tornado.web.Application([
(r"/", Handler),
])
if __name__ == '__main__':
signal.signal(signal.SIGTERM, signal_term_handler)
try:
set_hook = api.get(URL + "setWebhook?url=%s" % MyURL)
if set_hook.status_code != 200:
logging.error("Can't set hook: %s. Quit." % set_hook.text)
exit(1)
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
except KeyboardInterrupt:
signal_term_handler(signal.SIGTERM, None)
Здесь мы при запуске бота устанавливаем вебхук на наш адрес и отлавливаем сигнал выхода, чтобы вернуть поведение с ручной выгрузкой событий.
Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.
class Handler(tornado.web.RequestHandler):
def post(self):
try:
logging.debug("Got request: %s" % self.request.body)
update = tornado.escape.json_decode(self.request.body)
message = update['message']
text = message.get('text')
if text:
logging.info("MESSAGE\t%s\t%s" % (message['chat']['id'], text))
if text[0] == '/':
command, *arguments = text.split(" ", 1)
response = CMD.get(command, not_found)(arguments, message)
logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
send_reply(response)
except Exception as e:
logging.warning(str(e))
Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект
Message.
Собственно, её код довольно прост:
def send_reply(response):
if 'text' in response:
api.post(URL + "sendMessage", data=response)
Теперь, когда вся логика бота описана можно начать придумывать ему команды.
Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:
def help_message(arguments, message):
response = {'chat_id': message['chat']['id']}
result = ["Hey, %s!" % message["from"].get("first_name"),
"\rI can accept only these commands:"]
for command in CMD:
result.append(command)
response['text'] = "\n\t".join(result)
return response
Структура message[‘from’] — это объект типа User, она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message[‘chat’][‘id’] — в случае личного общения там будет User, а в случае чата — id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.
Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.
После этого можно добавить какую-нибудь свою команду, например, /base64:
def base64_decode(arguments, message):
response = {'chat_id': message['chat']['id']}
try:
response['text'] = b64decode(" ".join(arguments).encode("utf8"))
except:
response['text'] = "Can't decode it"
finally:
return response
Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот: I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:
command1 — Description
command2 — Another description
I:
whoisyourdaddy — Information about author
base64 — Base64 decode
BotFather: Success! Command list updated. /help
C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.
Как можно было заметить, Telegram присылает сообщение целиком, а не разбитое, и ограничение на то, что команды начинаются со слеша — только для удобства мобильных пользователей. Благодаря этому можно научить бота немного говорить по-человечески.
UPD: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<command>) (https://core.telegram.org/bots#privacy-mode)
- All messages that start with a slash ‘/’ (see Commands above)
- Messages that mention the bot by username
- Replies to the bot’s own messages
- Service messages (people added or removed from the group, etc.)
Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность.
Для начала в Handler добавляем обработчик:
if text[0] == '/':
...
else:
response = CMD["<speech>"](message)
logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
send_reply(response)
А потом в список команд добавляем псевдо-речь:
RESPONSES = {
"Hello": ["Hi there!", "Hi!", "Welcome!", "Hello, {name}!"],
"Hi there": ["Hello!", "Hello, {name}!", "Hi!", "Welcome!"],
"Hi!": ["Hi there!", "Hello, {name}!", "Welcome!", "Hello!"],
"Welcome": ["Hi there!", "Hi!", "Hello!", "Hello, {name}!",],
}
def human_response(message):
leven = fuzzywuzzy.process.extract(message.get("text", ""), RESPONSES.keys(), limit=1)[0]
response = {'chat_id': message['chat']['id']}
if leven[1] < 75:
response['text'] = "I can not understand you"
else:
response['text'] = random.choice(RESPONSES.get(leven[0])).format_map(
{'name': message["from"].get("first_name", "")}
)
return response
Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.
Боты, как и любой нормальный пользователь Telegram, могут не только писать сообщения, но и делиться картинками, музыкой, стикерами.
Для примера расширим словарь RESPONSES:
RESPONSES["What time is it?"] = ["<at_sticker>", "{date} UTC"]
И будем отлавливать текст :
if response['text'] == "<at_sticker>":
response['sticker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC"
del response['text']
Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:
def send_reply(response):
if 'sticker' in response:
api.post(URL + "sendSticker", data=response)
elif 'text' in response:
api.post(URL + "sendMessage", data=response)
И все, теперь бот будет время от времени присылать стикер вместо времени:
Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).
Вспоминая статью про умный дом, могу сказать, что теперь извращений меньше, а работа прозрачнее.
К сожалению, на данный момент существует ограничение на использование webHook — он работает только по https и только с валидным сертификатом, что, например для меня пока критично за счет отсутствия поддержки сертифицирующими центрами динамических днс.
К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:
while True:
r = requests.get(URL + "?offset=%s" % (last + 1))
if r.status_code == 200:
for message in r.json()["result"]:
last = int(message["update_id"])
requests.
post("http://localhost:8888/",
data=json.dumps(message),
headers={'Content-type': 'application/json',
'Accept': 'text/plain'}
)
else:
logging.warning("FAIL " + r.text)
time.sleep(3)
P.S. По пункту 7 нашел удобное решение — размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.
UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч ‘method’: ‘sendMessage’ (или любой другой метод, используемый ботом).
Открыть статью в новом окне ↗
Вы можете подключить Telegram бота к Bothelp. После подключения вы сможете отвечать на сообщения подписчиков боту, отправлять рассылки и создавать автоворонки. Подробнее о возможностях платформы, читайте в статье: Возможности Bothelp.
Если у вас уже есть созданный бот, переходите сразу ко второму шагу. Если нет, воспользуйтесь инструкцией ниже.
Как создать бота?
1. Зайдите в свой аккаунт Телеграм.
Обратите внимание, что владельцем бота будет тот, с чьего аккаунта он был создан. Если вы утратите доступ к аккаунту с которого создавался бот или он будет удален, то вы не сможете вернуть подписчиков.
2. Найдите в поиске аккаунт @BotFather и начните с ним диалог.
3. Введите команду «/newbot».
Создание нового бота
Имя может быть любым. Оно будет отображаться в списке контактов и в диалоге.
Ник обязательно должен заканчиваться на bot. Например: mybot, newbot, qwertybot. Ник уникальный и некоторые ники уже заняты, так что подбирайте до тех пор пока не найдется свободное. Лучше всего использовать название компании или вашу фамилию.
Длинна ника 5 до 32 символов, можно использовать только латинские буквы, цифры и нижнее подчеркивание.
После успешного создания вы увидите следующее сообщение:
Позже вы сможете добавить аватар, описание и другую информацию о боте.
После создания вы увидите следующую надпись:
Это токен (секретный ключ) бота, он используется для доступа к боту через API и подключения к платформе BotHelp. Кликните на токен и он будет скопирован в буфер обмена.
Нажмите на кнопку «Добавить новый канал»
Выберите Telegram в списке доступных каналов
Введите в поле токен вашего бота Telegram
Нажмите «Добавить канал»
Новый канал отобразится в списке подключенных, теперь вы можете настроить цепочку сообщений бота. Для этого воспользуйтесь инструкцией: «Создаем сценарий бота».
Если вы хотите изменить аватар или описание бота вернитесь назад в Телеграм в аккаунт Botfather.
Введите команду /mybots чтобы выбрать нужного бота.
Выберите Edit bot, чтобы перейти к его редактированию.
Настройки
Edit Botpic — позволит загрузить файл с аватаркой для бота
Edit Description — позволит добавить описание (до 512 символов). Описание будет отображаться когда пользователи зайдут в диалог с ботом в окне «Что может этот бот?»
Edit About — позволит отредактировать описание в профиле бота
После внесения любых изменений канал нужно переподключить в кабинете платформы.
После подключения перейдите в диалог с ботом и напишите любое сообщение. Оно должно отобразится в диалогах внутри платформы BotHelp.
Протестировать бота с компьютера можно при помощи приложения .
Видеоинструкция:
_______
Если у вас остались вопросы, задайте их в чате техподдержки. Мы всегда готовы помочь 😃
Я был одержим научной фантастикой, когда был подростком, поэтому кодирование всегда меня привлекало. Меня нравилась сама мысль о том, что можно написать программу, которая ведет себя случайным образом – для меня, это было нечто в области фантастики!
Эта навязчивая идея подпитывала мои первые попытки в кодировании, и в результате появилось много забавных ботов. Например, этот, который описывает страшные места, путем объединения слов наугад, и этот, который рисует PNG в цветах блоков.
Ничего необычного. Я едва ли мастер-программист, и вам тоже не обязательно им быть. Благодаря базовому пониманию кодирования и API-интерфейсов вы можете создать действительно полезное программное обеспечение для удовольствия и прибыли. В этом уроке мы рассмотрим создание бота в Telegram с нуля.
Бот Telegram можно использовать с Intercom API, чтобы предоставить агентам поддержки доступ к своим клиентам, которые используют Telegram. Он также может включать автоматизацию, которая объединяет полезные ресурсы с чатом в прямом эфире, например, в примере ниже из orat.io :
Telegram – отличный дом для ботов, ориентированных на клиентов, с более чем 200 000 000 активных пользователей в месяц и годовой прирост в 50% . Это платформа, которую может использовать ваша аудитория, что поможет вам избежать разногласий и будет способствовать взаимопониманию. Кроме того, создание ботов для Telegram – самый простой способ создания ботов.
Вот почему я решил написать эту инструкцию – это может стать хорошей отправной точкой для начинающих программистов, которые ищут что-то для быстрого заработка (и потенциально ценное) за счет использования популярной и функциональной платформы.
Первый бот, который я сделал для Telegram, использовал RSS, чтобы найти материалы на канале Hacker News, которые соответствуют поисковому запросу:
Можете воспользоваться этим ботом – он здесь и он жив!
Благодаря знаниям из этого руководства и дальнейшему прочтению статьи вы сможете создать чат-чат поддержки для своей компании, читатель RSS-каналов, панель управления для вашего умного дома или бот, который отвечает, используя только котировки Шекспира. Маленькие программные проекты, подобные этому, очень интересны и бесконечно расширяемы. Чем больше вы читаете и придумываете новых функций, тем дальше вы можете продвинуть своего бота.
В этом руководстве вы узнаете:
Перед запуском вам понадобятся:
С этим все, давайте пойдем дальше.
Телеграмм – это преимущественно мобильное приложение, но для удобства вы можете установить его на том же компьютере, который вы используете для написания кода. Таким образом, вы можете быстро протестировать его, не используя телефон. И вы сможете скопировать и вставить ключ API-робота Telegram прямо в текстовый редактор.
Как же получить этот ключ API?
Создание ботов телеграмм – это новый процесс, потому что большая его часть сосредоточена вокруг ваших собственных взаимодействий с ботом Telegram. Этот бот – BotFather. В вашем рабочем столе Telegram вам нужно найти его и начать разговор с ним.
Отправьте команду запуска BotFather, набрав /start .
Вы увидите список команд, которые помогут вам создавать, редактировать и управлять ботами. Поскольку это ваш первый раз, вам нужно /newbot .
По сравнению с процессом создания бот-сервера Twitter, бота Mastodon или любого другого бота, с которым я экспериментировал, Telegram упрощает первоначальную настройку. Наверное, это доказывает, что Telegram ― это отличный инструмент для работы с ботом!
После предоставления команды /newbot вы можете выбрать имя и имя пользователя для своего бота. Название – это то, что ваши пользователи будут видеть бота, как в списке своих контактов, и имя пользователя, как они его найдут. Подумайте о имени пользователя, как и в Twitter; оно должно быть уникальным, и лучше всего, если оно короткий и легко запоминается.
После этого вам будет предоставлен ключ API вашего бота. Ключ API – это то, благодаря чему Telegram может распознать, что код, который вы пишете, связан с этим конкретным ботом. У каждого бота есть свой API-ключ, и вы не должны делиться им ни с кем, иначе люди могут захватить вашего бота и заставить его творить ужасные вещи.
На этом чат BotFather завершен, переходим к коду!
Откройте терминал и введите mkdir telegram-bot . Это создаст новый каталог для файлов вашего бота. Лучше всего держать их в одной папке, чтобы можно было легко ей управлять. Перейдите в каталог cd telegram-bot и выполните следующие действия:
touch Gemfile
touch bot.rb
atom .
Это действие создаст два пустых файла, один для указания GEMS, которые вам понадобятся, и тот, где будет содержаться код бота. Последняя команда открывает оба этих файла в Atom.
Нажмите Gemfile на боковой панели Atom и вставьте следующее:
source ‘https://rubygems.org’ gem ‘telegram_bot’
source ‘https://rubygems.org’ gem ‘telegram_bot’ |
Это нужно Bundler, чтобы захватить интерфейс Ruby API Telegram от rubygems.org.
Чтобы завершить настройку gem, вернитесь к своему терминалу и введите bundle . Вот что вы должны увидеть:
Вот и все, что касается настройки gems, теперь мы наконец попадаем в код.
Кодирование вашего первого бота Telegram
Фактический код, который будет постоянно работать на сервере, находится внутри файла bot.rb. Сейчас он пуст, но здесь мы собираемся связать gems с Telegram, который мы только настроили и создадим бота.
Писать не так уж много. Когда вы закончите, вы получите следующее:
Так будет выглядеть в Telegram то, что делает код выше:
Давайте посмотрим, что делает каждая часть кода:
require ‘telegram_bot’ token = ‘TOKEN’ bot = TelegramBot.new(token: token)
require ‘telegram_bot’ token = ‘TOKEN’ bot = TelegramBot.new(token: token) |
(Замените TOKEN маркером API, который вы скопировали из BotFather)
Ruby позволяет довольно легко угадать, какой код будет выполняться. Три приведенные выше строки добавляют функциональность ботов Telegram к вашему файлу, а затем создают новый бот-объект из класса TelegramBot, аутентифицированный вашим токеном (генератор одноразовых паролей в системах аутентификации), поэтому программа знает, куда отправлять данные.
Следующая часть – одна большая петля. Сначала это кажется сложным, сейчас я объясню вам все по порядку.
bot.get_updates(fail_silently: true) do |message| puts «@#{message.from.username}: #{message.text}» command = message.get_command_for(bot) message.reply do |reply| case command when /start/i reply.text = «All I can do is say hello. Try the /greet command.» when /greet/i reply.text = «Hello, #{message.from.first_name}. « else reply.text = «I have no idea what #{command.inspect} means.» end puts «sending #{reply.text.inspect} to @#{message.from.username}» reply.send_with(bot) end end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
bot. puts «@#{message.from.username}: #{message.text}» command = message.get_command_for(bot)
message.reply do |reply| case command when /start/i reply.text = «All I can do is say hello. Try the /greet command.» when /greet/i reply.text = «Hello, #{message.from.first_name}. « else reply.text = «I have no idea what #{command.inspect} means.» end puts «sending #{reply.text.inspect} to @#{message.from.username}» reply.send_with(bot) end end |
Первая строка говорит боту продолжать слушать команды. И когда он получает команду передать его в переменную message . Строка puts записывает команду на ваш терминал, чтобы вы могли видеть, что происходит во время запуска бота.
Действия ответчика бота хранятся в case-заявлении. Ввод case case подается через переменную message после того, как он был очищен методом get_command_for . Текст ответа бота устанавливается в зависимости от сохраненной команды и затем отправляется с send_with до перезапуска цикла.
С помощью этой настройки теперь вы можете найти своего бота на Telegram и отправить команды /start и /greet и посмотреть его в действии.
Для этого сохраните изменения в Atom и запустите ruby bot.rb в терминале. Пока этот терминал открыт и работает, ваш бот отправляет ответы!
Настройка нового блестящего бота
Бот, который вы только что создали, в порядке, но еще не выглядет достаточно интересным. Существуют базовые биты, что означает, что вы можете их легко заменить и расширить.
Части, на которые следует обратить внимание при настройке, это строки when /command/i и текст между кавычками в строках reply.txt . Это те сообщения, которые принимает ваш бот, и которые он отправляет обратно в качестве ответов.
Итак, если вы хотите сказать что-то другое как ответ на команду /greet , вы должны изменить значение reply.text под командной строкой приветствия ( when /greet/i ). Вот вариант, который вы могли бы попробовать:
when /greet/i greetings = [‘bonjour’, ‘hola’, ‘hallo’, ‘sveiki’, ‘namaste’, ‘salaam’, ‘szia’, ‘halo’, ‘ciao’] reply.text = «#{greetings.sample.capitalize}, #{message.from.first_name}!»
when /greet/i greetings = [‘bonjour’, ‘hola’, ‘hallo’, ‘sveiki’, ‘namaste’, ‘salaam’, ‘szia’, ‘halo’, ‘ciao’] reply.text = «#{greetings.sample.capitalize}, #{message.from.first_name}!» |
Здесь я создал массив с несколькими различными способами, чтобы поздороваться, а затем добавил его в случайное сообщение, используя метод sample .
Превращение вашего бота в нечто удивительное
Вы можете добавить столько команд, ответов и функций своему боту, сколько захотите. Большинство из них – это задачка для вашего воображения. Если вы хотите узнать много других интресных вещей, которые применимы к вашему боту, начните с Learn Ruby the Hard Way, чтобы понять основные принципы языка кодирования. С небольшой практикой и надежной зависимостью от StackOverflow вы сможете:
Если вам нужно вдохновение, вы можете прочитать исходный код ботов других людей и проверить список ботов Telegram – попробуйте выяснить, как они работают и воссоздавать их в качестве практики.
Запуск бота 24/7
Прямо сейчас, ваш бот работает на вашем компьютере. Это нормально, пока вам не потребуется перезагрузить компьютер, ваш wi-fi или ваш компьютер перейдёт в спящий режим. Когда это произойдет, это завершит процесс работы бота, и пользователи не получат от него ответа.
Процесс перемещения вашего бота из среды разработки (ваш компьютер, на котором вы использовали Atom для записи бота) в производственную среду (сервер), называется развертыванием. Существует несколько вариантов развертывания вашего бота, но в обоих случаях мы начнем с загрузки файлов в Bitbucket . Bitbucket позволяет использовать git , систему управления версиями, которая поможет вам безопасно сделать и отслеживать изменения в коде вашего бота. Загружая файлы бота в Bitbucket, вы можете использовать Bitbucket как способ захватить файлы бота, когда вы вошли в систему.
Подпишитесь на Bitbucket и создайте свой сервер.
При открытии терминала и в том же каталоге, что и исходный код бота, введите следующее:
git init git add . git commit -m ‘initial commit’
git init git add . git commit -m ‘initial commit’ |
Теперь следуйте инструкциям Bitbucket. Вот как это сделал я:
После ввода этих двух выделенных команд и предоставления моего пароля Bitbucket, файлы загружаются по запросу. Когда ваш код живет в облаке, пришло время выбрать способ развертывания.
Развертывание с помощью Raspberry Pi
Этот одноплатный компьютер Raspberry Pi на моем столе содержит кучу ботов
Raspberry Pi – отличная инвестиция, если вы планируете создавать и развертывать боты – вы можете получить ее всего за 7 долларов плюс стоимость SD-карты. Он использует очень мало энергии , поэтому вы можете держать его на месте и не беспокоиться о стоимости. Возможно, возникнет соблазн купить пакет, который поставляется с клавиатурой, мышью и футляром, но вам нужно всего лишь зарядное устройство USB, SD-карту, кабель Ethernet и сам компьютер. Вероятно, у вас, наверное, больше всего этого в вашем офисе.
Развертывание с помощью облачного сервера
Вам не нужно владеть компьютером, на котором работает ваш бот, вы можете использовать память и мощность чужой машины для запуска бота удаленно. Популярные решения для развертывания в облаке включают Amazon Web Services (AWS), DigitalOcean и Heroku.
Самые подходящие для начального уровня – DigitalOcean и Heroku. Нажмите здесь, чтобы получить учетную запись DigitalOcean, которая поставляется с кредитом в размере 10 долларов – достаточно для запуска сервера в течение двух месяцев, пока вы его протестируете.
Когда вы подписываетесь на DigitalOcean , вы узнаете, как подключиться к серверу через SSH и запустить консоль.
Затем, вам нужно проделать определённые действия на вашем ПК, независимо от того, какой сервер вы используете. После того, как вы настроили серверь, давайте перейдем к фактическому развертыванию.
Процесс развертывания
На новом сервере – будь то Raspberry Pi или облачный сервер, например, Digital Ocean, вам нужно установить Ruby, Bundler и Git:
sudo apt-get update sudo apt-get upgrade curl -L https://get.rvm.io | bash -s stable —ruby sudo apt-get install bundler sudo apt-get install git
sudo apt-get update sudo apt-get upgrade curl -L https://get.rvm.io | bash -s stable —ruby sudo apt-get install bundler sudo apt-get install git |
Затем создайте новый каталог для своего бота, перейдите туда и загрузите файлы из Bitbucket со следующими командами:
mkdir bots
cd bots
git clone https:// [email protected] org /benjbrandall/telegram-bot.git
mkdir bots cd bots git clone https:// [email protected] /benjbrandall/telegram-bot.git |
Не забудьте заменить URL выше (https: // benjbran …) URL-адресом вашего сервера. Вы найдете всю команду clone через Bitbucket, так что вам не придется делать это вручную.
Затем введите bundle для установки зависимостей gem, а затем ruby bot.rb чтобы запустить бот, который теперь будет работать постоянно.
Примечание. Если вы получаете доступ к своему серверу через SSH, вам нужно запустить бот с nohup ruby bot.rb и убедиться, что бот не перестает работать, когда сеанс SSH завершается. Теперь вы можете закрыть окно, зная, что ваш бот тихонько подает звуковой сигнал в фоновом режиме. Можно ли восстановить удаленные сообщения в ватсапе читайте в нашей статье.
Это всё, что нужно для создания вашего первого Бота в Telegram. По пути вы узнали о Ruby, gems, Telegram API и о том, как развернуть бота на сервере. Любые вопросы или предложения? Дай мне знать в комментариях! Сканировать штрих код вы можете скачав приложение.
Конструкторы стоят в среднем 10 долларов за одного бота в месяц. Есть и бесплатные, и более дорогие сервисы. У некоторых конструкторов стоимость зависит от числа пользователей или сложности диалогов.
Самостоятельное создание чат-бота можно условно разделить на пять этапов.
Этап 1. Определите, где будет находиться чат-бот
Это мессенджер, диалоговое окно на сайте, отдельная страница. На российском рынке наиболее популярны мессенджер социальной сети «ВКонтакте» и WhatsApp — многие начинают внедрение чат-ботов именно с них.
Этап 2. Опишите цели чат-бота
К какому действию он должен подвести пользователя? Примеры: получить информацию, оформить заказ на товар, добавить товар в лист ожидания. Возможно, алгоритм должен сообщить пользователю о скидках, акциях, появлении товара на складе, ответить на вопросы.
Чтобы ответить на первые два вопроса плана, нужно проанализировать аудиторию. Нужно определить, откуда приходят клиенты, какие вопросы они задают, что их интересует, где и как они предпочитают коммуницировать с вашими менеджерами, почему уходят.
Этап 3. Спроектируйте чат-бота
Нужно определить логику алгоритма и последовательность действий. Итоговую структуру можно описать в виде последовательной (блочной, или древовидной) схемы сообщений.
Простая схема чат-бота.На этом этапе нужно обратить внимание на то, в каком тоне чат-бот общается с клиентами. Сервис доставки еды и похоронное бюро будут использовать разные стили. Текстовые сообщения можно дополнить кнопками, смайликами, анимацией и иллюстрациями.
Этап 4. Выберите конструктор чат-бота
На рынке есть как англоязычные, так и русскоязычные сервисы. Конструкторы различаются набором функций, возможностью интеграций и тем, для каких платформ они создают чат-ботов. Вам нужно подобрать подходящий в зависимости от ваших задач.
Приведём некоторые примеры:
У Facebook Messenger, Slack и Telegram есть собственные платформы для создания ботов. Они бесплатные, но несколько сложнее классических коммерческих конструкторов.
Для общения с пользователем чат-бот должен откуда-то брать данные: о заказах, товарах, статусе доставки и так далее. Для этого алгоритм интегрируют со сторонними сервисами, которые хранят такие данные. Это, например, «Мой склад», «Google Таблицы», «Google Календарь», Bitrix24 или даже Instagram. При выборе конструктора нужно учитывать, что он должен работать с сервисом, которым пользуетесь вы.
Также боту может потребоваться интеграция с бэкенд-системами, чтобы он мог подключиться к нужному мессенджеру. Если вы раньше этим не занимались, то лучше взять конструктор, в котором ничего из сторонних сервисов подключать не нужно.
Ещё следует обратить внимание:
Этап 5. Откорректируйте бота после тестового периода
Когда бот проработает хотя бы месяц, попробуйте его улучшить. Для этого:
Представьте, что у вас есть бот в мессенджере, который присылает вам случайно выбранную картинку с собачкой, когда вам захочется. Звучит здорово, да? Давайте сделаем такого.
В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.
В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.
Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.
1. Создаём нового бота в BotFatherЕсли вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а
Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot
. Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram.
, а токен вот так: me/YOUR_BOT_USERNAME
704418931:AAEtcZ*************2. Устанавливаем библиотеку
Команда для установки библиотеки:
pip3 install python-telegram-bot
Если всё прошло гладко, то можно двигаться дальше.
Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop
. Генерировать случайные изображения, нам поможет публичным API от RandomDog.
Рабочий процесс нашего бота очень прост:
1. Импорт библиотекзапрос к API -> получить URL изображение -> отправить изображение
Для начала импортируем все нужные библиотеки.
from telegram.ext import Updater, CommandHandler2. Доступ к API и получение URL изображения
import requests
import re
Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.
contents = requests.get('https://random.dog/woof.json').json()
Проверить json данные можно в браузере по ссылке https://random.dog/woof.json
. Вы увидите что-то вроде этого:
{“url":"https://random.dog/*****.JPG"}
Получаем URL, чтобы иметь возможность отправить изображение:
image_url = contents['url']
Оформим этот код в виде функции get_url()
.
def get_url():3. Отправляем картинку
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url
Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.
Получить URL изображения можно вызвав функцию get_url()
.
url = get_url()
Чтобы получить ID получателя, используйте этот код:
chat_id = update.message.chat_id
После того как мы получили URL изображения и ID получателя, пришло время отправить сообщение, т. е. изображение.
bot.send_photo(chat_id=chat_id, photo=url)
Оберните код в функцию bop
и убедитесь, что код выглядит следующим образом:
def bop(bot, update):4. Основная программа
url = get_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)
И наконец, создайте ещё одну функцию с именем main
, чтобы запускать программу. Не забудьте заменить YOUR_TOKEN
на токен, который вы сгенерировали ранее.
def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if name == '__main__':
main()
В итоге, ваш код должен выглядеть вот так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler5. Запуск программы
import requests
import redef get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return urldef bop(bot, update):
url = get_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if __name__ == '__main__':
main()
Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py
. Теперь её можно запускать, командой:
python3 main.py
Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME
. Отправьте команду /bop
. Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.
Отлично! Теперь у вас есть работающий бот.
Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.
Давайте это исправим, чтобы бот отправлял нам только изображения. .]*)$»,url).group(1).lower()
return urldef bop(bot, update):
url = get_image_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater(‘YOUR_TOKEN’)
dp = updater.dispatcher
dp.add_handler(CommandHandler(‘bop’,bop))
updater.start_polling()
updater.idle()if __name__ == ‘__main__’:
main()
Всё должно работать идеально. Этот код можно найти на моём GitHub.
Поздравляю с окончанием урока, теперь у вас есть классный бот для Telegram.
Перевод статьи Dzaky Widya Putra: Learn to build your first bot in Telegram with Python
Помимо отправки команд в личных сообщениях или группах, пользователи могут взаимодействовать с вашим ботом с помощью встроенных запросов . Если встроенные запросы включены, пользователи могут вызвать вашего бота, введя его имя пользователя и запрос в поле ввода текста в любом чате . Запрос отправляется вашему боту в обновлении. Таким образом, люди могут запрашивать контент у вашего бота в любых своих чатах, группах или каналах, вообще не отправляя никаких сообщений.
Чтобы включить эту опцию, отправьте команду / setinline
в @BotFather и укажите текст-заполнитель, который пользователь увидит в поле ввода после ввода имени вашего бота.
См. Соответствующие методы и объекты в Руководстве по API для ботов.
Встроенные боты поддерживают всех типов контента , доступных в Telegram (всего 20). Они могут отправлять стикеры, видео, музыку, локации, документы и многое другое.
Клиенты могут отображать результаты с вертикальной или горизонтальной прокруткой, в зависимости от типа контента:
Как только пользователь нажимает на элемент, он немедленно отправляется получателю, а поле ввода очищается.
Некоторым встроенным ботам может быть полезен процесс начальной настройки, например подключение их к учетной записи на внешней службе (например, YouTube). Мы добавили простой способ переключения между приватным чатом с ботом и любым чатом, в котором пользователь хочет делиться встроенными результатами.
Вы можете отобразить специальную кнопку «Перейти в личку» над встроенными результатами (или вместо них). Эта кнопка откроет приватный чат с ботом и передаст параметр по вашему выбору, чтобы вы могли запрашивать у пользователя соответствующие действия по настройке. После этого вы можете использовать встроенную клавиатуру с кнопкой switch_inline_query , чтобы отправить пользователя обратно в исходный чат.
Примеры ботов
@youtube — показывает кнопку «Войти на YouTube», а затем предлагает персонализированные результаты.
Руководство: переход на PM
Встроенные боты могут запрашивать данные о местоположении у своих пользователей. Используйте команду
/ setinlinegeo
с @BotFather, чтобы включить это. Ваш бот будет запрашивать у пользователя разрешение на доступ к их местоположению всякий раз, когда он отправляет встроенный запрос.
Пример бота
@foursquare — этот бот запросит разрешение на доступ к местоположению пользователя, а затем предоставит результаты с геотаргетингом.
В сообщениях, отправленных с помощью вашего бота, рядом с именем отправителя будет отображаться его имя пользователя.
Когда пользователь нажимает на имя пользователя бота в заголовке сообщения, упоминание автоматически вставляется в поле ввода. При вводе символа @
в поле ввода появляется список предложений, в которых представлены недавно использованные встроенные боты.
Чтобы узнать, какие из предоставленных результатов ваши пользователи отправляют своим партнерам по чату, отправьте @Botfather команду / setinlinefeedback
. Если этот параметр включен, вы будете получать обновления результатов, выбранных вашими пользователями.
Обратите внимание, что это может создать проблемы с загрузкой популярных ботов — вы можете получить больше результатов, чем фактические запросы из-за кеширования (см. Параметр cache_time в answerInlineQuery). В этих случаях мы рекомендуем отрегулировать настройку вероятности, чтобы получить 1/10, 1/100 или 1/1000 результатов.
Вот несколько примеров встроенных ботов, на случай, если вам интересно увидеть один в действии.Попробуйте любой из этих вариантов:
@gif — поиск GIF
@vid — поиск видео
@pic — поиск изображений в Яндексе
@bing — поиск изображений Bing
@wiki — поиск в Википедии
@imdb — поиск IMDB
@bold — выделите жирным, курсивный или фиксированный системный текст
НОВИНКА
@youtube — Подключите свою учетную запись для получения персонализированных результатов
@music — Поиск и отправка классической музыки
@foursquare — Находите и отправляйте адреса мест проведения
@sticker — Находите и отправляйте стикеры на основе эмодзи
Если вы новичок в ботах Telegram, мы рекомендуем сначала ознакомиться с нашим Знакомство с ботами .
![]()
Вам также может пригодиться Bot API Manual .
Создавать ботов Telegram очень просто, но вам потребуются хотя бы некоторые навыки компьютерного программирования. Чтобы бот работал, создайте учетную запись бота с помощью @BotFather, а затем подключите его к своему внутреннему серверу через наш API.
К сожалению, готовых способов создать работающего бота, если вы не разработчик, не существует.Но мы уверены, что скоро вы найдете множество ботов, созданных другими людьми, с которыми можно будет поиграть.
Вот два примера ботов, написанных на PHP:
Многие члены нашего сообщества создают ботов и публикуют исходники.
![]()
Собираем их на на этой странице »
Напишите нам на @BotSupport, если вы создали бота и хотели бы поделиться им с другими.
API бота еще довольно молод. Есть много потенциальных возможностей, которые следует рассмотреть и реализовать. Некоторое время мы будем изучать, что люди делают со своими ботами, чтобы увидеть, какие направления будут наиболее важными для платформы.
Приглашаем всех разработчиков ботов делиться идеями для нашего Bot API в нашей учетной записи @BotSupport .
1. Все боты , независимо от настроек, получат:
2. Администраторы ботов и боты с отключенным режимом конфиденциальности будут получать все сообщения, кроме сообщений, отправленных другими ботами.
3. Боты с включенным режимом конфиденциальности получит:
Обратите внимание , что каждое конкретное сообщение может быть доступно только одному боту с включенной конфиденциальностью , т.е.е. ответ боту A, содержащий явную команду для бота B или отправленный через бота C, будет доступен только боту A. Ответы имеют наивысший приоритет.
Боты, разговаривающие друг с другом, потенциально могут застрять в нежелательных циклах. Чтобы этого избежать, мы решили, что боты не смогут видеть сообщения от других ботов независимо от режима.
В настоящее время есть два способа получения обновлений.Вы можете использовать либо длинный опрос, либо Webhooks. Обратите внимание, что , а не , возможно получать обновления с помощью длительного опроса, пока установлен исходящий Webhook.
Метод getUpdates возвращает 100 первых неподтвержденных обновлений. Чтобы подтвердить обновление, используйте параметр смещение при вызове getUpdates следующим образом:
смещение = update_id последнего обработанного обновления + 1
Все обновления с update_id меньше или равным смещению будут помечены как подтвержденные на сервере и больше не будут возвращаться.
Если вы успешно настроили веб-перехватчик, но не получаете никаких обновлений, запомните:
Пожалуйста, ознакомьтесь с этим новым WEBHOOK GUIDE , чтобы узнать все, что нужно знать о веб-перехватчиках!
Ознакомьтесь с этим руководством по самозаверяющим сертификатам, которое мы сделали специально для вас. Если вы прочитали это, но у вас все еще есть вопрос, напишите нам в службу поддержки ботов.
Если вы хотите убедиться, что запрос Webhook исходит от Telegram, мы рекомендуем использовать секретный путь в URL-адресе, который вы нам даете, например www.example.com/your_token. Поскольку никто другой не знает токен вашего бота, можете быть уверены, что это мы.
Это возможно, если вы используете веб-перехватчики. Достоинством является то, что вам нужно меньше запросов, недостатком — то, что в этом случае невозможно узнать, что такой запрос был успешным, или получить его результат.
Каждый раз, когда вы получаете обновление веб-перехватчика, у вас есть два варианта:
1. Отправьте сообщение POST на https://api.telegram.org/bot
2. Ответьте напрямую и укажите метод как полезную нагрузку JSON в ответе
Вы также можете взглянуть на наш пример HelloBot, он предлагает реализацию этого PHP.
![]()
Используйте метод getFile.Обратите внимание, что это будет работать только с файлами размером до 20 МБ.
Боты в настоящее время могут отправлять файлы любого типа размером до 50 МБ, так что да, очень большие файлы пока работать не будут. Извините. Этот лимит может быть изменен в будущем.
Да, file_ids можно рассматривать как постоянные.
При отправке сообщений в определенном чате избегайте отправки более одного сообщения в секунду.Мы можем разрешить короткие пакеты, превышающие этот предел, но в конечном итоге вы начнете получать 429 ошибок.
Если вы отправляете массовые уведомления нескольким пользователям, API не будет разрешать более 30 сообщений в секунду или около того. Для достижения наилучших результатов рассмотрите возможность рассылки уведомлений через большие интервалы в 8–12 часов.
Также обратите внимание, что ваш бот не сможет отправлять более 20 сообщений в минуту в одну и ту же группу.
К сожалению, на данный момент у нас нет способов рассылки массовых сообщений, например.грамм. уведомления. Мы можем добавить что-нибудь в этом роде в будущем.
Чтобы избежать выхода за наши пределы при рассылке массовых уведомлений, рассмотрите возможность их распространения на более длительные интервалы, например 8-12 часов. API не будет разрешать массовые уведомления более чем ~ 30 пользователям в секунду, если вы перейдете через это, вы начнете получать 429 ошибок.
См. Также: Как избежать превышения лимита?
Если у вас есть вопросы, на которые нет ответа на этой странице, напишите нам на @BotSupport в Telegram.
![]()
Мы приветствуем любые предложения по бот-платформе и API.
Чат-бот — это автоматизированный многофункциональный помощник, который может принимать отправленные и отправленные инициированные сообщения, а с помощью SendPulse ваш бот может сохранять информацию в виде переменных для дальнейшего использования.
Следуйте пошаговой инструкции, чтобы создать своего первого чат-бота для мессенджера Telegram, или подключите существующего к SendPulse для дальнейшей настройки.
Если у вас уже есть бот, пропустите первый абзац и посмотрите следующий раздел.
Откройте мессенджер Telegram, войдите в свою учетную запись или создайте новую.
Шаг 1. Введите @Botfather во вкладке поиска и выберите этого бота.
Обратите внимание, у официальных ботов Telegram рядом с их именем есть синяя галочка.
Нажмите «Пуск», чтобы активировать бота BotFather.
В ответ вы получите список команд для управления ботами.
Шаг 2 . Выберите или введите команду / newbot
и отправьте ее.
Шаг 3. Выберите имя для своего бота — ваши подписчики увидят его в разговоре. И выберите логин для своего бота — бота можно будет найти в поиске по логину. Имя пользователя должно быть уникальным и заканчиваться словом «бот».
После того, как вы выбрали подходящее имя для своего бота — бот создан. Вы получите сообщение со ссылкой на вашего бота t.me /
Для подключения бота к SendPulse необходим токен. Скопируйте значение токена и найдите дополнительную информацию о подключении бота к SendPulse в последнем разделе этой статьи.
Шаг 1. Перейдите к боту @BotFather и отправьте команду / token
.
Вы увидите кнопки со всеми созданными вами ботами.
Шаг 2. Выберите тот, для которого вам нужен токен, чтобы вы могли подключить его к Sendpulse.
Скопируйте значение токена.
Перейдите в раздел «Чат-боты» в своей учетной записи SendPulse. Если вы впервые посещаете эту страницу и не подключили чат-ботов, нажмите кнопку «Подключить каналы».Если вы уже подключали ботов раньше — перейдите на вкладку «Основные» и нажмите кнопку «Управление ботами».
Затем выберите Telegram и нажмите кнопку «Включить Telegram».
Введите свой токен от нужного бота и нажмите «Подключиться».
В следующем окне нажмите кнопку «Подписаться».
Вы будете перенаправлены в приложение Telegram, нажмите кнопку «Пуск», и вы будете подписаны на своего бота.
Поздравляем! Вы успешно добавили своего чат-бота в SendPulse.
Вы можете выбрать своего бота и начать создавать приветственные и запускаемые потоки или массовые кампании.
Обратите внимание, существующие подписчики не импортируются в аудиторию вашего чат-бота SendPulse. После подключения бота вы можете собирать подписчиков с помощью виджета веб-сайта или напрямую делиться ссылкой на своего бота t.me/
Подключите своего бота Telegram
Последнее обновление: 27.11.2020
Чат-ботов часто рекламируют как революцию в способах взаимодействия пользователей с технологиями и предприятиями. У них довольно простой интерфейс по сравнению с традиционными приложениями, поскольку они требуют от пользователей только общения в чате, а чат-боты должны понимать и делать все, что от них требует пользователь, по крайней мере теоретически.
Многие отрасли переводят обслуживание клиентов на системы чат-ботов.Это связано с огромным падением стоимости по сравнению с реальными людьми, а также из-за надежности и постоянной доступности. Чат-боты обеспечивают определенную поддержку пользователей без существенных дополнительных затрат.
Сегодня чат-боты используются во многих сценариях, начиная от черных задач, таких как отображение времени и данных о погоде, до более сложных операций, таких как элементарная медицинская диагностика и общение с клиентами / поддержка. Вы можете разработать чат-бота, который поможет вашим клиентам, когда они задают определенные вопросы о вашем продукте, или вы можете создать чат-бота личного помощника, который сможет выполнять основные задачи и напоминать вам, когда пора идти на встречу или в тренажерный зал.
Когда дело доходит до развертывания чат-бота, существует множество вариантов, и одним из наиболее распространенных вариантов использования являются платформы социальных сетей, поскольку большинство людей используют их на регулярной основе. То же самое можно сказать и о приложениях для обмена мгновенными сообщениями, хотя и с некоторыми оговорками.
Telegram — одна из наиболее популярных сегодня платформ обмена мгновенными сообщениями, поскольку она позволяет хранить сообщения в облаке, а не только на вашем устройстве, и может похвастаться хорошей многоплатформенной поддержкой, так как Telegram можно использовать на Android, iOS, Windows и просто о любой другой платформе, которая может поддерживать веб-версию.Создание чат-бота в Telegram довольно просто и требует нескольких шагов, на выполнение которых уходит очень мало времени. Чат-бот может быть интегрирован в группы и каналы Telegram, а также работает сам по себе.
В этом уроке мы создадим бота Telegram, который предоставит вам изображение аватара из Adorable Avatars. Наш пример будет включать создание бота с использованием Flask и его развертывание на бесплатном сервере Heroku.
Для выполнения этого руководства вам понадобится Python 3, установленный в вашей системе, а также навыки программирования на Python.Кроме того, хорошее понимание того, как работают приложения, было бы хорошим дополнением, но не обязательным, поскольку мы рассмотрим большую часть того, что мы представляем подробно. Вам также необходимо установить Git в вашей системе.
Конечно, для этого учебника также требуется учетная запись Telegram, которая бесплатна. Вы можете зарегистрироваться здесь. Также требуется учетная запись Heroku, и вы можете получить ее бесплатно здесь.
Чтобы создать чат-бота в Telegram, вам необходимо связаться с BotFather, который по сути является ботом, используемым для создания других ботов.
Вам нужна команда / newbot
, которая ведет к следующим шагам для создания вашего бота:
У вашего бота должно быть два атрибута: имя и имя пользователя. Имя будет отображаться для вашего бота, а имя пользователя будет использоваться для упоминаний и обмена.
После выбора имени бота и имени пользователя, которое должно заканчиваться на «бот», вы получите сообщение, содержащее ваш токен доступа, и вам, очевидно, потребуется сохранить свой токен доступа и имя пользователя на будущее, так как они вам понадобятся.
В этом руководстве мы будем использовать Ubuntu. Для пользователей Windows большинство команд здесь будут работать без каких-либо проблем, но если у вас возникнут какие-либо проблемы с настройкой виртуальной среды, обратитесь по этой ссылке. Что касается пользователей Mac, это руководство должно работать нормально.
Во-первых, давайте создадим виртуальную среду. Это помогает изолировать требования вашего проекта от глобальной среды Python.
$ python -m venv botenv /
Теперь у нас будет каталог botenv /
, который будет содержать все библиотеки Python, которые мы будем использовать.Идите вперед и активируйте virtualenv
, используя следующую команду:
$ источник botenv / bin / activate
Библиотеки, которые нам нужны для нашего бота:
Вы можете установить их в виртуальной среде с помощью следующей команды pip:
(телебот) $ pip install flask
(Telebot) $ pip установить python-telegram-bot
(Telebot) запросы на установку $ pip
Теперь давайте просмотрим каталог нашего проекта.
.
├── приложение.ру
├── телебот
│ ├── credentials.py
│ | .
│ | вы можете построить свой двигатель здесь
│ | .
│ └── __init__.py
└── ботенв
В файле credentials.py
нам понадобятся три переменные:
bot_token = "Вот ваш токен доступа от BotFather"
bot_user_name = "введенное вами имя пользователя"
URL = "ссылка на приложение heroku, которую мы создадим позже"
Теперь вернемся к нашему app.py и пошагово пройдемся по коду:
# импортировать все
из фляги импорт фляги, запрос
импортная телеграмма
от телебота.импорт учетных данных bot_token, bot_user_name, URL
глобальный бот
глобальный ТОКЕН
TOKEN = bot_token
bot = telegram.Bot (токен = ТОКЕН)
Теперь у нас есть объект бота, который будет использоваться для любого действия, которое мы требуем от бота.
# запустить приложение flask
app = Flask (__ имя__)
Нам также нужно привязать функции к определенным маршрутам. Другими словами, нам нужно указать Flask, что делать при вызове определенного адреса. Более подробную информацию о Flask и маршрутах можно найти здесь.
В нашем примере функция маршрута отвечает на URL-адрес, который в основном представляет собой / {token}
, и это URL-адрес, который Telegram будет вызывать для получения ответов на сообщения, отправленные боту.
@ app.route ('/ {}'. Формат (ТОКЕН), методы = ['POST'])
def response ():
# получить сообщение в JSON и затем преобразовать его в объект Telegram
update = telegram.Update.de_json (request.get_json (force = True), бот)
chat_id = update.message.chat.id
msg_id = update.message.message_id
# Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
текст = обновление.message.text.encode ('utf-8'). decode ()
# только для отладки
print ("получил текстовое сообщение:", текст)
# при первом общении с ботом AKA приветственное сообщение
если text == "/ start":
# распечатать приветственное сообщение
bot_welcome = "" "
Добро пожаловать в бот coolAvatar, бот использует службу http://avatars.adorable.io/ для создания крутых аватаров на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром на ваше имя.
"" "
# отправить приветственное сообщение
бот.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)
еще:
пытаться:
# очистить полученное сообщение от всех не алфавитов
text = re.sub (r "\ W", "_", текст)
# создать ссылку api для аватара на основе http://avatars.adorable.io/
url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
# ответьте фотографией на имя, отправленное пользователем,
# обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
бот.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
кроме исключения:
# если что-то пошло не так
bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)
верни "ок"
Интуитивно понятный способ заставить эту функцию работать — это то, что мы будем вызывать ее каждую секунду, чтобы она проверяла, пришло ли новое сообщение, но мы не будем этого делать. Вместо этого мы будем использовать Webhook, который позволяет боту вызывать наш сервер всякий раз, когда вызывается сообщение, так что нам не нужно заставлять наш сервер страдать во время цикла ожидания сообщения.
Итак, мы создадим функцию, которую нам самим нужно вызывать для активации Webhook Telegram, по сути говоря, что Telegram должен вызывать определенную ссылку при поступлении нового сообщения. Мы вызовем эту функцию только один раз при первом создании бота. Если вы измените ссылку на приложение, вам нужно будет снова запустить эту функцию с новой ссылкой, которая у вас есть.
Маршрут здесь может быть любым; это ты назовешь:
@ app.route ('/ setwebhook', methods = ['GET', 'POST'])
def set_webhook ():
# мы используем объект бота, чтобы связать бота с нашим приложением, которое
# в ссылке, предоставленной URL
s = бот.setWebhook ('{URL} {HOOK}'. format (URL = URL, HOOK = TOKEN))
# кое-что, чтобы сообщить нам, что все работает
если s:
верните "webhook setup ok"
еще:
вернуть "сбой настройки веб-перехватчика"
Теперь, когда все настроено, давайте просто создадим красивую домашнюю страницу, чтобы мы знали, что движок запущен.
@ app.route ('/')
def index ():
возвращение '.'
если __name__ == '__main__':
# обратите внимание на резьбовой аргумент, который позволяет
# ваше приложение должно иметь более одного потока
app.run (поток = True)
Давайте посмотрим на полную версию приложения.py:
импорт ре
из фляги импорт фляги, запрос
импортная телеграмма
from telebot.credentials import bot_token, bot_user_name, URL
глобальный бот
глобальный ТОКЕН
TOKEN = bot_token
bot = telegram.Bot (токен = ТОКЕН)
app = Flask (__ имя__)
@ app.route ('/ {}'. format (TOKEN), methods = ['POST'])
def response ():
# получить сообщение в JSON и затем преобразовать его в объект Telegram
update = telegram.Update.de_json (request.get_json (force = True), бот)
chat_id = update.message.chat.id
msg_id = обновить.message.message_id
# Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
текст = update.message.text.encode ('utf-8'). decode ()
# только для отладки
print ("получил текстовое сообщение:", текст)
# при первом общении с ботом AKA приветственное сообщение
если text == "/ start":
# распечатать приветственное сообщение
bot_welcome = "" "
Добро пожаловать в бот coolAvatar, бот использует службу http://avatars.adorable.io/ для создания крутых аватаров на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром на ваше имя."" "
# отправить приветственное сообщение
bot.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)
еще:
пытаться:
# очистить полученное сообщение от всех не алфавитов
text = re.sub (r "\ W", "_", текст)
# создать ссылку api для аватара на основе http://avatars.adorable.io/
url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
# ответьте фотографией на имя, отправленное пользователем,
# обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
бот.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
кроме исключения:
# если что-то пошло не так
bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)
верни "ок"
@ app.route ('/ set_webhook', methods = ['GET', 'POST'])
def set_webhook ():
s = bot.setWebhook ('{URL} {HOOK}'. format (URL = URL, HOOK = TOKEN))
если s:
верните "webhook setup ok"
еще:
вернуть "сбой настройки веб-перехватчика"
@приложение.маршрут('/')
def index ():
возвращение '.'
если __name__ == '__main__':
app.run (поток = True)
Это последний фрагмент кода, который вы напишете в нашем руководстве. Теперь мы можем перейти к последнему шагу, запустив наше приложение на Heroku.
Нам нужно кое-что, прежде чем мы создадим наше приложение.
Heroku не может знать, какие библиотеки использует ваш проект, поэтому мы должны сообщить ему об этом с помощью файла requirements.txt
— распространенная проблема заключается в том, что вы неправильно пишете требования, поэтому будьте осторожны — чтобы сгенерировать файл требований с помощью pip:
pip freeze> требования.текст
Теперь у вас есть готовый файл требований.
Теперь вам нужен Procfile
, который сообщает Heroku, где запускается наше приложение, поэтому создайте файл Procfile
и добавьте следующее:
Интернет: Gunicorn app: app
Шаг возврата: вы можете добавить файл .gitignore
в свой проект, чтобы неиспользуемые файлы не загружались в репозиторий.
На панели управления Heroku создайте новое приложение. Как только вы это сделаете, он направит вас на страницу Deploy .Затем откройте вкладку Settings в новом окне и скопируйте домен приложения, который будет примерно https://appname.herokuapp.com/
, и вставьте его в переменную URL внутри credentials.py
.
Теперь вернитесь на вкладку Развертывание и выполните следующие действия:
Примечание. Пользователи Windows и macOS могут выполнить действия, описанные здесь.
Войти в Heroku:
$ heroku логин
Обратите внимание, что этот метод иногда застревает в , ожидая входа в систему
, если это произойдет с вами, попробуйте войти, используя:
$ heroku логин -i
Инициализировать репозиторий Git в нашем каталоге:
$ git init
$ heroku git: remote -a {имя-проекта-героя}
Развернуть приложение:
$ git add.$ git commit -m "первая фиксация"
$ git push герой мастер
На этом этапе вы увидите прогресс строительства в вашем терминале. Если все прошло нормально, вы увидите что-то вроде этого:
пульт: -----> Запуск ...
удаленный: выпущена v6
удаленный: https://project-name.herokuapp.com/ развернут на Heroku
удаленный:
удаленный: проверка развертывания ... выполнено.
Теперь перейдите на страницу приложения (ссылка на домен, который вы скопировали ранее) и добавьте в конец ссылки / setwebhook
, чтобы адрес был что-то вроде https: // имя приложения.herokuapp.com/setwebhook
. Если вы видите webhook setup ok
, значит, вы готовы к работе!
Живая версия бота
Теперь у вас есть бот Telegram, работающий круглосуточно и без выходных. Вы можете добавить к боту любую логику, которую хотите, так, например, вы можете сделать своего бота более реалистичным, добавив статус «печатает» и отправив статус фотографии следующим образом:
Следующий фрагмент кода из функции response ()
:
если text == "/ start":
# распечатать приветственное сообщение
bot_welcome = "" "
Добро пожаловать в бот coolAvatar, бот использует сервис из http: // avatars.adorable.io/, чтобы создавать крутые аватары на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром для вашего имени.
"" "
# отправить приветственное сообщение
bot.sendChatAction (chat_id = chat_id, action = "typing")
сон (1.5)
bot.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)
еще:
пытаться:
# очистить полученное сообщение от всех не алфавитов
text = re.sub (r "\ W", "_", текст)
# создать ссылку api для аватара на основе http: // avatars.adorable.io/
url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
# ответьте фотографией на имя, отправленное пользователем,
# обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
bot.sendChatAction (chat_id = chat_id, action = "upload_photo")
сон (2)
bot.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
кроме исключения:
# если что-то пошло не так
bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)
Как вы можете видеть во фрагменте, мы добавили действие ввода, когда мы собираемся отправить информацию о боте в текстовом формате, и добавили действие загрузки фотографии, когда мы собираемся отправить фотографию, чтобы сделать бота больше реалистично.Больше действий можно найти здесь.
Вы также можете изменить изображение и описание бота из канала BotFather, чтобы сделать его более удобным.
Еще много простых примеров телеграмм-ботов можно найти на странице python-telegram-bot на GitHub.
Вы можете развить нашего бота и сделать его следующим супер-ИИ-ботом — все, что вам нужно сделать, это интегрировать свою логику в функцию response ()
. Например, ваша логика может быть в отдельном модуле и может вызываться внутри функции response ()
следующим образом:
.├── app.py
├── телебот
│ ├── credentials.py
│ ├──ai.py
│ | .
│ | вы можете построить свой двигатель здесь
│ | .
│ └── __init__.py
└── ботенв
И внутри ai .py:
def generate_smart_reply (текст):
# здесь мы можем делать всю нашу работу
верните "это умный ответ от ai!"
Импортируйте его сейчас в приложение .py:
импорт ре
от времени импортный сон
из фляги импорт фляги, запрос
импортная телеграмма
С телебота.AI импорт generate_smart_reply
from telebot.credentials import bot_token, bot_user_name, URL
Затем просто вызовите его внутри кода response ()
.
def response ():
# получить сообщение в JSON и затем преобразовать его в объект Telegram
update = telegram.Update.de_json (request.get_json (force = True), бот)
chat_id = update.message.chat.id
msg_id = update.message.message_id
# Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
текст = обновление.message.text.encode ('utf-8'). decode ()
# только для отладки
print ("получил текстовое сообщение:", текст)
# здесь позвони своему умному ответному сообщению
reply = generate_smart_reply (текст)
bot.sendMessage (chat_id = chat_id, text = reply, reply_to_message_id = msg_id)
Теперь ваш бот может работать так, как вы хотите — вперед и создайте следующую большую вещь!
Надеюсь, вам понравилось создавать своего первого бота для Telegram.
Если вы еще этого не сделали, разархивируйте проект внутри папки, затем переименуйте .envExample от до .env (см. позже, если вы работаете в Windows) и отредактируйте следующую строку, вставив свой API-токен , выданный BotFather :
TELEGRAM_TOKEN = ””
Если вы в Windows:
У вас могут возникнуть проблемы с переименованием файла, просто откройте меню «Пуск» и введите «cmd», затем откройте «Командную строку» и выполните следующие действия:
Теперь пришло время проявить творческий подход.
Откройте файл answers.json и давайте взглянем на него.
Здесь хранятся все ответы, легко увидеть структуру, конкатенацию этих «объектов», которые содержат триггеры, и ответы на каждый из этих триггеров.
Конечно, это всего лишь пример с 3 ответами, вы можете получить намного больше.
Давайте проанализируем, как он составлен:
В каждом из ответов есть
В зависимости от типа ответ должен иметь осмысленное значение: в случае, если тип равен audio или image , значение ответа должно быть допустимым путем к файл на вашем компьютере, даже если настоятельно рекомендуется поместить такие носители в папку «media» .
На данный момент протестированы расширения для носителей: «.jpg», «.gif» и «.mp3».
В командной строке введите следующую команду (внутри папки проекта), чтобы загрузить все зависимости, необходимые для бота:
npm install
Мы почти закончили, теперь, когда все настроено, можно наконец запускаем нашего бота. В той же консоли , которую мы использовали для установки всех зависимостей, которые мы должны запустить:
npm start
И это результат
Вы можете заметить, что в консоли есть несколько сообщений [INFO], которые помогут вам сохранить отслеживать, кто использует вашего бота, та же информация хранится в файле, который вы найдете в папке проекта, под названием debug.журнал .
Бот может быть остановлен и повторно запущен без каких-либо проблем
Если вы хотите запустить его на машине без головы, такой как Raspberry, вы можете найти способ, чтобы он не мешал другим приложениям, прочтите мою другую статью о Экран Unix:
Я был одержим научной фантастикой с подросткового возраста, поэтому программирование всегда нравилось мне.Я был очарован идеей, что можно написать программу, которая ведет себя случайным образом — для меня это уже было глубоко в области научной фантастики!
Эта навязчивая идея подтолкнула мои первые набеги на код и привела к появлению множества забавных ботов. Например, тот, который описывает пугающие звуки мест, комбинируя слова наугад, и тот, который раскрашивает PNG в блочные цвета.
Ничего особенного. Я вряд ли мастер-программист, да и вам не обязательно. Имея базовые знания в области программирования и API, вы можете создавать действительно полезные программы для развлечения и получения прибыли.В этом руководстве мы рассмотрим создание бота Telegram с нуля.
Бот Telegram можно использовать с Intercom API, чтобы агенты службы поддержки могли связаться со своими клиентами, использующими Telegram. Он также может включать автоматизацию, которая объединяет полезные ресурсы с живым чатом, как в примере ниже от orat.io:
Telegram — отличный дом для ботов, ориентированных на клиентов, с более чем 200000000 активных пользователей в месяц и ежегодным темпом роста 50%. Это платформа, которую ваша аудитория уже может использовать, что снижает трение и способствует принятию.Кроме того, создавать ботов для Telegram очень просто — это самый простой способ создания ботов, который у меня когда-либо был.
Вот почему я решил написать это руководство — оно могло бы стать хорошей отправной точкой для начинающих программистов, ищущих что-то мгновенно полезное (и потенциально ценное), используя популярную и функциональную платформу.
Первый бот, который я сделал для Telegram, использовал RSS для поиска материалов Hacker News, соответствующих поисковому запросу:
Поиграйте с ботом — он здесь!
Используя знания из этого руководства и немного продолжая чтение, вы можете создать чат-бота поддержки для своей компании, программу чтения RSS-каналов, панель управления для вашего умного дома или бота, который будет отвечать, используя только цитаты Шекспира.Маленькие программные проекты, подобные этому, очень увлекательны и бесконечно расширяемы. Чем больше вы читаете и придумываете функции, тем дальше вы сможете продвинуть своего бота.
Из этого руководства вы узнаете:
Перед запуском вам понадобится:
gem install bundler
в своем терминале, чтобы установить его. Итак, приступим.
Telegram — это преимущественно мобильное приложение, но в целях разработки вы захотите установить его на том же компьютере, который вы используете для написания кода.Таким образом, вы можете быстро протестировать его, не разблокируя телефон каждый раз. И вы сможете скопировать и вставить ключ API своего бота Telegram прямо в текстовый редактор.
Пора получить ключ API!
Создание бота Telegram — новый процесс, потому что большая часть его сосредоточена вокруг вашего собственного взаимодействия с ботом Telegram. Этот бот называется BotFather. В настольном приложении Telegram вам нужно найти его имя пользователя и начать с ним разговор.
Дайте команду запуска BotFather, набрав / start
.
Вы увидите список команд, которые помогут вам создавать, редактировать и управлять ботами. Поскольку это ваш первый раз, вам понадобится / newbot
.
По сравнению с процессом создания бота Twitter, бота Mastodon или любого другого бота, с которым я экспериментировал, Telegram упрощает первоначальную настройку super . Думаю, это доказывает, каким отличным инструментом могут быть боты Telegram!
После подачи команды / newbot
вы можете выбрать имя и имя пользователя для своего бота.Имя — это то, что ваши пользователи будут видеть в списке контактов бота, а имя пользователя — это то, как они его найдут. Думайте об имени пользователя как о дескрипторе Twitter; он должен быть уникальным, и лучше всего, если он будет коротким и запоминающимся.
После этого вам будет предоставлен ключ API вашего бота. Ключ API — это то, как Telegram узнает, что код, который вы пишете, связан с этим конкретным ботом. У каждого бота есть собственный ключ API, и вы не должны делиться им с кем-либо, иначе они могут захватить вашего бота и заставить его совершить свои злые дела.
На этом мы завершаем наш чат с BotFather — по коду!
Откройте терминал и выполните mkdir telegram-bot
. Это создаст новый каталог для файлов вашего бота. Лучше всего хранить их в одной папке, чтобы ими было легко управлять. Перейдите в каталог с cd telegram-bot
, а затем сделайте следующее:
touch Gemfile
touch bot.rb
atom.
Это создает два пустых файла: один для указания необходимых драгоценных камней, а второй — для размещения кода бота.Последняя команда открывает оба этих файла в Atom.
Щелкните Gemfile на боковой панели Atom и вставьте следующее:
источник 'https://rubygems.org' жемчужина 'telegram_bot'
Это указывает Bundler захватить интерфейс Ruby к API Telegram с rubygems.org.
Чтобы завершить настройку драгоценного камня, вернитесь к своему терминалу и введите bundle
. Вот что вы должны увидеть:
Это все, что нужно для настройки драгоценного камня, теперь мы, наконец, переходим к коду.
Фактический код, который будет постоянно работать на сервере, находится внутри bot.rb. Сейчас он пуст, но здесь мы собираемся связать гем Telegram, который мы только что собрали, и создать бота.
Это не так уж и много кода. Когда вы закончите, у вас будет:
В Telegram это то, что делает код выше:
Давайте посмотрим, что делает каждая часть кода, и напишем это по ходу дела.
требует 'telegram_bot' token = 'ТОКЕН' bot = TelegramBot.new (токен: токен)
(замените TOKEN на токен API, который вы скопировали из BotFather)
Ruby позволяет легко угадать, что будет делать код. Три строки выше добавляют функциональность бота Telegram к вашему файлу, а затем создают новый объект бота из класса TelegramBot, аутентифицированный вашим токеном, чтобы программа знала, куда отправлять данные.
Следующая часть — одна большая петля. Сначала это выглядит сбивающим с толку, но его легко разобрать.
bot.get_updates (fail_silently: true) do | message | сообщение | помещает "@ # {message.from.username}: # {message.text}" command = message.get_command_for (бот) сообщение.ответ сделать | ответить | case команда когда / start / i reply.text = "Все, что я могу сделать, это поздороваться. Попробуйте команду / greet." когда / приветствую / я reply.text = "Здравствуйте, # {message.from.first_name}. 🤖" еще reply.text = "Понятия не имею, что означает # {command.inspect}." конец ставит "отправка # {ответ.text.inspect} на @ # {message.from.username} " reply.send_with (бот) конец конец
Первая строка указывает боту продолжать прислушиваться к командам. И, когда он получает команду передать ее в сообщение переменной
. помещает строку
в журнал команды на ваш терминал, чтобы вы могли видеть, что происходит во время работы бота.
Ответные действия бота хранятся в операторе case. Входные данные оператора case проходят через переменную message
после того, как они были очищены методом gem’а get_command_for
.Текст ответа бота устанавливается в зависимости от сохраненной команды, а затем, наконец, отправляется с send_with
до перезапуска цикла.
Теперь вы можете найти своего бота в Telegram, отправить команды / start
и / greet
и посмотреть, как он работает.
Для этого сохраните изменения в Atom и запустите в терминале ruby bot.rb
. Пока этот терминал открыт и работает, ваш бот будет отправлять ответы!
Созданный вами бот хорош, но не очень интересен.Базовые биты есть, а это значит, что вы можете легко поменять их местами и расширить.
При настройке следует обратить внимание на строки when / command / i
и текст между кавычками в строках reply.txt
. Это входные данные, которые принимает ваш бот, и сообщения, которые он отправляет в качестве ответов.
Итак, если вы хотите сказать что-то другое в ответ на команду / greet
, вы должны изменить значение reply.text
под командной строкой greet ( при / greet / i
).Вот вариант, который вы можете попробовать:
когда / greet / i greetings = ['bonjour', 'hola', 'hallo', 'sveiki', 'namaste', 'salaam', 'szia', 'halo', 'ciao'] reply.text = "# {greetings.sample.capitalize}, # {message.from.first_name}!"
Здесь я создал массив с несколькими разными способами поздороваться, а затем произвольно добавил один к сообщению, используя метод sample.
Вы можете добавить к своему боту столько команд, ответов и функций, сколько захотите.По большей части это воображение и поиск в Google по ходу дела. Если вы хотите научиться многому, что применимо к этому боту, начните с «Изучите Ruby на сложном пути», чтобы разобраться в основах языка. Немного попрактиковавшись и положившись на StackOverflow, вы сможете:
Если вам нужно вдохновение, вы можете прочитать исходный код ботов других людей и проверить список ботов Telegram — попробуйте выяснить, как они работают, и воссоздайте их на практике.
Прямо сейчас ваш бот работает в вашем терминале на вашем компьютере. Это нормально, пока вам не понадобится перезагрузить компьютер, когда у вас не отключится Wi-Fi или компьютер не перейдет в спящий режим. Когда это происходит, он завершает работу бота, и пользователи не получают от него ответа.
Процесс перемещения вашего бота из среды разработки (ваш компьютер, на котором вы использовали Atom для написания бота) в производственную среду (сервер) называется развертыванием.Есть несколько вариантов развертывания бота, но в обоих случаях мы собираемся начать с загрузки файлов в Bitbucket. Bitbucket позволяет использовать git, систему контроля версий, которая помогает безопасно вносить и отслеживать изменения в коде вашего бота. Загрузив файлы своего бота в Bitbucket, вы можете использовать Bitbucket как способ получить файлы бота, когда вы вошли в систему.
Зарегистрируйтесь в Bitbucket и создайте новый репозиторий.
Открыв терминал и находясь в том же каталоге, что и исходный код вашего бота, введите следующее:
git init
git add.
git commit -m 'начальная фиксация'
Теперь следуйте инструкциям Bitbucket после создания нового репозитория. Мои:
После ввода этих двух выделенных команд в моем терминале и предоставления моего пароля Bitbucket по запросу файлы загружаются. Поскольку ваш код находится в облаке, пора выбрать способ развертывания.
Raspberry Pi — отличное вложение, если вы планируете создавать и развертывать ботов — вы можете получить его всего за 7 долларов плюс стоимость SD-карты.Он потребляет очень мало энергии, поэтому вы можете держать его включенным все время и не беспокоиться о стоимости. Может возникнуть соблазн купить комплект с клавиатурой, мышью и чехлом, но все, что вам нужно, — это зарядное устройство USB, SD-карта, кабель Ethernet и сам компьютер. Вероятно, большинство из этих вещей уже есть в вашем офисе.
Вам не обязательно владеть компьютером, на котором работает ваш бот, вы можете использовать память и мощность чужой машины для удаленного запуска бота.Популярные решения для развертывания в облаке включают Amazon Web Services (AWS), DigitalOcean и Heroku.
Из трех наиболее начальным уровнем являются DigitalOcean и Heroku. Щелкните здесь, чтобы получить учетную запись DigitalOcean с 10 долларами на счете — этого достаточно, чтобы запустить сервер в течение двух месяцев, пока вы его тестируете.
Когда вы зарегистрируетесь в DigitalOcean и создадите новую дроплет, вы узнаете, как подключиться к серверу через SSH и запустить консоль.
Отсюда это тот же процесс, что и на локальном компьютере, независимо от того, какой сервер вы используете.В конце концов, это просто терминал bash. Установив какой-то сервер, давайте перейдем к фактическому развертыванию.
На новом сервере — будь то Raspberry Pi или облачный сервер, такой как Digital Ocean — вам нужно будет установить Ruby, Bundler и Git:
sudo apt-get update
sudo apt-get upgrade
curl -L https://get.rvm.io | bash -s stable --ruby
sudo apt-get install bundler
sudo apt-get install git
Затем создайте новый каталог для своего бота, перейдите в него и загрузите файлы из Bitbucket с помощью следующих команд:
mkdir-ботов
cd-ботов
git clone https: // [электронная почта защищена] / benjbrandall / telegram-bot.git
Не забудьте заменить приведенный выше URL (https: // benjbran…) на URL-адрес репозитория вашего бота на Bitbucket. Вы найдете всю команду клонирования через Bitbucket, поэтому вам не придется делать это вручную.
Затем введите bundle
, чтобы установить зависимости гема, а затем ruby bot.rb
, чтобы запустить бота постоянно.
Примечание. Если вы подключаетесь к серверу через SSH, вам необходимо запустить бот с помощью робота nohup ruby.rb &
, чтобы бот не прекращал работу после завершения сеанса SSH. Теперь вы можете закрыть окно терминала, зная, что ваш бот тихонько издает звуковой сигнал в фоновом режиме. 🤖
На этом ваш первый удар по боту Telegram завершен. Попутно вы узнали о терминале, Ruby, драгоценных камнях, API Telegram и о том, как развернуть бота на сервере. Есть вопросы или предложения? Вы можете написать мне в Twitter.
Сначала вам нужно сообщить Telegram, что вы хотите зарегистрировать бота. Для этого отправьте BotFather команду / newbot
. Вы получаете обратно жетонов
. Мы будем использовать его в нашем коде для аутентификации нашего приложения на серверах Telegram. Смотрите скриншот ниже. Храните свой токен в надежном месте — , т. Е. , не передавайте его в вашу систему контроля версий.
Чтобы дважды проверить работу создания бота, вы можете запросить конечную точку / getMe
API Telegram.
Вы дали своему боту крутое изображение профиля, а также точное описание того, что он делает? Милая! Теперь давайте рассмотрим, как реализовать поведение вашего бота для взаимодействия с пользователями.
Следующим шагом является реализация бизнес-логики, которая должна выполняться всякий раз, когда пользователь взаимодействует с вашим ботом.
Прежде чем сразу перейти к коду, давайте посмотрим, что происходит, когда пользователь взаимодействует с вашим ботом в Telegram.
Telegram — это облачная служба обмена сообщениями. Когда вы отправляете кому-то сообщение в Telegram, серверы Telegram получают ваше сообщение и отправляют его в соответствующий чат. См. Мой GIF ниже:
Упрощенное представление об облачной природе службы обмена сообщениями Telegram. Анимированная версия.В двух словах: вы отправляете сообщение, затем серверы Telegram отправляют его в соответствующий чат, теперь ваш друг может его увидеть.Ваш друг отправляет ответ, который обрабатывается серверами Telegram для передачи ответа в чат.
Статическая версияОбмен сообщениями на основе облака позволяет вам получать доступ к чату с разных устройств. Опираясь на предыдущие концепции, давайте посмотрим, что происходит, когда вы отправляете сообщение боту в Telegram.
Всякий раз, когда вы отправляете сообщение боту, Telegram уведомляет URL-адрес веб-перехватчика о том, что для вашего бота доступно обновление. Затем ваш обработчик обрабатывает запрос пользователя и отправляет ответ в Telegram.В конечном итоге Telegram доставляет ваш бот-ответ пользователю. Взгляните на GIF-изображение ниже, чтобы получить представление:
Что происходит, когда вы отправляете сообщение боту Telegram (упрощенно), шаг за шагом. Взаимодействие с пользователем <—> ботом, статическая версия.Теперь вы получили важные концепции. Давайте начнем. Мы настроим веб-перехватчик, как только будем готовы к развертыванию нашего обработчика ботов.
Задача обработчика
— обрабатывать входящие обновления Update
из Telegram API.Помните, что каждый раз, когда пользователь отправляет вашему боту сообщение, веб-перехватчик доставляет обработчику
обновление Update
из Telegram.
Telegram Обновление
может содержать различную информацию: текстовое сообщение, голосовое сообщение, видео или документ, и многие другие. В этой статье мы увидим, как обрабатывать текстовые сообщения. Не стесняйтесь исследовать другие варианты с помощью бота для аудио, видео или обработки документов!
Поскольку область действия обработчика
в основном предназначена для обработки ответов и выполнения запросов API, язык программирования Go является идеальным инструментом.
Telegram Обновление
может быть намекающим объектом со всеми его полями. К счастью, мы можем представить это с помощью более простой структуры в Go для решения нашего варианта использования:
Аналогичным образом мы определяем структуру сообщения:
Облегченная структура сообщения Telegram в Go.И, наконец, структура чата:
Облегченная структура чата Telegram на Go. С этими тремя структурами; Update
, Message
и Chat
, мы готовы обрабатывать сообщения наших пользователей.
Вы заметили `json:" something "`
справа от каждого поля структуры. Это указывает декодеру JSON, как анализировать входящий запрос Telegram в соответствующую структуру. Например, `json:" update_id "`
в структуре Update
указывает декодеру JSON искать ключ с именем update_id
и устанавливать соответствующее значение для атрибута UpdateId
нашей структуры Go Update.
Теперь мы можем легко декодировать входящий запрос, содержащий обновление из Telegram.
Теперь, когда мы проанализировали запрос, мы можем получить доступ к Message.Text
и сделать некоторую магию. Пришло ваше время здесь сиять; теперь вы можете разработать функции, которые делают вашего бота выдающимся.
Ниже приведен пример бота RapGeniusBot, который генерирует тексты рэп-музыки на основе Message.Text
входящего обновления Update
. Основная функция моего обработчика:
Для подробностей реализации каждой функции полный код RapGeniusBot доступен в моем репозитории.
Хорошо, теперь, когда вы выполнили некоторую обработку на основе значения сообщения, вы готовы отправить сообщение обратно в чат. Давайте увеличим масштаб функции sendTextToTelegramChat
, чтобы увидеть, как мы можем это сделать:
Сосредоточьтесь на строках с 5 по 10. Здесь мы отправляем наше сообщение в чат, отправляя запрос POST на явную конечную точку
/ sendMessage
для API Telegram. Для этого вам необходимо пройти аутентификацию с помощью токена бота
, который BotFather предоставил вам во время создания бота.
Подведем итоги; Теперь у вас есть функция обработчика, которая выполняет всю обработку,
Update
, таким как Message.Text
, для выполнения некоторого преобразования, например генерации тексты рэп-музыки на примере RapGeniusBot. Сейчас отличное время, чтобы добавить несколько тестов, чтобы убедиться, что ваш обработчик работает должным образом.Например, мы можем проверить, что наш обработчик правильно анализирует входящие запросы Telegram. Это довольно просто, используя пакет net / http / httpest
в Go. Запишем наш тест в отдельный тестовый файл, например parse_update_test.go
.
Хотите написать больше тестов, чтобы убедиться, что все работает должным образом? Telegram проделывает фантастическую работу, предоставляя разработчикам образцы JSON обновления для использования в наших тестовых примерах. Обязательно ознакомьтесь с их документацией, чтобы создать надежный обработчик.
Отлично! Весь этот код прекрасно живет на нашей машине. Давайте развернем обработчик
и сделаем вашего бота доступным в Telegram.
Не волнуйтесь; вы уже готовы на 95%. 😉
Две возможности:
Если вы узнаете себя в 1., Telegram предлагает подробную документацию о том, как настроить веб-перехватчик.
Я сосредоточусь на варианте 2. Мы будем использовать облачного провайдера, чтобы развернуть наш обработчик как услугу, то есть вам выставят счет только тогда, когда ваш обработчик действительно использует ресурсы. Учитывая характер механизма push-уведомления о веб-перехватчике, с вас не взимается плата, если ваш бот не используется, что хорошо по сравнению с постоянно включенным сервером. Недостатком является потенциально более высокое время отклика. Когда обработчик вызывается впервые за некоторое время, холодный запуск может занять несколько секунд.
Все основные облачные провайдеры предоставляют услугу «функция как услуга»: облачная функция в Google Cloud, AWS Lambda и функция Azure в MS Azure.
Выберите оружие по своему усмотрению. Я продолжаю использовать облачную функцию Google.
В консоли Google Cloud сначала выберите проект (создайте его, если вы новичок в Google Cloud). Затем нажмите в верхнем левом меню гамбургера и найдите Cloud Function .
Найдите функцию Cloud в разделе вычислений.Затем нажмите кнопку «Создать функцию».
Теперь давайте завершим некоторую информацию о конфигурации;
телеграмма-бот-обработчик
. Прокрутите еще немного, и вы сможете отправить исходный код для выполнения при вызове функции;
HandleTelegramWebHook
. Теперь щелкните «Переменные среды, сеть, таймауты и многое другое».
Появится набор параметров, настройте Регион и Тайм-аут в соответствии с любыми вашими требованиями.
И последнее, но не менее важное: установите переменную среды, которая нужна вашему коду. Вам нужно, по крайней мере, установить TELEGRAM_BOT_TOKEN
, которое BotFather дал вам в части 1.
Нажмите «создать». Ваша облачная функция будет готова через несколько секунд.
Теперь перейдите на вкладку «Триггер» вновь созданной облачной функции и скопируйте URL-адрес для вызова вашей функции.Мы скажем Telegram отправить Update
на этот URL-адрес при определении веб-перехватчика на следующем шаге.
Вот и все; вы закончили со своим облачным провайдером! Осталось только настроить URL-адрес веб-перехватчика вашего бота Telegram.
Последний шаг!
Теперь, когда мы создали нашу облачную функцию, нам нужно зарегистрировать ее URL-адрес в качестве URL-адреса веб-перехватчика Telegram. Таким образом, Telegram может отправить Update
для нашего бота по URL-адресу, который прослушивает наш обработчик
.
Это 3 строки в вашей оболочке.
В ответ от Telegram API вы получите красивый {«ok»: true, «result»: true, «description»: «Webhook was set»}.Поздравляем, ваш бот готов! 🔥👏
Пообщайтесь с ним в Telegram и поделитесь с друзьями. К этому моменту вы создали потрясающего бота Telegram. Напишите комментарий о своем боте; Не могу дождаться, чтобы увидеть интересные вещи, которые вы разработали!
.
Об авторе