Özel Cihaz İşlemlerini Kaydet

Cihazınızda mevcutcihazımdaki ışıklargibi ışıklar<br class="ph-2-6"yı yakabilen ışıklar Cihazınızda, özel yetenekleri tetiklemek üzere cihazınıza gönderilen komutları belirten özel işlemler tanımlayabilirsiniz.

Özel bir cihaz işlemi tanımlamak için aşağıdakilere ihtiyacınız vardır:

  • Kullanıcı sorgusuyla eşleşecek bir kalıp
  • Eşleşen bir sorguyla ilişkilendirilecek özel cihaz işlemi
  • Cihaz işlemi destekliyorsa kullanıcıya sesli olarak mesaj gönderilir
  • Herhangi bir parametrelerle birlikte cihazınıza geri gönderilen bir komut adı

Özel cihaz işlemini, bu bilgileri bir eylem paketine yerleştirerek oluşturursunuz. İşlem paketleri, Asistan yanıtlarının biçimini tanımlar. Actions SDK'sının aksine özel cihaz işlemleri yerel olarak gerçekleştirilir. İstekleri işlemek ve yanıt sağlamak için bir uç nokta belirtmezsiniz. Özel cihaz işlemleri konuşma yapısı değildir.

İşlem Paketi oluşturma

Örnek olarak şunu kullanarak test komutu tanımlayan bir dosya (ör. actions.json) oluşturun: LED'in yanıp sönmesi. Önceki adımda indirdiğiniz örnek koddan kopyalayın:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .
Örnek
{
    "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"
                    ]
                }
            ]
        }
    ]
}

Önceki örnekte, özel cihaz işlemini tanımlamak için aşağıdaki bilgiler kullanılmaktadır:

  • Kullanıcı sorgusuyla eşleşecek bir kalıp (N kez yanıp sönme)
  • Kuruluş amacıyla eşleşen bir sorguyla (com.example.actions.BlinkLight) ilişkilendirilecek özel cihaz işlemi
  • Cihaz işlemi destekliyorsa kullanıcıya sesli olarak mesaj okunur (N kez yanıp söner)
  • Tüm parametrelerle (bir sayı ve muhtemelen hızın açıklaması) birlikte cihaza geri gönderilen bir komut adı (com.example.commands.BlinkLight)

Sorgu modelini tanımlamak için aşağıdakileri göz önünde bulundurun:

  • Sorgu kalıbında schema.org tarafından tanımlanan türleri kullanabilirsiniz.
  • types [...] dizisi, özel türlerin listesini tanımlar (örneğin, $Speed).
  • Sorgu kalıbında özel türler kullanabilirsiniz. Kullanıcı, özel türünüzdeki eş anlamlılardan herhangi birini sorgu kalıbıyla eşleşecek şekilde söyleyebilir.
  • Bir eş anlamlı kelime eşleştiğinde tür örneği (speed) normalleştirilmiş anahtarı (SLOWLY) döndürür. Bununla birlikte, birden fazla varlık olabilir. Örneğin, farklı yanıp sönme hızlarını destekleyen farklı ışıklar vardır.
  • İstek TTS kalıbının bazı bölümleri isteğe bağlı olabilir. Örneğin, bu bölümü isteğe bağlı hale getirmek için sorgu kalıbında ($Speed:speed)? kullanın.
  • TTS yanıtındaki $type.raw (örneğin, $speed.raw) yerine kullanıcının gerçekten söylediği kelimeler gelir.

Bu alanların çoğunun açıklamaları için ActionPackage belgelerine bakın.

İşlem Paketini dağıtma

Özel cihaz işleminizi bir İşlem paketinde oluşturduktan sonra, İşlem paketini Asistan tarafından erişilebilir hale getirebilirsiniz.

Bu bölümdeki adımları cihazınızda izleyebilirsiniz ancak geliştirme sisteminizde yapmanız daha kolay olabilir. Aşağıdaki komutların çalışması için sanal bir ortam gerekmez.

  1. gactions komut satırı aracını indirin.

  2. gactions aracıyla aynı dizindeki mevcut kimlik bilgilerini kaldırın.

    rm creds.data
  3. gactions KSA'yı kullanarak Action paketinizi Google'a kaydedin. project_id yerine Actions Console proje kimliğinizi yazın.

    ./gactions update --action_package actions.json --project project_id
    gerekir.
  4. Bu komutu ilk kez çalıştırdığınızda size bir URL verilir ve oturum açmanız istenir. URL'yi kopyalayın ve bir tarayıcıya yapıştırın (bu herhangi bir sistemde yapılabilir). Sayfada Google Hesabınızda oturum açmanız istenir. Önceki bir adımı.

  5. API'den izin isteğini onayladıktan sonra tarayıcınızda "4/XXXX" gibi bir kod görünür. Bu kodu kopyalayıp terminale yapıştırın:

    Enter the authorization code:

    Yetkilendirme başarılı olduysa aşağıdakine benzer bir yanıt görürsünüz:

    Your app for the Assistant for project my-devices-project was successfully
    updated with your actions.
    
  6. gactions KSA'yı kullanarak işlem paketinizi test moduna dağıtın. Bu komutu çalıştırmadan önce Action paketinizi en az bir kez Google'a kaydetmiş olmanız gerekir. Test modu, İşlem paketini yalnızca kullanıcı hesabınızda etkinleştirir.

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

    Şu anda projeyi Actions simülatörünü kullanarak test edemezsiniz.

  7. İşlem paketini güncellemek için gactions update komutunu kullanın.

  8. (İsteğe bağlı) Tek bir projede birçok farklı dili ve yerel ayarı aynı anda desteklemek için yerelleştirilmiş işlem paketleri oluşturabilirsiniz.

Örneği değiştir

Cihazda bu bölümdeki adımları uygulayın.

nano pushtotalk.py

Özel işleminiz için bir işleyici ekleyin. Aşağıdaki işleyicinin, yukarıdaki örnek Action Package'ın örnek koduna zaten eklenmiş olduğunu unutmayın.

...

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)

Örneği çalıştır

Kaynak kodu çalıştırın.

python pushtotalk.py

Bir sorgu deneyin. Yukarıdaki örnek için aşağıdakileri deneyin:

5 kez yanıp sönme.

Sorgunun İşlem Paketi'ndeki sorgu kalıbıyla eşleşmesi gerektiğini unutmayın.