node.js - Slack Node js程序运行 session 关闭

标签 node.js slack-api

抱歉打扰。我正在编写一个 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 存在安全顾虑,您可以执行以下两种操作之一(这些是我所做的事情的示例,但可能有更好、更安全的做法):

  1. 您可以在命令前添加一个空格 [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 .
  2. 您可以输入您的export命令位于一个名为 ~/.secrets 的单独文件中然后运行命令source ~/.secrets这将运行你的 export命令。

可能这些会给您一种安全感,而不是实际的安全感,因为您可以只回显环境变量的值,但我个人喜欢采取其中一个步骤作为额外的预防措施。

关于node.js - Slack Node js程序运行 session 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438538/

相关文章:

node.js - Ghost 博客的 Bash 脚本在服务器重启时不启动

node.js - 如何将主代码与index.js Electron 分开?

slack-api - 如何在 channel 中分享上传的图片?

url - Slack URL 从浏览器打开 channel

slack-api - 如何在用户生成的消息中检测字符串并替换为 URL

node.js - 使用 Node.js facebook-node-sdk 的 Open Graph 不接受 Facebook 访问 token

javascript - NodeJS Ajv 模块总是记录消息 ' $ref: keywords ignored in schema at path "#"'

node.js - Alexa:来自 intent 的 REST API 调用

python - 如何从响应中读取一个松弛的用户 ID 并获取用户名,

slack-api - Slack 机器人如何检测直接消息与 channel 中的消息?