Temel bilgileri öğrendiğinize göre artık Tuval'e özgü yöntemlerle İşleminizi geliştirebilir ve özelleştirebilirsiniz. Actions projenizi oluştururken İşleminizi istemci karşılama modeli veya sunucu tarafı karşılama modeliyle geliştirmeyi seçebilirsiniz. Bu seçenekler hakkında daha fazla bilgi için Etkileşimli Tuvali Etkinleştirme bölümüne bakın.
Müşteri karşılama modeli seçeneğini belirlerseniz İşleminizde aşağıdakileri kullanabilirsiniz:
- İstemci tarafı istek karşılama ile derleme altında listelenen tüm API'ler
Sunucu tarafı istek karşılama ile derleme altında listelenen tüm API'ler
onTtsMark()
geri çağırması
Sunucu karşılama modeli seçeneğini belirlerseniz aşağıdakileri kullanabilirsiniz:
- Sunucu tarafı istek karşılama ile derleme altında listelenen tüm API'ler
- Geri aramalar
Bazı Etkileşimli Tuval API'lerinin belirli bir istek karşılama modeliyle kullanılması önerilmez. Aşağıdaki tabloda, istemci istek karşılama seçeneğini belirttiğinizde etkinleştirilen API'ler ve bu API'lerin her model için önerilip önerilmediği gösterilmektedir:
API adı | Sunucu istek karşılama modelinde destekleniyor mu? | İstemci karşılama modelinde destekleniyor mu? |
sendTextQuery()
|
Evet | Desteklenir ancak önerilmez (daha fazla bilgi için sendtextQuery() işlevini inceleyin) |
outputTts()
|
Evet | Evet |
triggerScene()
|
Hayır | Evet |
createIntentHandler(), expect(), clearExpectations(), prompt()
|
Hayır | Evet |
createNumberSlot(),createTextSlot, createConfirmationSlot, createOptionsSlot()
|
Hayır | Evet |
setHomeParam(), getHomeParam(), setUserParam(), getUserParam()
|
Hayır | Evet |
Aşağıdaki bölümlerde, Etkileşimli Tuval İşleminizdeki istemci ve sunucu tarafı karşılama modelleri için API'lerin nasıl uygulanacağı açıklanmaktadır.
İstemci taraflı istek karşılamayla derleme
Web uygulaması mantığınıza aşağıdaki Etkileşimli Tuval API'lerini uygulayabilirsiniz:
outputTts()
Bu API, Actions Builder'dan statik istem göndermeden veya bir webhook'u çağırmadan bir cihazdan metin okuma (TTS) çıkışı
yapmanızı sağlar. TTS ile ilişkili bir sunucu tarafı mantığı gerekli değilse sunucunuza gitmeyi atlayıp kullanıcılarınıza daha hızlı yanıt sağlamak için istemci tarafındaki outputTts()
öğesini kullanabilirsiniz.
İstemci tarafı outputTts()
, sunucu tarafındaki TTS'yi kesintiye uğratabilir veya iptal edebilir. Aşağıdaki önlemleri alarak sunucu tarafı TTS'nin kesintiye uğramasını önleyebilirsiniz:
- Oturumun başında
outputTts()
çağırmaktan kaçının. Bunun yerine İşleminizin ilk görüşme dönüşünde sunucu tarafı TTS kullanın. outputTts()
hizmetini arka arkaya çağırmayın (kullanıcı işlemi arasında bir işlem olmadan).
Aşağıdaki snippet'te, istemci tarafından TTS çıkışı yapmak için outputTts()
hizmetinin nasıl kullanılacağı gösterilmektedir:
interactiveCanvas.outputTts(
'<speak>This is an example response.</speak>', true);
Metin dizisine SSML işaretçileri yerleştirmek için outputTts()
onTtsMark()
ile de kullanabilirsiniz. onTtsMark()
kullanıldığında, web uygulaması animasyonunuz veya oyun durumunuz bir SSML TTS dizesinin belirli noktalarında (aşağıdaki snippet'te gösterildiği gibi) senkronize edilir:
interactiveCanvas.outputTts(
'<speak>Speak as <mark name="number" /> number <break time="700ms"/>' +
'<say-as interpret-as="cardinal">12345</say-as> <break time="300ms"/> ' +
'Speak as <mark name="digits" /> digits <break time="700ms"/>' +
'<say-as interpret-as="characters">12345</say-as></speak>', true);
Önceki örnekte, yanıtınızı özelleştiren iki işaret, TTS ile web uygulamasına gönderilir.
İstemcide amaç karşılamayı yönetme
Etkileşimli Tuval için sunucu karşılama modelinde tüm amaçların bir webhook tarafından işlenmesi gerekir. Bu da İşleminizin gecikmesini artırır. Bir webhook'u çağırmak yerine, web uygulamanızda amaçların yerine getirilmesini sağlayabilirsiniz.
Amaçları istemci taraflı işlemek için aşağıdaki API'leri kullanabilirsiniz:
createIntentHandler()
: Actions Builder'da tanımlanan özel amaçlar için web uygulaması kodunda amaç işleyicileri tanımlamanızı sağlayan bir yöntemdir.expect()
: Kullanıcının hedefle eşleşebilmesi için amaç işleyiciyi etkinleştiren/kaydeden bir yöntem.clearExpectations()
: Kullanıcı amaçla eşleşen bir ifade söylese bile, amaçların eşleştirilememesi için halihazırda etkin olan tüm amaçlara yönelik beklentileri temizleyen bir yöntem.deleteHandler()
: Bu niyetlerin eşleştirilmemesi için amaç işleyicileri tek tek devre dışı bırakan bir yöntem.
Bu API'lerle Etkileşimli Tuval İşleminizin farklı durumları için amaçları seçerek etkinleştirebilir veya devre dışı bırakabilirsiniz. Bu amaçları etkinleştirmek için amaç işleyicilerde expect()
kullanmanız gerekir.
Amaç işleyicileri etkinleştir
Amaç işleyiciyi etkinleştirmek iki adımlı bir işlemdir. İlk olarak, Actions Builder'da
niyeti tanımlamanız gerekir. Ardından, amacı eşleştirilebilir hale getirmek için amaç işleyicide expect()
işlevini çağırmanız gerekir.
İstemci tarafında bir amaç işleyici yapılandırmak ve etkinleştirmek için şu adımları uygulayın:
- Actions Console'da projenizi açın ve Özel amaç ekleyin.
Bu genel bir amaç mı? sorusu için Evet'i seçin.
Niyetinizi yapılandırın ve Kaydet'i tıklayın.
Aşağıdaki snippet'te gösterildiği gibi, web uygulaması mantığınızda amacın işleyicisini tanımlayın:
/** * Define handler for intent. */ const bookTableIntent = interactiveCanvas.createIntentHandler('reserveTable', matchedIntent => { console.log("Intent match handler to reserve a table was triggered!"); }); /** * Define handler for intent with an argument. */ const bookTableIntent = interactiveCanvas.createIntentHandler('reserveTable', matchedIntent => { const numberOfPeople = matchedIntent.getIntentArg('numberOfPeople'); console.log(`Intent match handler to reserve a table for ${number of people} was triggered!`); });
Amaç işleyiciyi kaydetmek için aşağıdaki snippet'te gösterildiği gibi
expect()
yöntemini çağırın:/** * Define handler for intent and expect() it. */ const bookTableIntent = interactiveCanvas.createIntentHandler('reserveTable', matchedIntent => { console.log("Intent match handler to reserve a table was triggered!"); }); var handler = interactiveCanvas.expect(bookTableIntent);
Amaç işleyicileri devre dışı bırak
Bir amaç işleyici tanımladıktan sonra, İşleminiz için gerektiği şekilde amacı etkinleştirebilir veya devre dışı bırakabilirsiniz. Bir amacı etkinleştirmek için expect()
çağırdığınızda, yeni oluşturulan işleyiciyi devre dışı bırakmak için kullanabileceğiniz deleteHandler()
yöntemine sahip bir nesne döndürür. Amaç o anda etkin olmasa bile amaç işleyici tanımı aynı kalır. Böylece gerektiğinde amacı yeniden etkinleştirebilirsiniz.
Bir amaç işleyiciyi devre dışı bırakmak için aşağıdaki snippet'te gösterildiği gibi amaç işleyicide deleteHandler()
çağrısı yapın:
/** * Define handler for intent and expect() it. */ const bookTableIntent = interactiveCanvas.createIntentHandler('reserveTable', matchedIntent => { console.log("Intent match handler to reserve a table was triggered!"); }); var handler = interactiveCanvas.expect(bookTableIntent); // Delete the handler for `bookTableIntent`. handler.deleteHandler();
Aşağıdaki snippet'te gösterildiği gibi, devre dışı bırakılmış bir amaç işleyiciyi yeniden eklemek için expect()
yöntemini çağırabilirsiniz:
// Re-add the `bookTableIntent` handler.
handler = interactiveCanvas.expect(bookTableIntent);
Amaçları toplu olarak devre dışı bırakmak için clearExpectations()
yöntemini kullanabilirsiniz. Bu yöntem, etkin durumdaki tüm amaçları devre dışı bırakır. Aşağıdaki snippet'te tüm intent işleyiciler için beklentilerin nasıl netleştirileceği gösterilmektedir:
interactiveCanvas.clearExpectations();
İstemcide slot doldurma işlemini işleme
Actions Builder'da bir sahneye alan doldurma işlemi eklemek yerine alan doldurma işlemini doğrudan web uygulamanızda yapabilirsiniz.
İstemci tarafındaki slot doldurma işlemini gerçekleştirmek için önce aşağıdaki API'lerden birini kullanarak bir alan oluşturmanız gerekir:
createNumberSlot(callback, hints)
: Web uygulaması kodunuzda bir sayı alanı tanımlamanızı sağlayan bir yöntemdir. Kullanıcıdan sayı istemek için kullanılır.createTextSlot(callback, hints)
: Web uygulaması kodunuzda bir metin alanı tanımlamanızı sağlayan bir yöntemdir. Kullanıcıdan kelime istemek için kullanılır.createConfirmationSlot(callback, hints)
: Web uygulaması kodunuzda onay alanı tanımlamanızı sağlayan bir yöntem. Kullanıcıdan onay istemek için kullanılır (evet/hayır).createOptionsSlot(options, callback, hints)
: Web uygulaması kodunuzda bir seçenek alanı tanımlamanızı sağlayan bir yöntem. Kullanıcıdan önceden tanımlanmış seçenekler listesinden seçim yapmasını istemek için kullanılır.
Alan oluşturduğunuzda isteğe bağlı olarak triggerHints
tanımlayabilirsiniz. Bu anahtar kelimeler, İşleminiz için doğal dil anlama (NLU) sistemini iyileştiren anahtar kelimelerdir. Bu anahtar kelimeler, kullanıcının bir alanı doldururken
söyleyebileceği kısa kelimeler olmalıdır. Örneğin, bir sayı alanı için triggerHints
anahtar kelimesi years
olabilir. Bir kullanıcı, "Otuz yaşındayım" yanıtıyla sohbette yaşıyla ilgili bir soruya yanıt verdiğinde, İşleminizin kullanıcının alanı uygun şekilde doldurduğunu algılama olasılığı daha yüksek olur.
Slot oluşturduktan sonra prompt
API'yi kullanarak kullanıcıdan slot isteğinde bulunabilirsiniz:
prompt(tts, slot)
: Kullanıcıya TTS çıkışını vererek beklenen bir alanın doldurulmasını isteyen yöntem.
prompt()
çağrıldığında, doldurulan alanın durumunu ve değerini içeren bir söz döndürülür.
Sayı alanı oluştur
Sayı alanı, görüşme sırasında kullanıcıdan bir numara istemenize olanak tanır. Slot doldurma hakkında daha fazla bilgi için Actions Builder belgelerinin Slot doldurma bölümüne bakın.
Kullanıcıdan istemci tarafındaki bir sayı alanını doldurmasını istemek için aşağıdaki adımları uygulayın:
Web uygulaması mantığınızda bir numara alanı oluşturmak için
createNumberSlot()
yöntemini çağırın:/** * Create number slot. */ const triggerHints = { associatedWords: ['guess number', 'number'] }; const slot = interactiveCanvas.createNumberSlot( number => { console.log(`Number guessed: ${number}.`); }, triggerHints);
Kullanıcıdan slot'u istemek ve döndürülen sözdeki alan değerini aşağıdaki snippet'te gösterildiği gibi işlemek için
prompt()
yöntemini çağırın:const promptPromise = interactiveCanvas.prompt( { text: 'What number am I thinking of between 1 and 10?' }, slot); promptPromise.then( answer => { if (answer.status == interactiveCanvas.AnswerStatus.ANSWERED) { // answer === {value: 5, status: ANSWERED} // Do something with answer.value } else { console.error('Promise returned unsuccessful status ' + answer.status); } });
Metin alanı oluştur
Metin alanı, görüşme sırasında kullanıcıdan bir kelime istemenize olanak tanır. Slot doldurma hakkında daha fazla bilgi için Actions Builder belgelerinin Slot doldurma bölümüne bakın.
Kullanıcıdan istemci tarafında bir metin alanını doldurmasını istemek için aşağıdaki adımları uygulayın:
Web uygulaması mantığınızda bir metin alanı oluşturmak için
createTextSlot()
yöntemini çağırın:/** * Create text slot. */ const triggerHints = { associatedWords: ['favorite color', 'color'] }; const slot = interactiveCanvas.createTextSlot( text => { console.log(`Favorite color: ${text}.`); }, triggerHints);
Kullanıcıdan slot'u istemek ve döndürülen sözdeki alan değerini aşağıdaki snippet'te gösterildiği gibi işlemek için
prompt()
yöntemini çağırın:const promptPromise = interactiveCanvas.prompt( { text: 'What is your favorite color?' }, slot); promptPromise.then( answer => { if (answer.status == interactiveCanvas.AnswerStatus.ANSWERED) { // answer === {value: "red", status: ANSWERED} // Do something with answer.value } else { console.error('Promise returned unsuccessful status ' + answer.status); } });
Onay aralığı oluştur
Onay alanı, kullanıcıdan onay istemesini sağlar (kullanıcı alanı doldurmak için "Evet" veya "Hayır" yanıtını verebilir). Slot doldurma hakkında daha fazla bilgi için Actions Builder belgelerinin Slot doldurma bölümüne bakın.
Kullanıcıdan istemci tarafında bir onay yuvasını doldurmasını istemek için aşağıdaki adımları uygulayın:
Web uygulaması mantığınızda bir onay yuvası oluşturmak için
createConfirmationSlot()
yöntemini çağırın:/** * Create confirmation slot (boolean). */ const triggerHints = { associatedWords: ['user confirmation', 'confirmation'] }; const slot = interactiveCanvas.createConfirmationSlot( yesOrNo => { console.log(`Confirmation: ${yesOrNo}`); }, triggerHints);
Kullanıcıdan slot'u istemek ve döndürülen sözdeki alan değerini aşağıdaki snippet'te gösterildiği gibi işlemek için
prompt()
yöntemini çağırın:const promptPromise = interactiveCanvas.prompt( { text: 'Do you agree to the Terms of Service?' }, slot); promptPromise.then( answer => { if (answer.status == interactiveCanvas.AnswerStatus.ANSWERED) { // answer === {value: true, status: ANSWERED} // Do something with answer.value } else { console.error('Promise returned unsuccessful status ' + answer.status); } });
Seçenek alanı oluştur
Seçenekler alanı, kullanıcıdan önceden tanımlanmış seçenekler listesinden seçim yapmasını istemenize olanak tanır. Slot doldurma hakkında daha fazla bilgi için Actions Builder belgelerinin Slot doldurma bölümüne bakın.
Kullanıcıdan istemci tarafındaki seçenekler alanını doldurmasını istemek için şu adımları uygulayın:
Web uygulaması mantığınızda seçenek alanı oluşturmak için
createOptionsSlot()
yöntemini çağırın:/** * Create options slot (list selection). */ const triggerHints = { associatedWords: ['select fruit', 'choose fruit'] }; // Define selectable options const options = [{ key: 'apple', synonyms: ['apple', 'large apple', 'gala apple'], }, { key: 'banana', synonyms: ['banana', 'green banana', 'plantain'], }]; const slot = interactiveCanvas.createOptionsSlot( options, selectedOption => { console.log(`You have selected ${selectedOption} as your fruit.`); }, triggerHints);
Kullanıcıdan slot'u istemek ve döndürülen sözdeki alan değerini aşağıdaki snippet'te gösterildiği gibi işlemek için
prompt()
yöntemini çağırın:const promptPromise = interactiveCanvas.prompt( { text: 'Would you like a banana or an apple?' }, slot); promptPromise.then( answer => { if (answer.status == interactiveCanvas.AnswerStatus.ANSWERED) { // answer === {value: 'apple', status: ANSWERED} // Do something with answer.value } else { console.error('Promise returned unsuccessful status ' + answer.status); } });
triggerScene()
triggerScene()
API, istemci tarafı istek karşılamanızdan Etkileşimli Tuval İşleminizdeki başka bir sahneye geçiş yapmanıza olanak tanır. triggerScene()
sayesinde, kullanıcının Actions Builder'da webhook gerektiren bir sistem sahnesine erişmesi gerektiğinde, istemci taraflı istek karşılamadan sunucu tarafı karşılamaya da geçebilirsiniz. Örneğin, bir kullanıcının hesabını bağlaması veya bildirim alması gerektiğinde triggerScene()
yöntemini çağırabilir, ardından bu düzenden Canvas
istemiyle istemci taraflı sipariş karşılamaya dönebilirsiniz.
Aşağıdaki snippet, triggerScene()
işlemini İşleminize nasıl uygulayacağınızı gösterir:
interactiveCanvas.triggerScene('SceneName').then((status) => {
console.log("sent the request to trigger scene.");
}).catch(e => {
console.log("Failed to trigger a scene.");
})
İstemcide ev ve kullanıcı depolama alanı
Ana sayfa ve kullanıcı depolama alanı değerlerini almak ve ayarlamak için webhook kullanmak yerine, web uygulamanızda ana sayfa ve kullanıcı depolama alanını işlemek için istemci tarafı API'leri çağırabilirsiniz. Böylece web uygulamanız, depolanan bu değerleri birden çok oturumda (ör. istem ve koşullarda) kullanabilir ve gerektiğinde belirli bir hane veya kullanıcının değerlerine erişebilir. Bu API'leri kullanmak, depolama alanı değerlerini almak ve ayarlamak için artık webhook çağırmanız gerekmediğinden Etkileşimli Tuval İşleminizdeki gecikmeyi azaltabilir.
Web uygulamasındaki ana sayfa ve kullanıcı depolama alanı, webhook'taki depolama alanıyla aynı genel ilkelere uyar. Ev ve kullanıcı depolama alanı hakkında daha fazla bilgi edinmek için Ev depolama alanı ve Kullanıcı depolama alanı belgelerine bakın.
İstemci tarafı ev depolama alanı
Ev depolama alanı, ana sayfa grafiğine göre hane kullanıcıları için değerleri depolamanıza olanak tanır ve hanedeki tüm oturumlar genelinde paylaşılır. Örneğin, bir kullanıcı bir hanede Etkileşimli Tuval oyunu oynarsa oyunun skoru evin depolama alanında saklanabilir ve diğer hane üyeleri bu skorla oyunu oynamaya devam edebilir.
İşleminizin evde depolama alanını desteklemesini sağlamak için şu adımları uygulayın:
- Actions konsolunda, Dağıtma > Dizin bilgileri > Ek Bilgiler'e gidin.
İşlemleriniz ev depolama alanını kullanıyor mu? sorusu için Evet kutusunu işaretleyin.
Web uygulamanızda ev depolama alanına bir değer yazmak için aşağıdaki snippet'te gösterildiği gibi setHomeParam()
yöntemini çağırın:
interactiveCanvas.setHomeParam('familySize', 10).then(
result => {
console.log('Set home param success');
},
fail => {
console.error(err);
});
Web uygulamanızda ev depolama alanındaki bir değeri okumak için aşağıdaki snippet'te gösterildiği gibi getHomeParam()
yöntemini çağırın:
interactiveCanvas.getHomeParam('familySize').then(
value => {
console.log(JSON.stringify(result));
},
err => {
console.error(err);
}
);
Mevcut ev depolama alanının tamamını temizlemek için aşağıdaki snippet'te gösterildiği gibi resetHomeParam()
yöntemini çağırın:
interactiveCanvas.resetHomeParam();
İstemci tarafı kullanıcı depolama alanı
Kullanıcı depolama alanı, birden fazla oturumda belirli ve doğrulanmış bir kullanıcıya ait parametre değerlerini depolamanıza olanak tanır. Örneğin, kullanıcı oyun oynuyorsa oyunun skoru bu kullanıcı için depolanabilir. Sonraki bir oyun oturumunda, kullanıcı aynı skorla oyunu oynamaya devam edebilir.
Web uygulamanızda kullanıcı depolama alanına bir değer yazmak için aşağıdaki snippet'te gösterildiği gibi setUserParam()
yöntemini çağırın:
interactiveCanvas.setUserParam('color', 'blue').then(
result => {
console.log('Set user param success');
},
err => {
console.error(err);
});
Web uygulamanızda kullanıcı depolama alanından bir değer okumak için aşağıdaki snippet'te gösterildiği gibi getUserParam()
yöntemini çağırın:
interactiveCanvas.getUserParam('color').then(
value => {
console.log(JSON.stringify(result));
},
err => {
console.error(err);
}
);
Mevcut kullanıcı depolama alanının tamamını temizlemek için aşağıdaki snippet'te gösterildiği gibi resetUserParam()
yöntemini çağırın:
interactiveCanvas.resetUserParam();
setCanvasState()
setCanvasState()
yöntemi, durum verilerini Etkileşimli Canvas web uygulamanızdan sipariş karşılama uygulamanıza göndermenizi sağlar ve Asistan'a, web uygulamasının durumunu güncellediğini bildirir. Web uygulaması, güncellenmiş durumunu JSON nesnesi olarak gönderir.
setCanvasState()
çağrıldığında bir amaç çağrılmaz. setCanvasState()
çağrıldıktan sonra, sendTextQuery()
çağrılırsa veya kullanıcı sorgusu görüşmedeki bir amaçla eşleşirse önceki görüşme sırasında setCanvasState()
ile ayarlanan veriler sonraki görüşme dönüşlerinde kullanılabilir.
Aşağıdaki snippet'te web uygulaması, Tuval durumu verilerini ayarlamak için setCanvasState()
değerini kullanır:
JavaScript
this.action.canvas.setCanvasState({ score: 150 })
Webhook'tan referans Tuval durumu
Sipariş karşılama kodunuzda, depolanan Canvas durum değerlerine referans verebilirsiniz. Değere referans vermek için conv.context.canvas.state.KEY
söz dizimini kullanın. Burada KEY
, Canvas durumu değeri ayarlandığında verilen anahtardır.
Örneğin, daha önce Canvas durumunda bir oyun için score
parametresi olarak yüksek puan değeri depoladıysanız istek karşılamada bu değere erişmek için conv.context.canvas.state.score
kullanarak bu değere referans verin:
Node.js
app.handle('webhook-name', conv => { console.log(conv.context.canvas.state.score); })
İstemlerde referans Tuval durumu
Bir istemde, depolanan Canvas durumu değerlerine referans verebilirsiniz. Değere referans vermek için $canvas.state.KEY
söz dizimini kullanın. Burada KEY
, Canvas durumu değeri ayarlandığında verilen anahtardır.
Örneğin, daha önce Canvas durumunda bir oyun için rekor değerini score
parametresi olarak depoladıysanız bu değere istemde erişmek için $canvas.state.score
kullanarak bu değere referans verin:
JSON
{ "candidates": [{ "first_simple": { "variants": [{ "speech": "Your high score is $canvas.state.score." }] } }] }
Koşullar dahilinde referans Tuval durumu
Koşullarda, depolanan Canvas durum değerlerine de referans verebilirsiniz. Değeri referans almak için canvas.state.KEY
söz dizimini kullanın. Burada KEY
, Canvas durum değeri ayarlandığında verilen anahtardır.
Örneğin, daha önce Canvas durumunda bir oyun için score
parametresi olarak yüksek puan değeri depoladıysanız ve bunu bir koşuldaki 999
değeriyle karşılaştırmak istiyorsanız canvas.state.score
kullanarak koşulunuzdaki depolanan değere başvuruda bulunabilirsiniz. Koşul ifadeniz aşağıdaki gibi görünür:
Koşul söz dizimi
canvas.state.score >= 999
sendTextQuery()
sendTextQuery()
yöntemi, bir niyeti programatik olarak eşleştirmek için Conversational Action'a metin sorguları gönderir. Bu örnekte, kullanıcı bir düğmeyi tıkladığında üçgen dönen oyunu yeniden başlatmak için sendTextQuery()
kullanılmıştır. Kullanıcı "Oyunu yeniden başlat" düğmesini tıkladığında sendTextQuery()
, Restart game
amacıyla eşleşen bir metin sorgusu gönderir ve bir söz döndürür. Bu söz, amaç tetiklenirse SUCCESS
ve etkin değilse BLOCKED
ile sonuçlanır. Aşağıdaki snippet amacı eşleştirir ve vaatin başarılı ve başarısız durumlarını yönetir:
JavaScript
… /** * Handle game restarts */ async handleRestartGame() { console.log(`Request in flight`); this.button.texture = this.button.textureButtonDisabled; this.sprite.spin = false; const res = await this.action.canvas.sendTextQuery('Restart game'); if (res.toUpperCase() !== 'SUCCESS') { console.log(`Request in flight: ${res}`); return; } console.log(`Request in flight: ${res}`); this.button.texture = this.button.textureButtonDisabled; this.sprite.spin = false; } …
Vaat, SUCCESS
ile sonuçlanırsa Restart game
webhook işleyicisi, web uygulamanıza Canvas
yanıtı gönderir:
JavaScript
… app.handle('restart', conv => { conv.add(new Canvas({ data: { command: 'RESTART_GAME' } })); }); …
Bu Canvas
yanıtı, aşağıdaki RESTART_GAME
kod snippet'indeki kodu yürüten onUpdate()
geri çağırmasını tetikler:
JavaScript
… RESTART_GAME: (data) => { this.scene.button.texture = this.scene.button.textureButton; this.scene.sprite.spin = true; this.scene.sprite.tint = 0x00FF00; // green this.scene.sprite.rotation = 0; }, …
Sunucu tarafı istek karşılama ile derleme
Webhook'unuza aşağıdaki Etkileşimli Tuval API'lerini uygulayabilirsiniz:
Tam ekran modunu etkinleştirme
Varsayılan olarak, Etkileşimli Tuval web uygulamaları ekranın üst kısmında İşleminizin adını içeren bir başlık içerir. Başlığı kaldırmak ve yükleme ekranında görünen geçici bir durum mesajıyla değiştirmek için enableFullScreen
kullanabilirsiniz. Bu, kullanıcınızın İşleminizle etkileşimde bulunurken tam ekran deneyimi yaşamasına olanak tanır. Bildirim mesajında İşlemin görünen adı, geliştiricinin adı ve İşlem'den çıkma talimatları gösterilir. Bildirim rengi, kullanıcının cihazında tema olarak seçtiği öğeye göre değişir.
Bir kullanıcı İşleminizle sık sık etkileşimde bulunursa durum mesajı mesajının yükleme ekranında gösterilmesi geçici olarak durdurulur. Kullanıcı bir süre boyunca İşleminizle etkileşimde bulunmazsa İşlemi başlattığında durum mesajı mesajı yeniden gösterilir.
Tam ekran modunu webhook'unuzda veya İşlemler Oluşturucu'daki statik bir istemde etkinleştirebilirsiniz.
Webhook'unuzda tam ekran modunu etkinleştirmek için şu adımı uygulayın:
Bir oturumdaki webhook tarafından döndürülen ilk
canvas
yanıtındaenableFullScreen
alanınıtrue
olarak ayarlayın. Aşağıdaki snippet, Node.js istemci kitaplığının kullanıldığı bir örnek uygulamadır:const { conversation, Canvas } = require('@assistant/conversation'); const functions = require('firebase-functions'); const app = conversation(); app.handle('invocation_fullscreen', conv => { conv.add(new Canvas( { url: 'https://example-url.com', enableFullScreen: true })); }); exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
Actions Builder'daki statik bir istemde tam ekran modunu etkinleştirmek için şu adımları uygulayın:
- Actions Console'da projenizi açın.
- Gezinme çubuğunda Geliştir'i tıklayın ve ilk
canvas
yanıtını içeren istemi açın. enable_full_screen
öğesini, aşağıdaki snippet'te gösterildiği gibitrue
olarak ayarlayın:{ "candidates": [ { "canvas": { "url": "https://example-url.com", "enable_full_screen": true } } ] }
continueTtsDuringTouch
Varsayılan olarak, kullanıcı Etkileşimli Tuval İşlemini kullanırken ekrana dokunduğunda TTS oynatmayı durdurur. Kullanıcılar continueTtsDuringTouch
ile ekrana dokunduğunda TTS'nin oynatmaya devam etmesini sağlayabilirsiniz. Bu davranış aynı oturumda açılıp kapatılamaz.
Bu davranışı webhook'unuzda veya Actions Builder'daki statik bir istemde uygulayabilirsiniz.
Kullanıcı webhook'unuzdaki ekrana dokunduktan sonra TTS'nin devam etmesini sağlamak için şu adımı uygulayın:
Bir oturumdaki webhook tarafından döndürülen ilk
canvas
yanıtındacontinueTtsDuringTouch
alanınıtrue
olarak ayarlayın. Aşağıdaki snippet, Node.js istemci kitaplığının kullanıldığı bir örnek uygulamadır:const { conversation, Canvas } = require('@assisant/conversation'); const functions = require('firebase-functions'); const app = conversation(); app.handle('intent-name', conv => { conv.add(new Canvas( { url: 'https://example-url.com', continueTtsDuringTouch: true })); }); exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
Kullanıcı, İşlemler Oluşturucu'da statik bir istemde ekrana dokunduktan sonra TTS'nin devam etmesini sağlamak için şu adımları uygulayın:
- Actions Console'da projenizi açın.
- Gezinme çubuğunda Geliştir'i tıklayın ve ilk
canvas
yanıtını içeren istemi açın. continue_tts_during_touch
öğesini, aşağıdaki snippet'te gösterildiği gibitrue
olarak ayarlayın:{ "candidates": [ { "canvas": { "url": "https://example-url.com", "continue_tts_during_touch": true } } ] }