抱歉打扰。我正在编写一个 Slack 机器人来使用 API 回复用户消息
早上,一切正常。然后,当我从办公室回来后,它就关闭并显示此错误
Jiatongs-MacBook-Pro:news-bot jiatongli$ node index.js
Assertion failed: token must be defined
/Users/jiatongli/Desktop/news-bot/node_modules/vow/lib/vow.js:105
throw e;
^
Error: not_authed
at _api.then.fail (/Users/jiatongli/Desktop/news-bot/node_modules/slackbots/index.js:46:33)
at Array.<anonymous> (/Users/jiatongli/Desktop/news-bot/node_modules/vow/lib/vow.js:773:56)
at callFns (/Users/jiatongli/Desktop/news-bot/node_modules/vow/lib/vow.js:24:35)
at process._tickCallback (internal/process/next_tick.js:61:11)
Emitted 'error' event at:
at _api.then.fail (/Users/jiatongli/Desktop/news-bot/node_modules/slackbots/index.js:46:19)
at Array.<anonymous> (/Users/jiatongli/Desktop/news-bot/node_modules/vow/lib/vow.js:773:56)
at callFns (/Users/jiatongli/Desktop/news-bot/node_modules/vow/lib/vow.js:24:35)
at process._tickCallback (internal/process/next_tick.js:61:11)
Jiatongs-MacBook-Pro:news-bot jiatongli$
我个人不知道发生了什么,因为程序本身似乎没有错误。我想念什么?
这是我的index.js 文件中的代码:
var SlackBot = require("slackbots");
var request = require("request");
var NewsAPI = require("newsapi");
var unirest = require("unirest");
var API_KEY = process.env.API_KEY;
var Slack_API = process.env.Slack_API;
// create a bot
var bot = new SlackBot({
token: Slack_API,
name: "aloha-ai"
});
bot.on("message", msg => {
switch (msg.type) {
case "message":
// we only want to listen to direct messages that come from the user
if (msg.channel[0] === "D" && msg.bot_id === undefined) {
getRandomTechNews(postMessage, msg.user)
}
break
}
})
const postMessage = (message, user) => {
bot.postMessage(user, message, {
as_user: true
});
}
const getRandomTechNews = (callback, user) => {
unirest.get("https://nuzzel-news-v1.p.rapidapi.com/news?count=10&q=product")
.header("X-RapidAPI-Host", "nuzzel-news-v1.p.rapidapi.com")
.header("X-RapidAPI-Key", API_KEY)
.end(function (response) {
var newsJSON = response.body;
var news = "*Viral News* in product : \n\n\n\n";
for (i = 0; i < newsJSON.results.stories.length; i++) {
news += "_Excerpt:_ \n" + ">" + newsJSON.results.stories[i].excerpt + "\n"
news += "_Let's see the article!_ \n" + newsJSON.results.stories[i].url + "\n\n\n"
};
callback(news, user);
});
}
最佳答案
您的错误消息似乎表明您的程序未通过 Slack API 进行身份验证:Error: not_authed
由于您正在从环境变量中检索 API key 和 token :
var API_KEY = process.env.API_KEY;
var Slack_API = process.env.Slack_API;
我的猜测是,您已经启动了一个新的终端 session ,但尚未设置该环境变量,或者您位于另一台未设置该环境变量的计算机上。
在运行程序之前,尝试从命令行导出这些变量:
export API_KEY=<my-api-key>
export Slack_API=<my-token>
如果您对 bash 历史记录中显示的 API key 存在安全顾虑,您可以执行以下两种操作之一(这些是我所做的事情的示例,但可能有更好、更安全的做法):
- 您可以在命令前添加一个空格
[space]export API_KEY=<my-api-key>
而不是export API_KEY=<my-api-key>
。 This will make it so the command does not show up in your history . - 您可以输入您的
export
命令位于一个名为~/.secrets
的单独文件中然后运行命令source ~/.secrets
这将运行你的export
命令。
可能这些会给您一种安全感,而不是实际的安全感,因为您可以只回显环境变量的值,但我个人喜欢采取其中一个步骤作为额外的预防措施。
关于node.js - Slack Node js程序运行 session 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438538/