aws-lambda - 从 Slack 到 AWS Lamba 的电子邮件字段
问题描述
{
"messageVersion": "1.0",
"invocationSource": "DialogCodeHook",
"userId": "xxx",
"sessionAttributes": {
"currentReservation": ""
},
"requestAttributes": {
},
"bot": {
"name": "BookTrip",
"alias": "shoping",
"version": "7"
},
"outputDialogMode": "Text",
"currentIntent": {
"name": "Shoping",
"slots": {
"offer": "Yes",
"email_address": null
},
"slotDetails": {
"offer": {
"resolutions": [
{
"value": "Yes"
}
],
"originalValue": "Yes"
},
"email_address": {
"resolutions": [],
"originalValue": null
}
},
"confirmationStatus": "None"
},
"inputTranscript": "<mailto:xxx.20@gmail.com|xxx.20@gmail.com>"
}
当机器人询问电子邮件地址时。用户为 email_address 槽输入了 xxx.20@gmail.com。
但是当请求来自 slack 时,它不会进入 slot。
任何建议或解决方案表示赞赏。
解决方案
Lex 无法将输入识别为电子邮件,因为 Slack 使用<mailto:...|...>
. inputTranscipt
您可以在事件的值中看到 Lex 提供的输入。
我假设您已将 Lex 直接连接到 Slack,并且您正在使用 Lambda 函数。
在 Lambda 中,您必须自己解析inputTranscript
并填充插槽。你可以尝试这样的事情(Node.js):
var userInput = event["inputTranscript"];
var email = userInput .split("|");
email = email[1].replace(">","");
console.log(email);
event["currentIntent"]["slots"]["email_address"] = email;
您应该只在用户输入他们的电子邮件后执行上述操作。它将从 Slack 获取整个输入,包括mailto:
包装标签,并将其分成两半作为一个数组。然后它需要下半部分并在最后删除“>”。然后,您应该留下纯电子邮件,因为用户最初输入了它。然后将其设置在插槽中。当您在响应中将槽传回给 lex 时,Lex 将识别该email_address
槽已填满。
您可能必须inputTranscript
经常像这样处理。我发现跟踪 a 中最后一个引出的插槽sessionAttribute
有助于我确定对话中我需要以特定方式解析输入的位置。
推荐阅读
- java - Apache Karaf - 无法解析根目录:缺少要求 - 原因:无法解析 java-api
- reactjs - 如何在 React 中创建一个结构来防止一个动作在完成之前传递给另一个动作?
- google-analytics - PowerBI:如何在 PowerBI 的表中显示和消失列
- java - 使用邮递员登录 Keycloak 领域
- powerbi - 如何在 Power BI 中获得以下 100% 堆叠条形图
- python - Python/numpy:捕获 IEEE-754 “不精确”异常
- ansible - “强制转换为 Unicode:需要字符串或缓冲区,找到列表”执行 Ansible-Playbook 时出错
- php - 尝试在 Laravel 中使用 JWTAuth 创建用户时出错
- javascript - React Native null 不是对象(评估'NativeBeaconBroadcast.checkTransmissionSupported')
- node.js - 使用 mongoose 和 NodeJS 在 Mongo DB 中嵌套查询