רישום פעולות מותאמות אישית במכשיר

ייתכן שלמכשיר יש יכולות מיוחדות שלא נכללות בקבוצה הנוכחית מאפיינים - למשל "הבהוב האור שלי" תכונה חדשה למכשיר שיכול להבהב את האורות שלו. שלך יכולים להגדיר פעולות מותאמות אישית למכשיר שמציינות את הפקודות שנשלחות במכשיר שלכם כדי להפעיל יכולות מיוחדות.

כדי להגדיר פעולה מותאמת אישית במכשיר, צריך:

  • דפוס להתאמה לשאילתת המשתמש
  • פעולה מותאמת אישית במכשיר שתשויך לשאילתה תואמת
  • טקסט שמוקרא למשתמש, אם המכשיר תומך בפעולה הזו
  • שם הפקודה שנשלח בחזרה למכשיר, יחד עם הפרמטרים

כדי ליצור את הפעולה המותאמת אישית במכשיר, צריך להזין את המידע הזה חבילת פעולה. חבילות פעולה מגדירות את הפורמט של התשובות של Assistant. בניגוד ל- 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"
                    ]
                }
            ]
        }
    ]
}

בדוגמה הקודמת נעשה שימוש בפרטים הבאים כדי להגדיר את המכשיר המותאם אישית. action:

  • דפוס להתאמה מול שאילתת המשתמש (הבהוב N פעמים)
  • הפעולה בהתאמה אישית במכשיר שתשויך לשאילתה תואמת (com.example.actions.BlinkLight) למטרות ארגוניות
  • טקסט שמוקרא למשתמש, אם המכשיר תומך בפעולה הזו (הבהוב N פעמים)
  • שם של פקודה (com.example.commands.BlinkLight) שנשלח בחזרה אל המכשיר, וגם הפרמטרים (מספר ואולי גם תיאור של המהירות)

כדי להגדיר את דפוס השאילתה, חשוב לשים לב לדברים הבאים:

  • אפשר להשתמש בסוגים שמוגדרים על ידי schema.org בתבנית השאילתה.
  • המערך types [...] מגדיר את רשימת הסוגים המותאמים אישית (לדוגמה, $Speed).
  • אפשר להשתמש בסוגים מותאמים אישית בתבנית השאילתה. המשתמש יכול לדבר כל אחת מילים נרדפות בסוג המותאם אישית כדי להתאים לדפוס השאילתה.
  • כאשר יש התאמה למילה נרדפת, מופע הסוג (speed) יהיה החזרת המפתח המנורמל (SLOWLY). יכולות להיות כמה ישויות למשל, יש אורות שונים שתומכים במהירויות שונות. של הבהוב.
  • חלקים של תבנית הבקשה TTS יכולים להיות אופציונליים. לדוגמה, השתמשו ($Speed:speed)? בתבנית השאילתה כדי שהחלק הזה יהיה אופציונלי.
  • $type.raw (לדוגמה, $speed.raw) ב- בתגובה TTS מוחלף במילים שהמשתמש דיבר בפועל.

לתיאורים של רבים מהשדות האלה, ActionPackage התיעוד.

פריסה של חבילת הפעולות

אחרי שיוצרים פעולה מותאמת אישית במכשיר בחבילת Action, אפשר לבצע חבילת הפעולות נגישה ל-Assistant.

אפשר לבצע את השלבים שבקטע הזה במכשיר, אבל יכול להיות שזה יהיה קל יותר לבצע אותן במערכת הפיתוח. הפקודות הבאות לא דורשות את הסביבה הווירטואלית להפעלה.

  1. מורידים את כלי שורת הפקודה gactions.

  2. מסירים את כל פרטי הכניסה הקיימים מאותה ספרייה כמו gactions של Google.

    rm creds.data
  3. שומרים את חבילת הפעולות ב-Google באמצעות ה-CLI של gactions. מחליפים את project_id בפרויקט בקונסולה ל-Actions מזהה.

    ./gactions update --action_package actions.json --project project_id
  4. בפעם הראשונה שמריצים את הפקודה הזו, מקבלים כתובת URL ומתבקשים צריך להיכנס לחשבון. מעתיקים את כתובת ה-URL ומדביקים אותה בדפדפן (ניתן לעשות זאת בכל מערכת). בדף תופיע בקשה להיכנס לחשבון Google. הסמל לחשבון 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. פורסים את חבילת הפעולות במצב בדיקה באמצעות ה-CLI של gactions. עליך לשמור את חבילת הפעולות ב-Google לפחות פעם אחת לפני הרצת הפקודה הזו. מצב בדיקה מפעיל את חבילת הפעולה חשבון משתמש בלבד.

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

    בשלב זה אי אפשר לבדוק את הפרויקט באמצעות סימולטור הפעולות.

  7. כדי לעדכן את חבילת הפעולות, משתמשים בפקודה gactions update.

  8. (אופציונלי) אפשר ליצור חבילות פעולה שמותאמות לשוק המקומי. כדי לתמוך בהרבה שפות ולוקאלים שונים בו-זמנית בפרויקט אחד.

שינוי הדוגמה

מבצעים את השלבים שמפורטים בקטע הזה במכשיר.

nano pushtotalk.py

מוסיפים handler לפעולה המותאמת אישית. שימו לב שה-handler שבהמשך כבר נוסף לקוד לדוגמה של חבילת Action Package לדוגמה שלמעלה.

...

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 פעמים.

שימו לב שהשאילתה צריכה להתאים לדפוס השאילתה בחבילת הפעולות.