2017-06-12 11 views
0

我目前正在使用PHP在Google上編寫Actions上的集成。我用我的測試端點生成了一個action.json文件作爲履行。我使用ngrok公開公開本地開發機器。模擬器不斷回覆端點不能被調用,而我在日誌中看到POST請求

不幸的是,模擬器一直堅持應用程序沒有響應。在訪問日誌和ngrok Inspector中,我確實看到有一個請求進入,而且它已被JSON回覆整齊地回答。

在純粹絕望的行爲中,我甚至上傳了一個JSON響應,直接從Fulfillment documentation page獲取到服務器並將其設置爲履行URL。結果是相同的,相同的錯誤。

我沒有看到從Google上的操作獲取更詳細的錯誤消息的方法,解釋了爲什麼它不起作用。

我action.json:

{ 
    "actions": [ 
     { 
      "name": "MAIN", 
      "intent": { 
       "name": "actions.intent.MAIN" 
      }, 
      "fulfillment": { 
       "conversationName": "development4" 
      } 
     }, 
     { 
      "name": "TEXT", 
      "intent": { 
       "name": "actions.intent.TEXT" 
      }, 
      "fulfillment": { 
       "conversationName": "development4" 
      } 
     } 
    ], 
    "conversations": { 
     "development4": { 
      "name": "development4", 
      "url": "https:\/\/02c085c0.ngrok.io\/actionsongoogle\/process\/development4" 
     } 
    } 
} 

我的答覆:JSON:

{ 
    "expectUserResponse": false, 
    "expectedInputs": [{ 
     "inputPrompt": { 
      "richInitialPrompt": { 
       "items": [{ 
        "simpleResponse": { 
         "textToSpeech": "hello" 
        } 
       }] 
      } 
     }, 
     "possibleIntents": [{ 
      "intent": ["actions.intent.TEXT"] 
     }] 
    }] 
} 

在模擬器輸出的結果然後顯示:

{ 
    "response": "my test app isn’t responding right now. Try again soon.\n", 
    "audioResponse": "//NExAARq...", 
    "debugInfo": { 
     "sharedDebugInfo": [ 
      { 
       "name": "ExecutionResponse", 
       "debugInfo": "Failed to call your endpoint." 
      } 
     ] 
    }, 
    "visualResponse": {} 
} 
+0

我只注意到它使用的API版本爲V1,即使文檔狀態:'如果你創建了一個項目2017年5月17日或之後,您的助手應用默認會使用v2 API。「將''fulfillment_api_version「:2'屬性添加到我的對話中不幸沒有幫助。 – matueranet

回答

0

兩件事情進行調查:

  1. 檢查發送答覆需要多長時間。代理商需要在約5秒內發回應答,否則助理將超時併發出「未回覆」消息。

  2. 檢查發出的回覆代碼是什麼。如果你認爲你發回的東西,但是你的服務器在HTTP200響應代碼被髮送回正文之前實際崩潰了,那麼該助手從不會得到響應。我也看到了人們認爲他們在發送回覆的地方 - 但實際上根本沒有迴應。

使用curl或wget測試到您的ngrok URL(所以它會進行完整的往返)可能可以幫助診斷這兩者。

+1

感謝您的回覆。根據ngrok,請求的持續時間約爲50ms,所以應該足夠快。到目前爲止,代碼非常簡單。我用HttpRequest(一個firefox插件)測試了一個完整的往返,並且那個報告了600ms(但是那有Firefox開銷),並且顯示了200 OK響應。 – matueranet

0

該問題出現在返回的JSON中。我已經設置了nodejs SDK,並以與PHP cod相同的方式回覆(簡單的問候)。由NodeJS SDK生成的響應非常不同。顯然,我之前從文檔中使用的示例也是無效的。

我建議任何人使用網絡掛接首先生成通過德SDK的NodeJS所需的響應構建自己的實現,該手冊中的引用並非總是(至少對我來說)清晰。

響應通過的NodeJS SDK:

{ 
    "expectUserResponse": false, 
    "finalResponse": { 
     "speechResponse": { 
      "textToSpeech": "hello" 
     } 
    } 
} 

在SDK實現:

var express = require('express') 
var bodyParser = require('body-parser') 

var app = express() 

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
app.use(bodyParser.json()) 

app.use(function (req, res) { 
     let ActionsSdkApp = require('actions-on-google').ActionsSdkApp; 
     const actionsApp = new ActionsSdkApp({request: req, response: res}); 
     //const inputPrompt = actionsApp.buildInputPrompt(false, 'hello') 
    actionsApp.tell('hello'); 

}) 

app.listen(80); 
相關問題