日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧

發(fā)布時間:2025/4/16 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可以使用AlexaLambda函數(shù)或RESTAPI端點開發(fā)Alexa技能。Lambda函數(shù)是Amazon實現(xiàn)AWS中提供的無服務(wù)器功能。Amazon建議使用Lambda函數(shù),盡管它們不容易調(diào)試。雖然您可以登錄到CloudWatch日志,但您不能命中斷點并進入代碼。

這使得對Alexa請求的實時調(diào)試成為一項非常困難的任務(wù)。在這篇文章中,我們將使用Node.js、NPM和AWSLambda函數(shù)來實現(xiàn)AmazonAlexa的自定義技能。這個技能基本上就是一個“Hello World”的例子。通過這篇文章,您將能夠為AmazonAlexa創(chuàng)建一個自定義技能,通過使用Node.js實現(xiàn)功能,并從本地計算機和AWS開始您的自定義技能。

先決條件

以下是該項目使用的技術(shù):

  • 亞馬遜開發(fā)者帳戶-如何得到它.
  • AWS賬戶-免費報名.
  • 問問CLI-安裝和配置Ask CLI.
  • v10.x.
  • VisualStudio代碼
  • NPM包裝經(jīng)理。
  • Alexa請求Node.js(版本>2.7.0)
  • ngrok.

Alexa技能工具包命令行接口(Ask CLI)是用于管理Alexa技能和相關(guān)資源(如AWS Lambda函數(shù))的工具。使用ASKCLI,您可以訪問技能管理API,它允許您從命令行以編程方式管理Alexa技能。我們將使用這個強大的工具來創(chuàng)建、構(gòu)建、部署和管理我們的“HelloWorld”技能。我們開始吧!

使用ASKCLI創(chuàng)建技能

對于創(chuàng)建Alexa技能,我們將使用之前配置的deAskCLI。首先,我們必須執(zhí)行以下命令:

ask new

此命令將一步一步地運行和交互創(chuàng)建過程:

Ask CLI要問的第一件事是我們的技能的運行時。在我們的情況下,Node.js v10:

Setting Skill runtime

第二步是我們的技能所基于的模板。在本例中,我們將選擇Hello World模板:

Selecting Hello World template

最后,Ask CLI將向我們詢問該技能的名稱:

Adding name of our Skill

項目檔案

這些是該項目的主要文件:

├───.ask

│ config

├───.vscode

│ launch.json

├───hooks

├───lambda

│ └───custom

│ ├───errors

│ ├───intents

│ ├───interceptors

│ ├───utilities

│ ├─── index.js

│ ├─── local-debugger.js

│ └─── package.json

├───models

│ es-ES.json

└───skill.json

  • ASK:包含ASKCLI配置文件的文件夾。在執(zhí)行命令之前,此配置文件將保持為空。ask deploy
  • vscode/launch.json啟動首選項以在本地運行您的本地測試技能。此設(shè)置啟動lambda/custom/local-debugger.js。此腳本在http://localhost:3001用于調(diào)試技能。
  • 鉤子:包含鉤子腳本的文件夾。亞馬遜提供了兩個鉤子,post_new_hook和pre_deploy_hook.
  • post_new_hook技能創(chuàng)造后執(zhí)行。InstituteNode.js運行npm install在每一個信息源中skill.json
  • pre_deploy_hook在技能部署之前執(zhí)行。在Node.js中運行npm install在每一個信息源中skill.json也是。
    • LAMBDA/定制:包含該技能的AWS Lambda函數(shù)的源代碼的文件夾:
  • index.js*Lambda主要入口點。
  • utilities/languageStrings.js::圖書館使用的i18n字典i18next,它允許我們在不同的配置語言中運行相同的技能。
  • package.json這個文件是Node.js生態(tài)系統(tǒng)的核心,是理解和使用Node.js、NPM甚至現(xiàn)代JavaScript的一個基本部分。
  • utilities/util.js*具有有用功能的文件。
  • local-debugger.js*用于本地調(diào)試我們的技能。
  • errors*包含所有錯誤處理程序的文件夾。
  • intents*包含所有意圖處理程序的文件夾。
  • interceptors在這里你可以找到所有的攔截器。
    • 模型:包含技能交互模型的文件夾。每個交互模型都在一個根據(jù)地區(qū)命名的JSON文件中定義。比如Es-ES.json。
    • skill.json技能表現(xiàn)。我們項目中最重要的文件之一。

    JavaScript中的Lambda函數(shù)

    Ask SDK for Node.js允許您花費更多的時間實現(xiàn)特性,減少編寫樣板代碼的時間,從而使您更容易構(gòu)建高度吸引人的技能。

    您可以在它們的官方網(wǎng)站上找到文檔、示例和有用的鏈接。GitHub儲存庫

    我們的lambda項目中的主要JavaScript文件是index.js,位于lambda/custom文件夾。此文件包含所有處理程序、攔截器和導(dǎo)出exports.handler.

    這個exports.handler函數(shù)每次為該特定函數(shù)啟動AWSLambda時都會執(zhí)行。理論上,AWS Lambda函數(shù)僅僅是一個函數(shù)。這意味著我們需要定義調(diào)度邏輯,以便單個函數(shù)請求可以路由到適當(dāng)?shù)拇a,因此是處理程序。

    /**

    * This handler acts as the entry point for your skill, routing all request and response

    * payloads to the handlers above. Make sure any new handlers or interceptors you've

    * defined are included below. The order matters - they're processed top to bottom

    * */

    exports.handler = Alexa.SkillBuilders.custom()

    .addRequestHandlers(

    LaunchRequestHandler,

    HelloWorldIntentHandler,

    HelpIntentHandler,

    CancelAndStopIntentHandler,

    FallbackIntentHandler,

    SessionEndedRequestHandler,

    IntentReflectorHandler)

    .addErrorHandlers(

    ErrorHandler)

    .addRequestInterceptors(

    LocalisationRequestInterceptor)

    .lambda();

    查看一下LaunchRequestHandler作為用Node.js編寫的Alexa技能處理程序的一個例子:

    const LaunchRequestHandler = {

    //Method that returns true if this handler can execute the current request

    canHandle(handlerInput) {

    return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';

    },

    //Method that will process the request if the method above returns true

    handle(handlerInput) {

    const speakOutput = handlerInput.t('WELCOME_MSG');

    return handlerInput.responseBuilder

    .speak(speakOutput)

    .reprompt(speakOutput)

    .getResponse();

    }

    };

    使用VisualStudio代碼生成技能

    package.json,我們幾乎總是會找到特定于項目的元數(shù)據(jù)。這些元數(shù)據(jù)有助于識別項目,并作為用戶和貢獻者獲取項目信息的基線。

    以下是該文件的外觀:

    {

    "name": "alexa-nodejs-lambda-helloworld",

    "version": "1.0.0",

    "description": "Alexa HelloWorld example with NodeJS",

    "main": "index.js",

    "scripts": {

    "test": "echo "Error: no test specified" && exit 1"

    },

    "repository": {

    "type": "git",

    "url": "https://github.com/xavidop/alexa-nodejs-lambda-helloworld.git"

    },

    "author": "Xavier Portilla Edo",

    "license": "Apache-2.0",

    "dependencies": {

    "ask-sdk-core": "^2.7.0",

    "ask-sdk-model": "^1.19.0",

    "aws-sdk": "^2.326.0",

    "i18next": "^15.0.5"

    }

    }

    有了JavaScript或Node.js,構(gòu)建就有點不同了。為了提高我們的技能,我們可以運行以下命令:

    npm install

    此命令安裝包和它所依賴的任何包。如果包有包鎖或收縮包裝文件,則依賴項的安裝將由該文件驅(qū)動。

    這可能是建立我們Alexa技能的方法。

    使用VisualStudio代碼運行技能

    這個launch.json文件在.vscode文件夾具有VisualStudio代碼的配置,允許我們在本地運行l(wèi)ambda:

    {

    "version": "0.2.0",

    "configurations": [

    {

    "type": "node",

    "request": "launch",

    "name": "Launch Skill",

    // Specify path to the downloaded local adapter(for Node.js) file

    "program": "${workspaceRoot}/lambda/custom/local-debugger.js",

    "args": [

    // port number on your local host where the alexa requests will be routed to

    "--portNumber", "3001",

    // name of your Node.js main skill file

    "--skillEntryFile", "${workspaceRoot}/lambda/custom/index.js",

    // name of your lambda handler

    "--lambdaHandler", "handler"

    ]

    }

    ]

    }

    此配置文件將執(zhí)行以下命令:

    node --inspect-brk=28448 lambdacustomlocal-debugger.js --portNumber 3001 --skillEntryFile lambda/custom/index.js --lambdaHandler handler

    此配置使用local-debugger.js文件運行TCP服務(wù)器傾聽

    對于新的傳入技能請求,將建立新的套接字連接。從套接字上接收到的數(shù)據(jù)中,提取請求主體,將其解析為JSON,并將其傳遞給技能調(diào)用者的lambda處理程序。來自lambda處理程序的響應(yīng)被解析為指定的HTTP 200消息格式這里。響應(yīng)被寫入套接字連接并返回。

    配置了Launch.json文件并了解了本地調(diào)試器的工作方式,現(xiàn)在是單擊Play按鈕的時候了:

    Running initial Skill

    使用VisualStudio代碼調(diào)試技能

    按照前面的步驟,現(xiàn)在可以在所有JS文件中的任何地方設(shè)置斷點,以便調(diào)試技能:

    Debugging Skill

    本地測試請求

    我肯定你已經(jīng)知道那個著名的工具電話了Postman。RESTAPI已經(jīng)成為為您的服務(wù)提供公共和安全接口的新標(biāo)準(zhǔn)。雖然REST已經(jīng)變得無處不在,但它并不總是容易測試的。Postman使測試和管理HTTPRESTAPI更加容易。Postman為我們提供了導(dǎo)入、測試和共享API的多種特性,這將幫助您和您的團隊從長遠來看更有效率。

    運行應(yīng)用程序后,將在http://localhost:3001。有了Postman,你可以模仿任何Alexa的請求。

    例如,您可以測試LaunchRequest:

    {

    "version": "1.0",

    "session": {

    "new": true,

    "sessionId": "amzn1.echo-api.session.[unique-value-here]",

    "application": {

    "applicationId": "amzn1.ask.skill.[unique-value-here]"

    },

    "user": {

    "userId": "amzn1.ask.account.[unique-value-here]"

    },

    "attributes": {}

    },

    "context": {

    "AudioPlayer": {

    "playerActivity": "IDLE"

    },

    "System": {

    "application": {

    "applicationId": "amzn1.ask.skill.[unique-value-here]"

    },

    "user": {

    "userId": "amzn1.ask.account.[unique-value-here]"

    },

    "device": {

    "supportedInterfaces": {

    "AudioPlayer": {}

    }

    }

    }

    },

    "request": {

    "type": "LaunchRequest",

    "requestId": "amzn1.echo-api.request.[unique-value-here]",

    "timestamp": "2020-03-22T17:24:44Z",

    "locale": "en-US"

    }

    }

    部署你的Alexa技能

    在代碼準(zhǔn)備就緒之后,我們需要將其部署到AWS Lambda上,以便將其連接到Alexa。

    在部署Alexa技能之前,我們可以展示config文件在.ask文件夾它是空的:

    {

    "deploy_settings": {

    "default": {

    "skill_id": "",

    "was_cloned": false,

    "merge": {}

    }

    }

    }

    使用ASKCLI部署Alexa技能:

    ask deploy

    正如官方文件所述:

    當(dāng)尚未部署本地技能項目時,請詢問CLI在開發(fā)階段為您的帳戶創(chuàng)建一個新技能,然后部署該技能項目。如果適用,Ask CLI在AWS帳戶中創(chuàng)建一個或多個新的AWSLambda函數(shù),并上傳Lambda函數(shù)代碼。具體來說,要求CLI執(zhí)行以下操作:

    在技能項目的配置文件(在技能項目文件夾中,它位于技能項目文件夾中)中查找現(xiàn)有的技能ID。如果配置文件不包含技能ID,請詢問CLI使用技能項目的skerc.json文件中的技能清單創(chuàng)建新技能,然后將技能ID添加到技能項目的配置文件中。

    查看您的技能項目的清單(asc.json文件),了解該技能發(fā)布的區(qū)域設(shè)置。這些都列在工程量清單中,即InformationInformationlocales對象中。對于每個地區(qū),Ask CLI都會在技能項目的Models文件夾中查找相應(yīng)的模型文件(例如,es-ES.json),然后將模型上傳到您的技能中。詢問CLI等待上傳的模型構(gòu)建,然后將每個模型的eTag添加到技能項目的配置文件中。

    在您的技能項目的清單中查看AWS Lambda端點的清單(asc.json文件)。這些都列在jav.apis..終結(jié)點或明顯.apis.區(qū)域..端點對象中(例如,jav.apis.custom.終結(jié)點或明顯.apis.Smart Home.Regis.NA.終結(jié)點)。每個端點對象都包含一個sourceDir值,也可以選擇URI值。的內(nèi)容。sourceDir文件夾到相應(yīng)的AWS Lambda函數(shù),并將Lambda函數(shù)命名為與URI值相同的函數(shù)。有關(guān)Ask CLI如何執(zhí)行上載到Lambda的詳細(xì)信息,請參閱AWS Lambda部署詳細(xì)信息。

    在您的技能項目文件夾中查找技能產(chǎn)品,如果找到,將它們上傳到您的技能中。有關(guān)技能內(nèi)產(chǎn)品的更多信息,請參見技能采購概述。

    在執(zhí)行上述命令之后,我們將擁有config正確填寫的檔案:

    {

    "deploy_settings": {

    "default": {

    "skill_id": "amzn1.ask.skill.ed038d5e-61eb-4383-a480-04e3398b398d",

    "was_cloned": false,

    "merge": {},

    "resources": {

    "manifest": {

    "eTag": "faa883c92faf9a495407f0d03d5e3790"

    },

    "interactionModel": {

    "es-ES": {

    "eTag": "c9e7fd862be0dd3b21252b8bca53c7f7"

    }

    },

    "lambda": [

    {

    "alexaUsage": [

    "custom/default"

    ],

    "arn": "arn:aws:lambda:us-east-1:141568529918:function:ask-custom-alexa-nodejs-lambda-helloworld-default",

    "awsRegion": "us-east-1",

    "codeUri": "lambda/custom",

    "functionName": "ask-custom-alexa-nodejs-lambda-helloworld-default",

    "handler": "index.handler",

    "revisionId": "ef2707ee-a366-484d-a4b7-3826a44692dd",

    "runtime": "nodejs10.x"

    }

    ]

    }

    }

    }

    }

    直接來自Alexa的測試請求

    ngrok是一個非??岬妮p量級工具,它在本地機器上創(chuàng)建一個安全隧道,以及一個可用于瀏覽本地站點或API的公共URL。

    當(dāng)ngrok運行時,它偵聽本地web服務(wù)器正在運行的同一個端口,并代理對本地計算機的外部請求。

    從那里,這是一個簡單的步驟,讓它聽你的Web服務(wù)器。假設(shè)您正在3001端口上運行本地Web服務(wù)器。在你的終端里,你可以輸入:ngrok http 3001。這將啟動ngrok偵聽端口3001并創(chuàng)建安全隧道:

    所以現(xiàn)在,你得去Alexa開發(fā)者控制臺,去你的技能>端點>https,添加上面生成的HTTPS URL。

    選擇我的發(fā)展端點作為子域選項,然后單擊頁面頂部的保存端點。

    去試驗選項卡在Alexa開發(fā)者控制臺并啟動您的技能。

    Alexa Developer控制臺將向ngrok端點發(fā)送一個HTTPS請求(https://20dac120.ngrok.io),這將其路由到您在WebAPI服務(wù)器上運行的技能。

    結(jié)語

    這是使用Node.js學(xué)習(xí)Alexa技能的基本教程。正如您在本例中所看到的,Alexa Node.js技能工具包和Alexa工具(如Ask CLI)可以幫助我們很大程度上幫助我們,它們還為我們提供了以一種簡單的方式創(chuàng)建技能的可能性。我希望這個例子項目對你有幫助。

    我希望它會有用!如果您有任何疑問或問題,請立即與我聯(lián)系或在下面發(fā)表評論!

    編碼愉快!

    為感謝您對我們的認(rèn)可,特意準(zhǔn)備了一些IT入門和進階的干貨

    包括:Java、UI設(shè)計、H5前端、Python+人工智能、軟件測試和新媒體運營六大學(xué)科視頻資料。以及IT就業(yè)大禮包。

    線上視頻、音頻,隨時學(xué)習(xí)觀看

    關(guān)注我們并私信“資料”即可獲取。

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。