ลงทะเบียนการกระทําของอุปกรณ์ที่กําหนดเอง

อุปกรณ์ของคุณอาจมีความสามารถพิเศษที่ไม่รวมอยู่ในชุดปัจจุบัน ลักษณะ เช่น "กะพริบไฟ" อุปกรณ์ที่สามารถกะพริบไฟได้ คุณ สามารถกำหนดการทำงานที่กำหนดเองสำหรับอุปกรณ์ของคุณ ซึ่งระบุคำสั่งที่จะส่งถึง อุปกรณ์ของคุณเพื่อเรียกใช้ความสามารถพิเศษ

คุณต้องมีสิ่งต่อไปนี้เพื่อกำหนดการดำเนินการของอุปกรณ์ที่กำหนดเอง

  • รูปแบบที่จับคู่กับข้อความค้นหาของผู้ใช้
  • การดำเนินการที่กำหนดเองของอุปกรณ์เพื่อเชื่อมโยงกับคำค้นหาที่ตรงกัน
  • ข้อความที่พูดตอบผู้ใช้หากอุปกรณ์รองรับการดำเนินการดังกล่าว
  • ชื่อคำสั่งที่ส่งกลับไปยังอุปกรณ์ของคุณ รวมถึงพารามิเตอร์ต่างๆ

คุณสามารถสร้างการดำเนินการของอุปกรณ์ที่กำหนดเองโดยใส่ข้อมูลนี้ลงใน แพ็กเกจการดำเนินการ แพ็กเกจการดำเนินการจะกำหนดรูปแบบคำตอบของ 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 เข้าถึงแพ็กเกจการดำเนินการได้

แม้ว่าคุณจะทำตามขั้นตอนต่างๆ ในส่วนนี้บนอุปกรณ์ แต่ก็อาจจะง่ายกว่า ดำเนินการกับระบบ การพัฒนาของคุณ คำสั่งต่อไปนี้ไม่ต้องมี ที่จะเรียกใช้

  1. ดาวน์โหลดเครื่องมือบรรทัดคำสั่ง gactions

  2. นำข้อมูลเข้าสู่ระบบที่มีอยู่ออกจากไดเรกทอรีเดียวกับ gactions ของ Google

    rm creds.data
  3. บันทึกแพ็กเกจการดำเนินการของคุณไปยัง Google โดยใช้ gactions CLI แทนที่ project_id ด้วยโปรเจ็กต์คอนโซล Actions รหัส

    ./gactions update --action_package actions.json --project project_id
  4. ครั้งแรกที่เรียกใช้คำสั่งนี้ คุณจะได้รับ URL และขอให้ ลงชื่อเข้าใช้ คัดลอก URL และวางลงในเบราว์เซอร์ (สามารถทำได้กับระบบใดก็ได้) หน้าเว็บจะขอให้คุณลงชื่อเข้าใช้บัญชี Google ลงนาม ลงในบัญชี Google ที่สร้างโปรเจ็กต์เมื่อ ขั้นตอน

  5. หลังจากที่คุณอนุมัติคำขอสิทธิ์จาก API แล้ว รหัสจะปรากฏขึ้น ในเบราว์เซอร์ เช่น "4/XXXX" คัดลอกและวางโค้ดนี้ลงใน เทอร์มินัล:

    Enter the authorization code:

    หากการให้สิทธิ์เสร็จสมบูรณ์ คุณจะเห็นการตอบกลับที่คล้ายคลึงกับ ดังต่อไปนี้

    Your app for the Assistant for project my-devices-project was successfully
    updated
    with your actions.
  6. ทำให้แพ็กเกจการดำเนินการใช้งานได้ในโหมดทดสอบโดยใช้ CLI ของ gactions คุณต้องบันทึกแพ็กเกจการดำเนินการไปยัง Google อย่างน้อย 1 ครั้งล่วงหน้า ที่เรียกใช้คำสั่งนี้ โหมดทดสอบจะเปิดใช้แพ็กเกจการดำเนินการใน บัญชีผู้ใช้เท่านั้น

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

    ปัจจุบันคุณยังทดสอบโปรเจ็กต์โดยใช้เครื่องมือจำลองการดำเนินการไม่ได้

  7. หากต้องการอัปเดตแพ็กเกจการดำเนินการ ให้ใช้คำสั่ง gactions update

  8. (ไม่บังคับ) คุณสามารถสร้างแพ็กเกจการดำเนินการที่แปลแล้วได้ เพื่อรองรับภาษาและสถานที่ต่างๆ มากมาย พร้อมกันในโปรเจ็กต์เดียว

แก้ไขตัวอย่าง

ทำตามขั้นตอนในส่วนนี้ในอุปกรณ์

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 ครั้ง

โปรดทราบว่าการค้นหาต้องตรงกับรูปแบบการค้นหาในแพ็กเกจการดำเนินการ