Perangkat Anda mungkin memiliki kemampuan khusus yang tidak tercakup dalam kumpulan karakter -- seperti "kedipkan lampuku" karakteristik untuk perangkat yang dapat mengedipkan lampunya. Anda dapat mendefinisikan tindakan khusus untuk perangkat Anda yang menetapkan perintah yang dikirim ke perangkatmu untuk memicu kemampuan khusus.
Untuk menentukan tindakan perangkat kustom, Anda memerlukan hal berikut:
- Pola yang akan dicocokkan dengan kueri pengguna
- Tindakan perangkat kustom untuk dikaitkan dengan kueri yang cocok
- Teks diucapkan balik kepada pengguna jika perangkat mendukung tindakan
- Nama perintah yang dikirim kembali ke perangkat Anda, bersama dengan parameter apa pun
Anda membuat tindakan perangkat kustom dengan memasukkan informasi ini ke dalam kolom paket tindakan. Paket tindakan menentukan format untuk respons Asisten. Tidak seperti Actions SDK, tindakan perangkat kustom dipenuhi secara lokal; Anda tidak menentukan endpoint untuk memproses permintaan dan memberikan respons. Tindakan perangkat kustom adalah tidak seperti percakapan.
Membuat Paket Tindakan
Dengan menggunakan hal berikut sebagai contoh, buat file (seperti actions.json
) yang
menentukan perintah pengujian: mengedipkan LED.
Salin file dari kode contoh yang Anda
didownload pada langkah sebelumnya:
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
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"
]
}
]
}
]
}
Contoh sebelumnya menggunakan informasi berikut untuk menentukan perangkat kustom tindakan:
- Pola yang akan dicocokkan dengan kueri pengguna (berkedip N kali)
- Tindakan perangkat kustom yang akan dikaitkan dengan kueri yang cocok (
com.example.actions.BlinkLight
) untuk tujuan organisasi - Teks diucapkan balik kepada pengguna jika perangkat mendukung tindakan (Berkedip N kali)
- Nama perintah (
com.example.commands.BlinkLight
) yang dikirim kembali ke perangkat, bersama dengan parameter apa pun (angka dan mungkin deskripsi kecepatan)
Untuk menentukan pola kueri, perhatikan hal-hal berikut:
- Anda dapat menggunakan jenis yang ditentukan schema.org di pola kueri.
- Array
types [...]
menentukan daftar jenis kustom (misalnya,$Speed
). - Anda dapat menggunakan jenis kustom di pola kueri. Pengguna dapat berbicara sinonim di jenis kustom agar sesuai dengan pola kueri.
- Jika sinonim cocok, instance jenis (
speed
) akan tampilkan kunci yang dinormalisasi (SLOWLY
). Mungkin terdapat beberapa entitas di kasus ini, misalnya, ada lampu lain yang mendukung kecepatan berbeda berkedip-kedip. - Bagian dari pola TTS permintaan dapat bersifat opsional. Misalnya, gunakan
($Speed:speed)?
di pola kueri untuk menjadikan bagian ini opsional. $type.raw
(misalnya,$speed.raw
) di TTS respons diganti dengan kata yang sebenarnya diucapkan pengguna.
Untuk mengetahui deskripsi dari berbagai kolom tersebut, lihat ActionPackage dokumentasi tambahan.
Men-deploy Paket Tindakan
Setelah membangun tindakan perangkat kustom dalam paket Action, Anda dapat membuat Paket tindakan dapat diakses oleh Asisten.
Meskipun Anda dapat melakukan langkah-langkah di bagian ini pada perangkat, akan lebih mudah untuk melakukannya pada sistem pengembangan Anda. Perintah-perintah berikut ini tidak memerlukan lingkungan virtual untuk dijalankan.
Download alat command line
gactions
.Hapus kredensial yang ada dari direktori yang sama dengan
gactions
menyediakan alat command line gcloud.rm creds.data
Simpan paket Action Anda ke Google menggunakan CLI
gactions
. Gantiproject_id
dengan project Konsol Actions Anda ID../gactions update --action_package actions.json --project project_id
Saat pertama kali Anda menjalankan perintah ini, Anda akan diberikan URL dan diminta untuk login. Salin URL dan tempelkan ke browser (tindakan ini dapat dilakukan di sistem apa pun). Halaman ini akan meminta Anda login ke Akun Google Anda. Tanda Tangan ke Akun Google yang membuat project di langkah.
Setelah Anda menyetujui permintaan izin dari API, kode akan muncul di browser Anda, seperti "4/XXXX". Salin dan tempel kode ini ke terminal:
Enter the authorization code:
Jika otorisasi berhasil, Anda akan melihat respons yang mirip dengan hal berikut:
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
Deploy paket Action Anda ke dalam mode pengujian dengan menggunakan CLI
gactions
. Anda harus sudah menyimpan paket Action ke Google setidaknya sekali sebelumnya menjalankan perintah ini. Mode pengujian mengaktifkan paket Action di hanya dengan akun pengguna saja../gactions test --action_package actions.json --project project_id
Saat ini, Anda tidak dapat menguji project menggunakan simulator Action.
Untuk memperbarui paket Action, gunakan perintah
gactions update
.(Opsional) Anda dapat membuat paket Action yang dilokalkan untuk mendukung banyak bahasa dan lokalitas yang berbeda di waktu yang sama dalam satu proyek.
Mengubah sampel
Lakukan langkah-langkah di bagian ini pada perangkat.
nano hotword.py
Tambahkan pengendali untuk tindakan kustom Anda. Anda dapat menggunakan pengendali di bawah ini jika Anda ingin untuk menggunakan Contoh Paket Tindakan di atas.
import time # Add this to the imports near the top of the file ... if event.type == EventType.ON_DEVICE_ACTION: for command, params in event.actions: print('Do command', command, 'with params', str(params)) # Add the following lines after the existing line above: if command == "com.example.commands.BlinkLight": number = int( params['number'] ) for i in range(int(number)): print('Device is blinking.') # GPIO.output(25, 1) time.sleep(1) # GPIO.output(25, 0) time.sleep(1)
Menjalankan contoh
Jalankan kode sumber yang telah dimodifikasi.
python hotword.py --device-model-id my-model
Coba kueri. Untuk contoh di atas, coba langkah berikut:
Ok Google, berkedip 5 kali.
Perhatikan bahwa kueri harus cocok dengan pola kueri di Action Package.