Пишем «ТамТам»-бота на Node.js с использованием библиотеки node-tamtam-botapi

Недавно у мессенджера «ТамТам» появилось Bot API. Разработчики предоставили библиотеку для работы на Java. Позже появились сторонние библиотеки на Kotlin и Python, а для Node.js модулей для работы с Bot API не было. Так я решил написать свою библиотеку node-tamtam-botapi.

В этой статье я опишу пример работы с библиотекой и создание простого бота, который будет отправлять приветственное сообщение в ответ на любой текст. Статья по самой библиотеке выйдет отдельно, сам проект еще находится на стадии beta-версии.

Исходные данные:

  • документация — TamTam Bot API;
  • сервер на Heroku — tutorial (простой в развертывании и бесплатный облачный сервис);
  • исходный код библиотеки — Node.js TamTam Bot API;
  • пакет npm — node-tamtam-botapi;
  • данные от Bot API будем получать по WebHook.

Установка модуля:

npm install --save node-tamtam-botapi

Подключение необходимых модулей:

const TamTamBot = require('node-tamtam-botapi'); const express = require('express'); const bodyParser = require('body-parser');

Создание бота и получение токена происходит через @PrimeBot в «ТамТам». Версия Bot API на момент написания статьи — 0.1.8.

Установка параметров бота:

const config = { token: process.env.TOKEN || 'YOUR_GENERATED_TOKEN', host: 'https://botapi.tamtam.chat', version: '0.1.8' };

Инициализация бота:

const bot = new TamTamBot(config);

Подготовка сервера для принятия данных:

const app = express(); const PORT = process.env.PORT || 3000; app.use(bodyParser.json());

Чтобы получать данные по WebHook, нам необходимо выполнить метод subscribe:

const appName = process.env.HEROKU_APP_NAME || 'HEROKU_APP_NAME'; const path = process.env.HEROKU_APP_PATH || 'HEROKU_APP_PATH'; //тело запроса метода subscribe const subscribeBody = { url: `https://${appName}.herokuapp.com/${path}` }; // выполняем метод для подписки бота на WebHook bot.subscribe(subscribeBody);

После выполнения метода subscribe будем обрабатывать получаемые данные следующим образом:

app.post(`/${path}`, (req, res) => { // Для обработки данных получаемых через WebHook // необходимо вызывать метод bot.webhookUpdateTypeHandler bot.webhookUpdateTypeHandler(req.body); // для корректной обработки запроса // в ответ отправляем success: true res.send({ success: true }); });

Важно. Если бот подписан на получение данных по WebHook, он не сможет получать данные по long polling.

Запуск сервера:

app.listen(PORT, () => { console.log(`Express server is listening on ${PORT}`); });

Подготовка закончена, теперь начнём заниматься обработкой запросов и отправкой сообщений. Для начала создадим тело запроса для отправки сообщения:

const message = { text: 'Hello! this is a test message' };

Для обработки сообщений от пользователей подпишемся на событие 'message_created'. Каждый раз, когда будет приходить сообщение от пользователя, будет вызываться следующий метод:

bot.on('message_created', update => { });

Далее в этом методе будем вызвать 'sendMessage' для отправки сообщений. В нем есть три параметра:

  • user_id {Number} - optional;
  • chat_id {Number} - optional;
  • body {Object}.

При вызове метода необходимо указать один из параметров user_id или chat_id. При получении update мы можем получить chat_id следующим образом:

update.message.recipient.chat_id

В итоге получается:

bot.on('message_created', update => { bot.sendMessage(undefined, update.message.recipient.chat_id, message); });

На данный момент это все. Исходный код бота можно посмотреть в Readme в Node.js TamTam Bot API.

Если возникнут вопросы, пишите мне в «ТамТам».

0
4 комментария
Вячеслав Григорьев

Зачем писать бот для ботов?(пользователей ТамТам)

Ответить
Развернуть ветку
Артем Акулов

Чтобы хоть кто-то там общался. Нужно же перед инвесторами оправдываться ростом аудитории, к-вом отправленных сообщений в день и тд.

Ответить
Развернуть ветку
Илитный Иксперт

Дизлайк не глядя

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
1 комментарий
Раскрывать всегда