อุปกรณ์ของคุณอาจมีความสามารถพิเศษที่ไม่รวมอยู่ในชุดปัจจุบัน ลักษณะ เช่น "กะพริบไฟ" อุปกรณ์ที่สามารถกะพริบไฟได้ คุณ สามารถกำหนดการทำงานที่กำหนดเองสำหรับอุปกรณ์ของคุณ ซึ่งระบุคำสั่งที่จะส่งถึง อุปกรณ์ของคุณเพื่อเรียกใช้ความสามารถพิเศษ
คุณต้องมีสิ่งต่อไปนี้เพื่อกำหนดการดำเนินการของอุปกรณ์ที่กำหนดเอง
- รูปแบบที่จับคู่กับข้อความค้นหาของผู้ใช้
- การดำเนินการที่กำหนดเองของอุปกรณ์เพื่อเชื่อมโยงกับคำค้นหาที่ตรงกัน
- ข้อความที่พูดตอบผู้ใช้หากอุปกรณ์รองรับการดำเนินการดังกล่าว
- ชื่อคำสั่งที่ส่งกลับไปยังอุปกรณ์ของคุณ รวมถึงพารามิเตอร์ต่างๆ
คุณสามารถสร้างการดำเนินการของอุปกรณ์ที่กำหนดเองโดยใส่ข้อมูลนี้ลงใน แพ็กเกจการดำเนินการ แพ็กเกจการดำเนินการจะกำหนดรูปแบบคำตอบของ Assistant แตกต่างจาก Actions SDK, การดำเนินการที่กำหนดเองของอุปกรณ์จะดำเนินการภายในเครื่อง คุณไม่ได้ระบุ ปลายทางเพื่อประมวลผลคำขอและมอบการตอบกลับ การทำงานของอุปกรณ์ที่กำหนดเองคือ ไม่ได้มีลักษณะเป็นการสนทนา
สร้างแพ็กเกจการดำเนินการ
โปรดใช้ตัวอย่างต่อไปนี้เพื่อสร้างไฟล์ (เช่น actions.json
) ที่
กำหนดคำสั่งทดสอบว่าไฟ LED กะพริบ
คัดลอกไฟล์จากโค้ดตัวอย่างที่คุณ
ดาวน์โหลดไว้ในขั้นตอนก่อนหน้า:
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"
]
}
]
}
]
}
ตัวอย่างก่อนหน้านี้ใช้ข้อมูลต่อไปนี้ในการกำหนดอุปกรณ์ที่กำหนดเอง การดำเนินการ:
- รูปแบบที่จะจับคู่กับคำค้นหาของผู้ใช้ (กะพริบ 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 เอกสารประกอบ
ทำให้แพ็กเกจการดำเนินการใช้งานได้
หลังจากที่คุณสร้างการดำเนินการที่กำหนดเองของอุปกรณ์ในแพ็กเกจการดำเนินการแล้ว คุณสามารถ Assistant เข้าถึงแพ็กเกจการดำเนินการได้
แม้ว่าคุณจะทำตามขั้นตอนต่างๆ ในส่วนนี้บนอุปกรณ์ แต่ก็อาจจะง่ายกว่า ดำเนินการกับระบบ การพัฒนาของคุณ คำสั่งต่อไปนี้ไม่ต้องมี ที่จะเรียกใช้
ดาวน์โหลดเครื่องมือบรรทัดคำสั่ง
gactions
นำข้อมูลเข้าสู่ระบบที่มีอยู่ออกจากไดเรกทอรีเดียวกับ
gactions
ของ Googlerm creds.data
บันทึกแพ็กเกจการดำเนินการของคุณไปยัง Google โดยใช้
gactions
CLI แทนที่project_id
ด้วยโปรเจ็กต์คอนโซล Actions รหัส./gactions update --action_package actions.json --project project_id
ครั้งแรกที่เรียกใช้คำสั่งนี้ คุณจะได้รับ URL และขอให้ ลงชื่อเข้าใช้ คัดลอก URL และวางลงในเบราว์เซอร์ (สามารถทำได้กับระบบใดก็ได้) หน้าเว็บจะขอให้คุณลงชื่อเข้าใช้บัญชี Google ลงนาม ลงในบัญชี Google ที่สร้างโปรเจ็กต์เมื่อ ขั้นตอน
หลังจากที่คุณอนุมัติคำขอสิทธิ์จาก API แล้ว รหัสจะปรากฏขึ้น ในเบราว์เซอร์ เช่น "4/XXXX" คัดลอกและวางโค้ดนี้ลงใน เทอร์มินัล:
Enter the authorization code:
หากการให้สิทธิ์เสร็จสมบูรณ์ คุณจะเห็นการตอบกลับที่คล้ายคลึงกับ ดังต่อไปนี้
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
ทำให้แพ็กเกจการดำเนินการใช้งานได้ในโหมดทดสอบโดยใช้ CLI ของ
gactions
คุณต้องบันทึกแพ็กเกจการดำเนินการไปยัง Google อย่างน้อย 1 ครั้งล่วงหน้า ที่เรียกใช้คำสั่งนี้ โหมดทดสอบจะเปิดใช้แพ็กเกจการดำเนินการใน บัญชีผู้ใช้เท่านั้น./gactions test --action_package actions.json --project project_id
ปัจจุบันคุณยังทดสอบโปรเจ็กต์โดยใช้เครื่องมือจำลองการดำเนินการไม่ได้
หากต้องการอัปเดตแพ็กเกจการดำเนินการ ให้ใช้คำสั่ง
gactions update
(ไม่บังคับ) คุณสามารถสร้างแพ็กเกจการดำเนินการที่แปลแล้วได้ เพื่อรองรับภาษาและสถานที่ต่างๆ มากมาย พร้อมกันในโปรเจ็กต์เดียว
แก้ไขตัวอย่าง
ทำตามขั้นตอนในส่วนนี้ในอุปกรณ์
nano hotword.py
เพิ่มเครื่องจัดการสำหรับการดำเนินการที่กำหนดเอง คุณสามารถใช้ตัวจัดการด้านล่างได้หากต้องการ เพื่อใช้ตัวอย่างแพ็กเกจการดำเนินการด้านบน
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)
เรียกใช้ตัวอย่าง
เรียกใช้ซอร์สโค้ดที่แก้ไขแล้ว
python hotword.py --device-model-id my-model
ลองใช้คำค้นหา สำหรับตัวอย่างด้านบน ให้ลองทำดังนี้
Ok Google กะพริบตา 5 ครั้ง
โปรดทราบว่าการค้นหาต้องตรงกับรูปแบบการค้นหาในแพ็กเกจการดำเนินการ