อุปกรณ์อาจมีความสามารถพิเศษที่ไม่ได้อยู่ภายใต้ลักษณะปัจจุบัน -- เช่น ลักษณะ "กะพริบไฟของฉัน" สำหรับอุปกรณ์ที่กะพริบไฟได้ คุณระบุการดำเนินการที่กำหนดเองสำหรับอุปกรณ์ของคุณโดยระบุคำสั่งที่ส่งไปยังอุปกรณ์เพื่อทริกเกอร์ความสามารถพิเศษได้
หากต้องการกำหนดการทำงานของอุปกรณ์ที่กำหนดเอง คุณต้องมีสิ่งต่อไปนี้
- รูปแบบที่จะจับคู่กับข้อความค้นหาของผู้ใช้
- การกระทำของอุปกรณ์ที่กำหนดเองเพื่อเชื่อมโยงกับคำค้นหาที่ตรงกัน
- ข้อความตอบกลับผู้ใช้หากอุปกรณ์รองรับการดำเนินการดังกล่าว
- ชื่อคำสั่งที่ส่งกลับไปยังอุปกรณ์ รวมถึงพารามิเตอร์ต่างๆ
คุณสร้างการดำเนินการของอุปกรณ์ที่กำหนดเองได้โดยการใส่ข้อมูลนี้ลงในแพ็กเกจการดำเนินการ แพ็กเกจการดำเนินการจะกำหนดรูปแบบสำหรับคำตอบของ Assistant การดำเนินการที่กำหนดเองในอุปกรณ์แตกต่างจาก Actions SDK ตรงที่จะดำเนินการในเครื่อง โดยคุณไม่จำเป็นต้องระบุปลายทางให้ประมวลผลคำขอและให้มีการตอบกลับ การทำงานของอุปกรณ์ที่กำหนดเอง ไม่ใช่การพูดคุย
สร้างแพ็กเกจการดำเนินการ
ดูตัวอย่างโดยใช้ตัวอย่างต่อไปนี้ในการสร้างไฟล์ (เช่น actions.json
) ที่กำหนดคำสั่งทดสอบ: กะพริบไฟ LED
คัดลอกจากโค้ดตัวอย่างที่คุณดาวน์โหลดในขั้นตอนก่อนหน้า
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" ] } ] } ] }
ตัวอย่างก่อนหน้านี้ใช้ข้อมูลต่อไปนี้เพื่อกำหนดการทำงานของอุปกรณ์ที่กำหนดเอง
- รูปแบบที่จับคู่กับข้อความค้นหาของผู้ใช้ (การกะพริบ 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
rm creds.data
บันทึกแพ็กเกจการดำเนินการของคุณไปยัง Google โดยใช้ CLI ของ
gactions
แทนที่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 pushtotalk.py
เพิ่มเครื่องจัดการสำหรับการกระทำที่กำหนดเอง โปรดทราบว่าได้เพิ่มเครื่องจัดการด้านล่างลงในโค้ดตัวอย่างสำหรับแพ็กเกจการดำเนินการตัวอย่างด้านบนแล้ว
... 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)
เรียกใช้ตัวอย่าง
เรียกใช้ซอร์สโค้ด
python pushtotalk.py
ลองใช้คำค้นหา สำหรับตัวอย่างข้างต้น ลองทำตามขั้นตอนต่อไปนี้
กะพริบตา 5 ครั้ง
โปรดทราบว่าการค้นหาจะต้องตรงกับรูปแบบการค้นหาในแพ็กเกจการดำเนินการ