Поле электронной почты от Slack до AWS Lamba - PullRequest
0 голосов
/ 12 ноября 2018
{
        "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>"
    } 

Когда бот запрашивает адрес электронной почты. Пользователь ввел xxx.20@gmail.com для слота email_address.

Но когда запрос приходит из слабины, он не приходит в слот.

Любые предложения или решения приветствуются.

1 Ответ

0 голосов
/ 13 ноября 2018

Lex не может распознать ввод как электронную почту, потому что Slack оборачивает фактический ввод в <mailto:...|...>. Вы можете видеть ввод, который Лекс предоставляет в значении inputTranscipt события.

Я предполагаю, что вы подключили Лекса напрямую к Slack и используете лямбда-функцию.

В 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 часто так. Я обнаружил, что отслеживание последнего извлеченного слота в sessionAttribute помогает мне определить, где в разговоре мне нужно проанализировать ввод определенным образом.

...