Как получить чат-чат чат-бота (в aws lex)

#amazon-web-services #aws-lambda #aws-lex

#amazon-веб-сервисы #aws-lambda #aws-lex

Вопрос:

Как получить чат-бота lex? я хотел бы отправить электронное письмо с записью беседы в конце чата?

я использую c # .net core 2.1 для создания функций labda есть ли возможность получить чат-бота в функции lambda?

Комментарии:

1. Lex не ведет полную запись разговоров, по крайней мере, там, где мы можем получить к ней доступ. Вам нужно будет самостоятельно сохранять входные данные и ответы из разговоров либо в базе данных, либо на короткий срок в атрибутах сеансов.

2. да, спасибо за ваш комментарий, я следовал тому же подходу

Ответ №1:

я справился, сохранив InputTranscript и лямбда-ответ в атрибутах сеанса. при закрытии события я отправляю электронное письмо с содержимым атрибутов сеанса.

ниже приведен вспомогательный класс.

 public abstract class AbstractIntentProcessor : IIntentProcessor
{
    internal const string MESSAGE_CONTENT_TYPE = "PlainText";
    public abstract Task<LexResponse> Process(LexEvent lexEvent, ILambdaContext context);

    protected string SerializeReservation(UtilityBillRequest request)
    {
        return JsonConvert.SerializeObject(request, new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        });
    }

    protected UtilityBillRequest DeserializeReservation(string json)
    {
        return JsonConvert.DeserializeObject<UtilityBillRequest>(json);
    }

    protected List<ConversationScript> DeserializeConversation(string json)
    {
        return JsonConvert.DeserializeObject<List<ConversationScript>>(json);
    }

    protected string SerializeConversation(List<ConversationScript> result)
    {
        return JsonConvert.SerializeObject(result, new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        });
    }

    protected LexResponse Close(IDictionary<string, string> sessionAttributes, string fulfillmentState, LexResponse.LexMessage message, bool isSessionClose=false, LexEvent lexEvent=null, ILambdaContext context=null)
    {
        AppendTranscript(sessionAttributes, "Bot", message.Content);

        var transcript = new List<ConversationScript>();
        if (isSessionClose amp;amp; sessionAttributes.ContainsKey("transcript"))
        {
            transcript = DeserializeConversation(sessionAttributes["transcript"]);
            EmailHelper emailHelper = new EmailHelper();
            emailHelper.SendTranscriptEmail(transcript, lexEvent, context);
        }
        return new LexResponse
        {
            SessionAttributes = sessionAttributes,
            DialogAction = new LexResponse.LexDialogAction
            {
                Type = "Close",
                FulfillmentState = fulfillmentState,
                Message = message
            }
        };
    }

    protected LexResponse Delegate(IDictionary<string, string> sessionAttributes, IDictionary<string, string> slots)
    {
        return new LexResponse
        {
            SessionAttributes = sessionAttributes,
            DialogAction = new LexResponse.LexDialogAction
            {
                Type = "Delegate",
                Slots = slots
            }
        };
    }

    protected LexResponse ElicitSlot(IDictionary<string, string> sessionAttributes, string intentName, IDictionary<string, string> slots, string slotToElicit, LexResponse.LexMessage message)
    {
        AppendTranscript(sessionAttributes, "Bot", message.Content);
        return new LexResponse
        {
            SessionAttributes = sessionAttributes,
            DialogAction = new LexResponse.LexDialogAction
            {
                Type = "ElicitSlot",
                IntentName = intentName,
                Slots = slots,
                SlotToElicit = slotToElicit,
                Message = message
            }
        };
    }

    protected LexResponse ConfirmIntent(IDictionary<string, string> sessionAttributes, string intentName, IDictionary<string, string> slots, LexResponse.LexMessage message)
    {
        AppendTranscript(sessionAttributes, "Bot", message.Content);
        return new LexResponse
        {
            SessionAttributes = sessionAttributes,
            DialogAction = new LexResponse.LexDialogAction
            {
                Type = "ConfirmIntent",
                IntentName = intentName,
                Slots = slots,
                Message = message
            }
        };
    }

    //
    public void AppendTranscript(IDictionary<string, string> sessionAttributes, string source, string message)
    {
        if (source != "Bot" amp;amp; source != "User")
        {
            throw new Exception("Invalid Source: "   source);
        }

        var transcript = new List<ConversationScript>();
        if (sessionAttributes.ContainsKey("transcript"))
        {
            transcript = DeserializeConversation(sessionAttributes["transcript"]);
        }

        transcript.Add(new ConversationScript
        {
            Participant = source,
            Text = message,
            Timestamp = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
        });
        sessionAttributes["transcript"] = SerializeConversation(transcript);
    }
}