บันทึกข้อมูลในการสนทนา (Dialogflow)

สำรวจใน Dialogflow

คลิกต่อไปเพื่อนำเข้าตัวอย่างการบันทึกข้อมูลใน Dialogflow จากนั้นทำตาม ด้านล่างเพื่อปรับใช้และทดสอบตัวอย่าง

  1. ป้อนชื่อ Agent และสร้าง Agent ใหม่ของ Dialogflow สำหรับตัวอย่าง
  2. หลังจากนำเข้าตัวแทนเสร็จแล้ว ให้คลิกไปที่ตัวแทน
  3. จากเมนูการนำทางหลัก ให้ไปที่การดำเนินการตามคำสั่งซื้อ
  4. เปิดใช้เครื่องมือแก้ไขในบรรทัด แล้วคลิกทำให้ใช้งานได้ เครื่องมือแก้ไขมีตัวอย่าง โค้ด
  5. จากเมนูการนำทางหลัก ให้ไปที่ Integrations แล้วคลิก Google Assistant
  6. ในหน้าต่างโมดัลที่ปรากฏขึ้น ให้เปิดใช้แสดงตัวอย่างการเปลี่ยนแปลงอัตโนมัติ แล้วคลิกทดสอบ เพื่อเปิดเครื่องมือจำลอง Actions
  7. ในเครื่องมือจำลอง ให้ป้อน Talk to my test app เพื่อทดสอบตัวอย่าง

ส่วนหนึ่งของการมอบประสบการณ์ที่ยอดเยี่ยมแก่ผู้ใช้มักจะเป็นการบันทึกข้อมูล ระหว่างการสนทนาหรือการสนทนาหลายรายการกับผู้ใช้ ซึ่งจะเป็นประโยชน์ในกรณีที่คุณแสดง ข้อความแจ้งที่สำคัญในการสนทนาเดียว การบันทึกคะแนนของเกมในเซสชันต่างๆ หรือการจดจำข้อมูลชิ้นเล็กๆ สำหรับผู้ใช้

ข้อกำหนดจะแตกต่างกันไปเล็กน้อย โดยขึ้นอยู่กับว่าคุณต้องการบันทึกข้อมูลภายใน การสนทนาหรือข้ามการสนทนา หากต้องการบันทึกข้อมูลในการสนทนา คุณสามารถทำดังนี้ ใช้ช่อง conversationToken ของออบเจ็กต์ AppResponse

หากต้องการบันทึกข้อมูลในการสนทนาต่างๆ ให้ทำตามขั้นตอนต่อไปนี้แทน

  1. ระบุว่าผู้ใช้ได้รับการยืนยันแล้วหรือเป็นผู้มาเยือน
  2. จัดเก็บหรือเข้าถึงข้อมูลผู้ใช้โดยใช้ช่อง userStorage ของ ออบเจ็กต์ AppResponse ของคุณ

การบันทึกข้อมูลระหว่างรอบการสนทนา

ช่อง conversationToken เป็นสตริงที่มีโทเค็นแบบทึบแสง จะหมุนเวียนเข้าสู่ "การดำเนินการ" ทุกครั้งที่มีการสนทนา ตัวอย่างเช่น หากตั้งค่า ค่าให้กับ "count=1" ใน AppResponse สำหรับการเปิดครั้งแรกของ การสนทนา AppRequest ที่การดำเนินการของคุณได้รับในตาที่ 2 ของการสนทนามี "count=1" ใน conversationToken

โทเค็นจะกำหนดค่าเริ่มต้นเป็นสตริงว่างเสมอที่ตอนต้นของ การสนทนา หากคุณใช้แท็ก ไลบรารีไคลเอ็นต์ Actions on 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 ที่ เริ่มต้นการสนทนาแต่ละครั้ง Actions on Google จะกำหนดการยืนยันของผู้ใช้ ตามตัวบ่งชี้ต่างๆ เมื่อเริ่มต้นการสนทนา เป็นหนึ่งใน เช่น ผู้ใช้เข้าสู่ระบบ Google Assistant ในอุปกรณ์เคลื่อนที่แล้ว สถานะการยืนยันของ VERIFIED

เหตุผลที่อาจทำให้ผู้ใช้มีสถานะการยืนยันเป็น GUEST:

  • ผู้ใช้ปิดผลการค้นหาเฉพาะบุคคลไว้
  • ผู้ใช้ปิดใช้งานเว็บและ กิจกรรมบนแอป โปรดทราบว่าผู้ใช้บางราย อาจปิดใช้การตั้งค่านี้ในระดับโดเมน
  • หากอุปกรณ์เปิดใช้ Voice Match ไว้ แต่จับคู่ไม่สำเร็จหรือผู้ใช้เรียกใช้ Assistant โดยไม่ใช้เสียงของพวกเขา (เช่น การกด Google ค้างไว้ หน้าแรก)
  • ผู้ใช้ไม่ได้ลงชื่อเข้าใช้

ตรวจสอบสถานะการยืนยันของผู้ใช้ทุกครั้งก่อนที่จะจัดเก็บข้อมูลไว้กับ userStorage หรือเริ่มขั้นตอนการลิงก์บัญชีเพื่อป้องกันไม่ให้ผู้ใช้ชั่วคราว โต้ตอบกับฟีเจอร์ที่ไม่สำเร็จ

หากคุณใช้ไลบรารีของไคลเอ็นต์ Actions on Google สำหรับ 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

วันหมดอายุของพื้นที่เก็บข้อมูลของผู้ใช้

เมื่อ Assistant จับคู่ข้อมูลประจำตัวกับผู้ใช้ได้ เนื้อหาของ userStorage ไม่มีวันหมดอายุ และมีเพียงผู้ใช้หรือตัวการดำเนินการเองเท่านั้นที่จะล้างได้

เมื่อ Assistant จับคู่ข้อมูลประจำตัวกับผู้ใช้ไม่ได้ เนื้อหาของ userStorage ถูกล้างเมื่อจบการสนทนา ตัวอย่าง กรณีที่ Assistant จับคู่ข้อมูลประจำตัวกับผู้ใช้ไม่ได้

  • ตั้งค่า Voice Match แล้วและไม่มีรายการที่ตรงกัน
  • ผู้ใช้ปิดใช้ข้อมูลส่วนตัว

ล้างเนื้อหาของช่อง userStorage

คุณสามารถล้างเนื้อหาในช่อง userStorage ของการดำเนินการได้โดย ตั้งค่าช่อง resetUserStorage ของ AppResponse ให้เป็นจริง ถ้า คุณตั้งค่า userStorage เป็นสตริงว่างเปล่า ค่าของ userStorage ยังคงเหมือนเดิมในการติดต่อครั้งถัดไป ซึ่งช่วยให้คุณ หลีกเลี่ยงการส่ง userStorage ทั้งหน้ากลับในกรณีที่เนื้อหาไม่แสดงผล เปลี่ยน

หากคุณกำลังใช้ไลบรารีของไคลเอ็นต์ Actions On Google สำหรับ 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. เปิดแอป Assistant ในโทรศัพท์
  2. แตะไอคอนลิ้นชัก

  3. ในแท็บสำรวจ ให้ค้นหาการดำเนินการที่ต้องการดูหรือล้างผู้ใช้ สำหรับ และแตะบนเพื่อเปิดหน้ารายละเอียด
  4. เลื่อนลงไปที่ด้านล่างของหน้า
    • หากต้องการดูเนื้อหาของช่อง userStorage ให้แตะ [ดูข้อมูลที่จัดเก็บไว้]
    • หากต้องการนำข้อมูลผู้ใช้ที่เก็บไว้ออก ให้แตะหยุด $action ไม่ให้จดจำฉัน