Derleme istek karşılama (Dialogflow)

Sipariş karşılama, Actions projeniz için kullanıcı girişi elde etmek amacıyla kullanılan sohbet arayüzünü ve girişi işlemek ve nihayetinde İşlemi gerçekleştirmek için kullanılan mantığı tanımlar.

Genel bakış

İstek yerine getirmeniz Asistan'dan istek alır, isteği işler ve yanıt verir. Bu karşılıklı istek ve yanıt süreci, siz ilk kullanıcı isteğini yerine getirene kadar sohbeti ilerletir.

Aşağıdaki adımlarda, Actions SDK'sını Node.js veya Java/Kotlin istemci kitaplığı ile kullanarak nasıl istek karşılama oluşturabileceğiniz açıklanmaktadır:

  1. ActionsSdkApp nesnesini başlatın.
  2. İstek karşılama mantığınızda istekleri işleyecek işlevler oluşturun.

Oluşturma iletişim kutuları

ActionsSdkApp nesnesini başlatın

Aşağıdaki kod, ActionsSdkApp örneğini belirtir ve Google Cloud Functions için bazı ortak Node.js kurulumu yapar:

Actions SDK'sı (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);
Actions SDK (Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

İstekleri işlemek için işlevler oluşturma

Kullanıcılar bir ifade söylediğinde Google Asistan'dan bir istek alırsınız. İsteklerdeki amaçları yerine getirmek için tetiklenen amacı işleyen işlevler oluşturun.

İstekleri işlemek için:

  1. Kullanıcı girişini işlemek için gereken tüm mantığı yürütün.

  2. Bağımsız değişken olarak göstermek istediğiniz yanıtı ileten conv.ask() işlevini çağırın.

Aşağıdaki kod, basit bir yanıtın nasıl oluşturulacağını gösterir:

Actions SDK'sı (Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
Actions SDK (Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
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\":{}}"
}

Amaçları işleme

Tetiklenen niyetleri işleyecek tüm işlevlerinizi topladıktan sonra amaçlara işleyici atamak için app.intent özelliğini kullanın.

Actions SDK'sı (Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
Actions SDK (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
  // ...
}

Görüşmeler sonlandırılıyor

Artık karşılığında herhangi bir kullanıcı girişi olmasını istemiyorsanız ve görüşmeyi sonlandırmak istiyorsanız conv.close() işlevini çağırın. Bu işlev, Google Asistan'a metni kullanıcıya söylemesini ve mikrofonu kapatarak konuşmayı sonlandırmasını söyler.

Ana çağrı amacını işleme

Kullanıcılar app.intent.action.MAIN amacını tetiklediğinde normalde kullanıcı girişi işleme yapmanız gerekmez. İşlem paketiniz çok sayıda işlem içeriyor ve birçok kullanım alanını kapsıyorsa yapabilecekleri birkaç şeyi söyleyerek kullanıcıyı yönlendirmek iyi bir fikirdir.

  1. Yanıtınızı bağımsız değişken olarak ileten conv.ask() işlevini çağırın. Google Asistan, yanıtınızı kullanıcıya söyler ve ardından kullanıcının belirlediğiniz amaçlardan birini tetiklemesini bekler.

Aşağıdaki snippet'te basit bir karşılama niyetinin nasıl ele alınacağı gösterilmektedir:

Actions SDK'sı (Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
Actions SDK (Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

Görüşme durumu

Görüşme HTTP/JSON webhook API'sini kullanıyorsanız görüşmelerinizin durumunu, sizinle Google Asistan arasında karşılıklı olarak iletilen JSON biçimli bir nesne (conversationToken) ile koruyabilirsiniz. Node.js istemci kitaplığını kullanıyorsanız doğrudan conv.data alanına yazabilir ve bu alandan okuma yapabilirsiniz. Bu alan, istekler ve yanıtlar arasında otomatik olarak karşılıklı aktarılır.

Actions SDK'sı (Node.js)
conv.data = {something: 10};
let value = conv.data.something;
Actions SDK (Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");