Создание Slack-бота с помощью Node.js и SlackBots.js

Зачем создавать Slack- бота?

Есть много причин создать бота для Slack. Вот несколько из наиболее убедительных:

· Ваша команда пытается достичь чего-то конкретного с помощью Slack, и вы хотите упростить им задачу.

· Вы определили конкретный сервис, который может принести пользу сообществу Slack, но он пока недоступен.

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

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

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

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

Командная работа в Slack происходит в каналах - едином месте для обмена сообщениями, инструментами и файлами - помогая всем экономить время и сотрудничать.

Одна из замечательных функций Slack - это приложения Slack , интеграции и боты Slack.

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

Если вы уже используете Slack, вы должны быть знакомы с некоторыми творческими ботами Slack, такими как Standupbot, Birthdaybot и другими.

В данной инструкции приведено создание вашего первого бота Slack от начала до конца с помощью Node.js и SlackBots.js.

SlackBot Описание

Мы собираемся создать простой Slackbot, который отображает случайные вдохновляющие цитаты технических специалистов и шутки для разработчиков / дизайнеров.

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

Предпосылки

Мы создадим этого бота с помощью Node.js и SlackBots.js. Вам не нужно знать, как писать Node.js, так как я вас расскажу. Тем не менее, знать, что это преимущество. Вы также должны иметь

  • Базовые знания JavaScript
  • ES6 JavaScript
  • Рабочее пространство Slack
  • Некоторый опыт работы со Slack
  • Некоторые навыки управления версиями

Среда установки

Давайте сначала настроим и установим Node.js и Npm.

  • Загрузите узел здесь . Если он у вас уже установлен, пропустите этот шаг. Если вы предпочитаете использовать для установки диспетчер пакетов, прочтите это для всех операционных систем.
  • Проверьте, установлен ли у вас Node

node -v

  • Node.js поставляется с Npm, поэтому вам не нужно устанавливать его снова.

npm -v

Теперь, когда у нас есть установка Node.js, давайте инициализируем наш проект.

Создайте каталог своего проекта (я назвал свой Slackbot) и инициализируйте git:

git init

Далее создайте index.jsфайл:

touch index.js

И инициализируем Npm:

npm init

Просто ответьте на все последующие вопросы. Если у вас возникли проблемы, вот мои собственные package.json:

{"name":"slackbot","version":"1.0.0","description":"A simple Slackbot that displays random inspiring techie quotes for developers/designers.","main":"index.js","scripts":{"start":"index.js"},"repository":{"type":"git","url":"git+https://github.com/BolajiAyodeji/slackbot.git"},"author":"Bolaji Ayodeji","license":"MIT","bugs":{"url":"https://github.com/BolajiAyodeji/slackbot/issues"},"homepage":"https://github.com/BolajiAyodeji/slackbot#readme"}

Установить зависимости

Теперь давайте установим и настроим все необходимые библиотеки.

SlackBots.js

SlackBots.js - это библиотека Node.js для удобной работы с Slack API.

npm install slackbots

В index.js:

const SlackBot = require('slackbots');

Axios

Axios - это HTTP-клиент на основе обещаний для браузера и node.js. Если вы знаете Fetch или AJAX, это просто библиотека, которая делает то же самое с более крутыми функциями. Вы можете увидеть их здесь.

npm install axios

В index.js:

const axios = require('axios')

Nodemon

Чтобы запустить скрипт в Node.js, вам нужно запустить node index.js. Каждый раз, когда вы вносите изменения в этот файл, вам придется перезапустить его node index.js. Это отстой, когда вы вносите столько изменений, как мы. Вот почему нам нужен nodemon, инструмент, который помогает разрабатывать приложения на основе node.js путем автоматического перезапуска приложения node при обнаружении изменений файлов в каталоге.

npm install -g nodemon

В package.jsonнайдите раздел скриптов и добавьте новый стартовый скрипт:

"scripts": { "start": "node index.js" }

Если вы запустите npm start, файл запустится, но не перезапустится при изменении. Чтобы исправить это, используйте nodemon, который мы установили, вместо node, например:

"scripts": { "start": "nodemon index.js" }

Dotenv

Я не буду подробно объяснять это. Через несколько дней я опубликую статью о переменных среды, а пока просто знайте, что мы используем это, чтобы скрыть секретные ключи и токены, такие как токен доступа Slack, который мы будем использовать. Таким образом, вам не нужно отправлять секретные ключи в GitHub.

Есть несколько способов сделать это, но я предпочитаю использовать dotenv. Dotenv - это модуль с нулевой зависимостью, который загружает переменные среды из файла .env в process.env.

npm install dotenv

В index.js:

const dotenv = require('dotenv') dotenv.config()

После установки вы package.jsonдолжны выглядеть так:

{"name":"inspireNuggetsSlackBot","version":"1.0.0","description":"A simple Slackbot that displays random inspiring techie quotes and jokes for developers/designers.","main":"index.js","scripts":{"start":"nodemon index.js"},"repository":{"type":"git","url":"git+https://github.com/BolajiAyodeji/inspireNuggetsSlackBot.git"},"author":"Bolaji Ayodeji","license":"MIT","bugs":{"url":"https://github.com/BolajiAyodeji/inspireNuggetsSlackBot/issues"},"homepage":"https://github.com/BolajiAyodeji/inspireNuggetsSlackBot#readme","devDependencies":{"dotenv":"^8.0.0"},"dependencies":{"axios":"^0.19.0","slackbots":"^1.2.0"}}

Создайте свое рабочее пространство Slack

Теперь, когда все это настроено, нам нужна рабочая область Slack для запуска нашего бота в разработке. Создать рабочее пространство довольно просто, прочтите это, чтобы узнать больше.

Зарегистрируйте своего Slack Bot

Теперь, когда у вас есть рабочая область, у вас должен быть URL-адрес Slack с именем вашей рабочей области. Моя есть mekafindteam.slack.com.

Теперь вам нужно создать приложение Slack. Создайте его здесь .

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

Теперь вы увидите настройки> страница с основной информацией. Щелкните первую вкладку Add features and functionality:

Поскольку мы создаем бота, выберите поле Bots .

Теперь вы увидите страницу пользователя бота:

Щелкните Add a Bot Userкнопку.

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

Теперь переключите Always Show My Bot as Onlineпереключатель, чтобы ваш бот всегда был в сети. Помните, что этот бот похож на пользователя в вашем рабочем пространстве. После этого нажмите Add Bot Userкнопку.

Сохраните все изменения сейчас:

Затем вернитесь на Basic Informationстраницу и выберите Install your app to your workspaceвкладку.

Щелкните по Install App to Workspace:

Нажмите «Разрешить» и дождитесь перенаправления обратно на Basic Informationстраницу.

Обратите внимание на Manage distributionвкладку: этот раздел необходим, когда вы хотите сделать своего бота доступным для установки другими пользователями. Пока мы только строим разработку, и я не буду рассматривать распространение в этой статье. В моей следующей статье я покажу вам, как развернуть вашего Slack-бота и сделать его доступным как приложение для других рабочих областей.

Если вы сейчас проверите свое рабочее пространство Slack, вы должны увидеть установленное приложение в разделе «Приложения».

Пока он не в сети - как только мы начнем создавать бота, мы включим его.

Настройте своего Slack-бота

Теперь мы создали нашего бота, давайте сделаем некоторые настройки.

Тем не менее, на Basic Informationстранице прокрутите вниз до Display Informationраздела:

Это базовые вещи: просто загрузите логотип, измените цвет фона и добавьте краткое описание.

Ваш значок должен быть 512x512px или больше, а цвет фона должен быть HEX. Подробнее о правилах приложения здесь.

Вот как мой выглядит после настройки:

Токены OAuth для Slack-бота

Теперь, когда у нас настроен бот Slack, давайте возьмем ключи токенов.

На панели навигации найдите раздел Функции и щелкните OAuth & Permissionвкладку:

Вы увидите два токена доступа:

  • Токен доступа OAuth
  • Токен доступа OAuth пользователя бота

Скопируйте токен доступа OAuth пользователя бота.

Это будет меняться каждый раз, когда вы переустанавливаете это приложение или когда вы устанавливаете его в другой рабочей области. Токен должен начинаться с xoxb-.

Вот почему мы установили Dotenv - мы настроим это в следующем разделе.

Создание бота

Теперь создадим нашего бота :).

Во-первых, давайте где-нибудь сохраним наш токен доступа.

Создайте .envфайл и добавьте это:

BOT_TOKEN=YOUR_SLACK_ACCESS_TOKEN_HERE

Теперь приступим к нашему SlackBot.js:

const bot =newSlackBot({ token:`${process.env.BOT_TOKEN}`, name:'inspirenuggets'})

Мы только что создали переменную бота, которая инициализирует новый экземпляр SlackBot, который имеет два значения: наш токен и имя приложения.

Я использовал синтаксис строки шаблона ES6, чтобы ввести ключ токена из нашего .envфайла. dotenv позаботился об этом.

Убедитесь, что вы используете то же имя, которое использовали при создании приложения Slack, иначе у вас возникнут ошибки аутентификации.

Теперь запустите приложение:

npm start

nodemon должен быть запущен сейчас, и наше приложение Slack тоже должно быть в сети.

Обработчик запуска

Наш бот теперь ничего не делает, даже если он работает. Вернем сообщение.

bot.on('start',()=>{const params ={ icon_emoji:':robot_face:'} bot.postMessageToChannel('random','Get inspired while working with @inspirenuggets', params);})

bot.on Обработчик отправляет сообщение приветствия. Мы передали два параметра: 'start'и функцию, которая содержит переменную params, которая также содержит смайлики для слабых мест. У эмодзи Slack есть коды, и вы можете найти их здесь. Я использовал :robot_face:, но вы можете изменить его на свой любимый смайлик.

Мы также инициализировали bot.postMessageToChannelфункцию, которая является методом SlackBot.js, для отправки сообщения в канал. В этой функции мы передаем имя канала, на который хотим отправить сообщение, сообщение в строке и переменную params, которую мы объявили ранее для эмодзи. Я использовал канал #random и отправил Get inspired while working with @inspirenuggetsна него. Ваше приложение должно перезапуститься автоматически, и ваш бот должен сделать это:

Таким образом вы можете отправлять сообщения пользователям и группам.

// define existing username instead of 'user_name' bot.postMessageToUser('user_name','Hello world!', params);// define private group instead of 'private_group', where bot exist bot.postMessageToGroup('private_group','Hello world!', params);

Обработчик ошибок

Также напишем функцию для проверки ошибок и их возврата:

bot.on('error',(err)=>{ console.log(err);})

Обработчик сообщений

Теперь давайте построим основной функционал бота.

Как я уже говорил ранее, мы будем использовать кавычки JSON из расширения, которое я создал, в качестве нашего API котировок. JSON можно найти по этому URL-адресу: https://raw.githubusercontent.com/BolajiAyodeji/inspireNuggets/master/src/quotes.json

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

functionhandleMessage(message){if(message.includes(' help me')){inspireMe()}elseif(message.includes('my answer')){randomJoke()}elseif(message.includes(' help')){runHappiness()}}

Теперь давайте создадим три необходимые нам функции

help me()

Наш демонстрационный JSON на самом деле не API, это просто JSON, который я использовал в расширении Chrome. Мы получаем к нему доступ только из необработанного содержимого GitHub. Вы можете использовать любой API, который вам нравится, вам просто нужно будет выполнять итерацию по-разному, чтобы получить ваши данные, в зависимости от того, возвращает ли ваш API массив или объект - что бы он ни вернул, это не имеет большого значения.

functionhelpMe(){ axios.get('https://raw.githubusercontent.com/BolajiAyodeji/inspireNuggets/master/src/quotes.json').then(res=>{const quotes = res.data;const random = Math.floor(Math.random()* quotes.length);const quote = quotes[random].quote const author = quotes[random].authorconst params ={ icon_emoji:':male-technologist:'} bot.postMessageToChannel('random',`:zap: ${quote} - *${author}*`, params);})}

Мы просто использовали Axios для получения файла JSON, который возвращает некоторые данные:

[{"number":"1","author":"Von R. Glitschka","quote":"The client may be king, but he's not the art director."},{"number":"2","author":"Frank Capra","quote":"A hunch is creativity trying to tell you something."}, . . . .]

Этот JSON в настоящее время содержит 210 цитат, и я часто их обновляю. Итак, мы хотим получать случайную цитату плюс имя автора каждый раз, когда пользователь ее запрашивает. Из нашего ответа Axios мы просто делаем это:

const quotes = res.data;const random = Math.floor(Math.random()* quotes.length);const quote = quotes[random].quote const author = quotes[random].author

И так же, как мы сделали с приветственным сообщением, мы просто возвращаем цитату и автора вместо строкового сообщения:

`:zap: ${quote} - *${author}*`

Давайте проверим это:

Тип @helpnuggets help me

Ура! Это сработало!

PS: Вы всегда можете изменить тип смайлика для каждого запроса. Если вы заметили , что я изменил helpMe()в:male-technologist:

Теперь протестируем команду:

Теперь все работает нормально, поздравляем! Вы только что создали свой SlackBot.

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

Вы можете создать бота, который:

  • Извлекает ваши задачи откуда-то и напоминает вам, когда вы печатаете hey what next,
  • Приветствует каждого пользователя на вашем рабочем месте.
  • Предоставляет вам обновления футбольных матчей, пока вы работаете,
  • Сообщает вашей команде, когда вы достигаете определенного рубежа в количестве зарегистрированных пользователей,

и многое другое ...

Речь идет только о том, откуда взять данные, и о некоторых базовых навыках итерации и bot.postMessageToChannel()методе.

Автоматизация - это то, чему мы должны научиться, как разработчики. У нас много работы, поэтому мы должны автоматизировать более простые задачи, чтобы у нас было время для более сложных. Я надеюсь, что с этим вы сможете автоматизировать свои задачи, и я с нетерпением жду творческих идей, которые вы воплотите в жизнь.

22
Начать дискуссию