Android উইজেটের সাথে অ্যাপ অ্যাকশন ইন্টিগ্রেট করা

ছবি ১. GET_EXERCISE_OBSERVATION-এর জন্য উইজেট লঞ্চ করা হচ্ছে।

অনেক ইনটেন্টের ক্ষেত্রে, ব্যবহারকারীকে একটি সহজ উত্তর, সংক্ষিপ্ত কনফার্মেশন বা দ্রুত ইন্টার‍্যাক্টিভ অভিজ্ঞতা প্রদান করাই হল সেরা উত্তর। এই ধরনের ইনটেন্ট পূরণ করতে আপনি Google Assistant-এ Android অ্যাপ উইজেট দেখাতে পারেন।

এই নির্দেশিকায় উইজেট ব্যবহার করে Assistant ব্যবহারকারীর কোয়েরি কীভাবে পূরণ করবেন এবং অ্যাপ অ্যাকশন উইজেট এক্সটেনশন লাইব্রেরি-এর মাধ্যমে Assistant-এর জন্য আপনার উইজেট অভিজ্ঞতা কীভাবে উন্নত করবেন তা কভার করা হয়েছে।

সুবিধা

উইজেট হল অ্যাপ্লিকেশন ভিউয়ের ক্ষুদ্র সংস্করণ যা Android সারফেসে এম্বেড করা যায়, যেমন লঞ্চার বা লক স্ক্রিন। অ্যাপ অ্যাকশনের মাধ্যমে, আপনি Assistant-এ দেখানোর জন্য উপযুক্ত করে আপনার উইজেটের প্রভাব বাড়াতে পারেন:

  1. ডিসকভারি: ব্যবহারকারীর ন্যাচারাল ল্যাঙ্গুয়েজ কোয়েরির উত্তরে প্রোঅ্যাক্টিভভাবে উইজেট দেখান।
  2. এনগেজমেন্ট: হ্যান্ডস-ফ্রি প্রসঙ্গে উইজেট দেখান, যেমন Assistant যখন লক স্ক্রিনে ব্যক্তিগত ফলাফল প্রদান করে এবং Android Auto-তে।
  3. রিটেনশন: ব্যবহারকারীদের Assistant-এ দেখানো উইজেট তাদের লঞ্চারে পিন করতে দিন। পিন করার কার্যকারিতার জন্য উইজেট এক্সটেনশন লাইব্রেরি প্রয়োজন।

Assistant কীভাবে উইজেট দেখায়

ব্যবহারকারীরা Assistant-এ দুটি উপায়ে উইজেট চালু করতে পারেন:

  • নাম উল্লেখ করে স্পষ্টভাবে কোনও উইজেটের জন্য অনুরোধ করা।
  • Assistant-কে কোনও কোয়েরি বলা যা উইজেট পূরণের জন্য কনফিগার করা বিল্ট-ইন ইনটেন্ট (BII) বা কাস্টম ইনটেন্ট ট্রিগার করে।

এক্সপ্লিসিট ইনভোকেশন

ইনস্টল করা যেকোনও অ্যাপের জন্য এক্সপ্লিসিট ইনভোকেশন উইজেট ব্যবহার করতে, ব্যবহারকারী Assistant-কে এই ধরনের প্রশ্ন করতে পারেন:

  • "Ok Google, ExampleApp উইজেট দেখাও।"
  • "ExampleApp থেকে পাওয়া উইজেট।"

Assistant এই উইজেটগুলি সাধারণ ভূমিকা সহ দেখায়: "ExampleApp বলে, এখানে একটি উইজেট আছে।" Assistant সাধারণত অ্যাপ ডেভেলপারকে কোনও কাজ করতে না দিয়েই এই পদ্ধতিতে অনুরোধ করা উইজেট ফিরিয়ে দেয়, তবে এই ইনভোকেশন পদ্ধতিতে ব্যবহারকারীকে উইজেট সম্পর্কে স্পষ্ট জ্ঞান থাকতে হবে যাতে তিনি এটির জন্য অনুরোধ করতে পারেন। উইজেট খোঁজার পদ্ধতি সহজ করতে, নিম্নলিখিত বিভাগে বিস্তারিতভাবে উল্লেখ করা ইনটেন্ট ফুলফিলমেন্ট পদ্ধতি ব্যবহার করুন।

ইনটেন্ট ফুলফিলমেন্ট

Assistant-এ ব্যবহারকারীদের করা ন্যাচারাল ল্যাঙ্গুয়েজ কোয়েরি পূরণ করার জন্য আপনার উইজেট ব্যবহার করে, সেগুলি খুঁজে পাওয়া আরও সহজ করুন। যেমন, কোনও ব্যবহারকারী আপনার ফিটনেস অ্যাপে GET_EXERCISE_OBSERVATION BII ট্রিগার করলে, আপনি একটি উইজেট রিটার্ন করতে পারেন। ব্যবহারকারী এই প্রশ্নটি করে ট্রিগার করতে পারেন, "Ok Google, এই সপ্তাহে ExampleApp-এ আমি কত মাইল দৌড়েছি?" খোঁজার প্রসেস সহজ করার পাশাপাশি, অ্যাপ অ্যাকশনের সাথে উইজেট ইন্টিগ্রেট করলে এইসব সুবিধা পাওয়া যায়:

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

উইজেট ফুলফিলমেন্ট প্রয়োগ করুন

আপনার ইনটেন্টের জন্য উইজেট ফুলফিলমেন্ট প্রয়োগ করতে, এইসব ধাপ অনুসরণ করুন:

  1. সহজ উইজেট তৈরি করুন লিঙ্কে উল্লেখ করা ধাপগুলি অনুসরণ করে Android উইজেট প্রয়োগ করুন।
  2. আপনার অ্যাপের shortcuts.xml রিসোর্স ফাইলে, ফুলফিলমেন্টের বিবরণ ও BII <parameter> ট্যাগ সহ আপনার ক্যাপাবিলিটিতে <app-widget> এলিমেন্ট যোগ করুন। প্যারামিটার ম্যানেজ করতে আপনার উইজেট আপডেট করুন।
  3. প্রয়োজনীয় Widgets Extension লাইব্রেরি যোগ করুন, যা Assistant-কে আপনার উইজেটে BII নাম ও প্যারামিটার পাস করতে দেয়। এছাড়াও, এটি কাস্টম TTS ভূমিকা এবং উইজেট পিন করা ফাংশনালিটি চালু করে।

নিচের বিভাগে shortcuts.xml-এর জন্য <app-widget> স্কিমা বর্ণনা করা হয়েছে।

উইজেট স্কিমা

<app-widget> এলিমেন্টকে shortcuts.xml-এ <capability> এলিমেন্টের মধ্যে ফুলফিলমেন্ট হিসেবে সংজ্ঞায়িত করা হয়। ঐচ্ছিক হিসেবে উল্লেখ করা না থাকলে, এগুলির জন্য নিম্নলিখিত অ্যাট্রিবিউট প্রয়োজন:

`shortcuts.xml` ট্যাগএর মধ্যে রয়েছেঅ্যাট্রিবিউট
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (শুধু TTS-এর জন্য প্রযোজ্য)
  • android:value (ঐচ্ছিক)

উইজেট স্কিমার বিবরণ

<app-widget>

টপ-লেভেল উইজেট ফুলফিলমেন্ট এলিমেন্ট।

গুণাবলী:

  • android:identifier: এই ফুলফিলমেন্টের জন্য শনাক্তকারী। <capability>-এর মধ্যে সংজ্ঞায়িত <app-widget> এবং <intent> ফুলফিলমেন্ট এলিমেন্ট জুড়ে এই ভ্যালু অবশ্যই অনন্য হতে হবে।
  • android:targetClass: ইনটেন্ট ম্যানেজ করার জন্য AppWidgetProvider-এর সম্পূর্ণ ক্লাস নেম।

<parameter>

একটি BII প্যারামিটারকে একটি ইনটেন্ট <parameter> ভ্যালুতে ম্যাপ করে। আপনি প্রতিটি <app-widget> এলিমেন্টের জন্য শূন্য বা তার বেশি প্যারামিটার নির্ধারণ করতে পারবেন। ফুলফিলমেন্টের সময়, Assistant উইজেট ইনস্ট্যান্সের জন্য অতিরিক্ত তথ্য কী-ভ্যালু পেয়ার হিসেবে আপডেট করে প্যারামিটার পাস করে, যার ফর্ম্যাট হল:

  • কী: প্যারামিটারের জন্য নির্ধারিত android:key।
  • ভ্যালু: ব্যবহারকারীর ভয়েস ইনপুট থেকে BII যে ভ্যালু এক্সট্র্যাক্ট করে।

আপনি সংশ্লিষ্ট AppWidgetManager অবজেক্টে getAppWidgetOptions() কল করে এইসব অতিরিক্ত সুবিধা অ্যাক্সেস করতে পারবেন, যা ট্রিগার করা BII-এর নাম ও প্যারামিটার সহ Bundle রিটার্ন করে। আরও বিবরণের জন্য প্যারামিটারের মান এক্সট্র্যাক্ট করুন দেখুন।

BII প্যারামিটার ম্যাচিং সম্পর্কে আরও জানতে, প্যারামিটার ডেটা ও ম্যাচিং দেখুন।

<extra>

এই উইজেটের জন্য কাস্টম TTS ভূমিকা ব্যবহার করা হয়েছে বলে ঘোষণা করা ঐচ্ছিক ট্যাগ। এই ট্যাগের জন্য নিম্নলিখিত অ্যাট্রিবিউট ভ্যালু প্রয়োজন:

  • android:name: "hasTts"
  • android:value: "true"

নমুনা কোড

shortcuts.xml ফাইল থেকে নেওয়া নিম্নলিখিত উদাহরণে GET_EXERCISE_OBSERVATION BII ক্ষমতার জন্য উইজেট ফুলফিলমেন্ট কনফিগারেশন দেখানো হয়েছে:

<capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
  <app-widget
    android:identifier="GET_EXERCISE_OBSERVATION_1"
    android:targetClass="com.exampleapp.providers.exampleAppWidgetProvider"
    android:targetPackage="com.exampleapp">
    <parameter
      android:name="exerciseObservation.aboutExercise.name"
      android:key="exercisename">
    </parameter>
    <extra android:name="hasTts" android:value="true"/>
  </app-widget>
</capability>

আপনি একাধিক <app-widget> এলিমেন্ট নির্দিষ্ট করতে পারেন অথবা প্রতিটি ক্ষমতার জন্য <app-widget> এবং <intent> এলিমেন্টের কম্বিনেশন ব্যবহার করতে পারেন। এই পদ্ধতি আপনাকে ব্যবহারকারীর দেওয়া প্যারামিটারের বিভিন্ন কম্বিনেশনের উপর ভিত্তি করে কাস্টমাইজ করা অভিজ্ঞতা প্রদান করতে সাহায্য করে। যেমন, ব্যবহারকারী তার কোয়েরিতে ড্রপ-অফ লোকেশন উল্লেখ না করলে, আপনি তাকে আপনার অ্যাপের সেই অ্যাক্টিভিটিতে ডাইরেক্ট করতে পারেন যা পিক-আপ ও ড্রপ-অফ লোকেশন সেট করার বিকল্প দেখায়। ফলব্যাক ইনটেন্ট সংজ্ঞায়িত করার ব্যাপারে আরও তথ্য পেতে ফলব্যাক ইনটেন্ট বিভাগ দেখুন।

প্যারামিটারের মান এক্সট্র্যাক্ট করুন

নিচের নমুনা AppWidgetProvider ক্লাসে, প্রাইভেট ফাংশন updateAppWidget() ব্যবহার করা হয় উইজেট বিকল্প Bundle থেকে BII নাম ও প্যারামিটার এক্সট্র্যাক্ট করার জন্য:

Kotlin

package com.example.exampleapp

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

/**
 * Implementation of App Widget functionality.
 */
class MyAppWidget : AppWidgetProvider() {
    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        // There might be multiple widgets active, so update all of them
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }

    private fun updateAppWidget(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
        val widgetText: CharSequence = context.getString(R.string.appwidget_text)

        // Construct the RemoteViews object
        val views = RemoteViews(context.packageName, R.layout.my_app_widget)
        views.setTextViewText(R.id.appwidget_text, widgetText)

        // Extract the name and parameters of the BII from the widget options
        val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId)
        val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII) // "actions.intent.CREATE_TAXI_RESERVATION"
        val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS)
        if (params != null && params.containsKey("dropoff")) {
            val dropoffLocation = params.getString("dropoff")
            // Build your RemoteViews with the extracted BII parameter
            // ...
        }
        appWidgetManager.updateAppWidget(appWidgetId, views)
    }
}

জাভা

package com.example.exampleapp;

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;

/**
 * Implementation of App Widget functionality.
 */
public class MyAppWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // There might be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }

    private static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {

        CharSequence widgetText = context.getString(R.string.appwidget_text);

        // Construct the RemoteViews object
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget);
        views.setTextViewText(R.id.appwidget_text, widgetText);

        // Extract the name and parameters of the BII from the widget options
        Bundle optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId);
        String bii =
                optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII); // "actions.intent.CREATE_TAXI_RESERVATION"
        Bundle params =
                optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS);

        if (params != null && params.containsKey(("dropoff"))){
            String dropoffLocation = params.getString("dropoff");
            // Build your RemoteViews with the extracted BII parameter
            // ...
        }

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

উইজেট এক্সটেনশন লাইব্রেরি

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

এই Maven লাইব্রেরি আপনাকে প্রতিটি উইজেটের জন্য একটি কাস্টম টেক্সট-টু-স্পিচ (TTS) ভূমিকা প্রদান করতে দেয়, যা Assistant-কে ব্যবহারকারীদের কাছে দৃশ্যত রেন্ডার করা কন্টেন্টের একটি সারসংক্ষেপ ঘোষণা করতে সক্ষম করে। এটি লঞ্চার পিন করার সুবিধাও দেয়, যার ফলে ব্যবহারকারীরা Assistant-এ দেখানো উইজেটগুলি সহজেই তাদের লঞ্চার স্ক্রিনে সেভ করতে পারেন।

আপনার অ্যাপ মডিউলের জন্য build.gradle ফাইলের ডিপেন্ডেন্সি বিভাগে লাইব্রেরি যোগ করে শুরু করুন:

dependencies {
    //...
    implementation "com.google.assistant.appactions:widgets:0.0.1"
}

কাস্টম ভূমিকা

উইজেট এক্সটেনশন লাইব্রেরি ইমপোর্ট করার পরে, আপনি নিজের উইজেটের জন্য কাস্টম TTS ভূমিকা প্রদান করতে পারবেন। উইজেটের AppWidgetProvider-এ আপনার সংজ্ঞা যোগ করতে, আপনার IDE-তে ক্লাস খুলুন এবং উইজেট এক্সটেনশন লাইব্রেরি ইমপোর্ট করুন:

Kotlin

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

জাভা

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
এরপর, আপনার ইন্ট্রোডাকশন স্ট্রিং সংজ্ঞায়িত করতে লাইব্রেরি ব্যবহার করুন এবং উইজেট আপডেট করুন, যেমন এই `ExampleAppWidget`-এ দেখানো হয়েছে:

Kotlin

package com.example.exampleapp

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

/**
 * Implementation of App Widget functionality.
 */
object MyAppWidget : AppWidgetProvider() {
    fun updateAppWidget(
        context: Context?,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
        val appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager)
            .setResponseSpeech("Hello world") // TTS to be played back to the user
            .setResponseText("Hello world!") // Response text to be displayed in Assistant
            .build()

        // Update widget with TTS
        appActionsWidgetExtension.updateWidget(appWidgetId)

        // Update widget UI
        appWidgetManager.updateAppWidget(appWidgetId, views)
    }
}

জাভা

package com.example.exampleapp;

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;

/**
 * Implementation of App Widget functionality.
 */
public class MyAppWidget extends AppWidgetProvider {

  static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
    int appWidgetId) {

    AppActionsWidgetExtension appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager)
      .setResponseSpeech("Hello world")  // TTS to be played back to the user
      .setResponseText("Hello world!")  // Response text to be displayed in Assistant
      .build();

      // Update widget with TTS
      appActionsWidgetExtension.updateWidget(appWidgetId);

      // Update widget UI
      appWidgetManager.updateAppWidget(appWidgetId, views);
    }

}

TTS স্টাইল সংক্রান্ত সাজেশন

TTS এবং দেখানো প্রম্পটের জন্য আপনার কাস্টম উইজেট ভূমিকা অপ্টিমাইজ করতে নিম্নলিখিত স্টাইল সংক্রান্ত সাজেশন ব্যবহার করুন।

সাজেশন সাজেস্ট করা হয়েছে সাজেস্ট করা হয় না
সংক্ষেপণ
TTS প্রম্পটে সংক্ষিপ্ত রূপ ব্যবহার করুন। সংক্ষিপ্ত রূপ ছাড়া মেসেজ স্বাভাবিক ও কথোপকথনের মতো না হয়ে কৃত্রিম ও রোবোটিক শোনায়। "পারবে না" এবং "করবে না"-এর মতো শব্দ ব্যবহার করলে তা শাস্তি দেওয়ার মতো এবং কঠোর শোনাতে পারে।
ResponseSpeech (TTS)
আমি কোনও রিজার্ভেশন খুঁজে পাচ্ছি না।

ResponseText
আমি কোনও রিজার্ভেশন খুঁজে পাচ্ছি না।
ResponseSpeech (TTS)
আমি কোনও রিজার্ভেশন খুঁজে পাচ্ছি না।

ResponseText
আমি কোনও রিজার্ভেশন খুঁজে পাচ্ছি না।
কমা
তিন বা তার বেশি আইটেমের তালিকায় সিরিয়াল কমা ব্যবহার করে স্পষ্টতা যোগ করুন। সিরিয়াল কমা না থাকলে, আপনার তালিকার স্বতন্ত্র আইটেমগুলি ভুলভাবে শোনা যেতে পারে বা গ্রুপ হিসেবে পড়া হতে পারে। যেমন, "ড্যাফোডিল, ডেইজি এবং সূর্যমুখী" বাক্যে “ডেইজি এবং সূর্যমুখী” শব্দগুলি একসাথে উচ্চারণ করা হয়। "ড্যাফোডিল, ডেইজি ও সূর্যমুখী" বাক্যে তিনটিই স্পষ্টভাবে আলাদা।
ResponseSpeech (TTS)
আমাদের সবচেয়ে জনপ্রিয় ফুলের মধ্যে হলুদ গোলাপ, ড্যাফোডিল, ডেইজি ও সূর্যমুখী অন্তর্ভুক্ত।

ResponseText
আমাদের সবচেয়ে জনপ্রিয় ফুলের মধ্যে রয়েছে হলুদ গোলাপ, ড্যাফোডিল, ডেইজি ও সূর্যমুখী।
ResponseSpeech (TTS)
আমাদের সবচেয়ে জনপ্রিয় ফুলের মধ্যে হলুদ গোলাপ, ড্যাফোডিল, ডেইজি ও সূর্যমুখী অন্তর্ভুক্ত।

ResponseText
আমাদের সবচেয়ে জনপ্রিয় ফুলের মধ্যে রয়েছে হলুদ গোলাপ, ড্যাফোডিল, ডেইজি ও সূর্যমুখী।
নিউমেরাল
ভিজ্যুয়াল কন্টেন্ট আরও সহজে দেখার জন্য টেক্সটের পরিবর্তে সংখ্যা ব্যবহার করুন।
ResponseSpeech (TTS)
আপনার রক্তচাপ হল ৮০-এর উপরে ১০০।

ResponseText
আপনার রক্তচাপ হল ১০০/৮০।
ResponseSpeech (TTS)
আপনার রক্তচাপ হল ১০০/৮০।

ResponseText
আপনার রক্তচাপ হল একশো বাই আশি।
প্রতীক
ভিজ্যুয়াল কন্টেন্ট আরও সহজে দেখার জন্য টেক্সটের পরিবর্তে বিশেষ প্রতীক ব্যবহার করুন।
ResponseSpeech (TTS)
আপনার শেষ কেনাকাটা ছিল $২৪.৬৫-এর।

ResponseText
আপনার শেষ কেনাকাটা ছিল $২৪.৬৫ মূল্যের।
ResponseSpeech (TTS)
আপনার শেষ কেনাকাটা ছিল চব্বিশ ডলার পঁয়ষট্টি সেন্টের।

ResponseText
আপনার শেষ কেনাকাটা ছিল চব্বিশ ডলার পঁয়ষট্টি সেন্টের।
অপ্রয়োজনীয় কথা এড়িয়ে চলুন
ভদ্রতা উত্তরকে দূরবর্তী এবং আনুষ্ঠানিক করে তোলে। সেগুলি বাদ দিয়ে কথোপকথন বন্ধুত্বপূর্ণ ও ইনফর্মাল রাখুন।
ResponseSpeech (TTS)
আপনার অর্ডার ডেলিভার করা হয়েছে।

ResponseText
আপনার অর্ডার ডেলিভার করা হয়েছে।
ResponseSpeech (TTS)
অবশ্যই, আমি আপনাকে তা বলতে পারি। আপনার অর্ডার ডেলিভার করা হয়েছে।

ResponseText
অবশ্যই, আমি আপনাকে তা বলতে পারি। আপনার অর্ডার ডেলিভার করা হয়েছে।
বিস্ময়সূচক চিহ্ন ব্যবহার করবেন না
এগুলি চিৎকার করার মতো মনে হতে পারে।
ResponseSpeech (TTS)
আপনি আজ ১.৫ মাইল দৌড়েছেন।

ResponseText
আপনি আজ ১.৫ মাইল দৌড়েছেন।
ResponseSpeech (TTS)
আপনি আজ ১.৫ মাইল দৌড়েছেন!

ResponseText
আপনি আজ ১.৫ মাইল দৌড়েছেন!
সময়
সংখ্যা ব্যবহার করুন: "পাঁচটা পনেরো" বা "সোয়া পাঁচটা" লেখার পরিবর্তে "৫:১৫" লিখুন। ১২-ঘণ্টার ঘড়ির জন্য, AM বা PM ব্যবহার করুন।
ResponseSpeech (TTS)
আপনার ডেলিভারি সকাল ৮:১৫-এর মধ্যে পৌঁছে যাবে।

ResponseText
আপনার ডেলিভারি সকাল ৮:১৫-এর মধ্যে পৌঁছে যাবে।
ResponseSpeech (TTS)
আপনার ডেলিভারি আজ সকাল ৮টা ১৫ মিনিটের মধ্যে পৌঁছে যাওয়ার কথা।

ResponseText
আপনার ডেলিভারি আজ সকাল ৮টা বেজে ১৫ মিনিটের মধ্যে পৌঁছে যাওয়ার কথা।
একটানা কথা বলে যাবেন না
তথ্যপূর্ণ উত্তর দাও, তবে তা যেন সংক্ষিপ্ত হয়। ব্যবহারকারীর স্পষ্ট সুবিধা না থাকলে অতিরিক্ত বিবরণ দেবেন না।
ResponseSpeech (TTS)
গত মাসে আপনি ১৫৯ ঘণ্টা এনার্জি ব্যবহার করেছেন।

ResponseText
গত মাসে আপনি ১৫৯ ঘণ্টা এনার্জি ব্যবহার করেছেন।
ResponseSpeech (TTS)
পৃথিবী ও পরিবেশের জন্য বিদ্যুৎ সাশ্রয় করা খুবই গুরুত্বপূর্ণ। গত মাসে আপনি ১৫৯ ঘণ্টা বিদ্যুৎ ব্যবহার করেছেন। এই মাসে আপনি ৫৮ ঘণ্টা বিদ্যুৎ ব্যবহার করেছেন।

ResponseText
বিদ্যুৎ সাশ্রয় করা পৃথিবী ও পরিবেশের জন্য খুবই গুরুত্বপূর্ণ। গত মাসে আপনি ১৫৯ ঘণ্টা বিদ্যুৎ ব্যবহার করেছেন। এই মাসে আপনি ৫৮ ঘণ্টা বিদ্যুৎ ব্যবহার করেছেন।
ছোট, সহজ শব্দ ব্যবহার করুন
সহজ ও সরল ভাষা সবচেয়ে বেশি সংখ্যক মানুষের কাছে আবেদন রাখে, এর ফলে সব ধরনের ব্যাকগ্রাউন্ডের মানুষের কাছে তা অ্যাক্সেসযোগ্য হয়ে ওঠে।
ResponseSpeech (TTS)
আপনার শেষ ব্লাড সুগার রিডিং ছিল ১২৬।

ResponseText
আপনার শেষ ব্লাড সুগার রিডিং ছিল ১২৬ মিলিগ্রাম/ডেসিলিটার।
ResponseSpeech (TTS)
শেষের আগের ব্লাড গ্লুকোজ লেভেল ছিল ১২৬।

ResponseText
শেষের আগের ব্লাড গ্লুকোজ লেভেল ছিল ১২৬।

লঞ্চার পিন করা হচ্ছে

উইজেট এক্সটেনশন লাইব্রেরি Assistant-এ আপনার উইজেটের সাথে এই উইজেট যোগ করুন বোতামটি দেখানোর অনুমতি দেয়। পিন করার সুবিধা চালু করতে, AndroidManifest.xml-এ নিম্নলিখিত রিসিভার সংজ্ঞা যোগ করুন:

<application>
  <receiver android:name="com.google.assistant.appactions.widgets.pinappwidget.PinAppWidgetBroadcastReceiver"
    android:exported="false">
    <intent-filter>
      <action android:name="com.google.assistant.appactions.widgets.COMPLETE_PIN_APP_WIDGET" />
    </intent-filter>
  </receiver>
  <service
    android:name=
    "com.google.assistant.appactions.widgets.pinappwidget.PinAppWidgetService"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
      <action
        android:name="com.google.assistant.appactions.widgets.PIN_APP_WIDGET" />
    </intent-filter>
  </service>
</application>

ইনভেন্টরির উপলভ্যতা

ইনলাইন ইনভেনটরি বা ওয়েব ইনভেনটরি সাপোর্ট করে এমন BII, আপনার উইজেট ফুলফিলমেন্টে এইসব ইনভেনটরি যোগ করতে পারে।

ইনলাইন ইনভেনটরি

একটি স্যাম্পেল shortcuts.xml ফাইল থেকে নিম্নলিখিত কোডটি ইনলাইন ইনভেনটরি এবং উইজেট ফুলফিলমেন্টের জন্য কনফিগার করা একটি START_EXERCISE BII ক্ষমতা প্রদর্শন করে:

<capability
  android:name="actions.intent.START_EXERCISE">
  <app-widget
    android:identifier="START_EXERCISE_1"
    android:targetClass="com.example.exampleapp.StartExerciseAppWidgetProvider">
    <parameter
      android:name="exercise.name"
      android:key="exerciseName"
      app:shortcutMatchRequired="true">
    </parameter>
  </app-widget>
</capability>

<shortcut android:shortcutId="RunningShortcut">
  <intent
    android:action="android.intent.action.VIEW"
    android:targetClass="com.example.exampleapp.StartExcerciseActivity" />
  <capability-binding
    android:capability="actions.intent.START_EXERCISE"
    android:parameter="exercise.name"
    android:value="running;runs" />
</shortcut>

আগের স্যাম্পেলে, কোনও ব্যবহারকারী Assistant-কে “ExampleApp-এর মাধ্যমে দৌড়ানো শুরু করো” বলে এই ক্ষমতা ট্রিগার করলে, <app-widget> পূরণের জন্য বিকল্প বান্ডেলে নিম্নলিখিত কী-ভ্যালু পেয়ার থাকে:

  • কী = “exerciseName”
  • ভ্যালু = “RunningShortcut”

ওয়েব ইনভেনটরি

shortcuts.xml ফাইলের স্যাম্পেল থেকে নেওয়া নিম্নলিখিত কোডটি ওয়েব ইনভেনটরি ও উইজেট ফুলফিলমেন্টের জন্য চালু করা একটি ক্ষমতা দেখায়:

<shortcuts>
  <capability
    android:name="actions.intent.START_EXERCISE">
    <app-widget
      android:identifier="START_EXERCISE_1"
      android:targetClass="com.example.exampleapp.CreateTaxiAppWidgetProvider">
      <parameter
        android:name="exercise.name"
        android:key="exerciseName"
        android:mimeType="text/*">
        <data android:pathPattern="https://exampleapp.com/exercise/.*" />
      </parameter>
    </app-widget>
  </capability>
</shortcuts>

অ্যাপ অ্যাকশন টেস্ট করা

কোনও ফিজিক্যাল বা ভার্চুয়াল ডিভাইসে উইজেট পরীক্ষা করতে, Android Studio-র জন্য Google Assistant প্লাগ-ইন-এর একটি ফিচার, অ্যাপ অ্যাকশন টেস্ট টুল ব্যবহার করুন। টেস্ট টুল ব্যবহার করতে, এই ধাপগুলি অনুসরণ করুন:

  1. আপনার অ্যাপ চালু থাকা অবস্থায় আপনার টেস্ট ডিভাইস কানেক্ট করুন।
  2. Android Studio-তে, টুল > অ্যাপ অ্যাকশন > অ্যাপ অ্যাকশন টেস্ট টুল বিকল্পে যান।
  3. প্রিভিউ তৈরি করুন বিকল্পে ক্লিক করুন।
  4. Android Studio ব্যবহার করে, আপনার টেস্ট ডিভাইসে অ্যাপ চালান।
  5. আপনার অ্যাপ অ্যাকশন পরীক্ষা করতে, আপনার টেস্ট ডিভাইসে Assistant অ্যাপ ব্যবহার করুন। যেমন, আপনি বলতে পারেন, "Ok Google, এই সপ্তাহে ExampleApp-এ আমি কত মাইল দৌড়েছি?"
  6. আপনার অ্যাপের আচরণ লক্ষ্য করুন অথবা কাঙ্ক্ষিত অ্যাকশনের ফলাফল যাচাই করতে Android Studio ডিবাগার ব্যবহার করুন।

কোয়ালিটির বিষয়ে নির্দেশিকা

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

উইজেটে কন্টেন্ট

  • (প্রয়োজনীয়) আপনার উইজেটে বিজ্ঞাপন দেখাবেন না।
  • অভিপ্রায় পূরণ করার জন্য উইজেট কন্টেন্টের উপর সম্পূর্ণভাবে ফোকাস করুন। একটি উইজেট দিয়ে একাধিক উদ্দেশ্য পূরণ করার চেষ্টা করবেন না বা অপ্রাসঙ্গিক কন্টেন্ট যোগ করবেন না।

যাচাইকরণ ম্যানেজ করা

  • (প্রয়োজনীয়) কোনও ইউজার ফ্লো সম্পূর্ণ করার জন্য ব্যবহারকারীর যাচাইকরণ প্রয়োজন হলে, এমন একটি উইজেট দেখান যা ব্যাখ্যা করে যে ব্যবহারকারীকে অ্যাপে চালিয়ে যেতে হবে। Google Assistant-এ ইনলাইন ব্যবহারকারী যাচাইকরণ অ্যাপ অ্যাকশনের জন্য সমর্থিত নয়।
  • উইজেট ব্যবহার করে ডেটা দেখানোর জন্য ব্যবহারকারী আপনার অ্যাপকে অনুমতি দিলে, আপনি রানটাইমে অননুমোদিত ব্যবহারকারীদের জন্য একটি ত্রুটি উইজেট দেখাতে পারেন।

ফলব্যাক ইনটেন্ট

  • (প্রয়োজনীয়) আপনার shortcuts.xml-এ, প্রদত্ত ক্ষমতার জন্য আপনার উইজেট ফুলফিলমেন্টের পাশাপাশি সবসময় একটি ফলব্যাক <intent> প্রদান করুন। ফলব্যাক ইন্টেন্ট হল এমন একটি <intent> এলিমেন্ট যার কোনও প্রয়োজনীয় <parameter> ভ্যালু নেই।

    এটি Assistant-কে কোনও অ্যাকশন পূরণ করতে দেয় যখন ব্যবহারকারীর কোয়েরিতে এমন প্যারামিটার থাকে না যা চালানো যায় এমন ডিভাইসে সংজ্ঞায়িত অন্যান্য ফুলফিলমেন্ট এলিমেন্টের জন্য প্রয়োজন। এর ব্যতিক্রম হল যখন সেই ক্ষমতার জন্য কোনও প্রয়োজনীয় প্যারামিটার থাকে না, সেক্ষেত্রে শুধুমাত্র উইজেট ফুলফিলমেন্ট প্রয়োজন।

  • হোম স্ক্রিনের পরিবর্তে প্রাসঙ্গিক স্ক্রিনে আপনার অ্যাপ খুলতে ফলব্যাক ইনটেন্ট ব্যবহার করুন।

একটি নমুনা shortcuts.xml ফাইল থেকে নিম্নলিখিত কোডটি একটি <capability> দেখায় যার সাথে একটি ফলব্যাক <intent> রয়েছে যা একটি প্রাথমিক <app-widget> পূরণকে সমর্থন করে:

<shortcuts>
  <capability
    android:name="actions.intent.CREATE_TAXI_RESERVATION">
    <!-- Widget with required parameter, specified using the "android:required" attribute. -->
    <app-widget
      android:identifier="CREATE_TAXI_RESERVATION_1"
      android:targetClass="com.example.myapplication.CreateTaxiAppWidgetProvider">
      <parameter
        android:name="taxiReservation.dropoffLocation.name"
        android:key="dropoff"
        android:required="true">
      </parameter>
    </app-widget>
    <!-- Fallback intent with no parameters required to successfully execute. -->
    <intent
      android:identifier="CREATE_TAXI_RESERVATION_3"
      android:action="myapplication.intent.CREATE_TAXI_RESERVATION_1"
      android:targetClass="com.example.myapplication.TaxiReservationActivity">
    </intent>
  </capability>
</shortcuts>

Google Play-এর ডেটা প্রকাশ

Widgets Extension লাইব্রেরির লেটেস্ট ভার্সন দ্বারা সংগৃহীত এন্ড-ইউজার ডেটা এই বিভাগে তালিকাভুক্ত করা হয়েছে।

এই SDK ডেভেলপার-প্রদত্ত টেক্সট-টু-স্পিচ (TTS) উত্তর পাঠায় যা Assistant-এর স্পিচ টেকনোলজি ব্যবহার করে Google Assistant-এর মাধ্যমে ব্যবহারকারীকে জানানো হয়। Google এই তথ্য সেভ করে না।

অ্যাপ অ্যাকশন নিম্নলিখিত উদ্দেশ্যে ক্লায়েন্ট অ্যাপ মেটাডেটাও সংগ্রহ করতে পারে:

  • বিভিন্ন SDK ভার্সনের অ্যাডপশন রেট মনিটর করতে।
  • বিভিন্ন অ্যাপ জুড়ে SDK ফিচারের ব্যবহার পরিমাপ করতে।