Jelajahi di Dialogflow
Klik Continue untuk mengimpor sampel Save data di Dialogflow. Kemudian, ikuti langkah-langkah di bawah ini untuk men-deploy dan menguji contoh:
- Masukkan nama agen dan buat agen Dialogflow baru untuk contoh.
- Setelah agen selesai diimpor, klik Go to agent.
- Dari menu navigasi utama, buka Fulfillment.
- Aktifkan Inline Editor, lalu klik Deploy. Editor berisi contoh tersebut pada kode sumber.
- Dari menu navigasi utama, buka Integrations, lalu klik Google Asisten.
- Di jendela modal yang muncul, aktifkan Pratinjau perubahan secara otomatis, lalu klik Uji untuk membuka simulator Actions.
- Dalam simulator, masukkan
Talk to my test app
untuk menguji sampel.
Bagian dari memberikan pengalaman pengguna yang sangat baik adalah sering kali kita dapat menghemat data di antara percakapan atau di beberapa percakapan dengan pengguna. Ini sangat membantu jika Anda memberikan perintah ulang dalam satu percakapan, menyimpan skor game di seluruh sesi, atau mengingat informasi kecil untuk pengguna.
Persyaratannya sedikit berbeda berdasarkan apakah Anda perlu menyimpan data dalam
atau di seluruh percakapan. Untuk menyimpan data dalam percakapan, Anda dapat
gunakan kolom conversationToken
dari objek AppResponse
Anda.
Untuk menyimpan data di seluruh percakapan, lakukan langkah-langkah berikut:
- Menentukan apakah pengguna terverifikasi atau tamu.
- Simpan atau akses data pengguna menggunakan kolom
userStorage
pada objekAppResponse
Anda.
Menyimpan data antar-giliran percakapan
Kolom conversationToken
adalah string yang berisi token buram yang
diresirkulasi ke Action setiap giliran percakapan. Misalnya, jika Anda menetapkan
nilai ke "count=1"
di AppResponse
untuk belokan pertama
percakapan, AppRequest
yang diterima oleh Action Anda untuk giliran kedua
percakapan berisi "count=1"
dalam conversationToken
.
Token selalu diinisialisasi ke string kosong di awal
percakapan. Jika Anda menggunakan
Action di library klien Node.js Google, Anda dapat
antarmuka dengan token percakapan sebagai objek JSON menggunakan conv.data
, dengan
conv
adalah instance Conversation
Anda.
Contoh berikut menunjukkan cara menyimpan penghitung di conversationToken
kolom AppResponse
Anda:
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
Perlu diperhatikan bahwa JSON di bawah ini 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
Perlu diperhatikan bahwa JSON di bawah mendeskripsikan 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 Memberikan perintah ulang yang bermanfaat dan gagal dengan baik panduan praktik terbaik untuk contoh penggunaan praktis.
Menyimpan data di seluruh percakapan
Kolom userStorage
dari objek AppResponse
Anda adalah string yang
berisi token buram yang disediakan oleh Action yang disimpan di
untuk pengguna tertentu. Misalnya, game dapat menyimpan
skor pengguna di userStorage
dan menggunakan nilainya dalam setiap 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 akan menetapkan verifikasi pengguna
status berdasarkan berbagai indikator
saat percakapan dimulai. Sebagai satu
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 layanan Web & Aktivitas 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 pada Beranda).
- Pengguna belum 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 untuk mereka.
Jika Anda menggunakan Library Klien Actions On Google untuk Node.js,
Anda dapat berinteraksi dengan penyimpanan pengguna
sebagai objek JSON menggunakan
conv.user.storage
, dengan conv
adalah instance Conversation
Anda. Tujuan
contoh berikut menunjukkan cara menyimpan penghitung di kolom userStorage
file
AppResponse
:
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
Perlu diperhatikan bahwa JSON di bawah mendeskripsikan 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
Perlu diperhatikan bahwa JSON di bawah mendeskripsikan 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 Mempersonalisasi percakapan dengan preferensi pengguna panduan praktik terbaik 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
) di userStorage
. Jika Anda beroperasi di salah satu
negara dan Anda ingin mengakses, atau menyimpan informasi tersebut di
userStorage
, Anda harus menggunakan
Pemandu konfirmasi untuk meminta
memberikan izin kepada pengguna dan memperoleh persetujuan
sebelum Anda mulai menyimpan
informasi di userStorage
.
Akhir masa berlaku penyimpanan pengguna
Saat Asisten bisa mencocokkan identitas dengan pengguna, konten
userStorage
tidak pernah berakhir masa berlakunya, dan hanya pengguna atau Action itu sendiri yang dapat menghapusnya.
Jika Asisten tidak bisa mencocokkan
identitas dengan pengguna, isi dari
userStorage
dihapus pada akhir percakapan. Berikut beberapa contohnya
kasus saat Asisten tidak dapat mencocokkan identitas dengan pengguna:
- Voice Match sudah disiapkan dan tidak ada yang cocok.
- Pengguna menonaktifkan data pribadi.
Menghapus konten kolom userStorage
Anda dapat menghapus konten kolom userStorage
dari Action Anda dengan
menetapkan kolom resetUserStorage
dari AppResponse
ke nilai benar (true). Jika
Anda menyetel nilai userStorage
ke string kosong, nilai
userStorage
tetap tidak diubah pada percakapan berikutnya. Hal ini memungkinkan Anda
menghindari mengirim kembali seluruh userStorage
secara bergantian jika kontennya tidak
berubah.
Jika Anda menggunakan Library Klien Actions On Google 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
Perlu diperhatikan bahwa JSON di bawah mendeskripsikan 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
Perlu diperhatikan bahwa JSON di bawah mendeskripsikan 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 tersimpan dari Action tertentu tersebut
dengan menghentikan layanan
agar tidak mengingat Anda.
- Buka aplikasi Assistant di ponsel Anda.
- Ketuk ikon panel samping.
- Di tab Jelajahi, temukan Tindakan yang ingin Anda lihat atau hapus pengguna dan ketuk untuk membuka halaman detail.
- Scroll ke bagian bawah halaman.
- Untuk melihat konten kolom
userStorage
, ketuk [Lihat data yang disimpan]. - Untuk menghapus data pengguna yang tersimpan, ketuk Hentikan $action agar tidak mengingat saya.
- Untuk melihat konten kolom