gpt4 book ai didi

javascript - AWS Lambda 上的 Slack slash 命令延迟响应

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:40 25 4
gpt4 key购买 nike

我正在尝试为查询服务器并将一些结果返回给用户的 Slack 进行集成。搜索有时需要比 Slack 允许的响应窗口更长的时间,因此我需要立即返回状态 200。

如何使用 lambda 函数执行此操作?我尝试使用回调函数,然后将数据发送到另一个 lambda 服务,但原始函数等待它返回,这意味着我仍然被正在查询的服务器阻止。

这是我正在使用的东西

var rp = require('request-promise');

exports.handler = (event, context, callback) =>{
//I wanted this to send back my STATUS 200 so the command wouldn't time out
callback(null, "Working...");

//I want this post to happen asynchronously so that slack gets the callback response while the search is happening
//but this still waits until the post comes back before resolving the callback
var options = {
method: 'POST',
uri: "https://url-to-other.service",
body:{
"team": event.team,
"label": event.label,
"url": event.aresponse_url
},
json:true
};
rp(options);
};

当我运行它时,回调文本显示在其他函数的结果之后,这意味着此服务正在等待其他函数停止运行,然后再返回状态。

最佳答案

这在单个 lambda 函数中不起作用,因为一旦调用 callback() lambda 容器就会死亡。你可以做的是使用这个 lambda 函数 invoke another lambda function 调用callback() 之后,它又会POST 到您的松弛 channel url。

这是一个如何工作的示例(它不是 100%,但应该让您很好地了解它是如何工作的。)

函数1:(接收slack事件,调用第二个函数,立即返回200

let AWS = require('aws-sdk')
exports.handler = (event, context, callback) => {
let lambda = new AWS.Lambda()
let params = {
FunctionName: 'YOUR_SECOND_FUNCTION_NAME',
InvocationType: 'Event', // Ensures asynchronous execution
Payload: JSON.stringify({
team: event.team,
label: event.label,
url: event.aresponse_url
})
}
return lambda.invoke(params).promise() // Returns 200 immediately after invoking the second lambda, not waiting for the result
.then(() => callback(null, 'Working...'))
}

功能2:(接收第一个lambda事件,等待搜索完成,POST到slack channel )

let rp = require('request-promise')

exports.handler = (event, context, callback) => {
let searchOptions = {
method: 'POST',
uri: 'https://url-to-other.service',
body: {
'team': event.team,
'label': event.label,
'url': event.aresponse_url
},
json:true
}
return rp(searchOptions)
.then(result => {
let slackOptions = {
method: 'POST',
uri: 'YOUR_SLACK_CHANNEL_URL',
body: {
text: JSON.stringify(result) // I stringified the search result for you for ease's sake, not sure what you need here
},
json: true
}
return rp(slackOptions)
})
.then(() => { callback(null, 'good measure') })
}

关于javascript - AWS Lambda 上的 Slack slash 命令延迟响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com