맞춤 기기 작업 등록

<ph type="x-smartling-placeholder">

사용 중인 기기에 현재 적용되지 않는 특수 기능이 특성 "조명 깜박임" 등 특성이 있습니다. 나 사용자 기기에 전송되는 명령을 지정하는 사용자 지정 작업을 장치를 사용하여 특수 능력을 일으킬 수 있습니다.

맞춤 기기 작업을 정의하려면 다음이 필요합니다.

  • 사용자 쿼리와 일치시킬 패턴
  • 일치하는 검색어와 연결할 맞춤 기기 작업
  • 기기에서 작업을 지원하는 경우 사용자에게 음성으로 제공되는 텍스트입니다.
  • 매개변수로 다시 전송되는 명령어 이름

이 정보를 작업 패키지 작업 패키지는 어시스턴트 응답 형식을 정의합니다. 좋아요 취소 Actions SDK, 맞춤 기기 작업이 로컬에서 처리됨 포드의 상태를 엔드포인트를 사용하여 요청을 처리하고 응답을 제공합니다. 맞춤 기기 작업: 대화식이 아닌가 봐요.

작업 패키지 만들기

다음을 예로 사용하여 다음을 실행하는 파일 (예: actions.json)을 만듭니다. 는 테스트 명령어인 LED 깜박임을 정의합니다. 생성한 샘플 코드에서 파일을 복사합니다. 이전 단계에서 다운로드한 항목:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .

</ph> <ph type="x-smartling-placeholder">

</ph> <ph type="x-smartling-placeholder">
</ph>
{
    "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 문서를 참조하세요.

</ph>

작업 패키지 배포

작업 패키지에서 맞춤 기기 작업을 빌드한 후 어시스턴트가 액세스할 수 있는 작업 패키지

기기에서 이 섹션의 단계를 수행할 수 있지만 더 쉬울 수도 있습니다. 개발 시스템에서 수행할 수 있습니다. 다음 명령은 실행할 수 있습니다

  1. gactions 명령줄 도구를 다운로드합니다.

  2. gactions과 동일한 디렉터리에서 기존 사용자 인증 정보를 삭제합니다. 있습니다.

    rm creds.data
  3. gactions CLI를 사용하여 작업 패키지를 Google에 저장합니다. project_id를 Actions Console 프로젝트로 바꿉니다. ID

    ./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. gactions CLI를 사용하여 작업 패키지를 테스트 모드로 배포합니다. 이전에 한 번 이상 Google에 작업 패키지를 저장한 적이 있어야 합니다. 실행할 수 있습니다 테스트 모드는 사용자 계정만 사용할 수 있습니다.

    ./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번 깜빡입니다.

쿼리는 작업 패키지의 쿼리 패턴과 일치해야 합니다.