Dialogflow'da keşfet
Dialogflow'a Veri kaydetme örneğimizi içe aktarmak için Devam'ı tıklayın. Ardından örneği dağıtmak ve test etmek için aşağıdaki adımları uygulayın:
- Bir temsilci adı girin ve örnek için yeni bir Dialogflow aracısı oluşturun.
- Temsilci içe aktarma işlemini tamamladıktan sonra Temsilciye git'i tıklayın.
- Ana gezinme menüsünden Karşılama'ya gidin.
- Satır İçi Düzenleyici'yi etkinleştirin ve ardından Dağıt'ı tıklayın. Düzenleyici, örnek kodu içerir.
- Ana gezinme menüsünden Entegrasyonlar'a gidin ve Google Asistan'ı tıklayın.
- Görüntülenen kalıcı pencerede, Değişiklikleri otomatik önizleme'yi etkinleştirin ve İşlem simülatörünü açmak için Test et'i tıklayın.
- Örneği test etmek için simülasyon aracında
Talk to my test app
ifadesini girin.
Genellikle bir görüşmenin dönüşleri arasında veya bir kullanıcıyla yapılan birden fazla görüşme sırasında veri tasarrufu yapabilmek, mükemmel bir kullanıcı deneyimi sağlamanın bir parçasıdır. Tek bir görüşmede faydalı öneriler sunuyorsanız, oturumlar arasında oyun skorlarını kaydediyorsanız veya bir kullanıcı için küçük bilgileri hatırlayorsanız bu faydalı olacaktır.
Gereksinimler, bir görüşmede mi yoksa görüşmeler arasında mı veri kaydetmeniz gerektiğine bağlı olarak biraz farklılık gösterir. Bir görüşmede veri kaydetmek için AppResponse
nesnenizin conversationToken
alanını kullanabilirsiniz.
İleti dizileri arasında veri kaydetmek için aşağıdaki adımları uygulayın:
- Kullanıcının doğrulandığını veya misafir olduğunu belirleyin.
AppResponse
nesnenizinuserStorage
alanını kullanarak kullanıcı verilerini depolayın veya verilere erişin.
Görüşmeler arasında veri kaydetme
conversationToken
alanı, her konuşma dönüşünde işleme gönderilen opak bir jeton içeren bir dizedir. Örneğin, AppResponse
bölümünde görüşmenin ilk turu için değeri "count=1"
olarak ayarlarsanız İşleminizin ikinci turunda aldığı AppRequest
, conversationToken
öğesinde "count=1"
değerini içerir.
Jeton, bir ileti dizisinin başında her zaman boş bir dizeyle başlatılır. Actions on Google Node.js istemci kitaplığını kullanırsanız conv.data
kullanarak görüşme jetonuyla JSON nesnesi olarak arayüz oluşturabilirsiniz. Burada conv
, Conversation
örneğinizdir.
Aşağıdaki örnekte, AppResponse
öğenizin conversationToken
alanına nasıl sayaç kaydedileceği gösterilmektedir:
Node.js
conv.data.firstNum = firstNum; conv.ask(`Got it, the first number is ${firstNum}.`); conv.ask(`What's the second number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getConversationData().put("firstNum", firstNum); responseBuilder.add("Got it, the first number is " + firstNum + "."); responseBuilder.add("What's the second number?"); return responseBuilder.build();
JSON
Aşağıdaki JSON dosyasında, conversationToken
yerine outputContexts
kullanan bir webhook yanıtının açıklandığını unutmayın.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } }, "outputContexts": [ { "name": "projects/save-data-df-js/agent/sessions/ABwppHGfFkWJdHKPpBEYiGkhdoakWmYj_2sZa4o8pbGG9nj4q5_GfDTtNEXOY34mLX8G4o_d7oZdUW9bnBZC/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{\"firstNum\":23}" } } ] }
JSON
Aşağıdaki JSON'un bir webhook yanıtını açıkladığını unutmayın.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } } ], "conversationToken": "{\"data\":{\"firstNum\":23}}" }
Pratik kullanım örneği için Faydalı öneriler sunma ve başarılı bir şekilde başarısız olma en iyi uygulamalar kılavuzumuzu inceleyin.
Görüşmeler genelinde veri kaydetme
AppResponse
nesnenizin userStorage
alanı, işlem tarafından sağlanan ve belirli bir kullanıcı için görüşmelerde kaydedilen opak bir jeton içeren bir dizedir. Örneğin, bir oyun userStorage
bölgesinde bir kullanıcının en yüksek puanını kaydedebilir ve kullanıcı her yeni görüşme başlattığında bu puanı karşılama mesajında kullanabilir.
Kullanıcı doğrulama durumunu belirleme ve işleme
Kullanıcının doğrulama durumu GUEST
veya VERIFIED
değerine sahip olabilir. Actions on Google, her görüşmenin başında görüşme başladığında çeşitli göstergelere göre kullanıcının doğrulama durumunu ayarlar. Örneğin, mobil cihazında Google Asistan'a giriş yapan bir kullanıcının doğrulama durumu VERIFIED
olur.
Bir kullanıcının doğrulama durumunun GUEST
olmasının olası nedenleri aşağıda belirtilmiştir:
- Kullanıcı, kişisel sonuçları devre dışı bıraktı.
- Kullanıcı, Web ve Uygulama Etkinliği'ni devre dışı bıraktıysa. Bazı kullanıcıların bu ayarın alan adı düzeyinde devre dışı bırakılmış olabileceğini unutmayın.
- Bir cihazda Voice Match etkinleştirildiğinde eşleşme başarısız olursa veya kullanıcı kendi sesini kullanmadan Asistan'ı çağırırsa (ör. Google Home'a uzun basma).
- Kullanıcı oturum açmamış.
Misafir kullanıcıların, başarısız olacak bir özellikle etkileşimde bulunmasını önlemek için verileri userStorage
ile depolamadan veya hesap bağlama akışı başlatmadan önce her zaman kullanıcının doğrulama durumunu kontrol edin.
Node.js için Actions On Google İstemci Kitaplığı'nı kullanıyorsanız kullanıcı depolama alanını, conv.user.storage
kullanarak JSON nesnesi olarak arayüz oluşturabilirsiniz. Burada conv
, Conversation
örneğinizdir. Aşağıdaki örnekte, AppResponse
dosyanızın userStorage
alanına bir sayacı nasıl kaydedeceğiniz gösterilmektedir:
Node.js
app.intent('Save Sum', (conv) => { if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); } });
Java
@ForIntent("Save Sum") public ActionResponse saveSum(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build(); }
Node.js
if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); }
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build();
JSON
Aşağıdaki JSON'un bir webhook yanıtını açıkladığını unutmayın.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] }, "userStorage": "{\"data\":{\"sum\":68}}" } } }
JSON
Aşağıdaki JSON'un bir webhook yanıtını açıkladığını unutmayın.
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] } }, "conversationToken": "{\"data\":{\"firstNum\":23,\"sum\":68}}", "userStorage": "{\"data\":{\"sum\":68}}" }
Pratik bir kullanım örneği için Sohbeti kullanıcı tercihleriyle kişiselleştirme en iyi uygulamalar kılavuzumuza bakın.
Yasal not: userStorage
hizmetine erişmeden önce izin alma.
Bazı ülkelerde, geliştiricilerin userStorage
içinde belirli bilgilere (kişisel bilgiler gibi) erişmek veya bu bilgileri kaydetmek için kullanıcıdan izin almasını gerektiren yönetmelikler vardır. Bu ülkelerden birinde faaliyet gösteriyorsanız ve userStorage
üzerinde bu tür bilgilere erişmek veya bu bilgileri kaydetmek istiyorsanız bu tür bilgileri userStorage
üzerinde depolamaya başlamadan önce kullanıcıdan izin istemek ve onay almak için Onay yardımcısını kullanmanız gerekir.
Kullanıcı depolama alanı süresinin dolması
Asistan bir kimliği kullanıcıyla eşleştirebildiğinde userStorage
içeriğinin süresi hiçbir zaman dolmaz ve bunu yalnızca kullanıcı veya işlemin kendisi temizleyebilir.
Asistan, bir kimliği kullanıcıyla eşleştiremediğinde görüşmenin sonunda userStorage
içeriği silinir. Asistan'ın bir kimliği kullanıcıyla eşleştiremediği durumlara bazı örnekleri burada bulabilirsiniz:
- Voice Match kuruldu ve eşleşme yok.
- Kullanıcı kişisel verileri devre dışı bıraktı.
userStorage alanının içeriğini temizleme
AppResponse
dosyanızın resetUserStorage
alanını doğru değerine ayarlayarak İşleminizin userStorage
alanının içeriğini temizleyebilirsiniz. userStorage
değerini boş bir dizeye ayarlarsanız userStorage
değeri bir sonraki ileti dizisinde değişmeden kalır. Bu, içeriğinin değişmediği yerlerde userStorage
öğesinin tamamını geri göndermekten kaçınmanızı sağlar.
Node.js için Google İstemci Kitaplığı'nda İşlemler'i kullanıyorsanız conv.user.storage
değerini {}
(boş nesne) olarak belirleyebilirsiniz.
Node.js
app.intent('Forget Number', (conv) => { conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`); });
Java
@ForIntent("Forget Number") public ActionResponse forgetNumber(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build(); }
Node.js
conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build();
JSON
Aşağıdaki JSON'un bir webhook yanıtını açıkladığını unutmayın.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] }, "userStorage": "{\"data\":{}}" } } }
JSON
Aşağıdaki JSON'un bir webhook yanıtını açıkladığını unutmayın.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] } } } ], "userStorage": "{\"data\":{}}" }
Kullanıcı olarak, çağırdığınız bir İşlemdeki userStorage
alanının içeriğini görüntüleyebilirsiniz. Ayrıca, hizmetin sizi hatırlamasını engelleyerek depolanan kullanıcı verilerinizi söz konusu İşlemden kaldırabilirsiniz.
- Telefonunuzda Asistan uygulamasını açın.
- Çekmece simgesine dokunun.
- Keşfet sekmesinde, kullanıcı depolama alanını görüntülemek veya temizlemek istediğiniz İşlemi bulun ve dokunarak ayrıntılar sayfasını açın.
- Sayfanın alt kısmına gidin.
userStorage
alanının içeriğini görüntülemek için [Kayıtlı verileri göster]'e dokunun.- Depolanmış kullanıcı verilerini kaldırmak için $action'ın beni hatırlamasını durdur'a dokunun.