İleti dizisindeki verileri kaydetme (Dialogflow)

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:

  1. Bir temsilci adı girin ve örnek için yeni bir Dialogflow aracısı oluşturun.
  2. Temsilci içe aktarma işlemini tamamladıktan sonra Temsilciye git'i tıklayın.
  3. Ana gezinme menüsünden Karşılama'ya gidin.
  4. Satır İçi Düzenleyici'yi etkinleştirin ve ardından Dağıt'ı tıklayın. Düzenleyici, örnek kodu içerir.
  5. Ana gezinme menüsünden Entegrasyonlar'a gidin ve Google Asistan'ı tıklayın.
  6. 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.
  7. Örneği test etmek için simülasyon aracında Talk to my test app ifadesini girin.
Devam

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:

  1. Kullanıcının doğrulandığını veya misafir olduğunu belirleyin.
  2. AppResponse nesnenizin userStorage 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.

  1. Telefonunuzda Asistan uygulamasını açın.
  2. Çekmece simgesine dokunun.

  3. 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.
  4. 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.