основные понятия для работы с API / Хабр
Всем привет, это первый урок из курса по разработке ботов для Telegram. В данном курсе, мы с вами разберём как создавать ботов для Telegram на PHP. Я расскажу вам как отправлять текстовые сообщения, как отправлять файлы, как получать и обрабатывать сообщения от пользователей и по итогу мы с вами напишем скрипт для быстрого создания бота для Telegram на PHP.
В первом уроке мы с вами рассмотрим основные понятия связанные с API. Я вам расскажу что такое API методы, хуки, покажу на примере Telegram построение URL для создания запросов и расскажу о том как создаются простые API запросы на PHP.
Полный список всех записей курса находится на сайте или в публикациях на Хабр.
Для отправки и получения запросов через API, вам лучше использовать виртуальный хостинг, так как локальный хостинг не сможет получать данные через хуки.
Основные понятия
Давайте рассмотрим основные понятия для работы с API.
API (Application Programming Interface) — это набор способов и правил, по которым различные программы общаются между собой и обмениваются данными.
Метод API — это определённое действие, которое должно выполнить приложение основываясь на полученных данных (отправить сообщение, вернуть список чатов, отправить картинку и т.д.)
Token (токен) — это уникальный ключ бота, необходимый для отправки запросов.
Как отправлять HTTP запросы на PHP
Для отправки HTTP запросов можно использовать функцию file_get_contents(), где в качестве первого главного параметра указывается ссылка. Данная функция отлично подходит для отправки GET запросов, но к сожалению с помощью функции file_get_contents() нельзя отправлять POST запросы и поэтому для отправки POST запросов мы будем использовать библиотеку Curl.
Curl — это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS.
Подробнее о Curl вы можете почитать на моём сайте.
Виды взаимодействия с приложением через API
Существует 2 вида взаимодействия с приложением через API. Первое это от клиента к серверу, а второе от сервера к клиенту. Клиентом в данном случае является ваше приложение (сайт), а в качестве сервера выступает сайт на который вы отправляете запросы (в нашем случае, это Telegram).
API запрос — это способ общения с программой, по средствам отправки данных от клиента — серверу.
Hooks (Хуки) — это способ общения с программой, по средствам отправки данных от сервера — клиенту. То есть при определённых изменениях в программе, сервер (приложение) будет отправлять данные на указанный скрипта клиента.
Документация для работы с API Telegram
Все методы и параметры для запросов вы можете найти в официальной документации Telegram.
Telegram Bot API — https://core.tlgr.org/bots/api
К данному сайту мы будем ссылаться на протяжение всего курса.
Работа с документацией для Telegram
Документация для создания Telegram ботов разделена на несколько разделов.
В разделе Recent changes вы можете найти информацию об обновлениях Telegram. Здесь описаны версии и нововведения которые были внесены в функционал мессенджера.
Разделы Authorizing your bot и Making requests описывают способы авторизации ботов и способы создания запросов для работы с ботами.
Раздел Getting updates описывает способы получения обновлений взаимодействия с ботами. При взаимодействие пользователя с ботов, все его действия, по стандарту, записываются на сервера Telegram, и для того чтобы получить к ним доступ, необходимо отправить запрос getUpdates.
Отправив запрос getUpdates вы можете получить id последнего пользователя который написал боту, узнать его ник, текст сообщения и дату отправки. Если бот добавлен в сообщество, то вы можете получить id сообщества.
В разделе Getting updates так же описаны правила настройки хуков, что позволяет отправлять любые изменения на сервер разработчика. Но об этом мы поговорим позднее, сейчас давайте продолжим знакомство с документацией.
Следующий раздел, который нас интересует называется — Available types. Данный раздел описывает все типы данных которые возвращает нам Telegram. Когда ваш скрипт отправляет запрос, то обработав его, Telegram вернёт вам ответ в формате JSON строки, в котором описаны специальные параметры.
Например если вы отправляете сообщение, то Telegram вернёт вам массив в котором указаны id созданного сообщения, id пользователя, дата создания сообщения и много другое. Все эти данные вы можете разобрать и записать в базу данных.
Далее описан раздел, с которым нам придётся работать больше всего — это Available methods, методы для взаимодействия с ботом. Советую вам пройтись по всем методам и изучить все возможности работы с ботами.
Вкратце скажу что здесь описаны методы для отправки сообщений, файлов, изображений и многое другое. Все методы имеют понятные названия и описанные параметры, что позволяет легко читать документацию, даже без знания английского языка.
Ну и в конце у нас описаны методы для работы со стикерами, играми в Telegram, методы для работы с оплатой в Telegram.
Структура URL для отправки запросов в Telegram
API Telegram имеет простую и понятную структуру урлов для отправки запросов.
Вот пример URL для создания запросов к боту:
https://api.telegram.org/bot{token}/{method}
{token} — это уникальный ключ, который выдаётся при создание бота;
{method} — это метод запроса по которому мы будем получать или отправлять определённые данные. В зависимости от названия метода, мы будем выполнять разные действия.
Примеры URL для запросов
Данные примеры используются только для наглядности построения URL, токен указанный в URL не привязан ни к одному боту!
Вот так выглядит отправка сообщений методом GET. Первая часть URL содержит домен api.telegram.org, далее прописываем строку bot с токеном который нам даётся при создание бота, после чего указываем метод sendMessage и перечисляем GET параметры.
https://api.telegram.org/bot546445612928:AAHjk6643OYgWHim_TICgsaF9NDDVXYnKzA/sendMessage?chat_id=<ID чата>&text=<text>
Отправка файлов в чат выглядит аналогично, только метод sendMessage заменяется на sendDocument. И здесь не перечисляются GET параметры, после указания метода, так как мы отправляем данные методом POST.
https://api.telegram.org/bot543264456928:AAHjk6643OYgWHim_TICgsaF9NDDVXYnKzA/sendDocument
Отправка изображений в чат:
https://api.telegram.org/bot546413456928:AAHjk6643OYgWHim_TICgsaF9NDDVXYnKzA/sendPhoto
На этом знакомство с документацией Telegram заканчивается. В следующем уроке, мы с вами создадим первого бота и попробуем отправить простые запросы.
Второй урок уже на Хабре — https://habr.com/ru/post/697000/
Простой способ создать чат-бот в телеграм за полчаса —
Чат-боты стали неотъемлемой частью нашей жизни: они помогают нам покупать билеты на поезд, отслеживать посылки, быстро получать ответы на вопросы и многое-многое другое.
Но если обобщать, то чат-бот помогает бизнесу решить 2 вида задач:
- Выполнять функции консультанта (отвечать на различного рода вопросы и принимать запросы для дальнейшей работы)
- Выполнять функции информатора (высылать новости, акционные предложения, напоминать о себе, вести по воронке продаж и т.д.)
Основной бонус чат-бота в том, что он собирает аудиторию, с которой в будущем можно взаимодействовать и заниматься допродажами, например. И если в facebook официально запрещено делать акционные рассылки, то чат-бот в телеграм вы можете использовать абсолютно свободно не боясь бана. Поэтому предлагаю создание чат-бота именно в телеграм.
Прежде чем мы перейдем к созданию чат-бота я хотела бы сразу снизить ваши ожидания. Чат-бот хорош для выполнения рутинных задач, выявления потребностей, например. Но не стоит ожидать от него золотой жилы лидогенерации. Люди легко вовлекаются и отвечают на вопросы, а вот контакты свои оставляют не охотно, поэтому отнеситесь к чат-боту, как к дополнительному источнику коммуникации и сбора аудитории, которую позже придется доводить до покупки взаимодействием.
Какой ресурс использовать для создания чат-бота в телеграм?
В этой статье мы рассмотрим создание чат-бота в сервисе sendpulse.ua Основной функционал этого ресурса бесплатный, а интерфейс прост в использовании и интуитивно понятен. Но похожие чат-боты можно создать также на других ресурсах и даже с помощью самого телеграма. Поэтому все зависит только от ваших целей и технических навыков.
Создание бота в телеграме и регистрация
Первое, что необходимо сделать – это зарегистрировать чат-бот в телеграм и подключить его к Sendpulse. Очень подробная инструкция как это сделать есть вот в этой статье – https://sendpulse.ua/ru/knowledge-base/chatbot/create-telegram-chatbot
Обратите внимание, что @BotFather в котором вы создаете ваш чат-бот позволяет его не только создать, но и добавить описание, аватарку и многое другое. Ниже приведу несколько основных команд, которые вам пригодятся для создания чат-бота.
Команда /setabouttext позволяет добавить короткое описание вашего бота, чтобы человек понимал что это за чат-бот и для чего нужен
Команда /setuserpic позволяет добавить аватарку вашего бота
Команда /setname позволяет сменить название вашего бота
Команда /deletebot позволяет удалить ваш бот
Структура чат-бота
После того как вы уже создали свой бот, подключили к ресурсу sendpulse можно переходить к его наполнению и структуре.
Например, ваш бот будет помогать туристам выбирать отели для отдыха в Египте. Для этого составьте список вопросов на которые вы хотите получить ответы.
Это может выглядеть примерно вот так:
- С кем вы планируете путешествие? (варианты ответов: с детьми, с друзьями, любимым человеком)
- Важно ли для вас наличие первой линии? (варианты ответов: да, нет, без разницы)
- Какие отели вы рассматриваете? (варианты ответов: бюджетные, цена-качество, с высоким сервисом)
- Важен ли для вас собственный риф при отеле? (варианты ответов: да, нет)
Когда у вас будет костяк вопросов подумайте о целевом действии, которое человек должен совершить. Например, в данном случае вы хотите не просто рекомендовать отели, а и получить контакты туриста. Для этого продумайте на каком этапе это должно происходить. Например, есть вариант не предлагать туристу варианты отелей, а просто после ответа на вопросы сразу просить оставить контакты. Таким образом вы уже выявляете потребности, но еще не даете конкретных предложений. Или же наоборот, после ответов на все вопросы человек получает варианты отелей, может сам выбрать какой из них ему подходит и в итоге оставить свои контакты, чтобы узнать стоимость.
Возможности чат-бота от Sendpulse
После того как вы зарегистрировали чат-бот, продумали его структуру и определились с целями – пришло время переходить к практической части, а именно созданию чат-бота. Все начинается с “приветственной серии” она запускается как только человек попадает в ваш бот и нажимает кнопку “запустить”.
В “приветственной серии” важно рассказать о возможностях вашего бота и с чем он поможет пользователю, а также побудить к действию идти дальше. Для этого вы можете как написать ему следующее сообщение, так и сразу предложить какой-то выбор и основываясь на его выборе вести его дальше. Вот пример того как может выглядеть структура вашего бота.
Если ваш чат-бот будет выявлять потребности, то не стоит задавать слишком много вопросов 3-5 основных будет достаточно. А вот в финале оставляйте один из элементов не решенным. Например, не давайте варианты отелей, предложите оставить контакты, чтобы получить подборку отелей. Многих это злит, но людям необходима завершенность, поэтому шанс, что контакты все же оставят очень велика.
Дополнительные функции
RSS канал
Кроме основного функционала составления сообщений чат-бота, sendpulse позволяет настроить автоматический постинг в чат-бот через RSS канал. Например, на вашем сайте есть активный блог или акционные предложения, которые постоянно меняются. Вам достаточно настроить RSS канал и они автоматически будут публиковаться в чат-бот.
Оплата услуг в чат-боте
Ваши услуги можно оплатить прямо в чат-боте. Подойдет, например, для каких-то мероприятий или небольших предоплат.
Вебхуки
Если для вас важна интеграция, то Sendpulse позволяет подключить свое API и отправлять вебхуки. Все это доступно в платном тарифе.
Как написать бота для Telegram с помощью Python | Ари Джури, доктор философии
Нет ничего проще, чем
Python + Telegram = выигрышная комбинация! Изображение автораЯ не помню, когда в последний раз сталкивался с человеком, который использует нулевые сервисы обмена сообщениями. Некоторые люди используют WhatsApp или Signal, некоторые используют сообщения Twitter или LinkedIn, третьи снова используют Instagram или TikTok.
У нескольких моих друзей нет социальных сетей, но даже они пользуются старыми добрыми СМС. Обмен сообщениями важен.
У меня на устройствах несколько мессенджеров, но больше всего мне нравится Telegram. Его приятно использовать, вы можете участвовать в больших чат-группах, конфиденциальность довольно хорошо обеспечена, вы можете следить за общедоступными каналами людей и, что лучше всего, он имеет невероятную поддержку GIF-файлов и глупых уловок.
Telegram в основном похож на WhatsApp, но на два года опережает его в плане развития. И это независимо, без вибраций большого технического гиганта, такого как Meta.
Причина, по которой я захотел создать Telegram-бота, была, проще говоря, война в Украине. В Восточной Европе Telegram — самый популярный мессенджер (у этих парней хороший вкус!), и я состою в сети волонтеров и неправительственных организаций, которые помогают гражданским лицам, пострадавшим от войны, получить доступ к основным вещам, таким как еда, медикаменты и психологическая поддержка.
Бот Telegram послужит спасательным кругом для пострадавших людей и поможет нам оптимизировать нашу работу, чтобы то, что им нужно, доставлялось как можно быстрее.
В начале войны мы создали очень простой бот Telegram, который интегрируется с серверной системой поддержки клиентов. Это означало, что все члены нашей команды могли получить доступ к чатам с ботом и работать над тем, чтобы люди получали то, что им нужно.
Поначалу этого было достаточно, потому что ситуация каждого человека была индивидуальной и сложной и требовала немедленного вмешательства человека. Де-факто это был не настоящий бот, а своего рода человеческая система поддержки клиентов.
По мере того как война затягивалась, требования людей становились все более и более схожими. Многие люди нашли безопасное место для жизни, но нуждались в финансовой помощи, чтобы купить еду или отремонтировать свои дома. Это были уже не сложные решения, а относительно простые действия.
И вот инженер во мне проснулся и сказал: Давайте автоматизируем это!
Сначала вам нужно связаться с Telegram BotFather. Если у вас есть учетная запись Telegram, просто найдите BotFather и нажмите 9.0029 /старт . Вот что вы увидите:
Скриншот автора. Затем создается новый бот, как вы уже догадались, /newbot
. BotFather запросит имя для этого бота (которое должно заканчиваться на «бот») и даст вам токен для бота.
Этот жетон представляет собой последовательность букв и цифр, и вы несете ответственность за его сохранность. Любой, у кого есть токен, может управлять ботом, поэтому держите его подальше от посторонних глаз.
Затем с помощью /setdescription
можно установить описание, которое появляется перед тем, как пользователь нажмет /старт
. Он может содержать основные инструкции по использованию бота.
С помощью /setabouttext
можно изменить текст, отображаемый на странице бота. Это как ваша строка статуса Telegram. А с /setuserpic
меняется фото профиля.
Вот так выглядел результат (извините за дерьмовое имя бота, это прототип!):
Скриншоты автора.Как только это будет сделано, можно использовать Python и работать над внутренней логикой бота!
Существует несколько пакетов Python, которые упрощают написание ботов Telegram. Есть пакеты и для других языков. Но Python — мой повседневный язык программирования, поэтому я решил придерживаться его.
Базовая установка
Я выбрал пакет AIOGram просто потому, что мне показалось, что существует достаточно руководств, которые помогут мне начать работу с ним. Другие пакеты могут быть более сложными, но я хотел что-то достаточно простое, чтобы написать базовый код самое большее за пару дней.
После создания нового файла Python я заполнил заголовок фрагментами AIOGram, которые мне понадобятся, и некоторой базовой информацией о боте:
Во-первых, я изменил токен бота в этом файле из соображений безопасности. Я не передаю свой контроль над ботом всему интернету 😯
Элементы AIOGram — это Bot
, который помогает взаимодействовать с Telegram bot API, Dispatcher
, который обрабатывает все сообщения, executor
, который гарантирует, что статус сообщений регулярно проверяется, а вводит
объектов, которые могут нам понадобиться для управления взаимодействием с пользователем.
Среди этих типов
нам понадобится ReplyKeyboardMarkup
, который добавляет пользовательскую клавиатуру для ответов пользователя, и KeyboardButton
, который указывает, какие кнопки будут использоваться в пользовательской клавиатуре.
В принципе, в AIOGram гораздо больше частей и более сложных клавиатур. Также есть обработчик внутренней памяти, который должен работать гораздо эффективнее, чем мой ответов = []
массив, который я начал сохранять ответы пользователей.
Но хотелось написать что-нибудь быстро, а наш бот не засыпается тысячами запросов в день. Так что это то, с чем я собираюсь сейчас.
Внутренняя логика
Многие люди, использующие бота, предпочитают говорить на украинском языке. Итак, первый вопрос, который задаст наш бот, — какой язык он предпочитает. Пользователи могут выбрать язык, например:
Скриншот автора. В моем коде мне нужно создать пользовательскую клавиатуру, показанную выше, и мне нужно сказать боту, чтобы он спрашивал о языке, как только пользователь нажимает /старт
. Вот как это выглядит:
Вы можете увидеть различные кнопки клавиатуры и их сочетание в ReplyKeyboardMarkup
. Параметр resize_keyboard=True
гарантирует, что он всегда будет хорошо выглядеть, а параметр one_time_keyboard=True
гарантирует, что он исчезнет, когда он больше не нужен.
Можно объединить команды .add(lang1).add(lang2).add(lang3)
, чтобы кнопки отображались друг под другом, или можно написать .add(lang1,lang2,lang3)
, чтобы кнопки отображались рядом друг с другом.
Сообщения бота инициируются с помощью message_handler
в декораторе функции. Можно отвечать на команды или на определенные сообщения.
Я также добавил сообщение help
, которое реагирует на команду /help
на тот случай, если пользователь не уверен, что делает, или случайно начал использовать бота.
Если пользователь выбрал английский после запроса языка, мы затем спросим, что ему нужно. Таким образом, нам нужна новая клавиатура, и нам нужен обработчик сообщений, который реагирует на английский
ответ. Вот как это выглядит:
Конечно, то же самое происходит, если пользователь выбирает в качестве языка украинский — разговор будет просто на украинском языке.
Глупые смайлики на кнопках клавиатуры — это не уловка. Во время тестирования я вскоре понял, что вопрос Что вам нужно? появляется каждый раз, когда пользователь может упомянуть English в ответе, сейчас или позже. В худшем случае это заставит бота работать в цикле и сбить пользователя с толку, чего я явно не хочу.
Я подумал, что маловероятно, что пользователь может ответить на английском 👍 в любом ответе, когда он печатает произвольный текст, поэтому это то, что ввело кнопку клавиатуры и регулярное выражение
, которое вызывает вопрос Что вам нужно ?
То же самое для всех других кнопок клавиатуры и триггерных вопросов.
Конечно, для этого есть более элегантные решения, но я хотел быструю и грязную версию, которая работает.
Начиная с этого вопроса и далее, я также сохраняю все ответы в массиве с именем отвечает на
, потому что иногда боту необходимо объединить различные фрагменты информации, предоставленной пользователем, чтобы направить их в нужные НПО, которые удовлетворят их потребности.
Логика продолжается в том же духе (всего скрипт занимает около 600 строк), но я избавлю вас от остального.
Теперь все, что нам нужно сделать, это запустить скрипт. Это так же просто, как ввести
python3 lgbtukraineshitbot.py
в вашем терминале, конечно, заменив мое имя файла на ваше.
Есть только одна проблема. Мой компьютер старый, не всегда имеет оптимальное время отклика, и я выключаю его на ночь. Это не идеально для аварийного бота, который должен быть доступен 24/7.
Вместо этого я развернул бота в облачной службе. Я выбрал Heroku, потому что там мы также работаем с нашим серверным программным обеспечением. Но вы можете использовать любой облачный сервис, который вы предпочитаете.
В Heroku мне нужно создать новый проект, добавить скрипт Python, установить пакет сборки на Python и добавить строку кода выше, чтобы Heroku знал, как запускать скрипт. Я не буду вдаваться в подробности об этом, потому что это зависит от одной облачной службы к другой, и потому что их документация обычно довольно хороша.
Я использую довольно ограниченные возможности бесплатной версии Heroku, потому что это все еще прототип. Так что мой бот по-прежнему не всегда отвечает, как мог заметить любопытный читатель, но это лучше, чем запускать его на моем ноутбуке.
Как только мы внесем эти изменения в наш основной бот, которым пользуются люди, и интегрируем его с нашей серверной системой, у нас будет намного меньше работы — скрипт выполнит все лишние задачи, и мы сможем вмешаться, когда сложность положения человека делает это необходимым. И бот будет более отзывчивым, потому что, в отличие от людей, ему не нужно будет спать и делать перерывы.
Многие люди пользуются мессенджерами, но не так много людей знают, как автоматизировать общение, когда это необходимо.
Это одна из многих привилегий, которыми пользуются разработчики программного обеспечения. Мы взаимодействуем с программным обеспечением так же, как и любой другой человек, но у нас также есть достаточно глубокое понимание этого, чтобы мы могли опираться на него.
Что касается бота, который мы создали в ответ на войну, я надеюсь, что он сэкономит нашей команде много времени и ускорит время, необходимое для получения помощи для наших пользователей.
Это не самый сложный чат-бот, но он выполняет свою работу. Вот что важно.
Когда у меня будет больше свободного времени, я могу построить что-то вроде этого бота для других регионов мира. Украина — не единственная страна, переживающая серьезные бедствия; я думаю о Пакистане, Афганистане и Эфиопии, среди многих других.
Пусть будущее будет быстрым, автоматизированным и полезным.
Станьте участником Medium для полного доступа к моему контенту.
Create a Telegram Bot using Python
0 «Ваша ссылка Gmail здесь (I Am Am Не \
|