İş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:
- Eşleşen amacın yerine getirilmesi cihaza
HtmlResponse
gönderir. - Cihaz, web uygulamasını yüklemek için
HtmlResponse
içindeki URL'yi kullanır. data
JSON yükü, bir geri çağırma aracılığıyla web uygulamasına iletilir.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. NiyetteHtmlResponse
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.