繁体   English   中英

slack bot 使用 aws 向用户发送直接消息 lambda function

[英]slack bot sending direct message to user using aws lambda function

我正在尝试使用slack web api向用户发送直接消息,但我认为获取所有可用用户的getSlackUser 方法在我调用 slackId 时没有及时完成;

console.log(slackId) 给出未定义的意思它没有完成我的 api 调用bolt

如何确保 getSlackUser 方法在进入 rest 之前完成(使其阻塞)?

const { WebClient } = require('@slack/web-api');
const { App } = require('@slack/bolt')

const rtm = new RTMClient(process.env.SLACK_OAUTH_TOKEN);
const web = new WebClient(process.env.SLACK_OAUTH_TOKEN);
const app = new App({
  token: process.env.SLACK_OAUTH_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET
});


exports.handler = async (event) => {
  const slackId = await getSlackUser('example_real_name').id;
  console.log(slackId);
  await sendSlackMessage(slackId, 'Bot message');
}


sendSlackMessage = async (channel, message) => {
  await web.chat.postMessage({
    channel: channel,
    text: message,
    as_user: true
  });
}

getSlackUser = async(real_name) => {
  const result = await app.client.users.list({
    token: process.env.SLACK_OAUTH_TOKEN
  });
  console.log(result);
  return result.members.find((user) => user.real_name == real_name);
}

问题是这一行的优先级:

const slackId = await getSlackUser('example_real_name').id;

由于成员访问比 await 具有更高的优先级(之前已评估),因此它实际上与以下内容相同:

const slackId = await (getSlackUser('example_real_name').id);

getSlackUser返回一个Promise object,那么它的id成员是undefined。 Await 等待 undefined,也就是undefined

要解决此问题,请确保在.id之前评估 await :

const slackId = (await getSlackUser('example_real_name')).id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM