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 .
{ "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.
gactions
komut satırı aracını indirin.gactions
ile aynı dizindeki mevcut kimlik bilgilerini kaldır aracını kullanın.rm creds.data
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
.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.
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.
İş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.
İşlem paketini güncellemek için
gactions update
komutunu kullanın.(İ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.