Etapa 2a (opcional): revisar os detalhes do fluxo de informações falado (console) - 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á.

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.

  1. O usuário diz: Eu gostaria de encomendar flores.

    1. 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 body input 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 API PostContent (não uma solicitação PostText).

      • 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çalho Content-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 body input stream
    2. No fluxo de entrada, o Amazon Lex detecta a intenção (OrderFlowers). Em seguida, ele escolhe um dos slots da intenção (neste caso, o FlowerType) 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.

  2. O usuário diz: rosas

    1. 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 body input stream ("roses")

      O corpo da solicitação é o stream de áudio de entrada do usuário (rosas). O sessionAttributes permanece vazio.

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

  3. O usuário diz: amanhã

    1. 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 body input stream ("tomorrow")

      O corpo da solicitação é o stream de áudio de entrada do usuário ("amanhã"). O sessionAttributes permanece vazio.

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

  4. O usuário diz: 18h

    1. 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 body input stream ("6 pm")

      O corpo da solicitação é o stream de áudio de entrada do usuário ("18h"). O sessionAttributes permanece vazio.

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

  5. O usuário diz: Sim

    1. 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 body input stream ("Yes")

      O corpo da solicitação é o stream de áudio de entrada do usuário ("Sim"). O sessionAttributes permanece vazio.

    2. O Amazon Lex interpreta o fluxo de entrada e entende que o usuário deseja prosseguir com o pedido. A intenção OrderFlowers é configurada com ReturnIntent 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 como ReadyForFulfillment. O cliente pode, então, cumprir a intenção.

  6. 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)