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

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

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

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

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

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

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

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

    rm creds.data
  3. บันทึกแพ็กเกจการดำเนินการของคุณไปยัง Google โดยใช้ CLI ของ gactions แทนที่ 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 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 ครั้ง

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