Twoje urządzenie może mieć specjalne umiejętności, których nie obejmuje bieżący zestaw cechy Na przykład „mrugnij światłem”. cechę urządzenia, które może migać. Ty mogą zdefiniować niestandardowe działania dla urządzenia, które określają polecenia wysyłane do aby aktywować specjalne umiejętności.
Aby zdefiniować niestandardowe działanie dotyczące urządzenia, potrzebujesz tych elementów:
- Wzorzec dopasowywany do zapytania użytkownika
- Niestandardowe działanie na urządzeniu kojarzone z dopasowanym zapytaniem
- Tekst odczytywany w odpowiedzi na pytanie użytkownika, jeśli urządzenie obsługuje dane działanie
- nazwę polecenia, która jest wysyłana z powrotem do urządzenia wraz z innymi parametrami;
Niestandardowe działanie urządzenia tworzysz, umieszczając te informacje w pliku pakietu działań. Pakiety działań określają format odpowiedzi Asystenta. W przeciwieństwie do SDK Actions, niestandardowe działania na urządzeniach są realizowane lokalnie; nie określa się do przetwarzania żądań i udzielania odpowiedzi. Niestandardowe działania na urządzeniu to nie mają charakteru konwersacyjnego.
Utwórz pakiet działań
Na podstawie poniższego przykładu utwórz plik (np. actions.json
), który
definiuje polecenie testowe: miganie diody LED.
Skopiuj plik z przykładowego kodu,
pobrane w poprzednim kroku:
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"
]
}
]
}
]
}
W poprzednim przykładzie użyto następujących informacji do zdefiniowania urządzenia niestandardowego działanie:
- Wzorzec dopasowujący się do zapytania użytkownika (mrugnij N razy)
- Niestandardowe działanie na urządzeniu, które ma być kojarzone z dopasowanym zapytaniem (
com.example.actions.BlinkLight
) do celów organizacyjnych - Tekst odczytywany w odpowiedzi na pytanie użytkownika, jeśli urządzenie obsługuje dane działanie (Mrugające N razy)
- nazwę polecenia (
com.example.commands.BlinkLight
) zwracaną do: nazwę urządzenia i wszystkie parametry (liczbę i ewentualnie opis prędkości).
Aby zdefiniować wzorzec zapytania, pamiętaj o następujących kwestiach:
- Możesz używać typów zdefiniowanych na podstawie schema.org we wzorcu zapytania.
- Tablica
types [...]
definiuje listę typów niestandardowych (np.$Speed
). - We wzorcu zapytań można używać typów niestandardowych. Użytkownik może wypowiedzieć dowolne z synonimy w typie niestandardowym, aby pasowały do wzorca zapytania.
- Jeśli znajdziemy odpowiednik synonimu, wystąpienie typu (
speed
) zwróci zwraca znormalizowany klucz (SLOWLY
). W kolumnie może być wiele elementów Świadczy o tym różne prędkości. mrugnięcie. - Części wzorca TTS żądania mogą być opcjonalne. Na przykład użyj wartości
($Speed:speed)?
we wzorcu zapytania, aby ta część była opcjonalna. $type.raw
(na przykład$speed.raw
) w funkcji odpowiedź TTS jest zastępowana słowami, które wypowiedział użytkownik.
Opisy wielu z tych pól znajdziesz w ActionPackage dokumentacji.
Wdróż pakiet działań
Po utworzeniu niestandardowego działania na urządzeniu w pakiecie działań możesz utworzyć Pakiet akcji dostępny dla Asystenta.
Opisane tu czynności możesz wykonać na swoim urządzeniu, ale być może łatwiej będzie Ci aby je wykonać w swoim systemie programistycznym. Te polecenia nie wymagają parametru środowiska wirtualnego.
Pobierz narzędzie wiersza poleceń
gactions
.Usuń wszystkie istniejące dane logowania z tego samego katalogu, w którym znajduje się
gactions
.rm creds.data
Zapisz pakiet Action w Google za pomocą interfejsu wiersza poleceń
gactions
. Zastąpproject_id
projektem w Konsoli Actions Identyfikator../gactions update --action_package actions.json --project project_id
Przy pierwszym uruchomieniu tego polecenia otrzymasz adres URL oraz prośbę o jego wykonanie zaloguj się. Skopiuj URL i wklej go w przeglądarce (możesz to zrobić w dowolnym systemie). Na stronie pojawi się prośba o zalogowanie się na konto Google. Podpisz z kontem Google, za pomocą którego utworzono projekt krok.
Gdy zatwierdzisz prośbę o uprawnienia przesłaną z interfejsu API, pojawi się kod w przeglądarce, na przykład „4/XXXX”. Skopiuj ten kod i wklej go w polu terminal:
Enter the authorization code:
Jeśli autoryzacja się powiodła, zobaczysz odpowiedź podobną do tej następujące:
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
Wdróż pakiet akcji w trybie testowym za pomocą interfejsu wiersza poleceń
gactions
. Twój pakiet akcji musi być zapisany w Google co najmniej raz przed po uruchomieniu tego polecenia. Tryb testowy włącza pakiet akcji na Twoim urządzeniu tylko na koncie użytkownika../gactions test --action_package actions.json --project project_id
Obecnie nie możesz testować projektu za pomocą Actions Simulator (Symulatora Actions).
Aby zaktualizować pakiet działań, użyj polecenia
gactions update
.(Opcjonalnie) Możesz utworzyć zlokalizowane pakiety działań. obsługę wielu różnych języków i regionów w tym samym czasie w ramach jednego projektu.
Modyfikowanie próbki
Wykonaj czynności opisane w tej sekcji na urządzeniu.
nano hotword.py
Dodaj moduł obsługi do działania niestandardowego. Jeśli chcesz, możesz użyć poniższego modułu obsługi aby użyć przykładowego pakietu działań powyżej.
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)
Uruchamianie przykładu
Uruchom zmodyfikowany kod źródłowy.
python hotword.py --device-model-id my-model
Spróbuj wpisać zapytanie. W przykładzie powyżej wykonaj te czynności:
OK Google, mrugnij 5 razy.
Zwróć uwagę, że zapytanie musi pasować do wzorca zapytania w pakiecie akcji.