কথোপকথনে ডেটা সেভ করুন (Dialogflow)

Dialogflow-তে এক্সপ্লোর করুন

Dialogflow-এ আমাদের সেভ করা ডেটা স্যাম্পেল ইমপোর্ট করতে চালিয়ে যান বিকল্পে ক্লিক করুন। তারপর, স্যাম্পেল ডিপ্লয় ও পরীক্ষা করতে নিচে উল্লেখ করা ধাপগুলি অনুসরণ করুন:

  1. এজেন্টের নাম লিখুন এবং স্যাম্পেলের জন্য নতুন Dialogflow এজেন্ট তৈরি করুন।
  2. এজেন্ট ইমপোর্ট করা হয়ে গেলে, এজেন্টে যান বিকল্পে ক্লিক করুন।
  3. প্রধান নেভিগেশন মেনু থেকে, ফুলফিলমেন্ট বিকল্পে যান।
  4. ইনলাইন এডিটর চালু করে ডিপ্লয় করুন বিকল্পে ক্লিক করুন। এডিটরে স্যাম্পেল কোড আছে।
  5. প্রধান নেভিগেশন মেনু থেকে, ইন্টিগ্রেশন বিকল্পে যান, তারপর Google Assistant বিকল্পে ক্লিক করুন।
  6. যে মোডাল উইন্ডোটি দেখা যাবে, সেখানে পরিবর্তন অটো-প্রিভিউ করুন বিকল্প চালু করুন এবং অ্যাকশন সিমুলেটর খুলতে পরীক্ষা করুন বিকল্পে ক্লিক করুন।
  7. সিমুলেটরে, স্যাম্পেল পরীক্ষা করতে Talk to my test app লিখুন!
চালিয়ে যান

ব্যবহারকারীকে চমৎকার অভিজ্ঞতা প্রদান করার একটি অংশ হল, কথোপকথনের বিভিন্ন পর্যায়ে বা ব্যবহারকারীর সাথে একাধিক কথোপকথন জুড়ে ডেটা সেভ করতে পারা। আপনি যদি একটি কথোপকথনে সহায়ক রিপ্রম্পট প্রদান করেন, সেশন জুড়ে গেমের স্কোর সেভ করেন বা ব্যবহারকারীর জন্য তথ্যের ছোট ছোট অংশ মনে রাখেন, তাহলে এটি সহায়ক।

কোনও কথোপকথনের মধ্যে নাকি একাধিক কথোপকথন জুড়ে ডেটা সেভ করতে হবে তার উপর ভিত্তি করে প্রয়োজনীয়তা সামান্য আলাদা হয়। কথোপকথনে ডেটা সেভ করতে, আপনি আপনার AppResponse অবজেক্টের conversationToken ফিল্ড ব্যবহার করতে পারেন।

সব কথোপকথন জুড়ে ডেটা সেভ করতে, পরিবর্তে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ব্যবহারকারী যাচাই করা হয়েছে নাকি তিনি অতিথি তা নির্ধারণ করুন।
  2. আপনার AppResponse অবজেক্টের userStorage ফিল্ড ব্যবহার করে ব্যবহারকারীর ডেটা স্টোর বা অ্যাক্সেস করুন।

কথোপকথনের টার্নের মধ্যে ডেটা সেভ করা

conversationToken ফিল্ড হল একটি স্ট্রিং যাতে একটি অস্বচ্ছ টোকেন থাকে যা প্রতিটি কথোপকথনের সময় অ্যাকশনে পুনরায় সার্কুলেট করা হয়। যেমন, আপনি যদি কথোপকথনের প্রথম টার্নের জন্য আপনার AppResponse-এ ভ্যালু "count=1" সেট করেন, তাহলে কথোপকথনের দ্বিতীয় টার্নের জন্য আপনার অ্যাকশনের মাধ্যমে পাওয়া AppRequest-এর conversationToken-এ "count=1" থাকবে।

কথোপকথনের শুরুতে টোকেন সবসময় খালি স্ট্রিং হিসেবে শুরু হয়। আপনি যদি Actions on Google Node.js ক্লায়েন্ট লাইব্রেরি ব্যবহার করেন, তাহলে আপনি conv.data ব্যবহার করে JSON অবজেক্ট হিসেবে কনভারসেশন টোকেনের সাথে ইন্টারফেস করতে পারবেন, যেখানে conv হল আপনার Conversation-এর ইনস্ট্যান্স।

আপনার AppResponse-এর conversationToken ফিল্ডে কীভাবে কাউন্টার সেভ করবেন তা নিম্নলিখিত স্যাম্পেল থেকে জানতে পারবেন:

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 একটি ওয়েবহুক রেসপন্স বর্ণনা করে যা conversationToken-এর পরিবর্তে outputContexts ব্যবহার করে।

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

ব্যবহারিক ব্যবহারের উদাহরণের জন্য আমাদের সহায়ক রিপ্রম্পট প্রদান করুন এবং সুন্দরভাবে ব্যর্থ হন পেশাদার পদ্ধতি নির্দেশিকা দেখুন।

বিভিন্ন কথোপকথন জুড়ে ডেটা সেভ করা

আপনার AppResponse অবজেক্টের userStorage ফিল্ড হল একটি স্ট্রিং যাতে অ্যাকশনের মাধ্যমে সরবরাহ করা একটি অস্বচ্ছ টোকেন থাকে যা নির্দিষ্ট ব্যবহারকারীর জন্য কথোপকথন জুড়ে সেভ করা হয়। যেমন, কোনও গেম userStorage-এ ব্যবহারকারীর সর্বোচ্চ স্কোর সেভ করতে পারে এবং ব্যবহারকারী যখনই নতুন কথোপকথন শুরু করেন, তখনই স্বাগত মেসেজে সেই ভ্যালু ব্যবহার করতে পারে।

ব্যবহারকারী যাচাইকরণের স্ট্যাটাস নির্ধারণ ও ম্যানেজ করা

ব্যবহারকারীর যাচাইকরণ স্ট্যাটাসের ভ্যালু GUEST বা VERIFIED হতে পারে। প্রতিটি কথোপকথনের শুরুতে, কথোপকথন শুরু হওয়ার সময় বিভিন্ন ধরনের সূচকের উপর ভিত্তি করে Actions on Google ব্যবহারকারীর যাচাইকরণ স্ট্যাটাস সেট করে। উদাহরণস্বরূপ, কোনও ব্যবহারকারী তার মোবাইল ডিভাইসে Google Assistant-এ লগ-ইন করলে তার যাচাইকরণের স্ট্যাটাস VERIFIED হয়।

নিম্নলিখিত কারণে কোনও ব্যবহারকারীর যাচাইকরণ স্ট্যাটাস GUEST হতে পারে:

  • ব্যবহারকারী ব্যক্তিগত ফলাফল বন্ধ করে রেখেছেন।
  • ব্যবহারকারী তার ওয়েব ও অ্যাপ অ্যাক্টিভিটি বন্ধ করে দিয়েছেন। মনে রাখবেন যে কিছু ব্যবহারকারীর ডোমেন লেভেলে এই সেটিং বন্ধ করা থাকতে পারে।
  • কোনও ডিভাইসে ভয়েস ম্যাচ চালু করা থাকলে এবং ম্যাচ না করলে অথবা ব্যবহারকারী ভয়েস ব্যবহার না করে Assistant চালু করলে (যেমন Google Home-এ বেশিক্ষণ প্রেস করে থাকলে)।
  • ব্যবহারকারী সাইন-ইন করেননি।

userStorage-এর সাথে ডেটা স্টোর করার আগে বা অ্যাকাউন্ট লিঙ্ক করার ফ্লো শুরু করার আগে সবসময় ব্যবহারকারীর যাচাইকরণ স্ট্যাটাস চেক করুন, যাতে গেস্ট ব্যবহারকারীরা এমন কোনও ফিচারের সাথে ইন্টার‍্যাক্ট করতে না পারেন যা তাদের জন্য কাজ করবে না।

আপনি যদি Node.js-এর জন্য Actions On Google ক্লায়েন্ট লাইব্রেরি ব্যবহার করেন, তাহলে conv.user.storage ব্যবহার করে JSON অবজেক্ট হিসেবে ব্যবহারকারীর স্টোরেজের সাথে ইন্টারফেস করতে পারবেন, যেখানে conv হল আপনার Conversation-এর ইনস্ট্যান্স। আপনার AppResponse-এর userStorage ফিল্ডে কীভাবে কাউন্টার সেভ করতে হয় তা নিম্নলিখিত স্যাম্পেল থেকে দেখানো হয়েছে:

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 ব্যবহারকারীর সাথে পরিচয় ম্যাচ করতে পারে না:

  • ভয়েস ম্যাচ সেট-আপ করা আছে এবং কোনও ম্যাচ নেই।
  • ব্যবহারকারী ব্যক্তিগত ডেটা বন্ধ করে দিয়েছেন।

userStorage ফিল্ডের কন্টেন্ট মুছে দিন

আপনি AppResponse-এর resetUserStorage ফিল্ড true-তে সেট করে আপনার অ্যাকশনের userStorage ফিল্ডের কন্টেন্ট মুছে দিতে পারবেন। আপনি userStorage-এর ভ্যালু খালি স্ট্রিং হিসেবে সেট করলে, কথোপকথনের পরবর্তী ধাপে userStorage-এর ভ্যালু অপরিবর্তিত থাকবে। এর ফলে, আপনি এমন টার্নে পুরো userStorage ফেরত পাঠানো এড়াতে পারবেন যেখানে এর কন্টেন্ট পরিবর্তন হয়নি।

আপনি Node.js-এর জন্য Actions On Google ক্লায়েন্ট লাইব্রেরি ব্যবহার করলে, 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 বন্ধ করুন বিকল্পে ট্যাপ করুন।