android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧
可以使用AlexaLambda函數(shù)或RESTAPI端點(diǎn)開發(fā)Alexa技能。Lambda函數(shù)是Amazon實(shí)現(xiàn)AWS中提供的無(wú)服務(wù)器功能。Amazon建議使用Lambda函數(shù),盡管它們不容易調(diào)試。雖然您可以登錄到CloudWatch日志,但您不能命中斷點(diǎn)并進(jìn)入代碼。
這使得對(duì)Alexa請(qǐng)求的實(shí)時(shí)調(diào)試成為一項(xiàng)非常困難的任務(wù)。在這篇文章中,我們將使用Node.js、NPM和AWSLambda函數(shù)來(lái)實(shí)現(xiàn)AmazonAlexa的自定義技能。這個(gè)技能基本上就是一個(gè)“Hello World”的例子。通過這篇文章,您將能夠?yàn)锳mazonAlexa創(chuàng)建一個(gè)自定義技能,通過使用Node.js實(shí)現(xiàn)功能,并從本地計(jì)算機(jī)和AWS開始您的自定義技能。
先決條件
以下是該項(xiàng)目使用的技術(shù):
- 亞馬遜開發(fā)者帳戶-如何得到它.
- AWS賬戶-免費(fèi)報(bào)名.
- 問問CLI-安裝和配置Ask CLI.
- v10.x.
- VisualStudio代碼
- NPM包裝經(jīng)理。
- Alexa請(qǐng)求Node.js(版本>2.7.0)
- ngrok.
Alexa技能工具包命令行接口(Ask CLI)是用于管理Alexa技能和相關(guān)資源(如AWS Lambda函數(shù))的工具。使用ASKCLI,您可以訪問技能管理API,它允許您從命令行以編程方式管理Alexa技能。我們將使用這個(gè)強(qiáng)大的工具來(lái)創(chuàng)建、構(gòu)建、部署和管理我們的“HelloWorld”技能。我們開始吧!
使用ASKCLI創(chuàng)建技能
對(duì)于創(chuàng)建Alexa技能,我們將使用之前配置的deAskCLI。首先,我們必須執(zhí)行以下命令:
ask new
此命令將一步一步地運(yùn)行和交互創(chuàng)建過程:
Ask CLI要問的第一件事是我們的技能的運(yùn)行時(shí)。在我們的情況下,Node.js v10:
Setting Skill runtime
第二步是我們的技能所基于的模板。在本例中,我們將選擇Hello World模板:
Selecting Hello World template
最后,Ask CLI將向我們?cè)儐栐摷寄艿拿Q:
Adding name of our Skill
項(xiàng)目檔案
這些是該項(xiàng)目的主要文件:
├───.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啟動(dòng)首選項(xiàng)以在本地運(yùn)行您的本地測(cè)試技能。此設(shè)置啟動(dòng)lambda/custom/local-debugger.js。此腳本在http://localhost:3001用于調(diào)試技能。
- 鉤子:包含鉤子腳本的文件夾。亞馬遜提供了兩個(gè)鉤子,post_new_hook和pre_deploy_hook.
- LAMBDA/定制:包含該技能的AWS Lambda函數(shù)的源代碼的文件夾:
- 模型:包含技能交互模型的文件夾。每個(gè)交互模型都在一個(gè)根據(jù)地區(qū)命名的JSON文件中定義。比如Es-ES.json。
- skill.json技能表現(xiàn)。我們項(xiàng)目中最重要的文件之一。
JavaScript中的Lambda函數(shù)
Ask SDK for Node.js允許您花費(fèi)更多的時(shí)間實(shí)現(xiàn)特性,減少編寫樣板代碼的時(shí)間,從而使您更容易構(gòu)建高度吸引人的技能。
您可以在它們的官方網(wǎng)站上找到文檔、示例和有用的鏈接。GitHub儲(chǔ)存庫(kù)
我們的lambda項(xiàng)目中的主要JavaScript文件是index.js,位于lambda/custom文件夾。此文件包含所有處理程序、攔截器和導(dǎo)出exports.handler.
這個(gè)exports.handler函數(shù)每次為該特定函數(shù)啟動(dòng)AWSLambda時(shí)都會(huì)執(zhí)行。理論上,AWS Lambda函數(shù)僅僅是一個(gè)函數(shù)。這意味著我們需要定義調(diào)度邏輯,以便單個(gè)函數(shù)請(qǐng)求可以路由到適當(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技能處理程序的一個(gè)例子:
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,我們幾乎總是會(huì)找到特定于項(xiàng)目的元數(shù)據(jù)。這些元數(shù)據(jù)有助于識(shí)別項(xiàng)目,并作為用戶和貢獻(xiàn)者獲取項(xiàng)目信息的基線。
以下是該文件的外觀:
{
"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)建就有點(diǎn)不同了。為了提高我們的技能,我們可以運(yùn)行以下命令:
npm install
此命令安裝包和它所依賴的任何包。如果包有包鎖或收縮包裝文件,則依賴項(xiàng)的安裝將由該文件驅(qū)動(dòng)。
這可能是建立我們Alexa技能的方法。
使用VisualStudio代碼運(yùn)行技能
這個(gè)launch.json文件在.vscode文件夾具有VisualStudio代碼的配置,允許我們?cè)诒镜剡\(yùn)行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文件運(yùn)行TCP服務(wù)器傾聽
對(duì)于新的傳入技能請(qǐng)求,將建立新的套接字連接。從套接字上接收到的數(shù)據(jù)中,提取請(qǐng)求主體,將其解析為JSON,并將其傳遞給技能調(diào)用者的lambda處理程序。來(lái)自lambda處理程序的響應(yīng)被解析為指定的HTTP 200消息格式這里。響應(yīng)被寫入套接字連接并返回。
配置了Launch.json文件并了解了本地調(diào)試器的工作方式,現(xiàn)在是單擊Play按鈕的時(shí)候了:
Running initial Skill
使用VisualStudio代碼調(diào)試技能
按照前面的步驟,現(xiàn)在可以在所有JS文件中的任何地方設(shè)置斷點(diǎn),以便調(diào)試技能:
Debugging Skill
本地測(cè)試請(qǐng)求
我肯定你已經(jīng)知道那個(gè)著名的工具電話了Postman。RESTAPI已經(jīng)成為為您的服務(wù)提供公共和安全接口的新標(biāo)準(zhǔn)。雖然REST已經(jīng)變得無(wú)處不在,但它并不總是容易測(cè)試的。Postman使測(cè)試和管理HTTPRESTAPI更加容易。Postman為我們提供了導(dǎo)入、測(cè)試和共享API的多種特性,這將幫助您和您的團(tuán)隊(duì)從長(zhǎng)遠(yuǎn)來(lái)看更有效率。
運(yùn)行應(yīng)用程序后,將在http://localhost:3001。有了Postman,你可以模仿任何Alexa的請(qǐng)求。
例如,您可以測(cè)試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)尚未部署本地技能項(xiàng)目時(shí),請(qǐng)?jiān)儐朇LI在開發(fā)階段為您的帳戶創(chuàng)建一個(gè)新技能,然后部署該技能項(xiàng)目。如果適用,Ask CLI在AWS帳戶中創(chuàng)建一個(gè)或多個(gè)新的AWSLambda函數(shù),并上傳Lambda函數(shù)代碼。具體來(lái)說(shuō),要求CLI執(zhí)行以下操作:
在技能項(xiàng)目的配置文件(在技能項(xiàng)目文件夾中,它位于技能項(xiàng)目文件夾中)中查找現(xiàn)有的技能ID。如果配置文件不包含技能ID,請(qǐng)?jiān)儐朇LI使用技能項(xiàng)目的skerc.json文件中的技能清單創(chuàng)建新技能,然后將技能ID添加到技能項(xiàng)目的配置文件中。
查看您的技能項(xiàng)目的清單(asc.json文件),了解該技能發(fā)布的區(qū)域設(shè)置。這些都列在工程量清單中,即InformationInformationlocales對(duì)象中。對(duì)于每個(gè)地區(qū),Ask CLI都會(huì)在技能項(xiàng)目的Models文件夾中查找相應(yīng)的模型文件(例如,es-ES.json),然后將模型上傳到您的技能中。詢問CLI等待上傳的模型構(gòu)建,然后將每個(gè)模型的eTag添加到技能項(xiàng)目的配置文件中。
在您的技能項(xiàng)目的清單中查看AWS Lambda端點(diǎn)的清單(asc.json文件)。這些都列在jav.apis..終結(jié)點(diǎn)或明顯.apis.區(qū)域..端點(diǎn)對(duì)象中(例如,jav.apis.custom.終結(jié)點(diǎn)或明顯.apis.Smart Home.Regis.NA.終結(jié)點(diǎn))。每個(gè)端點(diǎn)對(duì)象都包含一個(gè)sourceDir值,也可以選擇URI值。的內(nèi)容。sourceDir文件夾到相應(yīng)的AWS Lambda函數(shù),并將Lambda函數(shù)命名為與URI值相同的函數(shù)。有關(guān)Ask CLI如何執(zhí)行上載到Lambda的詳細(xì)信息,請(qǐng)參閱AWS Lambda部署詳細(xì)信息。
在您的技能項(xiàng)目文件夾中查找技能產(chǎn)品,如果找到,將它們上傳到您的技能中。有關(guān)技能內(nèi)產(chǎn)品的更多信息,請(qǐng)參見技能采購(gòu)概述。
在執(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"
}
]
}
}
}
}
直接來(lái)自Alexa的測(cè)試請(qǐng)求
ngrok是一個(gè)非常酷的輕量級(jí)工具,它在本地機(jī)器上創(chuàng)建一個(gè)安全隧道,以及一個(gè)可用于瀏覽本地站點(diǎn)或API的公共URL。
當(dāng)ngrok運(yùn)行時(shí),它偵聽本地web服務(wù)器正在運(yùn)行的同一個(gè)端口,并代理對(duì)本地計(jì)算機(jī)的外部請(qǐng)求。
從那里,這是一個(gè)簡(jiǎn)單的步驟,讓它聽你的Web服務(wù)器。假設(shè)您正在3001端口上運(yùn)行本地Web服務(wù)器。在你的終端里,你可以輸入:ngrok http 3001。這將啟動(dòng)ngrok偵聽端口3001并創(chuàng)建安全隧道:
所以現(xiàn)在,你得去Alexa開發(fā)者控制臺(tái),去你的技能>端點(diǎn)>https,添加上面生成的HTTPS URL。
選擇我的發(fā)展端點(diǎn)作為子域選項(xiàng),然后單擊頁(yè)面頂部的保存端點(diǎn)。
去試驗(yàn)選項(xiàng)卡在Alexa開發(fā)者控制臺(tái)并啟動(dòng)您的技能。
Alexa Developer控制臺(tái)將向ngrok端點(diǎn)發(fā)送一個(gè)HTTPS請(qǐng)求(https://20dac120.ngrok.io),這將其路由到您在WebAPI服務(wù)器上運(yùn)行的技能。
結(jié)語(yǔ)
這是使用Node.js學(xué)習(xí)Alexa技能的基本教程。正如您在本例中所看到的,Alexa Node.js技能工具包和Alexa工具(如Ask CLI)可以幫助我們很大程度上幫助我們,它們還為我們提供了以一種簡(jiǎn)單的方式創(chuàng)建技能的可能性。我希望這個(gè)例子項(xiàng)目對(duì)你有幫助。
我希望它會(huì)有用!如果您有任何疑問或問題,請(qǐng)立即與我聯(lián)系或在下面發(fā)表評(píng)論!
編碼愉快!
為感謝您對(duì)我們的認(rèn)可,特意準(zhǔn)備了一些IT入門和進(jìn)階的干貨
包括:Java、UI設(shè)計(jì)、H5前端、Python+人工智能、軟件測(cè)試和新媒體運(yùn)營(yíng)六大學(xué)科視頻資料。以及IT就業(yè)大禮包。
線上視頻、音頻,隨時(shí)學(xué)習(xí)觀看
關(guān)注我們并私信“資料”即可獲取。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux redis 删除_Redis
- 下一篇: 蒸汽机器人布里茨天赋_LoL蒸汽机器人符