Статьи

Создайте Slack-приложение за 10 минут с помощью MongoDB Stitch

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

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

Одна интересная вещь о Slack (а их много) — это его расширяемость. Есть несколько способов расширить Slack. Создание чат-ботов, приложений, которые взаимодействуют со службой связи, и расширение Slack посредством введения дополнительных команд, называемых «командами слеша», которые позволяют пользователям Slack взаимодействовать с внешними службами. В этой статье мы создадим простую команду слеш, которая позволяет пользователям хранить и извлекать данные в и из базы данных MongoDB. Я всегда нахожу в Интернете интересную информацию, которой хочу поделиться с членами моей команды, поэтому давайте создадим приложение, которое мы назовем URL Stash, в котором будут храниться интересные URL-адреса для последующего извлечения с помощью команды Slack slash. Теперь следуйте нижеприведенному видео или пропустите видео и читайте подробности.

Создать Slack приложение

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

Создание Slack-приложения

Вам понадобится команда или экземпляр Slack, где мы сможем установить и протестировать URL Stash. Я собираюсь использовать экземпляр Slack сообщества MongoDB . После того, как мы создали приложение в нашем рабочем пространстве команды, мы можем на мгновение отложить приложение Slack и создать другую половину приложения — приложение MongoDB Atlas Cluster, Database, Collections и Stitch.

Создайте кластер, базу данных и коллекцию Atlas

Сохранение URL-адресов подразумевает, что нам нужно место для их хранения. Для этого примера мы собираемся продемонстрировать, как легко использовать MongoDB Atlas для этого. Мы начнем с входа в MongoDB Atlas, создания кластера , базы данных и коллекции. Вы можете начать бесплатно и создать экземпляр кластера класса M0 . После запуска кластера создайте базу данных и коллекцию с помощью средства просмотра коллекций в Atlas. Я назвал мои exampledb и examplecoll, но вы можете называть свои как угодно. Вам просто нужно убедиться, что вы правильно ссылаетесь на них в функции, которую мы создадим в Stitch в следующем разделе.

Создание базы данных MongoDB Atlas

Создать приложение Stitch

Приложения Stitch связаны с конкретными кластерами, поэтому после создания кластера вы можете щелкнуть Stitch apps в левом меню навигации в Atlas, а затем нажать «Создать новое приложение».

Создание приложения Stitch

Создать сервис

Сервисы в Stitch являются основной точкой интеграции с внешним миром — в данном случае Slack. Давайте создадим HTTP-сервис, который обеспечит точку интеграции между Slack и Stitch.

Нажмите «Службы», «Добавить новую службу», «Нажмите HTTP» и назовите службу. Нажмите Добавить сервис. Затем, на вкладке настроек, назовите входящий веб-крючок чем-то значимым. Я выбрал «слабину», но вы можете назвать это как угодно. Webhook предоставит внешний веб-адрес, который будет подключен к вашему приложению Slack.

Подключив этот URI webhook, вы узнаете, что ваше приложение Slack отправляет определенные детали разговора из Slack в только что созданное вами приложение Stitch.

После того, как вы нажмете «Сохранить», вашему вновь созданному веб-крюку будет присвоен публичный URI, и вы получите возможность редактировать код JavaScript, который будет выполняться при отправке запроса на ваш веб-крючок. Возможно, вы захотите скопировать URL-адрес Webhook, потому что он понадобится вам вскоре, когда мы создадим команду Slack slash.

Настройка Webhook

Здесь происходит волшебство. Всего за несколько минут мы создали интеграцию между Slack и Stitch. Все, что требуется, — это просто настроить конфигурацию (наименование) для вашего сервиса. Давайте обратим наше внимание на код, который мы будем использовать для хранения, и получим URL для наших пользователей Slack.

Сердцем службы Stitch является функция, которая запускается при получении входящего запроса через URL-адрес Webhook. В этом случае мы решили отвечать на запросы POST. В Slack мы отправим данные из команды косой черты через POST в нашу функцию Stitch. Мы оценим текст, который пользователь отправляет как часть команды косой черты, и либо сохраним URL-адрес, либо перечислим существующие URL-адреса, которые ранее были сохранены.

Сердце провисания / стежка

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

/url stash https%3A%2F%2Feditor.sitepoint.com

И поскольку мы хотим, чтобы пользователи могли просматривать ранее сохраненные URL-адреса, мы включим параметр «список»:

/url list

И наконец, поскольку мы хотим, чтобы пользователи могли удалять ранее добавленные URL-адреса, мы включим опцию «удалить»:

/url remove https%3A%2F%2Feditor.sitepoint.com

Имея в виду эти основные команды, давайте напишем некоторый базовый JavaScript для функции внутри нашего сервиса:

 exports = async function (payload) {
   const mongodb = context.services.get("mongodb-atlas");
   const exampledb = mongodb.db("exampledb");
   const examplecoll = exampledb.collection("examplecoll");

   const args = payload.query.text.split(" ");

   switch (args[0]) {
       case "stash":
           const result = await examplecoll.insertOne({
               user_id: payload.query.user_id,
               when: Date.now(),
               url: args[1]
           });
           if (result) {
               return {
                   text: `Stashed ${args[1]}`
               };
           }
           return {
               text: `Error stashing`
           };
       case "list":
           const findresult = await examplecoll.find({}).toArray();
           const strres = findresult.map(x => `<${x.url}|${x.url}>  by <@${x.user_id}> at ${new Date(x.when).toLocaleString()}`).join("\n");
           return {
               text: `Stash as of ${new Date().toLocaleString()}\n${strres}`
           };
       case "remove":
           const delresult = await examplecoll.deleteOne({
               user_id: {
                   $eq: payload.query.user_id
               },
               url: {
                   $eq: args[1]
               }
           });
           return {
               text: `Deleted ${delresult.deletedCount} stashed items`
           };
       default:
           return {
               text: "Unrecognized"
           };
   }
}

Пример функции для слабой службы HTTP в Stitch

Сердцем нашей функции является оператор switch, который оценивает текст, отправленный команде Slack.

Создать команду косой черты

Давайте завершим последний шаг процесса и добавим команду косой черты в наше приложение Slack. Для этого вернитесь в консоль приложения Slack и нажмите «Slash Command».

Creatuing a Slash command

Создание команды косой черты в Slack

Назовите свою команду слеша. Имейте в виду, что вам понадобится захватить URI webhook службы MongoDB Stitch, который мы создали в предыдущем разделе выше. После сохранения этой команды косой черты вы должны выбрать «Установить приложение» в левой навигационной панели в консоли управления приложением Slack.

Installing the Slack app

Установить приложение

Это предложит вам подтвердить свою личность в вашей слабой команде и авторизовать приложение для использования в вашем рабочем пространстве.

Authorizing the app

Авторизовать установку приложения

Как только это будет завершено, ваше приложение почти готово. Вы можете вернуться к своему клиенту Slack, зайти в свой личный канал чата для конфиденциальности, пока вы тестируете, и набрать только что созданную команду Slack slash. Например, «/ url stash http://mongodb.com» . Нажатие Enter отправит команду в Slack, а затем в только что созданное вами приложение Stitch. Вы должны увидеть что-то вроде следующего:

Взаимодействие с приложением

Это так просто, вы создали полностью функционирующий Slack Chatbot или, по крайней мере, команду слеша с несколькими строками кода и без участия серверов!

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