কাস্টম ডিভাইস অ্যাকশন নিবন্ধন করুন

আপনার ডিভাইসে এমন বিশেষ ক্ষমতা থাকতে পারে যাবৈশিষ্ট্যএর বর্তমান সেট দ্বারা আচ্ছাদিত নয় -- যেমন একটি ডিভাইসের জন্য "ব্লিঙ্ক মাই লাইট" বৈশিষ্ট্য যা এর আলো জ্বলতে পারে। আপনি আপনার ডিভাইসের জন্য কাস্টম ক্রিয়াগুলি সংজ্ঞায়িত করতে পারেন যা বিশেষ ক্ষমতা ট্রিগার করার জন্য আপনার ডিভাইসে পাঠানো কমান্ডগুলি নির্দিষ্ট করে৷

একটি কাস্টম ডিভাইস ক্রিয়া সংজ্ঞায়িত করতে, আপনার নিম্নলিখিতগুলি প্রয়োজন:

  • একটি প্যাটার্ন যা ব্যবহারকারীর প্রশ্নের সাথে মেলে
  • একটি মিলে যাওয়া ক্যোয়ারির সাথে যুক্ত করার জন্য একটি কাস্টম ডিভাইস ক্রিয়া৷
  • যদি ডিভাইসটি অ্যাকশন সমর্থন করে তবে ব্যবহারকারীর সাথে কথা বলা পাঠ্য
  • যে কোনো পরামিতি সহ আপনার ডিভাইসে ফেরত পাঠানো একটি কমান্ডের নাম

আপনি এই তথ্যটিকে একটি অ্যাকশন প্যাকেজে রেখে কাস্টম ডিভাইস অ্যাকশন তৈরি করেন। অ্যাকশন প্যাকেজ সহকারীর প্রতিক্রিয়াগুলির ফর্ম্যাট নির্ধারণ করে। অ্যাকশন SDK-এর বিপরীতে, কাস্টম ডিভাইস অ্যাকশন স্থানীয়ভাবে পূরণ করা হয়; আপনি অনুরোধ প্রক্রিয়াকরণ এবং প্রতিক্রিয়া প্রদান করার জন্য একটি শেষ বিন্দু নির্দিষ্ট করবেন না। কাস্টম ডিভাইস ক্রিয়া প্রকৃতিতে কথোপকথন নয়।

একটি অ্যাকশন প্যাকেজ তৈরি করুন

একটি উদাহরণ হিসাবে নিম্নলিখিত ব্যবহার করে, একটি ফাইল তৈরি করুন (যেমন actions.json ) যা একটি পরীক্ষা কমান্ড সংজ্ঞায়িত করে: একটি LED ব্লিঙ্কিং। পূর্ববর্তী ধাপে ডাউনলোড করা নমুনা কোড থেকে এটি অনুলিপি করুন:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .
উদাহরণ
{
    "manifest": {
        "displayName": "Blinky light",
        "invocationName": "Blinky light",
        "category": "PRODUCTIVITY"
    },
    "actions": [
        {
            "name": "com.example.actions.BlinkLight",
            "availability": {
                "deviceClasses": [
                    {
                        "assistantSdkDevice": {}
                    }
                ]
            },
            "intent": {
                "name": "com.example.intents.BlinkLight",
                "parameters": [
                    {
                        "name": "number",
                        "type": "SchemaOrg_Number"
                    },
                    {
                        "name": "speed",
                        "type": "Speed"
                    }
                ],
                "trigger": {
                    "queryPatterns": [
                        "blink ($Speed:speed)? $SchemaOrg_Number:number times",
                        "blink $SchemaOrg_Number:number times ($Speed:speed)?"
                    ]
                }
            },
            "fulfillment": {
                "staticFulfillment": {
                    "templatedResponse": {
                        "items": [
                            {
                                "simpleResponse": {
                                    "textToSpeech": "Blinking $number times"
                                }
                            },
                            {
                                "deviceExecution": {
                                    "command": "com.example.commands.BlinkLight",
                                    "params": {
                                        "speed": "$speed",
                                        "number": "$number"
                                    }
                                }
                            }
                        ]
                    }
                }
            }
        }
    ],
    "types": [
        {
            "name": "$Speed",
            "entities": [
                {
                    "key": "SLOWLY",
                    "synonyms": [
                        "slowly",
                        "slow"
                    ]
                },
                {
                    "key": "NORMALLY",
                    "synonyms": [
                        "normally",
                        "regular"
                    ]
                },
                {
                    "key": "QUICKLY",
                    "synonyms": [
                        "quickly",
                        "fast",
                        "quick"
                    ]
                }
            ]
        }
    ]
}

পূর্ববর্তী উদাহরণ কাস্টম ডিভাইস ক্রিয়া সংজ্ঞায়িত করতে নিম্নলিখিত তথ্য ব্যবহার করে:

  • একটি প্যাটার্ন যা ব্যবহারকারীর প্রশ্নের সাথে মেলে ( এন বার ব্লিঙ্ক করুন )
  • সাংগঠনিক উদ্দেশ্যে একটি মিলে যাওয়া ক্যোয়ারী ( com.example.actions.BlinkLight ) এর সাথে সংযুক্ত করার জন্য কাস্টম ডিভাইস ক্রিয়া
  • যদি ডিভাইসটি অ্যাকশন সমর্থন করে তবে ব্যবহারকারীর সাথে কথা বলা পাঠ্য ( এন বার ব্লিঙ্কিং )
  • একটি কমান্ডের নাম ( com.example.commands.BlinkLight ) যা ডিভাইসে ফেরত পাঠানো হয়, সাথে যেকোনো পরামিতি (একটি সংখ্যা এবং সম্ভবত গতির একটি বিবরণ)

ক্যোয়ারী প্যাটার্ন সংজ্ঞায়িত করতে, নিম্নলিখিত নোট করুন:

  • আপনি ক্যোয়ারী প্যাটার্নে schema.org-সংজ্ঞায়িত প্রকার ব্যবহার করতে পারেন।
  • types [...] অ্যারে কাস্টম প্রকারের তালিকাকে সংজ্ঞায়িত করে (উদাহরণস্বরূপ, $Speed )।
  • আপনি ক্যোয়ারী প্যাটার্নে কাস্টম প্রকার ব্যবহার করতে পারেন। ক্যোয়ারী প্যাটার্নের সাথে মেলে ব্যবহারকারী আপনার কাস্টম টাইপের যেকোনো প্রতিশব্দ বলতে পারে।
  • যখন একটি প্রতিশব্দ মেলে, টাইপ ইনস্ট্যান্স ( speed ) স্বাভাবিক কী ( SLOWLY ) ফিরিয়ে দেবে। ক্ষেত্রে একাধিক সত্ত্বা থাকতে পারে, উদাহরণস্বরূপ, বিভিন্ন আলো রয়েছে যা বিভিন্ন গতির ব্লিঙ্কিং সমর্থন করে।
  • অনুরোধ TTS প্যাটার্ন অংশ ঐচ্ছিক হতে পারে. উদাহরণস্বরূপ, ($Speed:speed)? এই অংশটিকে ঐচ্ছিক করতে ক্যোয়ারী প্যাটার্নে।
  • $ type .raw (উদাহরণস্বরূপ, $speed.raw ) প্রতিক্রিয়ায় TTS শব্দ(গুলি) দ্বারা প্রতিস্থাপিত হয়েছে যেটি ব্যবহারকারী আসলে কথা বলেছেন।

এই ক্ষেত্রগুলির অনেকের বর্ণনার জন্য, অ্যাকশনপ্যাকেজ ডকুমেন্টেশন দেখুন।

অ্যাকশন প্যাকেজ স্থাপন করুন

আপনি একটি অ্যাকশন প্যাকেজে আপনার কাস্টম ডিভাইস অ্যাকশন তৈরি করার পরে, আপনি অ্যাসিস্ট্যান্টের কাছে অ্যাকশন প্যাকেজ অ্যাক্সেসযোগ্য করতে পারেন।

আপনি যখন আপনার ডিভাইসে এই বিভাগে পদক্ষেপগুলি সম্পাদন করতে পারেন, তখন আপনার বিকাশ সিস্টেমে সেগুলি করা সহজ হতে পারে৷ নিম্নলিখিত কমান্ডগুলি চালানোর জন্য ভার্চুয়াল পরিবেশের প্রয়োজন নেই।

  1. gactions কমান্ড লাইন টুলটি ডাউনলোড করুন।

  2. gactions টুলের মতো একই ডিরেক্টরি থেকে বিদ্যমান শংসাপত্রগুলি সরান৷

    rm creds.data
  3. gactions CLI ব্যবহার করে আপনার অ্যাকশন প্যাকেজ Google-এ সেভ করুন। আপনার অ্যাকশন কনসোল প্রকল্প আইডি দিয়ে project_id প্রতিস্থাপন করুন।

    ./gactions update --action_package actions.json --project project_id
  4. প্রথমবার যখন আপনি এই কমান্ডটি চালান তখন আপনাকে একটি URL দেওয়া হবে এবং সাইন ইন করতে বলা হবে৷ URLটি অনুলিপি করুন এবং এটি একটি ব্রাউজারে পেস্ট করুন (এটি যে কোনও সিস্টেমে করা যেতে পারে)৷ পৃষ্ঠাটি আপনাকে আপনার Google অ্যাকাউন্টে সাইন ইন করতে বলবে। একটি পূর্ববর্তীধাপ

  5. আপনি API থেকে অনুমতির অনুরোধ অনুমোদন করার পরে, আপনার ব্রাউজারে একটি কোড প্রদর্শিত হবে, যেমন "4/XXXX"৷ টার্মিনালে এই কোডটি কপি এবং পেস্ট করুন:

    Enter the authorization code:

    অনুমোদন সফল হলে, আপনি নিম্নলিখিত অনুরূপ একটি প্রতিক্রিয়া দেখতে পাবেন:

    Your app for the Assistant for project my-devices-project was successfully
    updated with your actions.
    
  6. gactions CLI ব্যবহার করে পরীক্ষা মোডে আপনার অ্যাকশন প্যাকেজ স্থাপন করুন। এই কমান্ডটি চালানোর আগে আপনি অবশ্যই অন্তত একবার Google-এ আপনার অ্যাকশন প্যাকেজ সংরক্ষণ করেছেন। টেস্ট মোড শুধুমাত্র আপনার ব্যবহারকারী অ্যাকাউন্টে অ্যাকশন প্যাকেজ সক্ষম করে।

    ./gactions test --action_package actions.json --project project_id

    বর্তমানে, আপনি অ্যাকশন সিমুলেটর ব্যবহার করে প্রকল্পটি পরীক্ষা করতে পারবেন না।

  7. অ্যাকশন প্যাকেজ আপডেট করতে, gactions update কমান্ড ব্যবহার করুন।

  8. (ঐচ্ছিক) আপনি একটি একক প্রকল্পে একই সময়ে বিভিন্ন ভাষা এবং লোকেল সমর্থন করার জন্য স্থানীয়কৃত অ্যাকশন প্যাকেজ তৈরি করতে পারেন।

নমুনা পরিবর্তন করুন

ডিভাইসে এই বিভাগে পদক্ষেপগুলি করুন৷

nano pushtotalk.py

আপনার কাস্টম কর্মের জন্য একটি হ্যান্ডলার যোগ করুন. উল্লেখ্য যে নীচের হ্যান্ডলারটি ইতিমধ্যেই উপরের নমুনা অ্যাকশন প্যাকেজের নমুনা কোডে যোগ করা হয়েছে।

...

device_handler = device_helpers.DeviceRequestHandler(device_id)

@device_handler.command('com.example.commands.BlinkLight')
def blink(speed, number):
    logging.info('Blinking device %s times.' % number)
    delay = 1
    if speed == "SLOWLY":
        delay = 2
    elif speed == "QUICKLY":
        delay = 0.5
    for i in range(int(number)):
        logging.info('Device is blinking.')
        # GPIO.output(25, 1)
        time.sleep(delay)
        # GPIO.output(25, 0)
        time.sleep(1)

নমুনা চালান

সোর্স কোড চালান।

python pushtotalk.py

একটি প্রশ্ন চেষ্টা করুন. উপরের উদাহরণের জন্য, নিম্নলিখিত চেষ্টা করুন:

5 বার পলক করুন।

মনে রাখবেন যে ক্যোয়ারীটি অ্যাকশন প্যাকেজের ক্যোয়ারী প্যাটার্নের সাথে মেলে।