8

我創建了一個簡單的Lambda函數來調用網頁,當我從函數頁面進行測試時,此工作正常,但嘗試創建一個技能來調用這個函數,我最終得到一個「遠程端點不能被調用,或者它返回的響應是無效的。」錯誤。Alexa技能ARN - 無法調用遠程端點,或者返回的響應無效

lambda函數

var http = require('http'); 

exports.handler = function(event, context) { 
    console.log('start request to ' + event.url) 
    http.get(event.url, function(res) { 
    console.log("Got response: " + res.statusCode); 
    context.succeed(); 
    }).on('error', function(e) { 
    console.log("Got error: " + e.message); 
    context.done(null, 'FAILURE'); 
    }); 

    console.log('end request to ' + event.url); 
} 

測試事件的代碼如下所示:

{ 
    "url": "http://mywebsite.co.uk" 
} 

和我添加了一個觸發了 「Alexa的技能套裝」。

該函數的ARN作爲顯示:

arn:aws:lambda:us-east-1:052516835015:function:CustomFunction

Alexa的技能(開發者門戶網站)

我然後創建一個技能用一個簡單的意圖:

{ 
"intents": [ 
    { 
"intent": "CustomFunction" 
    } 
] 
} 

並創建了一個話語爲:

CustomFunction execute my custom function 

在我的技能的配置部分中,我選擇了「AWS Lambda ARN(亞馬遜資源名稱)」選項,並將ARN輸入到北美地區的框中。

在測試 - >服務模擬器部分,我已經添加了「執行我的自定義函數」爲文本,這將改變LAMBDA請求顯示:

{ 
    "session": { 
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX", 
"application": { 
    "applicationId": "amzn1.ask.skill.XXXXXXXXX" 
}, 
"attributes": {}, 
"user": { 
    "userId": "amzn1.ask.account.XXXXXXXXX" 
}, 
"new": true 
    }, 
    "request": { 
"type": "IntentRequest", 
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX", 
"locale": "en-GB", 
"timestamp": "2016-11-27T22:54:07Z", 
"intent": { 
    "name": "RunWOL", 
    "slots": {} 
} 
    }, 
    "version": "1.0" 
} 

但是當我運行測試,我得到出現以下錯誤:

The remote endpoint could not be called, or the response it returned was invalid.

有沒有人有任何想法,爲什麼技能無法連接到該功能?

謝謝

+0

如果你看一下日誌中的CloudWatch您拉姆達 - 它被調用 – Tom

回答

0

此錯誤信息非常廣泛,可能意味着很多不同的問題。我得到這個錯誤,在我的情況下,這是一個超時問題。您要ping的網站需要多長時間才能做出迴應?超時似乎沒有正確記錄,請參閱我的原始問題在這裏:Troubleshooting Amazon's Alexa Skill Kit (ASK) Lambda interaction

4

內置到亞馬遜Alexa開發人員控制檯中的服務模擬器有已知問題。嘗試複製模擬器生成的JSON並將其粘貼到您的lambda函數的測試事件中。要訪問lambda的測試事件,首先找到藍色的「測試」按鈕。在該按鈕旁邊選擇(操作下拉菜單) - >(配置測試事件) - >將提供的JSON粘貼到代碼區 - >(保存並測試)。 Lambda內置的測試功能比Alexa的更可靠。

如果這不能解決問題lambda的測試事件返回完整的stackTrace和錯誤代碼。當每個錯誤都不是「遠程端點無法被調用,或者它返回的響應無效時,它變得更加容易。「

{ 
    "session": { 
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX", 
"application": { 
    "applicationId": "amzn1.ask.skill.XXXXXXXXX" 
}, 
"attributes": {}, 
"user": { 
    "userId": "amzn1.ask.account.XXXXXXXXX" 
}, 
"new": true 
    }, 
    "request": { 
"type": "IntentRequest", 
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX", 
"locale": "en-GB", 
"timestamp": "2016-11-27T22:54:07Z", 
"intent": { 
    "name": "RunWOL", 
    "slots": {} 
} 
    }, 
    "version": "1.0" 
} 
+0

這對我的作品或者你可以不斷嘗試,直到你成功! –

+1

技能的網頁 - >測試 - >服務模擬器 - >文本選項卡 - >恩特紅色話語並點擊「詢問技能名稱」按鈕,並在「服務請求」textarea中生成包含我的鏈接帳戶訪問令牌的請求。但是在「服務響應」中,我得到了「遠程端點無法被調用,或者它返回的響應無效」。 後來我從「服務請求」複製JSON和切換到JSON標籤,粘貼複製的JSON在「JSON請求」文本區域,然後點擊「向技能名稱」和我在「服務響應」得到了預期的JSON。 這很奇怪,但現在我可以接受。 –

3

在上傳.zip,不相反夾壓縮成.zip文件。

,進入文件夾,選擇package.jsonindex.jsnode modules &然後對其進行壓縮,然後上傳.zip