Traitement des builds (Dialogflow)

Le fulfillment définit l'interface de conversation de votre projet Actions à récupérer l'entrée utilisateur et la logique pour traiter l'entrée et finalement exécuter l'action.

Présentation

Votre traitement reçoit les requêtes de l'Assistant, les traite et répond. Ce processus d'échange de requêtes et de réponses la conversation jusqu'à ce que vous répondiez à la requête initiale de l'utilisateur.

Les étapes suivantes décrivent comment créer un fulfillment à l'aide des actions SDK avec la bibliothèque cliente Node.js ou Java/Kotlin:

  1. Initialisez l'objet ActionsSdkApp.
  2. Créez des fonctions pour gérer les requêtes dans votre logique de fulfillment.

Créer des boîtes de dialogue

Initialiser l'objet ActionsSdkApp

Le code suivant instancie ActionsSdkApp et effectue une configuration Node.js standard pour Google Cloud Functions:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
SDK Actions (Node.js)
'use strict';

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');

const app = actionssdk({debug: true});

app.intent('actions.intent.MAIN', (conv) => {
  conv.ask('Hi!');
});

// More intent handling if needed
exports.myFunction = functions.https.onRequest(app);
<ph type="x-smartling-placeholder">
</ph>
SDK Actions (Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
<ph type="x-smartling-placeholder">
</ph>
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

Créer des fonctions pour gérer les requêtes

Lorsqu'un utilisateur prononce une expression, vous recevez une demande de l'Assistant Google. À les intents qui arrivent dans les requêtes, créer des fonctions qui gèrent un intent déclenché.

Pour gérer les requêtes:

  1. Exécuter toute logique requise pour traiter l'entrée utilisateur.

  2. Appelez la fonction conv.ask() qui transmet la réponse que vous souhaitez afficher. comme argument.

Le code suivant montre comment créer une réponse simple:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
SDK Actions (Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
<ph type="x-smartling-placeholder">
</ph>
SDK Actions (Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
<ph type="x-smartling-placeholder">
</ph>
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi! Say something, and I'll repeat it."
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

Gérer les intents

Une fois que toutes vos fonctions gèrent les intents déclenchés, utilisez app.intent pour et d'attribuer des gestionnaires aux intents.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
SDK Actions (Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
<ph type="x-smartling-placeholder">
</ph>
SDK Actions (Java)
@ForIntent("actions.intent.MAIN")
public ActionResponse main(ActionRequest request) {
  // handle main intent
  // ...
}

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  // handle text intent
  // ...
}

Mettre fin à la conversation

Lorsque vous ne voulez plus recevoir d’entrée utilisateur en retour et que vous voulez mettre fin à la conversation, appelez la fonction conv.close(). Cette fonction demande à l'Assistant Google de répondre à l'utilisateur et de mettre fin à la conversation en fermant le micro.

Gérer l'intent d'appel principal

Lorsque les utilisateurs déclenchent l'intent app.intent.action.MAIN, vous ne devez normalement pas n'ont pas besoin de traiter les entrées utilisateur. Si votre package d'actions contient actions et couvre de nombreux cas d'utilisation, il est bon d'orienter l'utilisateur en lui indiquant quelques choses qu’ils peuvent faire.

  1. Appelez la fonction conv.ask() en transmettant votre réponse en tant qu'argument. L'Assistant Google énonce votre réponse à l'utilisateur, puis attend que l'utilisateur déclenche l'un des intents que vous avez spécifiés.

L'extrait de code suivant montre comment gérer un intent d'accueil simple:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
SDK Actions (Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
<ph type="x-smartling-placeholder">
</ph>
SDK Actions (Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

État de la conversation

Si vous utilisez l'API de webhook de conversation HTTP/JSON, vous pouvez conserver le l'état de vos conversations avec un objet au format JSON (conversationToken) ; qui est transmis entre vous et l'Assistant Google. Si vous utilisez à l'aide de la bibliothèque cliente Node.js, vous peuvent écrire et lire directement dans le champ conv.data. Ce champ sont transmis automatiquement entre les requêtes et les réponses.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
SDK Actions (Node.js)
conv.data = {something: 10};
let value = conv.data.something;
<ph type="x-smartling-placeholder">
</ph>
SDK Actions (Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");