Özel Cihaz İşlemlerini Kaydet

Cihazınızda mevcut özellikler "ışığımı yakıp söndür" gibi özelliğini kullanın. Siz , cihazınız için gönderilen komutları belirten özel işlemler tanımlayabilir cihazınızın özel yetenekleri tetiklemesini sağlayın.

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

  • Kullanıcı sorgusuyla eşleştirilecek kalıp
  • Eşleşen bir sorguyla ilişkilendirilecek özel cihaz işlemi
  • Cihaz işlemi destekliyorsa kullanıcıya metin söylenir
  • Parametrelerle birlikte cihazınıza geri gönderilen bir komut adı

Özel cihaz işlemini, bu bilgileri işlem paketine bakın. İşlem paketleri, Asistan yanıtlarının biçimini tanımlar. Şunlardan farklı olarak: Actions SDK'sı, özel cihaz işlemleri yerel olarak gerçekleştirilir; bir veri türü belirtmeyin uç noktanız bulunur. Özel cihaz işlemleri konuşmaya dayalı değildir.

İşlem Paketi oluşturma

Örnek olarak aşağıdakileri kullanarak bir dosya (örneğin, actions.json) oluşturun ve bir test komutunu tanımlar: yanıp sönen LED. Kodu, oluşturduğunuz örnek koddan önceki adımda indirildi:

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ı tanımlamak için aşağıdaki bilgiler kullanılmaktadır eylem:

  • Kullanıcı sorgusuyla eşleşecek kalıp (N kez yanıp söner)
  • Eşleşen bir sorguyla ilişkilendirilecek özel cihaz işlemi (com.example.actions.BlinkLight) düzenleme amacıyla
  • Cihaz işlemi destekliyorsa kullanıcıya metin söylenir (N kez yanıp sönüyor)
  • Şuna geri gönderilen bir komut adı (com.example.commands.BlinkLight): tüm parametrelerle (bir sayı ve muhtemelen hızın açıklaması) cihaz

Sorgu modelini tanımlamak için aşağıdakilere dikkat edin:

  • schema.org tarafından tanımlanan türleri kullanabilirsiniz. kullanabilirsiniz.
  • types [...] dizisi, özel türlerin listesini tanımlar (örneğin, $Speed) tıklayın.
  • Sorgu kalıbında özel türleri kullanabilirsiniz. Kullanıcı bu dilde sorgu modeliyle eşleştirmek için özel türünüzdeki eş anlamlıları kullanın.
  • Bir eş anlamlı kelime eşleştiğinde tür örneği (speed) normalleştirilmiş anahtarı (SLOWLY) döndürür. Birden fazla öğe olabilir Örneğin, farklı hızları destekleyen farklı ışıklar olduğunda olabilir.
  • İsteğin TTS kalıbının bazı bölümleri isteğe bağlı olabilir. Örneğin, şunu kullanın: ($Speed:speed)? ekleyin.
  • $type.raw (örneğin, $speed.raw) yanıt TTS'nin yerini, kullanıcının gerçekten söylediği kelimeler alır.

Bu alanların birçoğunun açıklamaları için bkz. ActionPackage belgelerinden faydalanabilirsiniz.

İşlem Paketini Dağıtma

Bir Action paketinde özel cihaz işleminizi derledikten sonra, Asistan'ın erişebileceği işlem paketi.

Bu bölümdeki adımları cihazınızdan uygulayabilirsiniz ancak bu yapmanız gerektiğini unutmayın. Aşağıdaki komutlar bir sanal bir ortam oluşturabilirsiniz.

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

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

    rm creds.data
  3. gactions KSA'yı kullanarak İşlem paketinizi Google'a kaydedin. project_id değerini Actions Console projenizle değiştirin No.

    ./gactions update --action_package actions.json --project project_id
    .
  4. Bu komutu ilk kez çalıştırdığınızda size bir URL verilir ve oturum açın. URL'yi kopyalayın ve bir tarayıcıya yapıştırın (bu işlem herhangi bir sistemde yapılabilir). Sayfada, Google Hesabınızda oturum açmanız istenir. İmzalama geçmiş oturumlarda projeyi oluşturan Google hesabına . adımı ekleyebilirsiniz.

  5. API'den gelen izin isteğini onayladıktan sonra bir kod gösterilir Örneğin "4/XXXX". Bu kodu kopyalayıp terminal:

    Enter the authorization code:

    Yetkilendirme başarılı olduysa şuna benzer bir yanıt görürsünüz: şu:

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

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

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

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

  8. (İsteğe bağlı) Yerelleştirilmiş İşlem paketleri oluşturabilirsiniz pek çok farklı dili ve yerel ayarı destekleme tek bir proje ile aynı anda çalışmanızı sağlar.

Örneği değiştirme

Bu bölümdeki adımları cihazda uygulayın.

nano pushtotalk.py

Özel işleminiz için bir işleyici ekleyin. Aşağıdaki işleyicinin zaten eklenmiş olduğunu unutmayın yukarıdaki örnek İşlem Paketi için örnek koda ekleyin.

...

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ırma

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öner.

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