রিপ্রম্পট (ডায়ালগফ্লো)

Dialogflow এ অন্বেষণ করুন

ডায়ালগফ্লোতে আমাদের রিপ্রম্পট নমুনা আমদানি করতে অবিরত ক্লিক করুন। তারপরে, নমুনা স্থাপন এবং পরীক্ষা করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:

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

ব্যবহারকারীরা আপনার অ্যাকশনে ইনপুট প্রদান করে না এমন ক্ষেত্রে আপনি নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন (কোন-ইনপুট ত্রুটি নেই):

  • সিস্টেম-ডিফল্ট রিপ্রম্পট - এগুলি ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে প্রাক-ক্যানড রিপ্রম্পট দিয়ে রিপ্রম্পট করে যা সব ক্ষেত্রেই জেনেরিক।
  • ডায়নামিক রিপ্রম্পট - ঘোষণা করা যে আপনি নিজেরাই রিপ্রম্পটিং পরিচালনা করতে চান এবং প্রতিবার নো-ইনপুট ঘটলে একটি উদ্দেশ্য (অ্যাকশন SDK) বা ইভেন্ট (ডায়ালগফ্লো) গ্রহণ করতে চান, তাই আপনি সেগুলি কেস-বাই-কেস ভিত্তিতে পরিচালনা করতে পারেন।

সিস্টেম-ডিফল্ট রিপ্রম্পট

ডিফল্টরূপে, আপনি যখন সহকারীকে একটি প্রতিক্রিয়া ফেরত দেন, তখন সিস্টেম ব্যবহারকারীদের তাদের ইনপুট পুনরাবৃত্তি বা পুনরায় টাইপ করতে বলার জন্য ডিফল্ট রিপ্রম্পট ব্যবহার করে।

ডায়ালগফ্লো

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

ডায়নামিক রিপ্রম্পট

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

ডায়ালগফ্লো

আপনি দুই ধরনের নো-ইনপুট ইন্টেন্ট তৈরি করতে পারেন:

  • সাধারণ অভিপ্রায় - এই পদ্ধতিটি কোনো প্রসঙ্গ প্রয়োগ করে না, তাই ট্রিগার করার জন্য অন্য, আরও প্রাসঙ্গিক অভিপ্রায় না থাকলে ট্রিগার করা হবে। এটি সাধারণ রিপ্রম্পটগুলির জন্য দরকারী যা আপনি বেশিরভাগ ক্ষেত্রে প্রয়োগ করতে চান৷

  • ফলো-আপ অভিপ্রায় - ডায়ালগফ্লো প্রসঙ্গের মাধ্যমে ফলো-আপ অভিপ্রায়গুলি প্রয়োগ করা হয়, নিশ্চিত করে যে কথোপকথনের নির্দিষ্ট মোড়ের পরেই রিপ্রম্পটগুলি ট্রিগার হয়৷ আপনি নির্দিষ্ট পরিস্থিতিতে প্রয়োগ করতে চান এমন উপযুক্ত রিপ্রম্পটের জন্য এটি কার্যকর।

নো-ইনপুট ইভেন্টগুলি পরিচালনা করতে:

  1. বাম নেভিগেশনে, ইন্টেন্টে ক্লিক করুন।
  2. একটি স্বাভাবিক অভিপ্রায় বা ফলো-আপ অভিপ্রায় তৈরি করুন।
    • স্বাভাবিক অভিপ্রায়ের জন্য : ইন্টেন্ট মেনু আইটেমের + আইকনে ক্লিক করুন এবং আপনার অভিপ্রায়কে একটি নাম দিন, যেমন "পুনরায় প্রম্পট"।

    • ফলো-আপ ইন্টেন্টের জন্য : আপনি যে অভিপ্রায়ের জন্য নো-ইনপুট রিপ্রম্পট কাস্টমাইজ করতে চান তার উপর হোভার করুন এবং ফলো-আপ অভিপ্রায় যোগ করুন > কাস্টম এ ক্লিক করুন। মূল অভিপ্রায়ের নীচে একটি নতুন অভিপ্রায় তৈরি করা হয়।

  3. অভিপ্রায় সম্পাদক খুলতে নতুন তৈরি অভিপ্রায় ক্লিক করুন.
  4. ইভেন্ট বিভাগে ক্লিক করুন এবং ইভেন্ট যোগ ক্ষেত্রে "ক্রিয়া_ইন্টেন্ট_NO_INPUT" লিখুন।
  5. অ্যাকশন বিভাগে, একটি অ্যাকশনের নাম লিখুন বা ডিফল্টভাবে দেওয়া একটি ব্যবহার করুন। এই উদাহরণের জন্য, আমরা "no.input" ব্যবহার করব।

  6. Save এ ক্লিক করুন।
  7. বাম নেভিগেশনে, ইন্টিগ্রেশনে ক্লিক করুন
  8. আপনার অ্যাকশন প্রকল্পে পরিবর্তনগুলি প্রতিফলিত হয়েছে তা নিশ্চিত করতে Google সহকারী বেছে নিন এবং পরীক্ষায় ক্লিক করুন।

যখনই এই অভিপ্রায়ের জন্য একটি নো-ইনপুট ঘটে, আপনি একটি উপযুক্ত প্রতিক্রিয়া ফেরাতে বা ডায়ালগফ্লোতে একটি তৈরি করতে আপনার পূর্ণতা ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এখানে কিছু পরিপূর্ণতা কোড রয়েছে যা "রিপ্রম্পট" নামক একটি সাধারণ নো-ইনপুট উদ্দেশ্য পরিচালনা করতে ক্লায়েন্ট লাইব্রেরি ব্যবহার করে।

Node.js

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Reprompt', (conv) => {
  const repromptCount = parseInt(conv.arguments.get('REPROMPT_COUNT'));
  if (repromptCount === 0) {
  conv.ask(`What was that?`);
  } else if (repromptCount === 1) {
  conv.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
  } else if (conv.arguments.get('IS_FINAL_REPROMPT')) {
  conv.close(`Okay let's try this again later.`);
  }
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

জাভা

package com.example;

import com.google.actions.api.ActionRequest;
import com.google.actions.api.ActionResponse;
import com.google.actions.api.DialogflowApp;
import com.google.actions.api.ForIntent;
import com.google.actions.api.response.ResponseBuilder;

public class MyActionsApp extends DialogflowApp {

  @ForIntent("Reprompt")
  public ActionResponse reprompt(ActionRequest request) {
    ResponseBuilder responseBuilder = getResponseBuilder(request);
    int repromptCount = request.getRepromptCount();
    String response;
    if (repromptCount == 0) {
      response = "What was that?";
    } else if (repromptCount == 1) {
      response = "Sorry, I didn't catch that. Could you repeat yourself?";
    } else {
      responseBuilder.endConversation();
      response = "Okay let's try this again later.";
    }
    return responseBuilder.add(response).build();
  }
}

অনুরোধ JSON

মনে রাখবেন যে নীচের JSON একটি ওয়েবহুক অনুরোধ বর্ণনা করে।

{
  "responseId": "f26a9188-4998-42eb-ac16-d0e6e273b137-712767ed",
  "queryResult": {
    "queryText": "actions_intent_NO_INPUT",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Reprompt",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Reprompt"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/google_assistant_input_type_voice"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_intent_no_input",
        "parameters": {
          "REPROMPT_COUNT": 2,
          "IS_FINAL_REPROMPT": true
        }
      }
    ],
    "intent": {
      "name": "projects/df-reprompts-kohler/agent/intents/75dfd97d-6368-4436-9533-70f05ae76c96",
      "displayName": "Reprompt"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.NO_INPUT",
          "rawInputs": [
            {
              "inputType": "VOICE"
            }
          ],
          "arguments": [
            {
              "name": "REPROMPT_COUNT",
              "intValue": "2"
            },
            {
              "name": "IS_FINAL_REPROMPT",
              "boolValue": true
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA"
}

প্রতিক্রিয়া JSON

মনে রাখবেন যে নীচের JSON একটি ওয়েবহুক প্রতিক্রিয়া বর্ণনা করে।

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Okay let's try this again later."
            }
          }
        ]
      }
    }
  }
}

অ্যাকশন SDK

নো-ইনপুট ইন্টেন্টগুলি পরিচালনা করতে:

  1. আপনার অ্যাকশন প্যাকেজের মধ্যে একটি conversations অবজেক্টে, ঘোষণা করুন যে আপনি actions.intent.NO_INPUT অভিপ্রায় পেতে চান যখনই কোনো ব্যবহারকারী ইনপুট প্রদান করে না।
    {
      "actions": [
        {
          "description": "Default Welcome Intent",
          "name": "MAIN",
          "fulfillment": {
            "conversationName": "conversation_1"
          },
          "intent": {
            "name": "actions.intent.MAIN"
          }
        }
      ],
      "conversations": {
        "conversation_1": {
          "name": "conversation_1",
          "url": "YOUR_FULFILLMENT_URL",
          "inDialogIntents": [
            {
              "name": "actions.intent.NO_INPUT"
            }
          ]
        }
      }
    }
  2. যখন সহকারী ব্যবহারকারীর কাছ থেকে কোনো ইনপুট পায় না, তখন আপনি আপনার পূরণের পরবর্তী অনুরোধে নো-ইনপুট অভিপ্রায় পাবেন। তারপর আপনি অভিপ্রায় প্রক্রিয়া করতে পারেন এবং একটি উপযুক্ত রিপ্রম্পট প্রতিক্রিয়া ফেরত দিতে পারেন। এখানে একটি উদাহরণ:

    Node.js

    const {actionssdk} = require('actions-on-google');
    const functions = require('firebase-functions');
    
    const app = actionssdk({debug: true});
    
    app.intent('actions.intent.MAIN', (conv) => {
      conv.ask(`Hi! Try this sample on a speaker device, ` +
        `and stay silent when the mic is open. If trying ` +
        `on the Actions console simulator, click the no-input ` +
        `button next to the text input field.`);
    });
    
    app.intent('actions.intent.TEXT', (conv, input) => {
      conv.ask(`You said ${input}`);
      conv.ask(`Try this sample on a speaker device, ` +
        `and stay silent when the mic is open. If trying ` +
        `on the Actions console simulator, click the no-input ` +
        `button next to the text input field.`);
    });
    
    app.intent('actions.intent.NO_INPUT', (conv) => {
      const repromptCount = parseInt(conv.arguments.get('REPROMPT_COUNT'));
      if (repromptCount === 0) {
        conv.ask(`What was that?`);
      } else if (repromptCount === 1) {
        conv.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
      } else if (conv.arguments.get('IS_FINAL_REPROMPT')) {
        conv.close(`Okay let's try this again later.`);
      }
    });
    
    exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

    জাভা

    package com.example;
    
    import com.google.actions.api.ActionRequest;
    import com.google.actions.api.ActionResponse;
    import com.google.actions.api.ActionsSdkApp;
    import com.google.actions.api.ConstantsKt;
    import com.google.actions.api.ForIntent;
    import com.google.actions.api.response.ResponseBuilder;
    import com.google.actions.api.response.helperintent.Confirmation;
    import com.google.actions.api.response.helperintent.DateTimePrompt;
    import com.google.actions.api.response.helperintent.Permission;
    import com.google.actions.api.response.helperintent.Place;
    import com.google.api.services.actions_fulfillment.v2.model.DateTime;
    import com.google.api.services.actions_fulfillment.v2.model.Location;
    
    public class MyActionsApp extends ActionsSdkApp {
    
      @ForIntent("actions.intent.MAIN")
      public ActionResponse welcome(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        responseBuilder.add("Hi! Try this sample on a speaker device, and stay silent when the mic is open. If trying on the Actions console simulator, click the no-input button next to the text input field.");
        return responseBuilder.build();
      }
    
      @ForIntent("actions.intent.TEXT")
      public ActionResponse fallback(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        responseBuilder.add("You said " + request.getRawInput().getQuery());
        responseBuilder.add("Try this sample on a speaker device, and stay silent when the mic is open. If trying on the Actions console simulator, click the no-input button next to the text input field.");
        return responseBuilder.build();
      }
    
      @ForIntent("actions.intent.NO_INPUT")
      public ActionResponse reprompt(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        int repromptCount = request.getRepromptCount();
        String response;
        if (repromptCount == 0) {
          response = "What was that?";
        } else if (repromptCount == 1) {
          response = "Sorry, I didn't catch that. Could you repeat yourself?";
        } else {
          responseBuilder.endConversation();
          response = "Okay let's try this again later.";
        }
        return responseBuilder.add(response).build();
      }
    
    }

    অনুরোধ JSON

    মনে রাখবেন যে নীচের JSON একটি ওয়েবহুক অনুরোধ বর্ণনা করে।

    {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHEVDuKUPjdZ4Ud-F2yBXN5ssRg2funUp59hSHQheAi-B5Y3EzehAKFtVwMkduqMRWscUp77ScrDjYnYxISqAM-qOXuXEuCw",
        "type": "ACTIVE",
        "conversationToken": "{\"data\":{}}"
      },
      "inputs": [
        {
          "intent": "actions.intent.NO_INPUT",
          "rawInputs": [
            {
              "inputType": "VOICE"
            }
          ],
          "arguments": [
            {
              "name": "REPROMPT_COUNT",
              "intValue": "2"
            },
            {
              "name": "IS_FINAL_REPROMPT",
              "boolValue": true
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }

    প্রতিক্রিয়া JSON

    মনে রাখবেন যে নীচের JSON একটি ওয়েবহুক প্রতিক্রিয়া বর্ণনা করে।

    {
      "expectUserResponse": false,
      "finalResponse": {
        "richResponse": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Okay let's try this again later."
              }
            }
          ]
        }
      }
    }