حفظ البيانات في المحادثة (Dialogflow)

الاستكشاف في Dialogflow

انقر على متابعة لاستيراد نموذج حفظ البيانات في Dialogflow. بعد ذلك، اتبع الخطوات أدناه لنشر النموذج واختباره:

  1. أدخِل اسم الوكيل وأنشِئ وكيل Dialogflow جديد للنموذج.
  2. بعد انتهاء عملية الاستيراد، انقر على الانتقال إلى الوكيل.
  3. من قائمة التنقّل الرئيسية، انتقِل إلى توصيل الطلبات.
  4. فعِّل المحرّر المضمّن، ثم انقر على نشر. يحتوي المحرِّر على العيّنة الرمز.
  5. من قائمة التنقل الرئيسية، انتقِل إلى عمليات الدمج، ثم انقر على Google "مساعد Google"
  6. في النافذة المشروطة التي تظهر، فعِّل تغييرات المعاينة التلقائية وانقر على اختبار. لفتح محاكي الإجراءات.
  7. في المحاكي، أدخِل Talk to my test app لاختبار العيّنة.
متابعة

جزء من توفير تجربة مستخدم ممتازة غالبًا ما يكون القدرة على حفظ البيانات بين منعطفات المحادثة أو عبر عدة محادثات مع المستخدم. يكون هذا مفيدًا إذا كنت تقدم عبارات مفيدة مفيدة في محادثة واحدة، أو حفظ نتائج اللعبة في جميع الجلسات، أو تذكُّر معلومات صغيرة للمستخدم.

تختلف المتطلبات قليلاً بناءً على ما إذا كنت بحاجة إلى حفظ البيانات في أو عبر المحادثات. لحفظ البيانات في محادثة، يمكنك: استخدِم الحقل conversationToken في الكائن AppResponse.

لحفظ البيانات في المحادثات، اتّبِع الخطوات التالية بدلاً من ذلك:

  1. حدِّد ما إذا كان المستخدم قد تم التحقّق من هويته أو كان ضيفًا.
  2. تخزين بيانات المستخدمين أو الوصول إليها باستخدام الحقل userStorage في الكائن AppResponse.

حفظ البيانات بين منعطفات محادثة

الحقل conversationToken هو سلسلة تحتوي على رمز مميّز مبهم إلى الإجراء في كل منعطف. على سبيل المثال، إذا قمتَ بتعيين القيمة إلى "count=1" في AppResponse في أول دور من محادثة، تلقاها AppRequest في المهمة الثانية من المحادثة تحتوي على "count=1" في conversationToken.

يتم دائمًا تهيئة الرمز المميز إلى سلسلة فارغة في بداية محادثة. إذا كنت تستخدم الإجراءات على مكتبة برامج Google Node.js، يمكنك بالرمز المميز للمحادثة ككائن JSON باستخدام conv.data، حيث يكون conv هو مثالك على Conversation.

يعرض النموذج التالي كيفية حفظ عدّاد في conversationToken. الحقل في 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

لاحظ أن JSON أدناه يصف استجابة الرد التلقائي على الويب التي تستخدم outputContexts بدلاً من 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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "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}}"
}

الاطّلاع على مقالة تقديم طلبات مفيدة والإجابة عن أسئلتك بشكل صحيح دليل أفضل الممارسات لمثال على الاستخدام العملي.

حفظ البيانات في المحادثات

الحقل userStorage في كائن AppResponse هو سلسلة يحتوي على رمز مميز غير شفاف يوفره الإجراء الذي يتم حفظه عبر المحادثات لمستخدم معين. على سبيل المثال، تحقق اللعبة أعلى نسبة نتيجة المستخدم في userStorage واستخدام قيمته في رسالة الترحيب الوقت الذي يبدأ فيه المستخدم محادثة جديدة.

تحديد حالة التحقق من المستخدم ومعالجتها

يمكن أن تكون قيمة حالة إثبات هوية المستخدم GUEST أو VERIFIED. في جلسة المعمل، بداية كل محادثة، تضبط "المهام مع مساعد Google" عملية إثبات هوية المستخدم. الحالة بناءً على مجموعة متنوعة من المؤشرات عند بدء المحادثة. كواحد على سبيل المثال، إذا سجّل مستخدم سجّل الدخول إلى "مساعد Google" على جهازه الجوّال حالة تحقق VERIFIED.

في ما يلي الأسباب المحتملة التي تؤدي إلى ظهور حالة إثبات هوية المستخدم GUEST:

  • إذا كانت النتائج الشخصية غير مفعّلة لدى المستخدم.
  • عطّل المستخدم إعدادات الويب النشاط على التطبيقات: ضع في اعتبارك أن بعض المستخدمين قد يتم إيقاف هذا الإعداد على مستوى النطاق.
  • إذا كانت ميزة Voice Match مفعّلة على الجهاز وتعذّرت المطابقة أو استدعى المستخدم. "مساعد Google" بدون استخدام صوته (مثل الضغط مع الاستمرار على الصفحة الرئيسية).
  • لم يسجّل المستخدم الدخول.

التحقق دائمًا من حالة تحقق المستخدم قبل تخزين البيانات باستخدام userStorage أو بدء عملية ربط الحساب لمنع المستخدمين الضيوف من يتفاعل مع ميزة لن ينجح بالنسبة له.

إذا كنت تستخدم Actions On Google Client Library for Node.js، يمكنك التفاعل مع سعة تخزين المستخدم ككائن JSON باستخدام conv.user.storage، حيث conv هو مثالك على Conversation. تشير رسالة الأشكال البيانية يعرض النموذج التالي كيفية حفظ عدّاد في الحقل userStorage ضمن 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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Alright, I'll store that for next time. See you then."
            }
          }
        ]
      },
      "userStorage": "{\"data\":{\"sum\":68}}"
    }
  }
}

JSON

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "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}}"
}

يُرجى الاطّلاع على مقالتنا تخصيص المحادثة باستخدام الإعدادات المفضّلة للمستخدم. دليل أفضل الممارسات لمثال على الاستخدام العملي.

ملاحظة قانونية: الحصول على موافقة قبل الوصول إلى userStorage. تفرض بعض البلدان لوائح تتطلّب من المطوّرين الحصول على موافقة منهم. المستخدم قبل أن يتمكن من الوصول إلى بعض المعلومات أو حفظها (مثل المعلومات هذه المعلومات) في userStorage. إذا كنت تعمل في إحدى هذه المناطق التي تريد الوصول إلى هذه المعلومات أو حفظها في userStorage، عليك استخدام مساعد التأكيد لطرح السؤال على المستخدم والحصول على الموافقة قبل أن تتمكن من البدء في تخزين المعلومات في userStorage.

انتهاء صلاحية مساحة تخزين المستخدم

وعندما يتمكن "مساعد Google" من مطابقة الهوية مع المستخدم، يتم عرض محتوى لا تنتهي صلاحية "userStorage" أبدًا، ويمكن للمستخدم أو الإجراء نفسه فقط محوه.

وعندما يتعذّر على "مساعد Google" مطابقة هوية المستخدم، يتم عرض يتم محو userStorage في نهاية المحادثة. إليك بعض الأمثلة الحالات التي لا يتمكن فيها "مساعد Google" من مطابقة هوية المستخدم:

  • تم إعداد ميزة Voice Match وليس هناك أي تطابق.
  • أوقف المستخدم البيانات الشخصية.

محو محتوى الحقل userStorage

يمكنك محو محتوى الحقل userStorage في الإجراء من خلال ضبط الحقل resetUserStorage في AppResponse على "صحيح". في حال حذف يمكنك تعيين قيمة userStorage على سلسلة فارغة، قيمة لن يتم تغيير "userStorage" في المرحلة التالية من المحادثة. يتيح لك هذا تجنَّب إعادة إرسال مبلغ userStorage بالكامل بالتناوب في حال كان المحتوى غير متوفر. التغيير.

إذا كنت تستخدم Actions On Google Client Library for Node.js، يمكنك فقط ضبط قيمة conv.user.storage على {} (كائن فارغ).

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "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\":{}}"
}

بصفتك مستخدمًا، يمكنك عرض محتوى الحقل "userStorage" في أي "إجراء" تم استدعاء. يمكنك أيضًا إزالة بيانات المستخدم المخزَّنة من هذا الإجراء المحدّد. عن طريق منع الخدمة من تذكرك.

  1. افتح تطبيق "مساعد Google" على هاتفك.
  2. انقر على رمز الدرج.

  3. في علامة التبويب استكشاف، ابحث عن الإجراء الذي تريد الاطّلاع عليه أو محو بيانات المستخدم. التخزين له والنقر عليه لفتح صفحة التفاصيل.
  4. انتقِل إلى أسفل الصفحة.
    • لعرض محتوى الحقل "userStorage"، انقر على [عرض البيانات المخزَّنة].
    • لإزالة بيانات المستخدم المخزَّنة، انقر على إيقاف $action من تذكّري.