Поскольку вы не указали, какой язык вы используете, я отвечу, используя C # (именно это я и использовал).
Контекст разговора достигается с помощью атрибутов сеанса.В случае C # самый простой способ добиться этого - использовать функции AWS Lambda.Вот пример, предоставленный самой Amazon (с использованием проекта BookTrip для Amazon Lex):
// Extract slots from Lex Event
var slots = lexEvent.CurrentIntent.Slots;
// Extract Session Attributes if they exist, otherwise create new Dictionary
var sessionAttributes = lexEvent.SessionAttributes ?? new Dictionary<string, string>();
Reservation lastConfirmedReservation = null;
// if previous Reservation from Session Attributes exists
if (slots.ContainsKey(LAST_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE))
{
lastConfirmedReservation = DeserializeReservation(slots[LAST_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE]);
}
string confirmationContext = sessionAttributes.ContainsKey("confirmationContext") ? sessionAttributes["confirmationContext"] : null;
if (lastConfirmedReservation != null &&
string.Equals(lastConfirmedReservation.ReservationType, "Hotel", StringComparison.Ordinal))
{
// If there was a previous reservation - auto-populate to match
sessionAttributes["confirmationContext"] = "AutoPopulate";
return ConfirmIntent(
sessionAttributes,
lexEvent.CurrentIntent.Name,
new Dictionary<string, string>
{
{PICK_UP_CITY_SLOT, lastConfirmedReservation.PickUpCity },
{PICK_UP_DATE_SLOT, lastConfirmedReservation.CheckInDate },
{RETURN_DATE_SLOT, DateTime.Parse(lastConfirmedReservation.CheckInDate).AddDays(int.Parse(lastConfirmedReservation.Nights)).ToUniversalTime().ToString(CultureInfo.InvariantCulture) },
{CAR_TYPE_SLOT, null },
{DRIVER_AGE_SLOT, null },
},
new LexResponse.LexMessage
{
ContentType = MESSAGE_CONTENT_TYPE,
Content = $"Is this car rental for your {lastConfirmedReservation.Nights} night stay in {lastConfirmedReservation.Location} on {lastConfirmedReservation.CheckInDate}?"
}
);
}
Лучший способ понять, как это работает, - изучить соответствующий Blueprint для вашего языка по вашему выбору.Надеюсь, это помогло вам!
Редактировать: Дополнительные чтение доступных чертежей, которые могут быть полезны для вас. Подробнее сведения о потоке информации при использовании атрибутов сеанса в Lex.