Konuşma İşleminizi derleme (Dialogflow)

İşleminiz için iletişimi, Dialogflow aracınızın sohbet mantığını içeren bir webhook olarak dağıtılan kod olan fulfillment ile tanımlarsınız. İstek karşılama, İşleminize kullanıcılar istekte bulunduğunda ne yapılacağını bildirir.

Etkileşimli Tuval'de, sipariş karşılama durumunuz web uygulamanızla ilgili bilgileri de Asistan'a iletir. Asistan'a web uygulamanızı oluşturmasını belirtmek için HtmlResponse kullanabilirsiniz. HtmlResponse, web uygulamanızın özel mantığının web uygulamanızda değişiklikler yapmak için kullandığı data için de güncellemeler sağlayabilir.

Bu sayfada, istek karşılamada HtmlResponse nasıl kullanılacağı ve bu yanıt türünü kullanmayla ilgili genel kurallar açıklanmaktadır.

HTML yanıtları

Web uygulamanızla ilgili bilgileri Asistan'a aktarmak için amaca özel istek karşılama mantığınıza bir HtmlResponse eklemeniz gerekir. HtmlResponse, web uygulamasının URL'sini ve web uygulamasını güncelleyen verileri içerebilir. HtmlResponse gönderdiğinizde aşağıdaki adımlar gerçekleşir:

  1. Eşleşen amacın yerine getirilmesi cihaza HtmlResponse gönderir.
  2. Cihaz, web uygulamasını yüklemek için HtmlResponse içindeki URL'yi kullanır.
  3. data JSON yükü, bir geri çağırma aracılığıyla web uygulamasına iletilir.
  4. Görüşme İşleminiz güncelleme göndermek veya yeni durumlar yüklemek için yeni bir HtmlResponse gönderir.

Örnek istek karşılama

Aşağıdaki örnek istek karşılama kodundan alıntı, HtmlResponse öğesinin nasıl uygulanacağını gösterir:

const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');

const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});

// map of human speakable colors to color values
const tints = {
  red: 0xFF0000,
  green: 0x00FF00,
  blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
  if (color in tints) {
    conv.ask(`Ok, I changed my color to ${color}. What else?`);
    conv.ask(new HtmlResponse({
      data: {
        tint: tints[color],
      },
    }));
    return;
  }
  conv.ask(`Sorry, I don't know that color. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      query: conv.query,
    },
  }));
});
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});

app.intent('pause', (conv) => {
  conv.ask(`Ok, I paused spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: false,
    },
  }));
});

app.intent('restart game', (conv) => {
  conv.ask(new HtmlResponse({
    data: {
      command: 'RESTART_GAME',
    },
  }));
});

exports.conversation = functions.https.onRequest(app);

welcome amacı

Yukarıdaki snippet'te welcome amacının yerine getirilmesi, web uygulamasının URL'siyle birlikte bir HtmlResponse gönderir. Asistan bu bilgiyi alıp HTML'yi ve JavaScript'i bu adreste yükler.

...
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});
...

Diğer amaçlar

Diğer amaçların yerine getirilmesindeki HtmlResponse, değişken değerleri (örnekte tint veya spin) web uygulamasına iletir. Web uygulamasının özel mantığı, öğeleri (animasyonlar, renk vb.) güncellemek için bu değerleri kullanır:

...
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});
...

Kurallar ve kısıtlamalar

Sipariş karşılamanızı oluştururken HtmlResponse için aşağıdaki kuralları ve kısıtlamaları göz önünde bulundurun:

  • Karşılamanızdaki her amaç bir HtmlResponse içermelidir. Niyette HtmlResponse yoksa web uygulamanız kapanır.
  • Web uygulaması URL'nizi yalnızca kullanıcıya gönderdiğiniz ilk amaca eklemeniz gerekir (bu genellikle Welcome amacıdır).
  • HtmlResponse boyutu 50 KB veya daha küçük olmalıdır.