使用8base功能创建Slack应用程序

图片

Slack是团队之间内部沟通的绝佳应用程序。 我们可以通过创建和集成聊天机器人并削减允许用户与外部服务进行交互的聊天命令来轻松扩展它的功能之一。 GitHub机器人是一个非常流行且有用的优秀Slack机器人,它在通道上发布有关请求请求,提交和ish的更新。

在本文中,我们将创建一个Slack机器人,该机器人会在我们管理的发明的电子商务平台上创建订单时发布更新。

电子商务平台是使用8base创建的无服务器应用程序。 在本文中,我们将使用8base函数来侦听使用触发器的数据模型中的Create事件。

触发器是响应数据突变事件而触发的一种功能: 创建更新或删除对象。 8base提供了两种类型的触发器,具体取决于开发人员是要在更改数据之前还是之后执行该功能:trigger.before和trigger.after。

您将需要



准备8base环境


创建一个帐户或登录8base 。 对于新帐户,8base提供30天免费访问。

图片
‍2。 登录后,转到数据页面,然后单击“新建表”以开始配置后端。
图片
‍3。 加载新表后,您将看到一个图,可以开始定义字段。 接下来,创建一个名为Orders的表,该表包含以下字段:
-user :字段类型为表格。 在右侧部分中,选择“用户”表,然后在“关系字段名称”字段中指定“订单”。 然后选中“允许每个用户多个订单 ”框。
图片
-items:字段类型为JSON。 该字段包含有关用户购买的产品的信息,例如价格,名称和图像。
我们的方案很简单,应该涵盖必要的功能。 接下来,让我们设置并安装Slack App。

创建一个松弛的应用程序


首先登录您的Slack或为本指南创建一个新的Slack。 访问Slack API控制台以创建新的Slack应用。

图片

在我们虚构的电子商务平台Shop Quick之后调用此Slack应用程序。

在车间中创建应用程序之后,我们可以暂时推迟Slack应用程序并创建8base函数,该函数将在Shop Quick平台上侦听创建新订单的事件。

创建一个8base函数


8base平台提供了有助于创建无服务器应用程序的功能。 对于此Slack应用程序,我们需要仅使用CRUD不能实现的自定义逻辑和集成。 在我们的情况下,我们希望在创建新订单时将消息发送到Slack。 我们可以使用8base函数来实现这一点,侦听Create,Update和Delete事件,我们将使用触发器。

触发器是响应数据突变事件而触发的功能:创建,更新或删除对象时。 触发器有两种类型,具体取决于它们是在数据更改之前还是之后执行:trigger.before和trigger.after。

在本例中,我们将在创建订单后调用函数。 因此,我们必须指定Orders.create。 数据事件的可能值是create,update和delete。

8base CLI


CLI 8base允许您编写自定义JavaScript或TypeScript以有效地添加逻辑,仅关注应用程序的独特之处,同时避免样板代码。

8base命令行界面(CLI)使您可以轻松地从终端向应用程序添加自定义服务器逻辑。 通过在终端中运行以下命令来安装CLI:

npm install -g 8base 

在全局安装CLI后,您需要登录以授予CLI对您的8base帐户的访问权限。 运行以下命令登录:

 8base login 

运行此命令时,将显示用于CLI授权的浏览器窗口。 登录后,CLI即可访问您的8base帐户。 您可以通过运行help命令找到CLI提供的其他命令:

 8base help 

接下来,我们通过在终端中运行以下命令,使用CLI初始化8base项目:

 8base init shop-quick-functions 

执行命令后,将创建一个新文件夹。 文件夹结构应如下所示:

 ├── src/ | ├── function1.ts | └── function2.js ├── 8base.yml └── package.json 

CLI会加载常规的Node项目,该项目可让您使用npm或yarn安装依赖项。 此外,8base CLI附带了预先配置好的Webpack和TypeScript,因此您可以编写JavaScript或TypeScript代码。

我们在8base.yml中设置了自定义功能和权限。 我们根据需要更改8base.yml文件的当前设置。 打开文件并进行以下更改:

 functions: notifySlack: handler: code: src/notifySlack.js type: trigger.after operation: Orders.create 

文件结构类似于任何YAML文件。 我们要看的第一个块是功能块。 我们将把我们要创建的所有函数定义都放在此块中。 例如,我们创建的notifySlack函数; 该函数具有以下属性:

  • handler :notifySlack函数处理程序的相对文件路径。
  • operation :该参数确定触发器应侦听的数据类型和事件。
  • type :它们是在数据更改之前还是之后开始的。 有两种类型:trigger.before和trigger.after。

下一步是创建一个处理程序文件,以在触发之后开始接收事件。 要将更新发送到Slack,我们将使用chat.postMessage方法。 消息将使用HTTP post方法发送-对chat.postMessage方法的每个请求都将由您的机器人的OAuth访问令牌签名。 访问您的应用程序的详细信息页面,单击侧边栏导航中的OAuth和权限链接。

图片

复制标记并转到8base设置页面上的环境变量选项卡。 您的函数可以访问所有创建的环境变量。 始终在此处存储您的机密值和凭据,不要将其直接放在源代码数据库中。 创建一个名为SLACK_ACCESS_TOKEN的新变量,粘贴复制的令牌并保存。

图片

现在,将代码添加到编辑器中。 在src目录中创建一个名为utils.js的文件。 在您喜欢的编辑器中打开文件,然后将以下内容复制到其中:

 /* src/utils.js */export const sendMessage = (order) => { const message = `A new order was just created`; const messageBody = dataBuilder(order); const body = { channel: 'general', attachments: messageBody, text: message }; ‍ console.log('Message body', { body }); console.log('Sending message request'); return makeRequest(body); };‍ 

因此,sendMessage函数接受带有一个参数的订单,这是一个包含我们为Order模型创建的字段的对象。 现在我们需要使用order对象创建一条新消息,因此我们将该对象传递给一个名为dataBuilder的函数。 dataBuilder函数以Slack附件的格式返回一个对象。

然后,我们创建一个请求主体,其中包含要在其中发布消息的工作空间通道,从dataBuilder返回的附件,最后是文本。 接下来,由makeRequest函数发送发布消息的请求。

让我们创建dataBuilder函数,复制下面的片段并更新utils.js文件:

 /* src/utils.js */ export const sendMessage = (order) => { ...}; const dataBuilder = (order) => { const { items } = order; const itemSections = items.map((item) => { return { type: 'section', text: item.name, color: '#3AA3E3', accessory: { type: 'image', image_url: item.image, alt_text: item.name, }, }; }); const data = [ { type: 'section', text: { type: 'mrkdwn', text: `*There are ${items.length} items in the order*`, }, }, ...itemSections, ]; return data; }; 

dataBuilder函数接受订单对象,并使用商品的名称和图像为订单中的每个商品创建一个区域。 您可以使用消息生成器实时预览消息和附件的格式。

接下来,我们添加makeRequest函数,该函数将消息正文发送到Slack Workshop。

将以下代码段复制到utils.js文件中:

 /* src/utils.js */ import fetch from 'node-fetch'; export const sendMessage = (order) => { ... }; const dataBuilder = (order) => { ... }; const makeRequest = (data) => { const url = 'https://slack.com/api/chat.postMessage'; const headers = { Authorization: `Bearer ${process.env.SLACK_ACCESS_TOKEN}`, 'Content-type': 'application/json', }; return fetch(url, { method: 'post', body: JSON.stringify(data), headers, }); }; 

首先通过运行以下命令安装node-fetch软件包:

 npm install node-fetch 

我们导入包并在makeRequest函数中使用它。 作为功​​能的一部分,我们将所有必需的标头添加到请求中。 该请求必须使用Bearer Authorization标头签名。 该令牌将从我们之前创建的环境变量中获取。 最后,我们使用fetch API返回POST请求。

现在,我们拥有使用机器人将消息发送到Slack Warspace所需的一切。 让我们创建一个在上面的8base.yml文件中引用的函数处理程序。

在src目录中创建一个名为notifySlack.js的文件,打开文件并将代码复制到其中:

 /* src/notifySlack.js */ import { sendMessage } from './utils'; module.exports = async (event) => { try { console.log('Sending notification to slack'); const res = await sendMessage(event.data); console.log('Notification sent successfully'); } catch (error) { console.log(error); } return { data: event.data, }; }; 

在文件中,我们使用创建的sendMessage实用程序函数。 8base函数处理程序传递两个参数:事件和上下文。 事件对象的结构取决于函数的类型,上下文对象包含有用的属性和方法,您可以在此处阅读。
在我们的例子中,事件对象将包含创建的Order,该Order由两个user和item字段组成。 Order对象是事件对象数据的属性,我们将此对象传递给sendMessage函数以通知Slack。

函数调用包含在try / catch中,因为我们不希望任何错误导致函数结束。 最后,我们在函数末尾返回事件数据。
利用这些数据,我们可以指示邮件的主题和正文,然后使用我们创建的传输器发送邮件。 通过运行以下命令,使用8base CLI保存文件并部署功能:

 # deploy while in project root directory 8base deploy 

成功布置功能后,您应该从终端上看到以下输出:

 8base deploy deploy done. Time: 15,553 ms. 

调试功能


在函数中拥有日志很重要,这样您就可以轻松调试函数并跟踪发生的事情。 8base上有一个页面,用于查看个人资料附带的所有功能。 您可以轻松查看来自每个功能的所有日志。

转到8base Dashboard ,然后单击侧面菜单中的Logic 。 在逻辑页面上,您可以查看所有已布置的功能。

图片
对于特定功能,请单击查看日志以查看所有日志。 接下来,我们安装Slack应用程序并对其进行测试。

安装和测试Slack应用


让我们完成最后一步,然后在工作区中安装Slack应用程序。 为此,请返回Slack应用程序控制台,然后单击侧面导航栏上的“ 安装应用程序 ”。

图片

在页面上,您将看到有关添加功能或权限来安装应用程序的警告。 单击它并添加权限。

成功安装应用程序后,我们可以测试功能和应用程序。 转到8base 数据页面,单击侧栏中的“订单”表。 在“订单表”查看器中,单击“ 数据”选项卡,在这里我们可以向表中添加新行。

图片

在数据表中,按{+}按钮并创建一个新行。

图片

您可以使用以下数据填写产品字段:

 [{ "name": "Food product", "image": "https://static.pexels.com/photos/368893/pexels-photo-368893.jpeg", "price": 4 }, { "name": "The real fruit", "image": "https://static.pexels.com/photos/368893/pexels-photo-368883.jpeg", "price": 20 }] 

单击添加行以创建新订单。 然后转到安装了Slack App的车间,单击#general频道,您将看到来自该机器人的新消息。

它看起来应该像这样:

图片

来自Slack频道上的8base机器人的新通知

最后的话


创建一个Slack应用程序是一个好主意。 松弛是大多数团队沟通的主要手段,可以让您掌握日常工作所需的所有信息。

对于本文,我们使用8base功能创建了一个简单的Slack应用程序,该应用程序发送有关系统中新订单​​的消息。 发送邮件非常简单。 Slack具有丰富的消息格式 ,您可以使其复杂化,以便它们包含更多信息。 在此处阅读有关8base功能的更多信息。 在GitHub上查看本文中的代码。

感谢您的阅读。

Source: https://habr.com/ru/post/zh-CN466335/


All Articles