在本文中,将创建一个简单的Node.js应用程序,该程序能够向Slack频道发送消息。如果尚未完成本系列教程的第一部分,在那里学习了Slack的API并创建了第一个工作区和应用程序,请先完成那部分。为了保持简单,将使用Slack的Web API。因此,所需要做的就是发送HTTP POST请求。由于这个功能已经内置在Node的标准库中,创建应用程序将会非常迅速和简单。
如果尚未安装Node.js,请从Node.js网站下载。建议下载最新的LTS版本,截至撰写本文时是10.14.2。如果安装的是旧的8.x版本,将要编写的代码也应该适用。如果在2057年阅读本文,并且正在运行Node.js 257.8.11,假设ECMAScript 2015没有被弃用,假设Slack仍然存在,那么这段代码可能仍然适用。
要开始,请安装Node.js到计算机。可以从Node.js的官方网站下载。建议下载最新的长期支持(LTS)版本,以确保稳定性和兼容性。
要开始,需要将应用程序安装到Slack工作区,这将给一个访问令牌,可以使用它来发布消息到工作区的频道。首先,通过导航到Slack API应用程序页面,然后点击列表中出现的应用程序,找到应用程序的管理员页面。
当应用程序的管理员页面加载后,点击左侧菜单中的'OAuth和权限'。当这个页面加载时,滚动到'Scopes'。需要至少添加一个范围,然后才能生成访问令牌。这是有意义的,因为没有任何授权的范围,应用程序将不被允许做任何事情,一个授权什么也不做的访问令牌将不会非常有用!
现在有了需要的信息,可以继续编写将使应用程序工作的代码。
首先,在终端或命令提示符中,为应用程序创建一个新目录:
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-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频道,将看到应用程序确实发布了消息。
如果想加入竞赛参与者列表,还有一些步骤需要遵循。首先,需要找到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频道,将看到一个数字代码已经写入频道。
一旦有了代码,可以在这里输入它。