簡體   English   中英

如何使用Amazon Alexa訪問本地API

[英]How can I access a local API using Amazon Alexa

我打算為亞馬遜Alexa構建一套技能,它將與我家中的RaspberryPi上運行的自定義軟件套件集成。

我正在努力弄清楚如何讓Echo / Dot本身直接對raspberry pi進行API調用 - 無需通過互聯網,因為目標設備將只有內聯網連接 - 它將能夠接收來自本地網絡上的設備的命令,但無法通過世界訪問。

根據我的閱讀,典型的工作流程如下

Echo -> Alexa Service -> Lambda

Lambda函數將向智能家居設備返回一大塊數據; 使用此返回值

是否有可能,在收到lambda的響應后,如何讓Alexa設備本身向本地網絡上的設備發出API請求?

我有同樣的問題,我的解決方案是使用SQS作為消息總線,以便我的RaspberryPi不需要從互聯網訪問。

Echo <-> Alexa Service <-> Lambda -> SQS -> RaspberryPi
                             A                 |
                             +------ SQS <-----+

這個工作正常,只要:

  • 您在RaspberryPi上啟用SQS的長輪詢(20秒)並將每個請求的最大消息數設置為1
  • 你沒有在Alexa和RaspberryPi之間來回傳遞的並發消息

這樣做的好處是:

  • 最大消息大小為1時,即使在滿足長輪詢超時之前,只要隊列中有一條消息可用,SQS請求就會返回
  • 在SQS的整個月內,每次只進行1次長時間輪詢,這符合SQS免費等級的100萬次請求
  • 從互聯網訪問您的RaspberryPi沒有特殊的防火牆權限,因此RaspberryPi與lambda的連接總是“正常”
  • 比將RaspberryPi暴露給互聯網更安全,因為沒有暴露的惡意程序攻擊端口

您可以嘗試使用AWS IoT:

Echo <-> Alexa Service <-> Lambda <-> IoT <-> RaspberryPi

我雖然將這個用於我的Alexa RasberryPi項目,但放棄了這個想法,因為AWS IoT不提供永久免費套餐。 但免費等級不再是一個問題,因為亞馬遜現在提供Alexa AWS促銷信用。 https://developer.amazon.com/alexa-skills-kit/alexa-aws-credits

一種可能性是在rPi上安裝node-red。 Node-red有插件( https://flows.nodered.org/node/node-red-contrib-alexa-local )來模擬飛利浦色調,讓Alexa直接與它對話。 這是一個即時回應。 缺點是它只適用於3個命令: onoffset to x % 適用於控制燈光,陰影和空調的軟件/設備。

不久前在這個論壇上得到了答復,我害怕告訴你情況沒有改變,因為:

Alexa基於雲,需要訪問互聯網/亞馬遜服務器才能運行,因此您無法僅在內部網中使用它而無需外部訪問。

我見過幾種解決方法。

第一種方法是我使用過的方法:我設置If This Then That(IFTTT)來偵聽來自Alexa的特定短語,然后通過Telegram安全聊天/消息服務傳輸命令,我在其中使用“聊天機器人”運行我的覆盆子PI閱讀並處理這些消息。

我最近看到的第二種方法是使用IFTTT向谷歌電子表格中添加行,樹莓派可以監視和操作。

我對這兩種方法的性能/延遲都不是特別滿意,但如果我使用類似的方法編寫自定義的Alexa服務,它至少可以消除IFTTT延遲。

您可以使用代理來實現此目的。 BST有一個工具,我目前使用那個http://docs.bespoken.tools/en/latest/commands/proxy/

因此,您可以使用本地計算機而不是使用Lambda

基本上它變成了Echo -> Alexa Service -> Local Machine

將npm bst安裝到本地計算機https://www.npmjs.com/package/bespoken-tools

npm install bespoken-tools --save

轉到項目index.js文件夾並運行proxy命令

bst proxy lambda index.js

這將為您提供以下網址: https://proxy.bespoken.tools?node-id=xxx-xxx-xxx-xxx-xxxxxxxxhttps://proxy.bespoken.tools?node-id=xxx-xxx-xxx-xxx-xxxxxxxx xxx-xxx-xxx-xxx https://proxy.bespoken.tools?node-id=xxx-xxx-xxx-xxx-xxxxxxxx

現在轉到developer.amazon上的alexa技能,然后單擊以配置您的技能。

選擇您的服務端點為https,然后輸入BST打印出的URL

在此輸入圖像描述

然后單擊“保存”,然后將本地計算機作為最終結束點。

只需使用https://ngrok.com/等服務打開到您的rPi的SSH隧道,然后將其作為您的端點或lambda進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM