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á.
Etapa 2a (opcional): revisar os detalhes do fluxo de informações falado (console)
Esta seção explica o fluxo de informações entre o cliente e o Amazon Lex quando o cliente usa fala para enviar solicitações. Para obter mais informações, consulte PostContent.
-
O usuário diz: Eu gostaria de encomendar flores.
-
O cliente (console) envia a seguinte solicitação PostContent para o Amazon Lex:
POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request bodyinput stream
O URI de solicitação e o corpo fornecem informações ao Amazon Lex:
-
URI da solicitação fornece o nome do bot (
OrderFlowers
), o alias do bot ($LATEST
) e o nome do usuário (uma string aleatória que identifica o usuário).content
indica que esta é uma solicitação da APIPostContent
(não uma solicitaçãoPostText
). -
Cabeçalhos de solicitação
-
x-amz-lex-session-attributes
– o valor codificado em base64 representa "{}". Quando o cliente faz a primeira solicitação, não há atributos de sessão. -
Content-Type
– reflete o formato de áudio.
-
-
Corpo da solicitação – o stream de áudio de entrada do usuário ("Eu gostaria de encomendar flores.").
nota
Se o usuário escolher enviar texto ("Eu gostaria de encomendar flores") para a API
PostContent
em vez falar, o corpo da solicitação será a entrada do usuário. O cabeçalhoContent-Type
é definido adequadamente:POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: accept Request bodyinput stream
-
-
No fluxo de entrada, o Amazon Lex detecta a intenção (
OrderFlowers
). Em seguida, ele escolhe um dos slots da intenção (neste caso, oFlowerType
) e um de seus prompts de seleção de valor e envia uma resposta com os seguintes cabeçalhos:x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:I would like to order some flowers. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:What type of flowers would you like to order? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:FlowerType x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjpudWxsLCJQaWNrdXBEYXRlIjpudWxsfQ==
Os valores do cabeçalho fornecem as seguintes informações:
-
x-amz-lex-input-transcript
– fornece a transcrição do áudio (entrada do usuário) da solicitação -
x-amz-lex-message
– fornece a transcrição do áudio que Amazon Lex retornou na resposta -
x-amz-lex-slots
– a versão codificada em base64 dos slots e valores:{"PickupTime":null,"FlowerType":null,"PickupDate":null}
-
x-amz-lex-session-attributes
– a versão codificada em base64 dos atributos de sessão ({})
O cliente reproduz o áudio no corpo da resposta.
-
-
-
O usuário diz: rosas
-
O cliente (console) envia a seguinte solicitação PostContent para o Amazon Lex:
POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request bodyinput stream ("roses")
O corpo da solicitação é o stream de áudio de entrada do usuário (rosas). O
sessionAttributes
permanece vazio. -
O Amazon Lex interpreta o fluxo de entrada no contexto da intenção atual (ele lembra que pediu ao usuário informações a respeito do slot
FlowerType
). Primeiro, o Amazon Lex atualiza o valor do slot para a intenção atual. Em seguida, ele escolhe outro slot (PickupDate
), juntamente com uma das mensagens de solicitação (Quando você deseja pegar as rosas?) e retorna uma resposta com os seguintes cabeçalhos:x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:roses x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupDate x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6bnVsbH0=
Os valores do cabeçalho fornecem as seguintes informações:
-
x-amz-lex-slots
– a versão codificada em base64 dos slots e valores:{"PickupTime":null,"FlowerType":"roses","PickupDate":null}
-
x-amz-lex-session-attributes
– a versão codificada em base64 dos atributos de sessão ({})
O cliente reproduz o áudio no corpo da resposta.
-
-
-
O usuário diz: amanhã
-
O cliente (console) envia a seguinte solicitação PostContent para o Amazon Lex:
POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request bodyinput stream ("tomorrow")
O corpo da solicitação é o stream de áudio de entrada do usuário ("amanhã"). O
sessionAttributes
permanece vazio. -
O Amazon Lex interpreta o fluxo de entrada no contexto da intenção atual (ele lembra que pediu ao usuário informações a respeito do slot
PickupDate
). O Amazon Lex atualiza o valor do slot (PickupDate
) para a intenção atual. Em seguida, ele escolhe outro slot para escolher o valor para (PickupTime
) e um dos prompts de seleção de valor (Quando você deseja receber as rosas em 18/03/2017?), e retorna uma resposta com os seguintes cabeçalhos:x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:tomorrow x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses on 2017-03-18? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupTime x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:3a205b70-0b69-11e7-b447-eb69face3e6f
Os valores do cabeçalho fornecem as seguintes informações:
-
x-amz-lex-slots
– a versão codificada em base64 dos slots e valores:{"PickupTime":null,"FlowerType":"roses","PickupDate":"2017-03-18"}
-
x-amz-lex-session-attributes
– a versão codificada em base64 dos atributos de sessão ({})
O cliente reproduz o áudio no corpo da resposta.
-
-
-
O usuário diz: 18h
-
O cliente (console) envia a seguinte solicitação PostContent para o Amazon Lex:
POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: "audio/mpeg" Request bodyinput stream ("6 pm")
O corpo da solicitação é o stream de áudio de entrada do usuário ("18h"). O
sessionAttributes
permanece vazio. -
O Amazon Lex interpreta o fluxo de entrada no contexto da intenção atual (ele lembra que pediu ao usuário informações a respeito do slot
PickupTime
). Primeiro, ele atualiza o valor do slot para a intenção atual.Agora, o Amazon Lex detecta que tem informações de todos os slots. No entanto, a intenção
OrderFlowers
é configurada com uma mensagem de confirmação. Portanto, o Amazon Lex precisa de uma confirmação explícita do usuário para poder prosseguir para o atendimento da intenção. Ele envia uma resposta com os seguintes cabeçalhos solicitando a confirmação antes de encomendar as flores:x-amz-lex-dialog-state:ConfirmIntent x-amz-lex-input-transcript:six p. m. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:Okay, your roses will be ready for pickup by 18:00 on 2017-03-18. Does this sound okay? x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:083ca360-0b6a-11e7-b447-eb69face3e6f
Os valores do cabeçalho fornecem as seguintes informações:
-
x-amz-lex-slots
– a versão codificada em base64 dos slots e valores:{"PickupTime":"18:00","FlowerType":"roses","PickupDate":"2017-03-18"}
-
x-amz-lex-session-attributes
– a versão codificada em base64 dos atributos de sessão ({})
O cliente reproduz o áudio no corpo da resposta.
-
-
-
O usuário diz: Sim
-
O cliente (console) envia a seguinte solicitação PostContent para o Amazon Lex:
POST /bot/
OrderFlowers
/alias/$LATEST
/user/4o9wwdhx6nlheferh6a73fujd3118f5w
/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request bodyinput stream ("Yes")
O corpo da solicitação é o stream de áudio de entrada do usuário ("Sim"). O
sessionAttributes
permanece vazio. -
O Amazon Lex interpreta o fluxo de entrada e entende que o usuário deseja prosseguir com o pedido. A intenção
OrderFlowers
é configurada comReturnIntent
como a atividade de cumprimento. Isso orienta o Amazon Lex a retornar todos os dados de intenção ao cliente. O Amazon Lex retorna uma resposta com o seguinte:x-amz-lex-dialog-state:ReadyForFulfillment x-amz-lex-input-transcript:yes x-amz-lex-intent-name:OrderFlowers x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==
O cabeçalho de resposta
x-amz-lex-dialog-state
é definido comoReadyForFulfillment
. O cliente pode, então, cumprir a intenção.
-
-
Agora, teste novamente o bot. Para estabelecer um novo contexto (usuário), escolha o link Clear no console. Forneça os dados para a intenção
OrderFlowers
e inclua alguns dados inválidos. Por exemplo:-
Jasmim como o tipo de flor (não é um dos tipos de flor suportados)
-
Ontem como o dia em que você deseja receber as flores
Observe que o bot aceita esses valores, pois você não tem nenhum código para inicializar e validar os dados do usuário. Na próxima seção, adicione uma função do Lambda para fazer isso. Observe o seguinte sobre a função do Lambda:
-
Ela valida dados de slot após cada entrada do usuário. Ela cumpre a intenção no final. Ou seja, o bot processa o pedido de flores e retorna uma mensagem para o usuário, em vez de simplesmente retornar dados do slot para o cliente. Para obter mais informações, consulte Uso de funções do Lambda.
-
Ela também define os atributos da sessão. Para obter mais informações sobre atributos de sessão, consulte PostText.
Ao concluir a seção Conceitos básicos, você pode fazer os exercícios adicionais (Exemplos adicionais: criação de bots do Amazon Lex). O Reservar uma viagem usa atributos de sessão para compartilhar informações entre intenções para iniciar uma conversa dinâmica com o usuário.
-
Próxima etapa
Etapa 3: Crie uma função do Lambda (console)