Konuşma İşleminizi derleme (Dialogflow)

İşleminizle ilgili görüşmeyi sipariş karşılama ile tanımlarsınız, Bu, Dialogflow aracınızın aşağıdakileri içeren bir webhook olarak dağıtılan koddur: diyaloğa dayanır. Sipariş karşılama, İşleminize kullanıcılar bir şeyler yaptığında ne kabul edersiniz.

Etkileşimli Tuval'de, isteğinizle ilgili bilgiler de Asistan'a aktarmanızı sağlar. HtmlResponse kullanarak Asistan'a şunları söyleyebilirsiniz: web uygulamanızı oluşturun. HtmlResponse, data için güncellemeler de sağlayabilir. Bu güncellemeler web uygulamanızın özel mantığının web uygulamanızda değişiklik yapmak için kullandığı araçlardır.

Bu sayfada, sipariş karşılama ve genel anlamda HtmlResponse ürününü nasıl kullanacağınız açıklanmaktadır. yönergeleri inceleyin.

HTML yanıtları

Web uygulamanızla ilgili bilgileri Asistan'a aktarmak için HtmlResponse önemli bir parçasıdır. HtmlResponse, URL'yi içerebilir web uygulaması ve web uygulamasını güncelleyen veriler. Gönderdiğinizde HtmlResponse söz konusu olduğunda aşağıdaki adımlar gerçekleşir:

  1. Eşleşen amaç yerine getirildiğinde cihaza bir HtmlResponse gönderilir.
  2. Cihaz, web uygulamasını yüklemek için HtmlResponse içindeki URL'yi kullanır.
  3. data JSON yükü, bir geri çağırmayla web uygulamasına iletilir.
  4. Sohbet işleminiz, güncelleme göndermek için yeni bir HtmlResponse gönderir veya yeni eyaletler yüklenir.

Örnek sipariş karşılama

Örnekten alınan aşağıdaki alıntı sipariş karşılama kodu, HtmlResponse ürününün 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 intent

Yukarıdaki snippet'te welcome amacının karşılanması bir Web uygulamasının URL'sini içeren HtmlResponse. Asistan bunu alır ve bu adrese HTML ve JavaScript'i 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çlara yönelik karşılamadaki HtmlResponse, değişken değerler iletir (örnekte tint veya spin) web uygulamasına yükleyin. Web için özel mantık Uygulama, öğ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

HtmlResponse ile ilgili olarak aşağıdaki kuralları ve kısıtlamaları göz önünde bulundurun göz önünde bulundurmanız gerektiğini unutmayın:

  • Sipariş karşılamadaki her niyet bir HtmlResponse içermelidir. Amaç bir HtmlResponse içermiyorsa web uygulamanız kapanır.
  • Yalnızca gönderdiğiniz ilk amaca web uygulamanızın URL'sini eklemeniz gerekir kullanıcı (bu genellikle Welcome niyetidir).
  • HtmlResponse boyutu 50 KB veya daha küçük olmalıdır.