Integrace RichPear Home

Alexa Custom Skill

Integrace přijímá požadavky z vlastní Alexa skill a předává je do systému intentů v RichPear Home. Hodí se pro vlastní hlasové věty, které spouští scény, skripty nebo jinou akci přes intent_script.

Doména
alexa
Nastavení
configuration.yaml
Endpoint
/api/alexa
Externí služby
Amazon Developer a AWS
01

Připravte účty a veřejnou HTTPS adresu

Pro Custom Skill potřebujete vlastní Amazon Developer účet a vlastní AWS účet. Požadavek z Alexy zpracuje AWS Lambda a odešle ho do RichPear Home. Pro account linking musí být RichPear Home dostupný z internetu přes HTTPS na portu 443 s důvěryhodným certifikátem.

Lokálně systém otevřete na http://rphome.local:8123. Pokud tato adresa nefunguje, použijte http://IP-ADRESA:8123. Tyto lokální adresy ale nestačí pro Alexa account linking; do Amazonu patří veřejná HTTPS adresa bez koncového lomítka.

Nepoužívejte cizí účty, sdílené klíče ani tokeny z návodů na internetu. AWS Lambda má pro malé osobní použití běžně dostatečný bezplatný měsíční limit, ale v AWS si nastavte rozpočet a upozornění na útratu.
02

Zapněte Alexa endpoint v RichPear Home

V souboru configuration.yaml povolte komponentu alexa. Tím se v RichPear Home zaregistruje endpoint /api/alexa, na který bude Lambda posílat požadavky z Alexa skill.

alexa:

Po změně proveďte kontrolu konfigurace a restartujte RichPear Home. Pokud používáte doplněk pro úpravu souborů, upravujte jen hlavní konfigurační soubor a před restartem ho uložte.

Co integrace nevytváří

Tato část sama o sobě nevytváří běžné entity ani zařízení. Zpracovává požadavky typu IntentRequest, LaunchRequest a SessionEndedRequest a výsledek vrací Alexe jako řečovou odpověď.

03

Vytvořte Alexa Custom Skill a Lambda funkci

V Amazon Developer Console vytvořte novou skill s modelem Custom a vlastním hostingem. V AWS vytvořte Lambda funkci v regionu odpovídajícím jazyku a účtu Alexy, přidejte trigger Alexa Skills Kit a do triggeru vložte Skill ID.

Do Lambda funkce nastavte proměnnou BASE_URL na veřejnou adresu RichPear Home bez koncového lomítka, například https://moje-domena.example. Volitelné ladicí proměnné používejte jen při prvním ověření; dlouhodobý přístupový token v Lambda není doporučený pro běžný provoz.

V nastavení endpointu Alexa skill vložte ARN vytvořené Lambda funkce. Teprve potom sestavte a uložte interakční model se svými intenty a ukázkovými větami.

Account linking

  1. Authorization URI: https://VAŠE-VEŘEJNÁ-ADRESA/auth/authorize
  2. Access Token URI: https://VAŠE-VEŘEJNÁ-ADRESA/auth/token
  3. Client ID: pro Evropu https://layla.amazon.com/; pro USA https://pitangui.amazon.com/; pro Japonsko a Austrálii https://alexa.amazon.co.jp/. Koncové lomítko je součást hodnoty.
  4. Client Authentication Scheme: Credentials in request body.
  5. Scope: intent.
04

Namapujte hlasové věty na intent_script

V Alexa skill vytvořte vlastní intenty, sloty a ukázkové věty. Název intentu musí odpovídat klíči v intent_script. Sloty poslané Alexou jsou dostupné jako proměnné; tečka v názvu slotu se v RichPear Home nahradí podtržítkem.

Jednoduchý intent bez slotů může spustit libovolnou akci a vrátit krátkou odpověď:

intent_script:
  MovieModeIntent:
    action:
      action: scene.turn_on
      target:
        entity_id: scene.movie_mode
    speech:
      type: plain
      text: "Zapínám filmový režim"

Intent se slotem použijte tam, kde Alexa posílá proměnnou hodnotu, například název scény nebo skriptu:

intent_script:
  ActivateSceneIntent:
    action:
      action: scene.turn_on
      target:
        entity_id: scene.{{ Scene | replace(" ", "_") }}
    speech:
      type: plain
      text: "Hotovo"

Pokud používáte synonyma slotů s ID, RichPear Home předává také proměnnou s příponou _Id. Slot pojmenovaný Room.Name tedy v šabloně použijete jako Room_Name a případné ID jako Room_Name_Id.

Názvy scén a skriptů v příkladu nahraďte reálnými entitami z vaší instalace. Nepoužívejte ukázkovou entitu, dokud opravdu neexistuje.
05

Přidejte scény a skripty do hlasového modelu

Pro ovládání scén vytvořte ve skill vlastní slot type, například Scenes, a přidejte do něj názvy scén, které chcete vyslovovat. V ukázkových větách pak použijte slot {Scene}, například activate {Scene}.

intent_script:
  RunScriptIntent:
    action:
      action: script.turn_on
      target:
        entity_id: script.{{ Script | replace(" ", "_") }}
    speech:
      type: plain
      text: "Spouštím skript"

Amazon u slotů může zahazovat podtržítka, proto je praktičtější mluvené názvy držet jako běžná slova a v šabloně je převést na název entity.

Příklad ukázkových vět

ActivateSceneIntent activate {Scene}
ActivateSceneIntent turn on {Scene}
RunScriptIntent run {Script}
RunScriptIntent start {Script}
06

Ošetřete spuštění skill a ukončení relace

Když uživatel skill pouze otevře, RichPear Home může zpracovat LaunchRequest. Jako klíč v intent_script použijte Skill ID z Amazon Developer Console.

intent_script:
  amzn1.ask.skill.08888888-7777-6666-5555-444444444444:
    speech:
      type: plain
      text: "Co chcete doma spustit?"

Pro ukončenou relaci použijte stejné Skill ID s příponou .SessionEndedRequest. V šabloně je dostupný také důvod ukončení jako reason.

intent_script:
  amzn1.ask.skill.08888888-7777-6666-5555-444444444444.SessionEndedRequest:
    action:
      action: script.turn_on
      target:
        entity_id: script.after_voice_session
07

Ověřte spojení a odpověď

V Alexa Developer Console použijte simulátor skill a ověřte, že se po account linkingu požadavek dostane do RichPear Home. Pokud Alexa vrací chybu neznámého intentu, zkontrolujte přesný název intentu v Alexa modelu a v intent_script.

Když account linking selže, nejčastější příčinou je neveřejná adresa, jiný port než 443, chybějící důvěryhodný certifikát, chybné koncové lomítko v Client ID nebo rozdíl mezi veřejnou adresou v Amazonu a adresou v BASE_URL.

Pro kratší hlasové povely bez názvu skill použijte rutinu v aplikaci Alexa, která interně spustí celou frázi typu „ask ... to ...“.