Respostas simples (Dialogflow)

Explorar no Dialogflow

Clique em Continue (Continuar) para importar nosso exemplo de Responses (Respostas) para o Dialogflow. Depois, siga as etapas abaixo para implantar e testar o exemplo:

  1. Insira um nome de agente e crie um novo agente do Dialogflow para a amostra.
  2. Depois que a importação do agente for concluída, clique em Go to agent.
  3. No menu de navegação principal, acesse Fulfillment.
  4. Ative o Inline Editor e clique em Implantar. O editor contém o código de amostra.
  5. No menu de navegação principal, acesse Integrações e clique em Google Assistente.
  6. Na janela modal exibida, ative a opção Auto-preview changes e clique em Test para abrir o simulador do Actions.
  7. No simulador, insira Talk to my test app para testar a amostra.
Continuar

As respostas simples assumem a forma de um balão de chat visualmente e usam a conversão de texto em voz (TTS, na sigla em inglês) ou a Linguagem de marcação de síntese de fala (SSML, na sigla em inglês) para som.

Por padrão, o texto de TTS é usado como conteúdo de balão do chat. Se o aspecto visual desse texto atender às suas necessidades, não será necessário especificar o texto de exibição para um balão de chat.

Você também pode consultar nossas diretrizes de design de conversas para aprender a incorporar esses elementos visuais à sua Ação.

Propriedades

Figura 1. Exemplo de resposta simples (smartphone)

As respostas simples têm os seguintes requisitos e propriedades opcionais que podem ser configuradas:

  • Tem suporte em plataformas com os recursos actions.capability.AUDIO_OUTPUT ou actions.capability.SCREEN_OUTPUT.
  • Limite de 640 caracteres por balão de chat. Strings maiores que o limite são truncadas na primeira quebra de palavra (ou espaço em branco) antes de 640 caracteres.

  • O conteúdo do balão do chat precisa ser um subconjunto fonético ou uma transcrição completa da saída TTS/SSML. Isso ajuda os usuários a entender o que você está dizendo e aumenta a compreensão em várias condições.

  • No máximo dois balões de chat por turno.

  • O cabeçalho do chat (logotipo) que você envia ao Google precisa ter 192 x 192 pixels e não pode ser animado.

Figura 2. Exemplo de resposta simples (smart display)

Exemplo de código

Node.js

app.intent('Simple Response', (conv) => {
  conv.ask(new SimpleResponse({
    speech: `Here's an example of a simple response. ` +
      `Which type of response would you like to see next?`,
    text: `Here's a simple response. ` +
      `Which response would you like to see next?`,
  }));
});

Java

@ForIntent("Simple Response")
public ActionResponse welcome(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.add(
      new SimpleResponse()
          .setTextToSpeech(
              "Here's an example of a simple response. "
                  + "Which type of response would you like to see next?")
          .setDisplayText(
              "Here's a simple response. Which response would you like to see next?"));
  return responseBuilder.build();
}

Node.js

conv.ask(new SimpleResponse({
  speech: `Here's an example of a simple response. ` +
    `Which type of response would you like to see next?`,
  text: `Here's a simple response. ` +
    `Which response would you like to see next?`,
}));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.add(
    new SimpleResponse()
        .setTextToSpeech(
            "Here's an example of a simple response. "
                + "Which type of response would you like to see next?")
        .setDisplayText(
            "Here's a simple response. Which response would you like to see next?"));
return responseBuilder.build();

JSON

Observe que o JSON abaixo descreve uma resposta do webhook.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Here's an example of a simple response. Which type of response would you like to see next?",
              "displayText": "Here's a simple response. Which response would you like to see next?"
            }
          }
        ]
      }
    }
  }
}

JSON

Observe que o JSON abaixo descreve uma resposta do webhook.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Here's an example of a simple response. Which type of response would you like to see next?",
                "displayText": "Here's a simple response. Which response would you like to see next?"
              }
            }
          ]
        }
      }
    }
  ]
}

SSML e sons

O uso de SSML e sons nas suas respostas deixa as respostas mais refinadas e melhora a experiência do usuário. Os snippets de código a seguir mostram como criar uma resposta que usa SSML:

Node.js

app.intent('SSML', (conv) => {
  conv.ask(`<speak>` +
    `Here are <say-as interpet-as="characters">SSML</say-as> examples.` +
    `Here is a buzzing fly ` +
    `<audio src="https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg"></audio>` +
    `and here's a short pause <break time="800ms"/>` +
    `</speak>`);
  conv.ask('Which response would you like to see next?');
});

Java

@ForIntent("SSML")
public ActionResponse ssml(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.add(
      "<speak>"
          + "Here are <say-as interpet-as=\"characters\">SSML</say-as> examples."
          + "Here is a buzzing fly "
          + "<audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>"
          + "and here's a short pause <break time=\"800ms\"/>"
          + "</speak>");
  return responseBuilder.build();
}

Node.js

conv.ask(`<speak>` +
  `Here are <say-as interpet-as="characters">SSML</say-as> examples.` +
  `Here is a buzzing fly ` +
  `<audio src="https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg"></audio>` +
  `and here's a short pause <break time="800ms"/>` +
  `</speak>`);
conv.ask('Which response would you like to see next?');

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.add(
    "<speak>"
        + "Here are <say-as interpet-as=\"characters\">SSML</say-as> examples."
        + "Here is a buzzing fly "
        + "<audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>"
        + "and here's a short pause <break time=\"800ms\"/>"
        + "</speak>");
return responseBuilder.build();

JSON

Observe que o JSON abaixo descreve uma resposta do webhook.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "<speak>Here are <say-as interpet-as=\"characters\">SSML</say-as> examples.Here is a buzzing fly <audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>and here's a short pause <break time=\"800ms\"/></speak>"
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "Which response would you like to see next?"
            }
          }
        ]
      }
    }
  }
}

JSON

Observe que o JSON abaixo descreve uma resposta do webhook.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "<speak>Here are <say-as interpet-as=\"characters\">SSML</say-as> examples.Here is a buzzing fly <audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>and here's a short pause <break time=\"800ms\"/></speak>"
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": "Which response would you like to see next?"
              }
            }
          ]
        }
      }
    }
  ]
}

Consulte a documentação de referência do SSML para mais informações.

Biblioteca de sons

Fornecemos uma variedade de sons curtos e sem custo financeiro em nossa biblioteca de sons. Esses sons são hospedados para você, então tudo o que você precisa fazer é incluí-los no seu SSML.