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