Главное Авторские колонки Вакансии Образование
Выбор редакции:
4 990 12 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Как сделать очередного бота в Telegram

Стало модно использовать мессенджеры как платформу для, так называемой, «разговорной коммерции»: теперь помимо смузи и коворкинга уважающий себя стартап должен обзавестись ботом или, как минимум, каналом в телеграмме.
Мнение автора может не совпадать с мнением редакции

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

Зачем бот нам?

Tagvisor — сервис для поиска настоящих отзывов о заведении. Мы агрегируем их по геолокации, хэштегам и из официальных аккаунтов заведений в социальных сетях. Далее ранжируем по популярности (количеству и свежести постов в социальных сетях) и близости к пользователю.Custdev показал, что наша целевая аудитория часто ищет места поблизости с телефона. Не любит просматривать больше 20 вариантов в результатах поиска, хочет сразу видеть отзывы, фото и отметку заведения на карте.Логично было бы выкатить мобильное приложение, но цена разработки и порог входа для потенциального пользователя слишком высок для молодого стартапа. Решили пойти модным путем и в качестве mvp выпустили бота.@TagvisorBot показывает ближайшие к вам заведение по выбранной категории.Как и в десктопной версии сервиса, основным контентом выдачи являются посты из социальных сетей.

Разработка

Для реализации был выбран Node.js и форк для модуля @node-telegram-bot-api, адаптированный для Telegram 2.0. В основном использовали документацию API telegram и модуля node-telegram-bor-api. Для людей, любящих русскую документацию, есть перевод, но он еще в процессе. Также есть группа разработчиков со всей России в самом Telegram ) и в facebook. В группах всегда можно написать вопрос, обычно отвечают в течение пары дней.

Создание

Чтобы создать бота, в первую очередь, постучитесь к @botfather с командой /newbot. Он попросит написать имя бота и его username (которое должно заканчиваться на bot). При создание бота @botfather сообщит http-токеп для api. Команды, начинающиеся с /set, помогут настроить различные параметры бота, такие как имя, описание, аватар, текст в профиль и описание. Все достаточно просто.Для работы бота нужно выбрать режим обновлений: polling или WebHook.
  • в режиме WebHook сервер Телеграма будет отправлять данные вашему боту, каждый раз при поступлении запроса. Это удобный и надежный вариант, а, главное, быстрый, но, к сожалению, этот режим требует https-подключения и сертификата.
  • в режиме polling бот будет сам ходить на сервер Телеграма и забирать новые данные. Этот режим гораздо проще, но реакция бота будет не мнгновенной, а в среднем с полсекундной задержкой. Кроме того, нужно учесть, что иногда бывают сбои в ответе с сервера, поэтому бота следует сделать устойчивым к таким ошибкам.

Запуск бота

Чтобы запустить бота, необходимо подключить пакет и передать боту необходимые данные: токен и режим обновления.

const TelegramBot = require('./lib/telegram.js');

const bot = new TelegramBot(‘YOUR_TOKEN’, {polling: true});

bot.getMe().then(function (me) {

console.log('Hi my name is %s!', me.username);

});

Вызов функции getMe() происходит при успешной авторизации токена бота и выдачи управления программе. При этом в качестве аргумента функция getMe().then() принимает функцию function(me). Ее первым аргументом является объект, с помощью которого можно получить различную информацию о вашем боте и, в данном случае, вывести её в консоль.Далее, чтобы научить бота отправлять сообщения, нужно использовать метод bot.sendMessage(chatId, ‘Hello World!!!’); А чтобы бот понимал входящие запросы, достаточно использовать bot.on('message', function (msg){}). Более подробно методы описаны в документации node-telegram-bot-api.

Красивые кнопочки

Чтобы вместо стандартной пользователь видел inline клавиатуру, необходимо при отправке сообщений передать методу sendMessage ее параметры:

const opt = {

parse_mode: 'markdown',

disable_web_page_preview: false,

reply_markup: JSON.stringify({

inline_keyboard: [

[{text: `Русский ${emoji.get('ru')}`, callback_data:'rus'},

{text: `English ${emoji.get('gb')}`, callback_data:'eng'}]

]

})

}

bot.sendMessage(chatId, 'language?',opt);

Где text — текст на кнопке, callback_data — данные, которые получит бот при нажатии на кнопку.

b_57999815af1d6.jpg

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

bot.on('callback_query', function (msg) {

if (msg.data === 'rus'){

console.log(“Russian”);

}

if (msg.data === ‘eng’){

console.log(“English”);

}

});

Изменение сообщения

Иногда требуется не отправлять заново сообщения, а поправить уже существующее (для удобства отображения данных). Для этого мы решили воспользоваться методом bot.editMessageText(text, opt); где text — измененный текст сообщения, opt — Дополнительные опции для запроса к telegram, такие как наличие клавиатуры, форматирование текста и другое.

b_5799982eecc33.jpgb_57999838e1d05.jpg

Отправка текста и фото в одном сообщении

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

b_57999863466c3.jpgЧтобы телеграм подгрузил картинку в сообщение, необходимо установить параметр disable_web_page_preview: false.

var opt = {

chat_id: chatId,

parse_mode: 'markdown',

disable_web_page_preview: false,

reply_markup = JSON.stringify({

inline_keyboard: [..]

})

}

Для форматирования текста нужно установить параметр parse_mode. Он имеет два значения: markdown и html. При значении markdown используется форматирование вида:

*bold text*

_italic text_

[text](URL)

`inline fixed-width code`

```pre-formatted fixed-width code block```

const text = ‘[текст](url)’;

bot.sendMessage(chatId, text);

Магазин ботов

Чтобы всю эту красоту увидел мир, а не только ваши пользователи, вы можете написать статью на хабр загрузить вашего бота в магазин ботов – storebot.Регистрация и публикация простая – достаточно залогиниться на сайте storebot.met и после «далее-делее-готово» нажать в меню «AddBot». Это вам не модерация в AppStore.

Бонус для самых классных

b_57999872d2444.jpg

Итак, при помощи нашего небольшого туториала вы смогли узнать, как сделать бота в телеграме. Надеемся, он был вам полезен. А если вы крутой разработчик, и все это было для вас очевидным, тогда приглашаем поучаствовать в небольшом челлендже: как мы уже писали выше, у Tagvisor есть еще и десктопная версия, которую мы на днях запустили в тестовом режиме. И тому, кто найдет больше всех багов (в верстке, коде, мобильной-версии), мы организуем доставку трех больших пицц. Найденные баги присылайте на почту bugtracker@tagvisor.com.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
appvelox
Веб-разработка, мобильные приложения Android и iOS
Vladislav Volkov
Почему именно node.js выбрали?
Ответить
Эльвера 46437
Все проекты в компании написаны на node.js, поэтому бота решили так же писать на node.js
Ответить
appvelox
Веб-разработка, мобильные приложения Android и iOS
Vladislav Volkov
Логичное решение)
Ответить
Итан Хант
а какой язык вы посоветуете?
Ответить
appvelox
Веб-разработка, мобильные приложения Android и iOS
Vladislav Volkov
Да вообще выбирать можно, что угодно) Мы вот у себя используем Python 3, выбрали его за приятный синтаксис(это всё, конечно же, субъективно) и обширную стандартную библиотеку.
Ответить
Bogutskiy
Блог о интернет-маркетинге, SMM, SEO, SMO
Влад Богуцкий
Создать бота не слишком сложно на самом деле. Значительно сложнее задача раскрутить этого бота. Необходимо много времени и понимание всех моментов.
Ответить
appvelox
Веб-разработка, мобильные приложения Android и iOS
Князев Юрий
относительно. Это зависит от функций выполняемых ботом.
Ответить
Екатерина К
Нет, значительно сложнее сделать такого бота, эффективность которого была бы выше других способов достичь того же результата.
Ответить
Олег 10909
Потрясающий ответ!
Ответить
Надежда 55274
Есть ли возможность создать в telegram групповой чат с вашим ботом?
Ответить
Эльвера 46437
Интересный вопрос. К сожалению пока нет, но в процессе разработки. Основная проблема это передать боту нужные координаты.
Ответить
Cryptomen 99171
Забыл добавить в подборку!

Эти ребята походу вообще офигели, создали новый канал по крипте и проводят розыгрыши и подарки новым подписчикам) чего только не придумаешь чтоб раскрутится :D

Еще дают платные инсайды бесплатно о молодых монетах с нереальной прибылью!

Оставляю рабочую ссылку, пока не поменяли
https://t.me/joinchat/AAAAAEy3KDyWsNA_WFtPXw

.
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.