65.9K
CodeProject 正在变化。 阅读更多。
Home

向 Slack 频道写入消息 - Node.js 版

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2019年2月5日

CPOL

6分钟阅读

viewsIcon

17976

downloadIcon

35

向 Slack 频道写入消息 - Node.js 版

注意:本文教程是 CodeProject Slack API 挑战赛的一部分。

在本文中,我们将创建一个简单的 Node.js 应用程序,该应用程序可以写入 Slack 频道。如果您还没有完成 本系列的第一篇教程(您将在其中了解 Slack API 并创建您的第一个工作区和应用程序),请先完成它。

为了保持简单,我们将使用 Slack 的 Web API。因此,要向 Slack 频道写入消息,我们只需要发出 HTTP POST 请求。由于此功能内置于 Node 的标准库中,因此创建我们的应用程序将快速而简单。

入门

如果您还没有安装 Node.js,可以从 Node.js 网站下载。我推荐最新的 LTS 版本,在撰写本文时是 10.14.2。如果您安装了旧的 8.x 版本,我们即将编写的代码应该也能正常工作。如果您在 2057 年阅读本文,并且正在运行 Node.js 257.8.11,那么假设 ECMAScript 2015 尚未弃用,并且 Slack 仍然存在,这段代码很可能在那里也能正常工作。

要开始,我们需要将我们的应用程序安装到 Slack 工作区中,这将为我们提供一个访问令牌,我们可以使用它将消息发布到工作区中的频道。首先,通过导航到 Slack API 应用页面,然后在出现的列表中点击您的应用程序,找到应用程序的管理页面。

当您的应用程序管理页面加载后,点击左侧菜单中的“OAuth & Permissions”(OAuth 和权限)。当此页面加载后,向下滚动到“Scopes”(作用域)。您需要添加至少一个作用域才能生成访问令牌。这是有道理的,因为如果没有任何授权的作用域,您的应用程序将无法执行任何操作,而一个授予您执行任何操作的能力的访问令牌将毫无用处!

点击下拉框以查看您可以添加的作用域列表。您要找的是“Send messages as Super Amazing Test App,”(以 Super Amazing Test App 的身份发送消息),尽管您将看到您为自己的应用程序起的任何超级棒的名称,而不是 Super Amazing Test App。它应该看起来像这样

scopes

添加此范围后,您就可以将应用程序安装到您的工作区中。滚动回“OAuth & Permissions”页面的顶部,您将看到一个可点击的友好的绿色按钮

app install button

点击它,您将被带到一个屏幕,询问您是否允许您的应用程序访问您的工作区。授权它,您的 OAuth & Permissions 页面现在将包含一个访问令牌。

access token

而不是一个黑框,您将在那里看到您自己的访问令牌。将其保存在浏览器标签页中,因为您很快就需要此访问令牌。

现在我们有了所需的信息,可以继续编写使我们的应用程序正常工作的代码。

代码

有趣的时刻到了!

首先,打开终端或命令提示符,然后为您的应用程序创建一个新目录

mkdir slack-app

然后切换到新目录,并运行 npm init

cd slack-app
npm init

回答 npm 的问题,或者直接按回车键全部使用默认值。这将为您的项目创建一个 package.json 文件。

现在,在文本编辑器中打开该目录。Visual Studio Code 是一款免费的编辑器,可在 Windows、MacOS 和 Linux 上运行,如果您不确定使用什么,它是一个不错的选择。但是,如果您已经有自己喜欢的 JavaScript 编辑器,请继续使用它。

下一步是安装一个 NPM 包,它将帮助我们创建我们的应用程序。为此,请运行以下命令

npm install axios

嗯,这似乎有点令人失望。我的意思是,我们正试图创建一个超级棒的 Slack 应用,但我们只安装了一个包?怎么回事?!而且还有更糟的!我们甚至可以在不安装任何依赖项的情况下向 Slack 频道写入消息!Axios 只是一个不错的 HTTP 客户端,可以让我们生活更轻松。

尽管我们的应用程序目前可能看起来过于简单,但实际上这是一件好事!Slack API 的设计就是为了不打扰我们,并使简单的事情非常简单。

在文本编辑器中打开 slack-app 目录,创建一个名为 app.js 的文件。这个文件将包含我们完整的 Slack 应用!首先向文件中添加以下代码

const axios = require("axios");

const accessToken = "your-token-goes-here";

我们现在还没有太多内容,但我们已经起步了!我们已经导入了 Axios,并定义了我们将使用的访问令牌。还记得我们之前在工作区中安装应用程序时生成的访问令牌吗?这就是您要放置它的地方。

在实际的、可生产的应用程序中,您会想将应用程序的机密信息存储在比这更安全的地方;有些人喜欢将机密信息保存在应用程序运行的服务器上的环境变量中,而另一些人则使用 Kubernetes secrets 或 AWS secrets manager 等解决方案。

请记住,不要将您的访问令牌提交到公共 GitHub 仓库,除非您希望全世界都知道它。在这种情况下,唯一可能发生的就是全世界的巨魔都可以洋洋得意地向我们的 Slack 工作区发布消息。这算不上重大的安全漏洞,但肯定会很烦人。

现在我们有了 Axios 和我们的令牌,接下来是什么?目前,我们的应用程序相当无聊,它什么也不做。所以,让我们编写一个函数来向 Slack 发送消息!将以下代码添加到 app.js

async function postMessage(messageText) {
  const url = "https://slack.com/api/chat.postMessage";
  const post = {
    channel: "#general",
    text: messageText
  };
  const headers = {
    "Content-Type": "application/json",
    "Authorization": `Bearer ${accessToken}`
  };
  try {
    const response = await axios.post(url,
                                      post, 
                                      { headers: headers });
    console.log(` Response code: ${response.status}`);
  } catch(e) {
    console.log(`Error posting message: ${e}`);
  } 
}

有了这段代码,我们就完成了整个 Slack API 消息发布器。每当您调用此函数并向其传递消息时,它就会将消息写入我们 Slack 工作区中的 #general 频道。

为了好玩,让我们再添加一小段代码,以便我们看到我们的 Slack 消息发布器实际上可以工作

postMessage("Hello, is anyone out there?");

在这里,我们只是调用我们友好的 postMessage 函数,并要求它为我们发布一条消息。如果我们登录到我们的 Slack 工作区并查看 #general 频道,我们将看到我们的应用程序确实已经发布了我们的消息。

slack message

成为比赛参与者

如果您想加入竞赛参与者列表,还有一些额外的步骤。首先,您需要找到您的 CodeProject 会员编号。您可以通过点击此页面右上角的 CodeProject 用户名来找到它。我建议在新标签页中打开它。

在那里,您将看到右侧有一个包含您的头像的框。在此框的顶部,您会看到一个标签,如“Member 123456789”。123456789 部分是您的 CodeProject 会员编号。

接下来,打开 app.js 文件并添加以下代码

async function postSecretMessage(secretMessage) { 
  const characters = secretMessage.split('').map(ch => ch.charCodeAt(0)); 
  var hash = characters.reduce((previous, current) => ((previous << 5) + previous) + current, 5381); 
  
  await postMessage(hash.toString()); 
} 

postSecretMessage("123456789");

123456789 替换为您的会员编号。完成此操作后,再次运行程序。如果您查看 Slack 工作区中的 #general 频道,您会看到一个数字代码已写入该频道。

获取代码后,您可以 在此处输入。

我们完成了!

就是这样!您已经编写了您的第一个 Slack API 应用程序。这很简单,不是吗?

现在说个真正的好消息:您可以正式在您的 LinkedIn 个人资料中添加“Slack API Developer”(Slack API 开发人员),并期待大量招聘人员的消息,告诉您您是他们正在填补的职位的完美人选!

© . All rights reserved.