Node.js ilə Amazon Alexa Bacarığını necə inkişaf etdirmək olar

Bu dərsdə Amazon Alexa üçün nodejs, npm və AWS Lambda funksiyalarından istifadə edərək xüsusi bir bacarıq tətbiq edəcəyik. Bu bacarıq əsasən Salam Dünya nümunəsidir. Bu dərsliklə Amazon Alexa üçün xüsusi bir bacarıq yarada, nodejs istifadə edərək funksionallığı tətbiq edə və həm yerli kompüterinizdən, həm də AWS-dən xüsusi bacarıqlarınızı işə sala bilərsiniz.

Bu təlimat, Resurslar bölməsində görünən müxtəlif mənbələrdən materialları ehtiva edir.

tələblər

  • Bir NPM layihəsi. Bir NPM layihəsinin qurulması haqqında məlumatı burada tapa bilərsiniz.
  • Uyğun bir Node.js inkişaf mühiti. Node.js üçün ASK SDK v2 üçün Düyün 4.3.2 və ya daha yüksək tələb olunur.
  • Bir Amazon Developer hesabı. Alexa Skills yaratmaq və konfiqurasiya etmək üçün bu tələb olunur.
  • Bir Amazon Veb Xidmətləri (AWS) hesabı. Bu təlimat sizi AWS Lambda-da bir bacarıq barındırma yolu ilə aparacaq. (AWS olmadan bir bacarıq yaratmaq istəyirsinizsə, [alexa-skill-local] adlı bir npm paketindən istifadə edə bilərsiniz. (Https://www.npmjs.com/package/alexa-skill-local))

ASK SDK-nı layihənizə əlavə edin

  • NPM layihənizdə, Node.js paylanması üçün standart ASK SDK v2-ni quraşdırmaq üçün aşağıdakı əmrləri işə salın:

npm quraşdırma - ask-sdk qeyd edin

Amazon Alexa Xüsusi Bacarıqlarını konfiqurasiya edin

  • Geliştirici konsolunda yeni bir bacarıq yaradın. Bir model seçmək istənirsə, xüsusi modeli seçin.
  • Developer.amazon.com/alexa ünvanına daxil olun.
  • Alexa konsollarınızı, sonra da Bacarıqları vurun. Bu, geliştirici konsolunu açacaq və əvvəllər yaratdığınız bütün bacarıqları göstərəcəkdir.
  • Bacarıq yarat düyməsini vurun.
  • Bacarıq adını daxil edin. Müştərilərin bacarıqlarını dərc etdikləri zaman bu adı görürlər. Bu adı daha sonra Dağıtım səhifəsində düzəldə bilərsiniz.
  • Lazım gələrsə, bacarıq üçün mənbə dilini dəyişdirin, sonra İleri düyməsini basın.
  • Daxil etmək istədiyiniz modeli seçmək üçün Seç düyməsini vurun. (Bu təlimat xüsusi seçimdən istifadə edir.)

Tələb işləyicilərini tətbiq edin

Əvvəlcə bacarıqlarınız üçün müxtəlif növ daxil olan tələblər üçün zəruri işləyicilər yaradın.

Tələb sorğusunu işə salın

Aşağıdakı kod nümunəsi, bacarıq bir LaunchRequest aldığında çağırılan bir işləyicinin necə yapılandırılacağını göstərir. LaunchRequest hadisəsi, bacarıq xüsusi bir niyyət olmadan çağırıldıqda baş verir.

İndex.js adlı bir fayl yaradın və aşağıdakı kodu yapışdırın.

const LaunchRequestHandler = {canHandle (handlerInput) {return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, handle (handlerInput) {const speechText = 'Alexa Skills Kit-ə xoş gəlmisiniz, salam verə bilərsiniz!';
return handlerInput.responseBuilder .speak (speechText) .reprompt (speechText) .wimSimpleCard ('Hello World', speechText). cavab almaq (); }};

Gələn tələb LaunchRequest olduqda canHandle funksiyası doğru qayıdır. Dəstək funksiyası sadə qarşılama cavabı yaradır və qaytarır.

HelloWorldIntent işləyicisi

Aşağıdakı kod nümunəsi, bacarıq HelloWorldIntent qəbul etdikdə çağırılan işləyicinin necə qurulacağını göstərir.

Əvvəlki işləyicidən sonra index.js dosyanıza aşağıdakı kodu əlavə edin.

const HelloWorldIntentHandler = {canHandle (handlerInput) {return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'HelloWorldIntent'; }, tutacaq (handlerInput) {const speechText = 'Salam dünya!';
return handlerInput.responseBuilder .speak (speechText) .withSimpleCard ('Hello World', speechText). cavab almaq (); }};

CanHandle funksiyası daxil olan sorğunun IntentRequest olub olmadığını müəyyənləşdirir və niyyət adı HelloWorldIntent olduqda doğrudur. Dəstəyin funksiyası əsas "salam dünyası" cavabını yaradır və qaytarır.

HelpIntent işləyicisi

Aşağıdakı kod nümunəsi, bacarıq daxili AMAZON.HelpIntent niyyətini aldıqda çağırılan işləyicinin necə yapılandırılacağını göstərir.

Əvvəlki işləyicidən sonra aşağıdakı kodu index.js dosyanıza əlavə edin.

const HelpIntentHandler = {canHandle (handlerInput) {return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'; }, idarə (handlerInput) {const speechText = 'Mənə salam deyə bilərsiniz!';
return handlerInput.responseBuilder .speak (speechText) .reprompt (speechText) .wimSimpleCard ('Hello World', speechText). cavab almaq (); }};

Əvvəlki işləyiciyə bənzər olaraq, bu işləyici gözlənilən niyyət adına IntentRequest təyin edir. Əsas yardım təlimatları qaytarılır.

CancelAndStopIntent işləyicisi

CancelAndStopIntenthandler HelpIntent işləyicisinə bənzəyir, çünki daxili niyyət tərəfindən də işə salınır. Aşağıdakı nümunə iki fərqli niyyətə cavab vermək üçün tək bir işləyicidən istifadə edir: Amazon.CancelIntent və Amazon.StopIntent.

Əvvəlki işləyicidən sonra aşağıdakı kodu index.js dosyanıza əlavə edin.

const CancelAndStopIntentHandler = {canHandle (handlerInput) {return handlerInput.requestEnvelope.request.type === 'IntentRequest' && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent. | | purpose.name === 'AMAZON.StopIntent'); }, idarə (handlerInput) {const speechText = 'Əlvida!';
return handlerInput.responseBuilder .speak (speechText) .withSimpleCard ('Hello World', speechText). cavab almaq (); }};

Hər iki niyyətin cavabı eynidir. Tək işləyici təkrarlanan kodu azaldır.

SessionEndedRequestHandler

SessionEndedRequest aldıqdan sonra bir nitq, kart və ya təlimat cavabını qaytara bilməməyinizə baxmayaraq, SessionEndedRequestHandler, təmizlik məntiqinizi yerləşdirmək üçün yaxşı bir yerdir.

Əvvəlki işləyicidən sonra aşağıdakı kodu index.js dosyanıza əlavə edin.

const SessionEndedRequestHandler = {canHandle (handlerInput) {return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest'; }, idarə (handlerInput) {// Hər hansı bir təmizlik məntiqi buraya qayıdır handlerInput.responseBuilder.getResponse (); }};

ErrorHandler

Node.js üçün ASK SDK v2, səhv işləmə üçün daha yaxşı dəstəyə sahibdir, beləliklə çeviklik istifadəçi problemsizliyini təmin edə bilər. Xəta işləyicisi, işlənməmiş istəklər, API xidmətinin vaxtı və s. Kimi səhvlərin idarə edilməsi məntiqini qoymaq üçün yaxşı bir yerdir. Aşağıdakı nümunə, qabiliyyətin bütün səhvlər haqqında mənalı bir mesaj göndərməsini təmin etmək üçün qabiliyyətinizə bir səhv işləyicisi əlavə edir.

Əvvəlki işləyicidən sonra index.js dosyanıza aşağıdakı kodu əlavə edin.

const ErrorHandler = {yaxşı alın () {true return; }, idarə (handlerInput, səhv) {console.log (ʻHata işlənib: $ {error.message} `);
return handlerInput.responseBuilder .speak ('Bağışlayın, əmri başa düşə bilmirəm. Xahiş edirəm bir daha deyin.') .reprompt ('Bağışlayın, əmri başa düşə bilmirəm. Xahiş edirəm bir daha deyin.'). cavab almaq (); },};

Lambda işləyicisi yaradın

Lambda işləyicisi AWS Lambda funksiyanızın giriş nöqtəsidir. Aşağıdakı kod nümunəsi, daxil olan bütün istəkləri bacarıqlarınıza yönəltmək üçün Lambda işləyici funksiyası yaradır. Lambda işləyici funksiyası, yeni yaratdığımız istək işləyiciləri ilə konfiqurasiya edilmiş bir SDK qabiliyyəti nümunəsi yaradır.

Aşağıdakı kodu index.js dosyanızın üstünə əlavə edin. Kod əvvəllər yaratdığınız işləyicilərdən əvvəl gəlməlidir. (Unutmayın, bu ASK SDK v2-dir!)

'ciddi istifadə edin';
const Alexa = tələb ('ask-sdk-core'); // standart SDK modulu quraşdırılıbsa 'ask-sdk' istifadə edin
////////////////////////////////// // Buradakı işləyicinin kodu // /////// ///////////////////////////////
export.handler = Alexa.SkillBuilders.custom () .addRequestHandlers (LaunchRequestHandler, HalloWeltIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, SessionEndedRequestHandler) λ ();

Bacarıqlarınızı sazlayın

Kenar çubuğundakı Dəvət seçimini seçin və Bacarıq Dəvət Adı olaraq "salamlayı" yazın.

Sonra qarşılıqlı əlaqə modelinə HelloWorldIntent adlı bir niyyət əlavə edin. Qarşılıqlı əlaqəli modelin Niyyətlər hissəsindəki Əlavə et düyməsini vurun.

Xüsusi Niyyət Yarat seçilmiş olaraq buraxın, niyyət adı üçün HelloWorldIntent daxil edin və niyyəti yaradın. Niyyət təfərrüatları səhifəsində, istifadəçiləri niyyəti əldə etmək üçün istifadə edə biləcəyi bəzi nümunəvi ifadələr əlavə edin. Bu nümunədə istifadə edə bilərsiniz:

salam deyin salam dunyaya salam deyin salam dunya salam necesiniz

AMAZON.CancelIntent, AMAZON.HelpIntent və AMAZON.StopIntent yerləşmiş Alexa niyyətləri olduğundan, onlar üçün nümunə ifadələr verməyinizə ehtiyac yoxdur.

Geliştirici konsolunda, bütün bacarıq modelini JSON formatında da düzəldə bilərsiniz. Kenar çubuğunda JSON redaktorunu seçin. Bu nümunə üçün aşağıdakı JSON sxemindən istifadə edə bilərsiniz.

{"interactiveModel": {"languageModel": {"invocationName": "təbrikçi", "niyyətlər": [{"name": "AMAZON.CancelIntent", "sample": []}, {"name": "AMAZON" .HelpIntent "," Nümunələr ": []}, {" name ":" AMAZON.StopIntent "," Nümunələr ": []}, {" name ":" HelloWorldIntent "," Açar ": []," Nümunələr " : ["Necəsən", "salam", "salam dünyası", "salam deyin", "salam", "salam dünyası", "salam deyin"]}], "növləri": []}} }

Qarşılıqlı əlaqə modelini düzəltdikdən sonra modeli saxlamalı və qurmalısınız.

Alexa Becerinizi Yerli olaraq başlayın

NPM paketi və konfiqurasiya sənədlərini quraşdırın

Bu hissə üçün alexa-skill-local adlı npm paketindən istifadə edəcəyik. Tətbiqinizi başlamaq üçün kök qovluğunuzda bir asl-config.json faylı da yaratmalısınız. Konfiqurasiya faylı aşağıdakı formatda olmalıdır (inkişaf proqramı olduğundan əmin deyilsinizsə):

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

Beceri Kimliğinizi Alexa Konsolu səhifəsində tapa bilərsiniz. Amzn1.ask.skill.6f2f04b5-abba-3f47–9fc9–0sbba79b1535 kimi görünür. Çalıştırmak üçün Node.js v8.xx istifadə edin, alexa-skill-local-ı qlobal olaraq (tövsiyə olunur) və ya layihə qovluğunuza yükləyə bilərsiniz (bu halda onu tez-tez pack.json-da npm skriptlərindən çalıştırmaq istəyəcəksiniz).

$ npm install -g alexa-skill-local

İstifadəsi

Aşağıdakı əmri işə salın. İstədikdə, brauzerinizdə http: // localhost: 3001 açın. Bacarıqlarınızın son nöqtəsini yeniləmək üçün alexa-skill-local giriş imkanı vermək üçün Amazon-a daxil olun.

$ alexa-skill-local

Sonra konsoldakı təlimatları izləyin.

Amazon Alexa Bacarıqlarını Konfiqurasiya

Bacarıq üçün son nöqtəni konfiqurasiya edin. Son nöqtənin altından HTTPS seçin və əmr sətrində verilən url yapışdırın. SSL sertifikat növünü seçin, çünki İnkişafım son nöqtəsi bir sertifikatlaşdırma orqanı tərəfindən joker kart sertifikatına sahib olan bir domenin alt domeni. Qalan parametrlər standart dəyərlərində qala bilər. Son nöqtələri saxla vurun.

Alexa Becerinize AWS Lambda ilə başlayın

AWS Lambda funksiyası yaradın

  • AWS ilə bir hesabınız yoxdursa, Amazon Veb Xidmətlərinə gedin və bir hesab yaradın.
  • AWS İdarəetmə Konsoluna daxil olun və AWS Lambda-ya keçin.
  • Konsolun sağ yuxarı hissəsində, Bölgə açılır siyahısını vurun və Alexa səriştəsi üçün dəstəklənən bölgələrdən birini seçin: Asiya Pasifik (Tokyo), AB (İrlandiya), Şərqi Amerika Birləşmiş Ştatları (N. Virginia) ) və ya Qərbi Amerika Birləşmiş Ştatları (Oregon)).
  • Əgər hələ heç bir Lambda funksiyanız yoxdursa, İndi Başlat düyməsini basın. Əks təqdirdə, Lambda funksiyası yaradın.
  • Sıfırdan Müəllif seçin.
  • Funksiya üçün ad daxil edin.
  • Funksiya üçün rolu seçin. Bu, funksiyanın əldə edə biləcəyi AWS mənbələrini müəyyənləşdirir.
  • Mövcud roldan istifadə etmək üçün Mövcud rolun altındakı rolu seçin.
  • Yeni bir rol yaratmaq barədə məlumat üçün İşə üçün yeni bir rol müəyyənləşdirin. Unutmayın ki, bu rol üçün sadə Microservice səlahiyyətinə ehtiyacımız var!
  • İşləmə müddəti üçün istifadə etmək istədiyiniz dili seçin (Node.js, Java və ya Python). Bu təlimat üçün Node.js.-dən istifadə edəcəyik.
  • Funksiya Yarat düyməsini basın.
  • Alexa Skills Kit üçün tetiği konfiqurasiya edin.

Alexa Skills Kit tetikleyicisini əlavə edin

  • Https://www.developer.amazon.com/alexa ünvanına daxil olun.
  • Alexa konsollarınızı, sonra da Bacarıqları vurun. Bu, geliştirici konsolunu açacaq və yaratdığınız bütün bacarıqları göstərəcəkdir.
  • Siyahıda bacarıq tapın. Şəxsiyyət bacarıq adı altında göstərilir.

Bacarıq ID-yə sahib olduqdan sonra xüsusiyyətə tətiyi əlavə edin:

  • AWS İdarəetmə Konsoluna daxil olun və AWS Lambda-ya keçin.
  • Konfiqurasiya detallarını açmaq üçün siyahıdakı rolunuzu vurun.
  • Konfiqurasiya səhifəsində olduğunuzdan əmin olun.
  • Dizayner bölməsində, Tetikleyici əlavə et, tetiği seçmək üçün Alexa Skills Kit düyməsini vurun.
  • Tetikleyicini Yapılandır altında İmkan Kimlikini yoxlamaq üçün Enable seçin.
  • Bacarıq identifikatorunu Bacarıq ID redaktə qutusuna daxil edin.
  • Əlavə et düyməsini vurun.
  • Dəyişikliyi saxlamaq üçün Saxla düyməsini vurun.

Bacarıq paketi yaradın

Bacarıq kodu tamamlandıqda, bacarıq paketini yarada bilərsiniz. AWS Lambda-ya yükləmək üçün bacarığı hazırlamaq üçün bacarıq faylını və node_modules qovluğunu ehtiva edən bir zip faylı yaradın. Layihə qovluğundan deyil, bütün layihə sənədlərinin birbaşa sıxıldığından əmin olun.

Bacarıqlarınızı AWS Lambda-ya yükləyin

AWS Lambda funksiyanızı yaratdıqdan və bir tetikleyici olaraq "Alexa Skills Kit" i konfiqurasiya etdikdən sonra əvvəlki addımda yaradılan zip sənədini yükləyin və işləyicini default index.handler olaraq buraxın. Nəhayət, AWS Lambda funksiyanız üçün ARN-i kopyalayın, çünki Amazon Developer Console-da bacarıqlarınızı konfiqurasiya etməyiniz lazımdır.

Amazon Alexa Bacarıqlarını Konfiqurasiya

Bacarıq üçün son nöqtəni konfiqurasiya edin. Endpoint AWS Lambda altına ARN seçin və əvvəllər yaratdığınız funksiyadan ARN yapışdırın. Qalan parametrlər standart dəyərlərində qala bilər. Son nöqtələri saxla düyməsini vurun.

Bacarıqlarınızı sınayın

Bu nöqtədə qabiliyyəti test edə bilərsiniz. Test səhifəsinə getmək üçün yuxarıdakı naviqasiyada Test düyməsini vurun. Testin bu bacarıq seçimi üçün effektiv olduğundan əmin olun. Test səhifəsində mətn və nitq şəklində tələbləri simulyasiya edə bilərsiniz. Nümunə danışıqlardan biri ilə zəng adını istifadə edin. Məsələn, salam verənə salam dünyası deyin desən, aləm dünyasına cavab vermək qabiliyyətinə sahib olmalısan. Yeni bir bacarığı sınamağın bir neçə yolu var:

Çağırış adını yeni rəhbər kimi sazladığımız nümunə ifadələrindən biri ilə birlikdə istifadə edin. Məsələn, salamlaşana salam verməsini desəniz, qabiliyyətiniz “Salam dünya” ilə cavab verəcəkdir. Ayrıca Alexa tətbiqinə (telefonunuzda və ya https://alexa.amazon.com saytında) gedib bacarıqlarınızı "Bacarıqlarınız" altında baxmağı bacarmalısınız. Buradan Alexa effektiv bir cihazdan hesabınızdakı test qabiliyyətini aktivləşdirə bilərsiniz.

Qrafiklərə düşməsi üçün botunuzun performansını mütəmadi olaraq izləməlisiniz və performansını izləməlisiniz.

Nəhayət, Amazon Alexa bacarıqları üçün pulsuz analiz əldə etmək üçün bacarıqlarınızı Botanalytics ilə əlaqələndirin. Ölçə bilmədiklərinizi düzəldə bilməzsiniz, deyilmi? Botanalytics-i asanlıqla inteqrasiya etmək üçün rəsmi Node.js kitabxanamızı istifadə edə bilərsiniz.

İstinadlar

  • 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
Bu hekayəni başqalarına tövsiyə etmək üçün vurun