Menyimpan data dalam percakapan (Dialogflow)

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:

  1. Masukkan nama agen dan buat agen Dialogflow baru untuk contoh.
  2. Setelah agen selesai diimpor, klik Go to agent.
  3. Dari menu navigasi utama, buka Fulfillment.
  4. Aktifkan Inline Editor, lalu klik Deploy. Editor berisi contoh tersebut pada kode sumber.
  5. Dari menu navigasi utama, buka Integrations, lalu klik Google Asisten.
  6. Di jendela modal yang muncul, aktifkan Pratinjau perubahan secara otomatis, lalu klik Uji untuk membuka simulator Actions.
  7. Dalam simulator, masukkan Talk to my test app untuk menguji sampel.
Lanjutkan

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:

  1. Menentukan apakah pengguna terverifikasi atau tamu.
  2. Simpan atau akses data pengguna menggunakan kolom userStorage pada objek AppResponse 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.

  1. Buka aplikasi Assistant di ponsel Anda.
  2. Ketuk ikon panel samping.

  3. Di tab Jelajahi, temukan Tindakan yang ingin Anda lihat atau hapus pengguna dan ketuk untuk membuka halaman detail.
  4. 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.