Slack, без сомнения, является широко распространенным инструментом обмена сообщениями. Он использовался в компаниях, начиная от стартапов и заканчивая Fortune 1000. Slack предлагает различные функции, такие как интеграция, группы, приватный чат и боты.

Боты — одна из захватывающих возможностей Slack для разработчиков. Slack предлагает SDK, которые мы можем интегрировать в различные языки программирования.

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

Скачать код

Предпосылки

Вам необходимо установить Slack на вашем компьютере и рабочее пространство Slack, прежде чем продолжить работу со статьей. Настроить Slack и рабочее пространство очень просто. Просто перейдите на страницу загрузки Slack и загрузите последнюю версию.

В вашей системе должна быть установлена ​​последняя версия Node.js.

О Nodejs

Nodejs — это среда выполнения JavaScript, которая позволяет нам выполнять JavaScript на сервере. Nodejs поставляется с асинхронным вводом-выводом и однопоточной системой выполнения, которая позволяет программистам писать код без взаимоблокировок и увеличивает пропускную способность ввода-вывода всей системы.

Читайте также: Узнайте все о Node!

Короче говоря, менеджер пакетов Node или NPM — это менеджер пакетов для Nodejs. Благодаря NPM Nodejs стал экосистемой и используется фронтенд- и бэкэнд-командами для разработки приложений.

Перейдите на официальный сайт Node.js и загрузите последнюю стабильную версию на свой компьютер.

О Slack

Изначально Slack задумывался как инструмент для совместной работы, но благодаря платформе разработчиков Slack он превратился в полноценную экосистему.

Slack позволяет разработчикам создавать ботов, которые работают поверх Slack. Боты большинства компаний, таких как Google, Pinterest, доступны в каталоге приложений Slack, репозитории слабых ботов.

Создание Slack Bot и получение ключей API

Перейдите на страницу разработчиков Slack и зарегистрируйте свое приложение. Нажмите здесь, чтобы создать новое приложение в реестре разработчиков Slack.

Введите имя своего приложения и выберите рабочую область.

После того, как ваше приложение будет создано, Slack попросит вас выбрать различные функции. Выберите функцию Боты.

Завершите создание своего приложения. После этого нажмите кнопку OAuth и разрешение и аутентифицируйте свое приложение. После аутентификации будут сгенерированы токены приложения. Мы будем использовать эти значения в нашем коде.

Прежде чем двигаться дальше, установите приложение в рабочей области. Нажмите Основная информация в меню вкладки настроек, а затем нажмите Установить приложение в рабочую область.

Ваше приложение должно отображаться в Slack вот так.

API обмена валюты

Теперь у нас есть готовый бот со всеми токенами, которые нам нужны для вашего кода. Перед этим нам нужна система, которая может получать данные об обмене валюты в реальном времени в простом формате JSON.

Я собираюсь использовать для этого currencylayer.com. Они предлагают действительно отличный и простой в использовании API для получения данных обмена в реальном времени.

Дополнительные материалы: Базовые HTTP-вызовы с использованием Node.js

Перейдите на веб-сайт валютного слоя и создайте свою учетную запись. После создания учетной записи скопируйте ключ доступа. Мы будем использовать его для вызова API уровня валюты и получения последней информации об обмене валюты в простом формате JSON.

Создание приложения NodeJS для связи с ботом

Нам нужно написать код для прослушивания команд, поступающих от бота Slack, и, если они совпадают с нашей предопределенной командой, затем вызвать API-интерфейс currencylayer, чтобы получить последние данные об обмене валюты.

Предопределенная команда будет отчет. Поэтому, когда мы вводим отчет в наш слабый бот, он выполняет свою работу, иначе игнорирует.

В простых шагах наш код Node.js должен делать следующее:

  1. Прослушивайте медленные сообщения и отфильтровывайте текстовые сообщения (за исключением медиа-сообщений).
  2. Проверьте, вводит ли пользователь команду report как точное совпадение в сообщении. Мы не хотим, чтобы наш код реагировал всякий раз, когда кто-то вводит отчет в общих сообщениях.
  3. Если пользователь запросил отчет о валюте, наш код должен вызвать API-интерфейс currencylayer и отформатировать ответ.
  4. Наш код должен отправить отформатированный ответ пользователю в виде сообщения Slack.

Хватит говорить, давайте перейдем к коду.

Сначала создайте новый каталог и инициализируйте проект Nodejs с помощью следующей команды.

Затем установите следующую зависимость.

npm i — S slackbots request

Затем создайте файл и назовите его config.js и скопируйте в него следующий код.

module.exports = {
 slack: {
 token: ‘<copy Bot User OAuth Access Token from Slack API dashboard>’,
 channelName: ‘general’ // change it other channel if you want
 },
 currencyLayer: {
 apiKey: ‘<currency layer api key>’,
 apiEndPoint: ‘http://apilayer.net/api/live?access_key=$ACCESS_KEY$',
 sourceCurrency: ‘USD’
 }
 }

Создайте новое имя файла app.js и скопируйте/вставьте в него следующий код.

const SlackBot = require(“slackbots”);
 const request = require(“request”);
 const config = require(‘./config’);
// initialize bot
const bot = new SlackBot({
 token: config.slack.token,
 name: “Currency Bot”
 });
bot.on(“start”, () => {
console.log(“Bot is ready.”);
 });
// event raised when we type something on bot
// on each received message, filter it out
 // the type ‘message’ is classified as a user-generated message
bot.on(“message”, (data) => {
if(data.type===’message’) {
 filterMessage(data)
 }
 })
async function filterMessage(message) {
// when user types report
 if(message.text === ‘report’) {
 let data = await getAllPair();
 let formattedData = “”;
 Object.keys(data.quotes).forEach((singlePair) => {
 formattedData += singlePair;
 formattedData += ‘ : ‘ + data.quotes[singlePair] + ‘\n’;
 })
 postMessage(formattedData)
 } else {
 // further processing can be done
 // such as custom commands
 return;
 }
 }
function getAllPair() {
return new Promise((resolve, reject) => {
 let apiEndPoint = config.currencyLayer.apiEndPoint.replace(‘$ACCESS_KEY$’,config.currencyLayer.apiKey);
 request(apiEndPoint,(error,response,body) => {
 if(error) {
 return reject(error);
 }
 resolve(JSON.parse(body));
 })
 })
 }
function postMessage(message) {
bot.postMessageToChannel(config.slack.channelName, message);
 }

Объяснение кода

Мы сохранили детали нашей конфигурации в отдельном файле с именем config.js. Код, который творит чудеса, находится в файле app.js.

Мы прослушиваем события, предоставляемые Slack API, и каждое сообщение, выполняющее нашу функцию.

У нас есть три важные функции:

1: filterMessage(): В этой функции мы проверяем, ввел ли пользователь нашу команду, т.е. отчет. Если да, то мы собираемся получить данные о валюте с помощью функции getAllPair() и опубликовать данные о валюте в группе Slack с помощью функции postMessage().

2: getAllPair(): в этой функции мы вызываем API-интерфейс currencylayer, чтобы получить последнюю информацию об обмене валюты. Мы используем модули узла запроса, чтобы добиться того же.

3: postMessage(): в этой функции мы отправляем сообщение в группу Slack. Сообщение является нашей информацией об обмене валюты.

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

Если пользователь набрал предопределенную команду, то мы вызовем API уровня валюты, используя наш модуль запросов, проанализируем данные и отправим их обратно в Slack.

Запуск кода

Предполагая, что вы используете общее имя канала, пригласите своего бота на канал, набрав @botname и нажав Enter.

Теперь запустите приложение, используя следующую команду.

Когда на консоли появится сообщение "Бот готов", вот так.

Теперь в Slack выберите своего бота и введите отчет. Вы должны увидеть данные обмена валюты, подобные этому.

Попробуйте еще несколько команд, и он не будет реагировать, потому что мы настроили только команду report.

Развертывание приложения Slack

Мы разработали наше приложение Slack и сервер Node.js. Пришло время показать это миру. Чтобы сделать его общедоступным, нам нужно развернуть приложение Slack и развернуть код Node.js.

Чтобы развернуть приложение Slack, нам нужно отправить его на платформу разработчика Slack. Для этого откройте приложение Slack со страницы slack apps и перейдите в раздел «Управление распространением».

Нам нужно выполнить контрольные списки отправки, и как только все будет завершено, мы можем нажать кнопку «Отправить приложение», и ваше приложение Slack будет запущено. Установите приложение еще раз в рабочей области, чтобы обновить настройки приложения.

Вы можете развернуть приложение Nodejs на платформе Heroku за несколько кликов. После того, как все будет развернуто, вы можете опубликовать URL-адрес своего бота и быть готовым к отзывам и благодарностям.

Вывод

Slack-боты — это очень весело. Мы можем разрабатывать потрясающие приложения, которые помогут нам автоматизировать множество задач во время работы. Например, мы можем запрограммировать бота переполнения стека, который будет искать для нас решение. Мы можем создать простого бота для проверки погоды и многого другого.

Надеюсь, вы изучили некоторые детали разработки бота Slack с использованием Nodejs.

Первоначально опубликовано на codeforgeek.com 9 апреля 2019 г.