Kuidas arendada Amazon Alexa oskust, kasutades Node.js

Selles õpetuses rakendame Amazon Alexa jaoks kohandatud oskuse, kasutades nodejs, npm ja AWS Lambda funktsioone. See oskus on põhimõtteliselt Tere maailma näide. Selle õpetuse abil saate luua kohandatud oskuse Amazon Alexa jaoks, rakendada funktsionaalsust nodejside abil ja alustada kohandatud oskusi nii kohalikust arvutist kui ka AWS-ist.

See õpetus sisaldab erinevatest ressurssidest pärit materjale, mida saab vaadata jaotises Ressursid.

Eeltingimused

  • NPM-i projekt. Lisateavet NPM-i projekti seadistamise kohta leiate sellest.
  • Sobiv Node.js arenduskeskkond. Node.js jaoks mõeldud ASK SDK v2 nõuab sõlme 4.3.2 või uuemat.
  • Amazoni arendaja konto. See on vajalik Alexa oskuste loomiseks ja konfigureerimiseks.
  • Amazoni veebiteenuste (AWS) konto. See juhend juhendab teid oskuste majutamisel AWS Lambdas. (Või kui soovite luua oskuse AWS-i kasutamata, võiksite kasutada npm-paketti nimega [alexa-skill-local]. (Https://www.npmjs.com/package/alexa-skill-local))

ASK SDK lisamine projekti

  • Node.js levitamise jaoks tavalise ASK SDK v2 installimiseks käivitage NPM-projekti sees järgmised käsud:

npm install - salvestage ask-sdk

Amazon Alexa kohanemisoskuse seadistamine

  • Looge arendajakonsoolis uus oskus. Kui teil palutakse valida mudel, valige kohandatud mudel.
  • Minge saidile developer.amazon.com/alexa.
  • Klõpsake oma Alexa konsoolid ja seejärel nuppu Oskused. See avab arendajakonsooli ja kuvab kõik juba loodud oskused.
  • Klõpsake nuppu Loo oskus.
  • Sisestage oskuse nimi. See on nimi, mida kliendid oskuse avaldamisel näevad. Seda nime saate redigeerimise lehel hiljem muuta.
  • Vajadusel muutke oskuse algkeelt ja klõpsake siis nuppu Edasi.
  • Klõpsake nupul Vali mudel, mille soovite kaasata (selle õpetuse jaoks kasutame kohandatud).

Taotluste menetlejate rakendamine

Esmalt looge taotluste töötlejad, mida on vaja teie oskuste erinevat tüüpi sissetulevate taotluste käsitlemiseks.

LaunchRequesti käitleja

Järgmine koodinäide näitab, kuidas konfigureerida käitlejat, millele osutatakse, kui oskus saab LaunchRequesti. LaunchRequest sündmus toimub siis, kui oskusele tuginetakse ilma konkreetse kavatsuseta.

Looge fail nimega index.js ja kleepige järgmine kood.

const LaunchRequestHandler = {
    canHandle (handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
    },
    käepide (handlerInput) {
        const speechText = 'Tere tulemast Alexa oskuste komplekti, võite öelda tere!';
return handlerInput.responseBuilder
            .speak (speechText)
            .reprompt (speechText)
            .withSimpleCard ('Tere maailm', speechText)
            .getResponse ();
    }
};

Funktsioon canHandle vastab tõele, kui saabuv päring on LaunchRequest. Käepideme funktsioon genereerib ja tagastab põhilise tervitusvastuse.

HelloWorldIntent käitleja

Järgmine koodinäide näitab, kuidas konfigureerida käitlejat, millele kutsutakse, kui oskus võtab vastu teenuse HelloWorldIntent.

Kleepige järgmine kood oma faili index.js pärast eelmist töötlejat.

const HelloWorldIntentHandler = {
    canHandle (handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'HelloWorldIntent';
    },
    käepide (handlerInput) {
        const speechText = 'Tere maailm!';
return handlerInput.responseBuilder
            .speak (speechText)
            .withSimpleCard ('Tere maailm', speechText)
            .getResponse ();
    }
};

Funktsioon canHandle tuvastab, kas saabuv päring on IntentRequest, ja tagastab tõese, kui kavatsuse nimi on HelloWorldIntent. Käepideme funktsioon genereerib ja tagastab põhilise vastuse “Tere maailm”.

HelpIntent käitleja

Järgmine koodinäide näitab, kuidas konfigureerida käitlejat, mis kutsutakse välja, kui oskus võtab vastu sisseehitatud kavatsuse AMAZON.HelpIntent.

Kleepige järgmine kood oma faili index.js pärast eelmist töötlejat.

const HelpIntentHandler = {
    canHandle (handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent';
    },
    käepide (handlerInput) {
        const speechText = 'Võite mulle öelda tere!';
return handlerInput.responseBuilder
            .speak (speechText)
            .reprompt (speechText)
            .withSimpleCard ('Tere maailm', speechText)
            .getResponse ();
    }
};

Sarnaselt eelmisele töötlejale sobib see käitleja IntentRequest oodatava kavatsuse nimega. Põhilised abijuhised tagastatakse.

CancelAndStopIntent käitleja

CancelAndStopIntenthandler on sarnane käitlejaga HelpIntent, kuna selle käivitavad ka sisseehitatud kavatsused. Järgmine näide kasutab ühte käitlejat kahe erineva kavatsuse - Amazon.CancelIntent ja Amazon.StopIntent - reageerimiseks.

Kleepige järgmine kood oma faili index.js pärast eelmist töötlejat.

const CancelAndStopIntentHandler = {
    canHandle (handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent'
                || handlerInput.requestEnvelope.request.intent.name === 'AMAZON.StopIntent');
    },
    käepide (handlerInput) {
        const speechText = 'Hüvasti!';
return handlerInput.responseBuilder
            .speak (speechText)
            .withSimpleCard ('Tere maailm', speechText)
            .getResponse ();
    }
};

Vastus mõlemale kavatsusele on sama, seega vähendab ühe käitleja olemasolu korduvat koodi.

SessionEndedRequestHandler

Ehkki pärast SessionEndedRequesti vastuvõtmist ei saa te vastust ühegi kõne, kaardi või käskkirjaga tagastada, on SessionEndedRequestHandler hea koht puhastusloogika üles panemiseks.

Kleepige järgmine kood oma faili index.js pärast eelmist töötlejat.

const SessionEndedRequestHandler = {
    canHandle (handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
    },
    käepide (handlerInput) {
        // igasugune puhastusloogika läheb siia
        return handlerInput.responseBuilder.getResponse ();
    }
};

ErrorHandler

ASK SDK v2 Node.js jaoks pakub paremat tuge vigade käsitlemisel, hõlbustades osavust sujuva kasutajakogemuse tagamiseks. Veakäitleja on hea koht, kus sisestada teie veakäsitsemise loogikat, näiteks käsitamata päringuid, api-teenuse aegumist jms. Järgmine näide lisab teie oskustesse kogu vigade töötleja, tagamaks, et oskus tagastab kõigi vigade korral sisuka sõnumi.

Kleepige järgmine kood oma faili index.js pärast eelmist töötlejat.

const ErrorHandler = {
    Saab hakkama() {
      tagasi tõsi;
    },
    käepide (handlerInput, tõrge) {
      console.log (`Viga on lahendatud: $ {error.message}`);
return handlerInput.responseBuilder
        .speak ('Vabandust, ma ei saa käsust aru. Palun öelge uuesti.')
        .reprompt ('Vabandust, ma ei saa käsust aru. Palun öelge uuesti.')
        .getResponse ();
    },
};

Lambda käitleja loomine

Lambda-töötleja on teie AWS-i Lambda-funktsiooni sisenemispunkt. Järgmine koodinäide loob Lambda-töötleja funktsiooni, et suunata kogu sissetulev taotlus teie oskuste juurde. Lambda-töötleja funktsioon loob SDK-oskuse eksemplari, mis on konfigureeritud teie äsja loodud päringukäsitlejatega.

Lisage järgmine kood faili index.js algusesse. Kood peaks olema varem teie loodud käitlejate ees. (Pidage meeles, see on ASK SDK v2!)

'kasuta rangelt';
const Alexa = nõuda ('ask-sdk-core');
// kui on installitud standardne SDK moodul, kasutage nuppu ask-sdk
////////////////////////////////////
// Käitlejate kood siin //
////////////////////////////////////
export.handler = Alexa.SkillBuilders.custom ()
     .addRequestHandlers (LaunchRequestHandler,
                         HelloWorldIntentHandler,
                         HelpIntentHandler,
                         CancelAndStopIntentHandler,
                         SessionEndedRequestHandler)
     .lambda ();

Oma oskuste seadistamine

Valige külgribalt suvand Kutsumine ja sisestage oskuste väljakutse nime jaoks sõna "greeter".

Järgmisena lisage interaktsioonimudelile kavatsus nimega HelloWorldIntent. Klõpsake interaktsioonimudeli jaotises Intents nuppu Add.

Jätke valik „Kohandatud kavatsuse loomine” valitud, sisestage kavatsuse nime jaoks „HelloWorldIntent” ja looge kava. Lisage kavatsuse üksikasjade lehele mõned näidisväljendid, mida kasutajad saavad öelda kavatsuse esilekutsumiseks. Selles näites saate kasutada järgmisi võimalusi.

ütle Tere
öelda tere maailm
Tere
ütle Tere
ütle maailm
Tere
kuidas sul läheb

Kuna AMAZON.CancelIntent, AMAZON.HelpIntent ja AMAZON.StopIntent on sisseehitatud Alexa kavatsused, ei pea te nende jaoks prooviavaldusi pakkuma.

Arendajakonsool võimaldab redigeerida ka kogu oskuste mudelit JSON-vormingus. Valige külgribalt JSON-redaktor. Selle proovi jaoks võite kasutada järgmist JSON-skeemi.

{
  "interaModel": {
    "languageModel": {
      "invocationName": "greeter",
      "kavatsused": [
        {
          "nimi": "AMAZON.CancelIntent",
          "proovid": []
        },
        {
          "nimi": "AMAZON.HelpIntent",
          "proovid": []
        },
        {
          "nimi": "AMAZON.StopIntent",
          "proovid": []
        },
        {
          "nimi": "HelloWorldIntent",
          "teenindusajad": [],
          "proovid": [
            "kuidas sul läheb",
            "Tere",
            "ütle tere maailm",
            "ütle Tere",
            "Tere",
            "ütle tere maailm",
            "ütle Tere"
          ]
        }
      ],
      "tüübid": []
    }
  }
}

Kui olete interaktsioonimudeli redigeerimise lõpetanud, salvestage see mudel kindlasti üles ja ehitage see üles.

Alustage oma Alexa oskust kohapeal

NPM-i paketi- ja konfiguratsioonifailide installimine

Selle osa jaoks kasutatakse npm paketti, mida nimetatakse alexa-skill-local. Rakenduse käivitamiseks peaksite oma juurkataloogis looma ka faili asl-config.json. Config-faili vorming peab olema järgmine (kui te pole etapis kindel, enamasti on see areng):

{
    "skillId": "your_skill_id_here",
    "stage": "stage_of_the_skill"
}

Oma oskusteabe leiate Alexa konsooli lehelt, see näeb välja nagu amzn1.ask.skill.6f2f04b5-abba-3f47–9fc9–0sbba79b1535. Käitamiseks kasutage Node.js v8.x.x. Saate installida alexa-skill-local globaalselt (soovitatav) või projekti kataloogi (sel juhul soovite paljud seda käivitada npm skriptidest paketis.json).

$ npm install -g alexa-skill-local

Kasutamine

Käivitage järgmine käsk. Kui küsitakse, avage brauseris http: // localhost: 3001. Logige sisse Amazoniga, et anda alexa-skill-local juurdepääsu oma oskuse lõpp-punkti värskendamiseks.

$ alexa-oskus-kohalik

Pärast seda järgige konsooli juhiseid.

Amazon Alexa Skilli seadistamine

Konfigureerige oskuse lõpp-punkt. Valige jaotises Lõpp-punkt HTTPS ja kleepige käsureale antud URL-i. Valige SSL-sertifikaadi tüüp, kuna Minu arenduse lõpp-punkt on selle domeeni alamdomeen, millel on sertifikaadi väljastanud metamärk. Ülejäänud seaded võib jätta nende vaikeväärtustele. Klõpsake käsul Salvesta lõpppunktid.

Oma Alexa oskuste käivitamine AWS Lambda abil

AWS-i Lambda-funktsiooni loomine

  • Kui teil pole AWSis veel kontot, minge Amazon Web Services'i ja looge konto.
  • Logige sisse AWS-i halduskonsooli ja liikuge AWS-i Lambda juurde.
  • Klõpsake konsooli paremas ülanurgas asuvat piirkonna rippmenüüd ja valige üks Alexa oskuste toetamiseks toetatav piirkond: Aasia Vaikse ookeani piirkond (Tokyo), EL (Iirimaa), USA idaosa (N. Virginia) või USA lääs (Oregon) ).
  • Kui teil pole veel Lambda funktsioone, klõpsake nuppu Alusta kohe. Muul juhul klõpsake nuppu Lambda funktsiooni loomine.
  • Valige autor kriimustusest.
  • Sisestage funktsiooni nimi.
  • Valige funktsiooni roll. See määratleb AWS-ressursid, millele funktsioonil on juurdepääs.
  • Olemasoleva rolli kasutamiseks valige roll jaotises Olemasolev roll.
  • Uue rolli loomiseks vaadake jaotist Funktsiooni uue rolli määratlemine. Pidage meeles, et selle rolli jaoks on meil vaja lihtsaid Microsofti õigusi!
  • Valige keel, mida soovite kasutada Runtime (Node.js, Java või Python) jaoks. Selle õpetuse jaoks kasutame Node.js.
  • Klõpsake nuppu Loo funktsioon.
  • Seadistage Alexa Skills Kit päästik.

Lisades Alexa Skills Kit Trigger

  • Minge saidile https://www.developer.amazon.com/alexa.
  • Klõpsake oma Alexa konsoolid ja seejärel nuppu Oskused. See avab arendajakonsooli ja kuvab kõik teie loodud oskused.
  • Leidke loendist oskus. ID kuvatakse oskuse nime all.

Kui teil on oma oskuse ID, lisage funktsioonile päästik:

  • Logige sisse AWS-i halduskonsooli ja liikuge AWS-i Lambda juurde.
  • Konfiguratsiooni üksikasjade avamiseks klõpsake loendis oma funktsiooni.
  • Veenduge, et olete lehel Konfiguratsioon.
  • Jaotise Kujundaja jaotises Lisa päästikud klõpsake päästiku valimiseks Alexa oskuste komplekti.
  • Valige päästikute konfigureerimise jaotises Oskuse ID kinnitamiseks Luba.
  • Sisestage oma oskuse ID redigeerimise väljale Skill ID.
  • Klõpsake nuppu Lisa.
  • Muudatuse salvestamiseks klõpsake nuppu Salvesta.

Oskuste paketi loomine

Kui oskuse kood on valmis, saate selle luua. Oskuse ettevalmistamiseks AWS Lambdasse üleslaadimiseks looge ZIP-fail, mis sisaldab oskuste faili ja kausta node_modules. Tihendage kindlasti kõik projektifailid, MITTE projekti kausta.

Oma oskuste üleslaadimine AWS Lambda-sse

Kui olete oma AWS Lambda funktsiooni loonud ja päästikuks konfigureerinud “Alexa Skills Kit”, laadige üles eelmises etapis toodetud .zip-fail ja jätke käitleja vaikimisi indeksikäitlejaks. Lõpuks kopeerige funktsiooni AWS Lambda ARN, kuna vajate seda oma oskuste konfigureerimisel Amazoni arendaja konsoolis.

Amazon Alexa Skilli seadistamine

Konfigureerige oskuse lõpp-punkt. Valige jaotises Lõpp-punkt AWS Lambda ARN ja kleepige varem loodud funktsiooni ARN-i. Ülejäänud seaded võib jätta nende vaikeväärtustele. Klõpsake käsul Salvesta lõpppunktid.

Oma oskuste proovile panemine

Sel hetkel saate selle oskuse proovile panna. Klõpsake üleval navigeerimise nuppu Test, et avada Test leht. Veenduge, et test on selle oskuse jaoks lubatud. Testi lehte saate kasutada teksti ja hääle kujul taotluste simuleerimiseks. Kasutage kutsumisnime koos ühe näidisväljendiga. Näiteks peaks „ütle tervitajale ütlema, et tere maailm” tulemuseks peaks olema see, et su oskused reageerivad küsimusele „Tere maailm”. Uue oskuse testimiseks on mitu võimalust:

Kasutage kutsumisnime koos ühe näidisväljendiga, mille me just juhiseks konfigureerisime. Näiteks peaks ütlema, et tervitaja ütleks tere, et teie oskused vastaksid küsimusele „Tere maailm”. Samuti peaks teil olema võimalus minna Alexa rakendusse (oma telefonis või https://alexa.amazon.com) ja näha oma oskusi, mis on loetletud jaotises Teie oskused. Siit saate lubada oma kontol oskuste testimise Alexa toega seadmest.

Peate regulaarselt jälgima oma boti jõudlust, jälgima, kuidas see toimib, et panna see edetabelitesse.

Lõpuks ühendage oma oskus Botanalytics'iga, et saada tasuta analüütika Amazon Alexa oskuste jaoks. Te ei saa parandada seda, mida te ei mõõda, eks? Botanalüütika hõlpsaks integreerimiseks saate kasutada meie ametlikku Node.js teeki.

Viited

  • https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs
  • https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/wiki/Developing-Your-First-Skill
  • https://developer.amazon.com/docs/custom-skills/understanding-custom-skills.html
  • https://developer.amazon.com/docs/custom-skills/steps-to-build-a-custom-skill.html
  • https://developer.amazon.com/docs/devconsole/test-your-skill.html
  • https://developer.amazon.com/docs/devconsole/build-your-skill.html
  • https://medium.com/@moonahmad/how-to-test-alexa-locally-6d498e307a8
  • https://www.npmjs.com/package/alexa-skill-local
  • https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html
Plaksutage, et seda lugu teistele soovitada