Jelajahi di Dialogflow
Klik Continue untuk mengimpor contoh Save data di Dialogflow. Kemudian, ikuti langkah-langkah di bawah ini untuk men-deploy dan menguji sampel:
- Masukkan nama agen dan buat agen Dialogflow baru untuk contoh.
- Setelah agen selesai mengimpor, klik Buka agen.
- Dari menu navigasi utama, buka Fulfillment.
- Aktifkan Inline Editor, lalu klik Deploy. Editor berisi kode contoh.
- Dari menu navigasi utama, buka Integrations, lalu klik Google Assistant.
- Di jendela modal yang muncul, aktifkan Perubahan pratinjau otomatis, lalu klik Uji untuk membuka simulator Action.
- Pada simulator, masukkan
Talk to my test app
untuk menguji sampel.
Bagian dari memberikan pengalaman pengguna yang sangat baik sering kali adalah kemampuan menyimpan data di antara percakapan atau beberapa percakapan dengan pengguna. Hal ini berguna jika Anda memberikan permintaan ulang yang berguna dalam satu percakapan, menyimpan skor game di seluruh sesi, atau mengingat informasi kecil untuk pengguna.
Persyaratannya sedikit berbeda bergantung pada apakah Anda perlu menyimpan data dalam
percakapan atau di seluruh percakapan. Untuk menyimpan data dalam percakapan, Anda dapat
menggunakan kolom conversationToken
dari objek AppResponse
.
Untuk menyimpan data di seluruh percakapan, lakukan langkah-langkah berikut:
- Tentukan apakah pengguna diverifikasi atau tamu.
- Simpan atau akses data pengguna menggunakan kolom
userStorage
dari objekAppResponse
Anda.
Menyimpan data di antara putaran percakapan
Kolom conversationToken
adalah string yang berisi token buram yang
diedarkan ulang ke Action setiap percakapan. Misalnya, jika Anda menetapkan
nilai ke "count=1"
di AppResponse
untuk putaran pertama
percakapan, AppRequest
yang diterima oleh Action Anda untuk putaran kedua
percakapan akan berisi "count=1"
dalam conversationToken
-nya.
Token selalu diinisialisasi ke string kosong di awal
percakapan. Jika menggunakan library klien Actions on Google Node.js, Anda dapat berinteraksi dengan token percakapan sebagai objek JSON menggunakan conv.data
, dengan conv
sebagai instance Conversation
Anda.
Contoh berikut menunjukkan cara menyimpan penghitung di kolom conversationToken
dari AppResponse
:
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
Perhatikan bahwa JSON di bawah menjelaskan respons webhook yang menggunakan outputContexts
, bukan conversationToken
.
{ "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
Perhatikan bahwa JSON di bawah menjelaskan respons webhook.
{ "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}}" }
Lihat panduan praktik terbaik Memberikan permintaan ulang yang bermanfaat dan gagal dengan lancar untuk contoh penggunaan praktis.
Menyimpan data di seluruh percakapan
Kolom userStorage
objek AppResponse
Anda adalah string yang
berisi token buram yang disediakan oleh Action yang disimpan di
percakapan untuk pengguna tertentu. Misalnya, game dapat menyimpan skor
tertinggi pengguna di userStorage
dan menggunakan nilainya dalam pesan selamat datang setiap
kali pengguna memulai percakapan baru.
Menentukan dan menangani status verifikasi pengguna
Status verifikasi pengguna dapat memiliki nilai GUEST
atau VERIFIED
. Di
awal setiap percakapan, Actions on Google menetapkan status verifikasi
pengguna berdasarkan berbagai indikator saat percakapan dimulai. Misalnya, pengguna yang login ke Asisten Google di perangkat selulernya memiliki
status verifikasi VERIFIED
.
Berikut adalah kemungkinan alasan pengguna memiliki status verifikasi
GUEST
:
- Pengguna telah menonaktifkan hasil personal.
- Pengguna menonaktifkan Aktivitas Web & Aplikasi. Perlu diingat bahwa beberapa pengguna mungkin menonaktifkan setelan ini di tingkat domain.
- Jika perangkat telah mengaktifkan Voice Match, dan pencocokan gagal atau pengguna memanggil Asisten tanpa menggunakan suaranya (seperti menekan lama di Google Home).
- Pengguna tidak login.
Selalu periksa status verifikasi pengguna sebelum menyimpan data dengan userStorage
atau memulai alur penautan akun untuk mencegah pengguna tamu berinteraksi dengan fitur yang akan gagal bagi mereka.
Jika menggunakan Library Klien Google Actions On untuk Node.js,
Anda dapat berinteraksi dengan penyimpanan pengguna sebagai objek JSON menggunakan
conv.user.storage
, dengan conv
sebagai instance Conversation
Anda. Contoh
berikut menunjukkan cara menyimpan penghitung di kolom userStorage
pada
AppResponse
Anda:
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
Perhatikan bahwa JSON di bawah menjelaskan respons webhook.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] }, "userStorage": "{\"data\":{\"sum\":68}}" } } }
JSON
Perhatikan bahwa JSON di bawah menjelaskan respons webhook.
{ "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}}" }
Lihat panduan praktik terbaik Mempersonalisasi percakapan dengan preferensi pengguna untuk contoh penggunaan praktis.
Catatan hukum: Mendapatkan izin sebelum mengakses userStorage
.
Beberapa negara memiliki peraturan yang mewajibkan developer untuk mendapatkan izin dari pengguna sebelum mereka dapat mengakses, atau menyimpan informasi tertentu (seperti informasi pribadi) di userStorage
. Jika Anda beroperasi di salah satu negara tersebut dan ingin mengakses, atau menyimpan informasi tersebut di userStorage
, Anda harus menggunakan Helper konfirmasi untuk meminta izin kepada pengguna dan memperoleh persetujuan sebelum dapat mulai menyimpan informasi tersebut di userStorage
.
Akhir masa berlaku penyimpanan pengguna
Jika Asisten dapat mencocokkan identitas dengan pengguna, konten
userStorage
tidak akan pernah habis masa berlakunya, dan hanya pengguna atau Action itu sendiri yang dapat menghapusnya.
Jika Asisten tidak dapat mencocokkan identitas dengan pengguna, konten
userStorage
akan dihapus di akhir percakapan. Berikut adalah beberapa contoh
kasus saat Asisten tidak dapat mencocokkan identitas dengan pengguna:
- Voice Match telah disiapkan dan tidak ada kecocokan.
- Pengguna menonaktifkan data pribadi.
Hapus konten kolom userStorage
Anda dapat menghapus konten kolom userStorage
di Action dengan
menyetel kolom resetUserStorage
pada AppResponse
ke true. Jika
Anda menetapkan nilai userStorage
ke string kosong, nilai
userStorage
tidak akan diubah pada percakapan berikutnya. Hal ini memungkinkan Anda
menghindari pengiriman kembali seluruh userStorage
secara bergantian jika kontennya tidak
berubah.
Jika menggunakan Library Klien Google Actions On untuk Node.js,
Anda cukup menetapkan nilai conv.user.storage
ke {}
(objek kosong).
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
Perhatikan bahwa JSON di bawah menjelaskan respons webhook.
{ "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
Perhatikan bahwa JSON di bawah menjelaskan respons webhook.
{ "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\":{}}" }
Sebagai pengguna, Anda dapat melihat konten kolom userStorage
dalam Action yang
dipanggil. Anda juga dapat menghapus data pengguna yang disimpan dari Action tertentu tersebut
dengan menghentikan layanan mengingat Anda.
- Buka aplikasi Assistant di ponsel Anda.
- Ketuk ikon panel samping.
- Di tab Jelajahi, temukan Action yang ingin Anda lihat atau hapus penyimpanan penggunanya, lalu ketuk untuk membuka halaman detail.
- Scroll ke bagian bawah halaman.
- Untuk melihat konten kolom
userStorage
, ketuk [View penyimpanan data]. - Untuk menghapus data pengguna yang tersimpan, ketuk Hentikan $action mengingat saya.
- Untuk melihat konten kolom