Exercício 2: revisar o fluxo da conversação - Guia do desenvolvedor

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á.

Exercício 2: revisar o fluxo da conversação

Neste exercício, você revisa as estruturas JSON que são enviadas entre seu aplicativo cliente e o bot do Amazon Lex V2 que você criou no Exercício 1: criar um bot a partir de um exemplo. A conversa usa a operação RecognizeText para gerar as estruturas JSON. O RecognizeUtterance traz as mesmas informações dos cabeçalhos HTTP na resposta.

As estruturas JSON são divididas por cada turno da conversa. Um turno é uma solicitação do aplicativo cliente e uma resposta do bot.

Turno 1

Durante o primeiro turno da conversa, o aplicativo cliente inicia a conversa com seu bot. O URI e o corpo da solicitação fornecem informações sobre a solicitação.

POST /bots/botId/botAliases/botAliasId/botLocales/localeId/sessions/sessionId/text HTTP/1.1 Content-type: application/json { "text": "I would like to order flowers" }
  • O URI identifica o bot com o qual o aplicativo cliente está se comunicando. Também inclui um identificador de sessão gerado pelo aplicativo cliente que identifica uma conversa específica entre um usuário e o bot.

  • O corpo da solicitação contém o texto que o usuário digitou no aplicativo cliente. Nesse caso, somente o texto é enviado, mas seu aplicativo pode enviar outras informações, como atributos da solicitação ou estado da sessão. Para mais informações, consulte a operação RecognizeText.

A partir de text, o Amazon Lex V2 detecta a intenção do usuário, que é pedir flores. O Amazon Lex V2 escolhe um dos slots da intenção (FlowerType) e uma das solicitações para o slot e, em seguida, envia a resposta abaixo ao aplicativo cliente. O cliente exibe a mensagem na resposta ao usuário.

{ "interpretations": [ { "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": null, "PickupDate": null, "PickupTime": null }, "state": "InProgress" }, "nluConfidence": { "score": 0.95 } }, { "intent": { "name": "FallbackIntent", "slots": {} } } ], "messages": [ { "content": "What type of flowers would you like to order?", "contentType": "PlainText" } ], "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c", "sessionState": { "dialogAction": { "slotToElicit": "FlowerType", "type": "ElicitSlot" }, "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": null, "PickupDate": null, "PickupTime": null }, "state": "InProgress" }, "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f" } }

Turno 2

No turno 2, o usuário responde à solicitação do bot do Amazon Lex V2 no turno 1 com um valor que preenche o slot de FlowerType.

{ "text": "1 dozen roses" }

A resposta para o turno 2 mostra o slot de FlowerType preenchido e fornece uma solicitação para obter o próximo valor do slot.

{ "interpretations": [ { "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": null, "PickupTime": null }, "state": "InProgress" }, "nluConfidence": { "score": 0.98 } }, { "intent": { "name": "FallbackIntent", "slots": {} } } ], "messages": [ { "content": "What day do you want the dozen roses to be picked up?", "contentType": "PlainText" } ], "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c", "sessionState": { "dialogAction": { "slotToElicit": "PickupDate", "type": "ElicitSlot" }, "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": null, "PickupTime": null }, "state": "InProgress" }, "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f" } }

Turno 3

No turno 3, o usuário responde à solicitação do bot do Amazon Lex V2 no turno 2 com um valor que preenche o slot de PickupDate.

{ "text": "next monday" }

A resposta para o turno 3 mostra os slots de FlowerType e PickupDate preenchidos e fornece uma solicitação para obter o último valor do slot.

{ "interpretations": [ { "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2022-12-28", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": null }, "state": "InProgress" }, "nluConfidence": { "score": 1.0 } }, { "intent": { "name": "FallbackIntent", "slots": {} } } ], "messages": [ { "content": "At what time do you want the 1 dozen roses to be picked up?", "contentType": "PlainText" } ], "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c", "sessionState": { "dialogAction": { "slotToElicit": "PickupTime", "type": "ElicitSlot" }, "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2021-01-04", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": null }, "state": "InProgress" }, "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f", "sessionAttributes": {} } }

Turno 4

No turno 4, o usuário fornece o valor final do slot para a intenção, a saber, a hora em que as flores são retiradas.

{ "text": "5 in the evening" }

Na resposta, o Amazon Lex V2 envia uma solicitação de confirmação ao usuário para confirmar que o pedido está correto. A dialogAction fica definida como ConfirmIntent e o confirmationState fica como None.

{ "interpretations": [ { "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2021-01-04", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": { "value": { "interpretedValue": "17:00", "originalValue": "5 evening", "resolvedValues": [ "17:00" ] } } }, "state": "InProgress" }, "nluConfidence": { "score": 1.0 } }, { "intent": { "name": "FallbackIntent", "slots": {} } } ], "messages": [ { "content": "Okay, your dozen roses will be ready for pickup by 17:00 on 2021-01-04. Does this sound okay?", "contentType": "PlainText" } ], "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c", "sessionState": { "dialogAction": { "type": "ConfirmIntent" }, "intent": { "confirmationState": "None", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2021-01-04", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": { "value": { "interpretedValue": "17:00", "originalValue": "5 evening", "resolvedValues": [ "17:00" ] } } }, "state": "InProgress" }, "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f" } }

Turno 5

No turno final, o usuário responde com a solicitação de confirmação.

{ "text": "yes" }

Na resposta, os envios do Amazon Lex V2 indicam que o intent foi cumprido definindo confirmationState como Confirmed e dialogAction para fechar. Todos os valores de slot estão disponíveis para o aplicativo cliente.

{ "interpretations": [ { "intent": { "confirmationState": "Confirmed", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2021-01-04", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": { "value": { "interpretedValue": "17:00", "originalValue": "5 evening", "resolvedValues": [ "17:00" ] } } }, "state": "Fulfilled" }, "nluConfidence": { "score": 1.0 } }, { "intent": { "name": "FallbackIntent", "slots": {} } } ], "messages": [ { "content": "Thanks. ", "contentType": "PlainText" } ], "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c", "sessionState": { "dialogAction": { "type": "Close" }, "intent": { "confirmationState": "Confirmed", "name": "OrderFlowers", "slots": { "FlowerType": { "value": { "interpretedValue": "dozen roses", "originalValue": "dozen roses", "resolvedValues": [] } }, "PickupDate": { "value": { "interpretedValue": "2021-01-04", "originalValue": "next monday", "resolvedValues": [ "2021-01-04" ] } }, "PickupTime": { "value": { "interpretedValue": "17:00", "originalValue": "5 evening", "resolvedValues": [ "17:00" ] } } }, "state": "Fulfilled" }, "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f" } }