Evento de entrada de função do Lambda e formato de resposta - Amazon Lex V1

Se você estiver usando o Amazon Lex V2, consulte o Guia do Amazon Lex V2.

 

Se você estiver usando o Amazon Lex V1, recomendamos atualizar seus bots para o Amazon Lex V2. Não estamos mais adicionando novos atributos à V1 e recomendamos o uso da V2 para todos os novos bots.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Evento de entrada de função do Lambda e formato de resposta

Esta seção descreve a estrutura dos dados de eventos que o Amazon Lex fornece para uma função do Lambda. Use essas informações para analisar a entrada em seu código do Lambda. Ela também explica o formato da resposta que o Amazon Lex espera que sua função do Lambda retorne.

Formato de eventos de entrada

O seguinte é o formato geral de um evento do Amazon Lex que é passado para uma função do Lambda. Use essas informações ao criar sua função do Lambda.

nota

O formato de entrada pode mudar sem uma alteração correspondente em messageVersion. Seu código não deve gerar um erro se novos campos estiverem presentes.

{ "currentIntent": { "name": "intent-name", "nluIntentConfidenceScore": score, "slots": { "slot name": "value", "slot name": "value" }, "slotDetails": { "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" }, "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" } }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)" }, "alternativeIntents": [ { "name": "intent-name", "nluIntentConfidenceScore": score, "slots": { "slot name": "value", "slot name": "value" }, "slotDetails": { "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" }, "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" } }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)" } ], "bot": { "name": "bot name", "alias": "bot alias", "version": "bot version" }, "userId": "User ID specified in the POST request to Amazon Lex.", "inputTranscript": "Text used to process the request", "invocationSource": "FulfillmentCodeHook or DialogCodeHook", "outputDialogMode": "Text or Voice, based on ContentType request header in runtime API request", "messageVersion": "1.0", "sessionAttributes": { "key": "value", "key": "value" }, "requestAttributes": { "key": "value", "key": "value" }, "recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": Label, "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ], "sentimentResponse": { "sentimentLabel": "sentiment", "sentimentScore": "score" }, "kendraResponse": { Complete query response from Amazon Kendra }, "activeContexts": [ { "timeToLive": { "timeToLiveInSeconds": seconds, "turnsToLive": turns }, "name": "name", "parameters": { "key name": "value" } } ] }

Observe as seguintes informações adicionais sobre os campos de evento:

  • currentIntent – Fornece os campos name, slots, slotDetails e confirmationStatus da intenção.

     

    nluIntentConfidenceScore é a confiança que o Amazon Lex tem de que a intenção atual é a que melhor corresponde à intenção atual do usuário.

     

    slots é um mapa de nomes de slots, configurado para a intenção, com valores de slot que o Amazon Lex reconheceu na conversa do usuário. Um valor de slot permanece nulo até o usuário fornecer um valor.

     

    O valor de slot no evento de entrada pode não corresponder com um dos valores configurados para o slot. Por exemplo, se o usuário responde à solicitação "Você gostaria de um carro de qual cor?" com "pizza", o Amazon Lex retornará "pizza" como valor de slot. Sua função deve validar os valores de forma que façam sentido no contexto.

     

    slotDetails fornece informações adicionais sobre um valor de slot. O matriz resolutions contém uma lista de valores adicionais reconhecidos para o slot. Cada slot pode ter no máximo cinco valores.

     

    O campo originalValue contém o valor que foi inserido pelo usuário para o slot. Quando o tipo de slot é configurado para retornar o primeiro valor de resolução como valor de slot, o originalValue pode ser diferente do valor no campo slots.

     

    confirmationStatus fornece ao usuário resposta a um prompt de confirmação, se houver. Por exemplo, se o Amazon Lex perguntar "Você quer pedir uma pizza grande de queijo?, dependendo da resposta do usuário, o valor desse campo poderá ser Confirmed ou Denied. Caso contrário, o valor desse campo é None.

     

    Se o usuário confirmar a intenção, o Amazon Lex define esse campo como Confirmed. Se o usuário negar a intenção, o Amazon Lex define esse valor como Denied.

     

    Na resposta de confirmação, o enunciado de um usuário pode fornecer atualizações de slot. Por exemplo, o usuário pode dizer "sim, mude o tamanho para médio". Nesse caso, o evento de Lambda subsequente tem o valor de slot atualizado, PizzaSize definido como medium. O Amazon define o confirmationStatus como None, porque o usuário modificou alguns dados de slot, exigindo que a função do Lambda; realize a validação dos dados do usuário.

     

  • alternativeIntents — Se você ativar pontuações de confiança, o Amazon Lex retornará até quatro intenções alternativas. Cada intenção inclui uma pontuação que indica o nível de confiança que o Amazon Lex tem de que a intenção é a intenção correta com base no enunciado do usuário.

     

    O conteúdo das intenções alternativas é igual ao conteúdo do currentIntent campo. Para obter mais informações, consulte Usar pontuações de confiança.

     

  • bot – Informações sobre o bot que processou a solicitação.

    • name – O nome do bot que processou a solicitação.

    • alias – O alias da versão do bot que processou a solicitação.

    • version – A versão do bot que processou a solicitação.

     

  • userId – Esse valor é fornecido pelo aplicativo cliente. O Amazon Lex transmite para a função do Lambda.

     

  • inputTranscript – O texto usado para processar a solicitação.

    Se a entrada tiver sido um texto, o campo inputTranscript conterá o texto que foi inserido pelo usuário.

     

    Se a entrada tiver sido um fluxo de áudio, o campo inputTranscript conterá o texto extraído do fluxo de áudio. Esse é o texto que é processado para reconhecer as intenções e os valores de slot.

     

  • invocationSource – Para indicar por que o Amazon Lex está invocando a função do Lambda, isso é definido como um dos seguintes valores:

    • DialogCodeHook – O Amazon Lex define esse valor para direcionar a função do Lambda; para inicializar a função e validar a entrada de dados do usuário.

       

      Quando a intenção é configurada para invocar uma função do Lambda como um hook de código de inicialização e validação, o Amazon Lex invoca a função do Lambda especificada em cada entrada do usuário (enunciado) após o Amazon Lex entender a intenção.

      nota

      Se a intenção não estiver clara, o Amazon Lex não conseguirá invocar a função do Lambda.

       

    • FulfillmentCodeHook – O Amazon Lex define esse valor para direcionar a função do Lambda para atender uma intenção.

       

      Se a intenção estiver configurada para invocar uma função do Lambda como um hook de código de atendimento, o Amazon Lex definirá o invocationSource como esse valor somente depois de ter todos os dados de slot para atender à intenção.

       

    Em sua configuração de intenção, você pode ter duas funções do Lambda separadas para inicializar e validar os dados do usuário e para cumprir a intenção. Você também pode usar uma função do Lambda para fazer ambos. Neste caso, sua função do Lambda pode usar o valor invocationSource para seguir o caminho de código correto.

     

  • outputDialogMode – Para cada entrada do usuário, o cliente envia a solicitação para o Amazon Lex usando uma das operações da API de runtime, PostContent ou PostText. O Amazon Lex usa os parâmetros de solicitação para determinar se a resposta ao cliente é por texto ou voz e define esse campo de acordo.

     

    A função do Lambda pode usar essas informações para gerar uma mensagem apropriada. Por exemplo, se o cliente espera uma resposta de voz, a função do Lambda pode retornar Speech Synthesis Markup Language (SSML) em vez de texto.

     

  • messageVersion – A versão da mensagem que identifica o formato dos dados de evento indo para função do Lambda e o formato esperado da resposta de uma função do Lambda.

    nota

    Você configura esse valor ao definir uma intenção. Na implementação atual, apenas a versão de mensagem 1.0 é compatível. Portanto, o console assume o valor padrão de 1.0 e não mostra a versão da mensagem.

  • sessionAttributes – Atributos de sessão específicos do aplicativo que o cliente envia na solicitação. Se você quiser que o Amazon Lex os inclua na resposta ao cliente, sua função do Lambda deverá enviá-los de volta ao Amazon Lex na resposta. Para obter mais informações, consulte Definição dos atributos da sessão.

     

  • requestAttributes – Atributos de sessão específicos da solicitação que o cliente envia na solicitação. Use atributos de solicitação para passar informações que não precisam ser mantidas durante toda a sessão. Se não houver atributos de solicitação, o valor será nulo. Para obter mais informações, consulte Definição de atributos de solicitação.

     

  • recentIntentSummaryView – Informações sobre o estado de uma intenção. É possível ver informações sobre as últimas três intenções usadas. É possível usar essas informações para definir valores na intenção ou para retornar a uma intenção anterior. Para obter mais informações, consulte Gerenciamento de sessões com a API do Amazon Lex.

     

  • sentimentResponse – O resultado de uma análise de sentimento do Amazon Comprehend do último enunciado. É possível usar essas informações para gerenciar o fluxo de conversa do bot dependendo do sentimento expresso pelo usuário. Para obter mais informações, consulte Análise de sentimento.

     

  • kendraResponse – O resultado de uma consulta a um índice do Amazon Kendra. Presente apenas na entrada para um hook de código de atendimento e somente quando a intenção estende a intenção interna AMAZON.KendraSearchIntent. O campo contém toda a resposta da pesquisa do Amazon Kendra. Para obter mais informações, consulte AMAZON.KendraSearchIntent.

     

  • activeContexts — Um ou mais contextos ativos durante esse turno de uma conversa com o usuário.

    • timeToLive — O intervalo de tempo ou o número de turnos na conversa com o usuário em que o contexto permanece ativo.

    • name – O nome do contexto.

    • parâmetros uma lista de pares de chave/valor que contém o nome e o valor dos slots da intenção que ativou o contexto.

    Para obter mais informações, consulte Definir o contexto da intenção.

Formato de resposta

O Amazon Lex espera uma resposta de uma função do Lambda no formato a seguir:

{ "sessionAttributes": { "key1": "value1", "key2": "value2" ... }, "recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": "Label", "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ], "activeContexts": [ { "timeToLive": { "timeToLiveInSeconds": seconds, "turnsToLive": turns }, "name": "name", "parameters": { "key name": "value" } } ], "dialogAction": { "type": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", Full structure based on the type field. See below for details. } }

A resposta consiste em quatro campos. Os campos sessionAttributes, recentIntentSummaryView e activeContexts são opcionais, mas o campo dialogAction é obrigatório. O conteúdo do campo dialogAction depende do valor do campo type. Para obter mais detalhes, consulte dialogAction.

sessionAttributes

Opcional. Se você incluir o campo sessionAttributes, ele pode ficar vazio. Se a função do Lambda não retornar os atributos da sessão, o último sessionAttributes conhecido passado pela API ou pela função do Lambda permanecerá. Para obter mais informações, consulte as operações PostContent e PostText.

"sessionAttributes": { "key1": "value1", "key2": "value2" }

recentIntentSummaryView

Opcional. Se incluído, define valores para uma ou mais intenções recentes. É possível incluir informações para até três intenções. Por exemplo, é possível definir valores para intenções anteriores com base nas informações coletadas pela intenção atual. As informações no resumo devem ser válidas para a intenção. Por exemplo, o nome da intenção deve ser uma intenção no bot. Se você incluir um valor de slot na visão resumida, o slot deverá existir na intenção. Se você não incluir o recentIntentSummaryView em sua resposta, todos os valores para as intenções recentes permanecerão inalterados. Para obter mais informações, consulte a operação PutSession ou o tipo de dados IntentSummary.

"recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": "Label", "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ]

activeContexts

Opcional. Se incluído, define o valor para um ou mais contextos. Por exemplo, você pode incluir um contexto para tornar uma ou mais intenções que tenham esse contexto como uma entrada elegíveis para reconhecimento no próximo turno da conversa.

Todos os contextos ativos que não estão incluídos na resposta têm seus valores de vida útil diminuídos e ainda podem estar ativos na próxima solicitação.

Se você especificar uma vida útil de 0 para um contexto que foi incluído no evento de entrada, ele ficará inativo na próxima solicitação.

Para obter mais informações, consulte Definir o contexto da intenção.

dialogAction

Obrigatório. O campo dialogAction direciona o Amazon Lex para a próxima ação e descreve o que esperar do usuário depois que o Amazon Lex retornar uma resposta ao cliente.

O campo type indica a próxima ação. Ele também determina quais outros campos a função do Lambda precisa fornecer como parte do valor dialogAction.

  • Close — Informa ao Amazon Lex para não esperar uma resposta do usuário. Por exemplo, "Seu pedido de pizza foi feito" não requer uma resposta.

     

    O campo fulfillmentState é obrigatório. O Amazon Lex usa esse valor para definir o campo dialogState em PostContent ou PostText na resposta ao aplicativo cliente. Os campos message e responseCard são opcionais. Se você não especificar uma mensagem, o Amazon Lex usará a mensagem de despedida ou a mensagem de acompanhamento configurada para a intenção.

    "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled or Failed", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, Thanks, your pizza has been ordered." }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • ConfirmIntent — Informa ao Amazon Lex que o usuário deve fornecer uma resposta Sim ou Não para confirmar ou negar a intenção atual.

     

    Você deve incluir os campos intentName e slots. O campo slots deve conter uma entrada para cada um dos slots preenchidos para a intenção especificada. Não é necessário incluir uma entrada no campo slots para slots que não estão preenchidos. Você deve incluir o campo message se o campo confirmationPrompt de intenção for nulo. O conteúdo do campo message retornado pela função do Lambda tem precedência sobre o confirmationPrompt especificado na intenção. O campo responseCard é opcional.

    "dialogAction": { "type": "ConfirmIntent", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, Are you sure you want a large pizza?" }, "intentName": "intent-name", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • Delegate — Direciona o Amazon Lex para escolher a próxima ação de acordo com a configuração do bot. Se a resposta não incluir nenhum atributo de sessão, o Amazon Lex manterá os atributos existentes. Se você deseja que o valor de um slot seja nulo, não é necessário incluir o campo do slot na solicitação. Uma exceção DependencyFailedException será gerada se a função de cumprimento retornar a ação de diálogo Delegate sem remover nenhum slot.

    Os campos kendraQueryRequestPayload e kendraQueryFilterString são opcionais e usados somente quando a intenção é derivada da intenção interna AMAZON.KendraSearchIntent. Para obter mais informações, consulte AMAZON.KendraSearchIntent.

    "dialogAction": { "type": "Delegate", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "kendraQueryRequestPayload": "Amazon Kendra query", "kendraQueryFilterString": "Amazon Kendra attribute filters" }
  • ElicitIntent — Informa ao Amazon Lex que o usuário deve responder com um enunciado que inclua uma intenção. Por exemplo, "Eu quero uma pizza grande", que indica a OrderPizzaIntent. Por outro lado, o enunciado "grande" não é suficiente para que o Amazon Lex infira a intenção do usuário.

     

    Os campos message e responseCard são opcionais. Se você não fornecer uma mensagem, o Amazon Lex usará um dos prompts de esclarecimento do bot. Se não houver um prompt de esclarecimento definido, o Amazon Lex retornará uma exceção 400 Solicitação inválida.

    { "dialogAction": { "type": "ElicitIntent", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, What can I help you with?" }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • ElicitSlot — Informa ao Amazon Lex que o usuário deve fornecer um valor de slot na resposta.

     

    Os campos intentName, slotToElicit e slots são obrigatórios. Os campos message e responseCard são opcionais. Se você não especificar uma mensagem, o Amazon Lex usará uma das solicitações de seleção de valor de slot configuradas para o slot.

    "dialogAction": { "type": "ElicitSlot", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, What size pizza would you like?" }, "intentName": "intent-name", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "slotToElicit" : "slot-name", "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }