Вопрос: всегда ли Google Actions запускает сообщение веб-перехватчика при каждом вводе пользователя, и мне просто нужно работать с логикой, чтобы каждый раз анализировать json и реагировать только в том случае, если мой интересующий параметр найден? Или есть способ контролировать публикацию веб-перехватчика, созданную Google Actions API, чтобы она была сделана только тогда, когда действие полностью заполнено, содержащее значение для интересующего параметра?
#Подробности: у меня есть приложение nodejs, развернутое на Heroku: https://github.com/quique123/myjsonparser/blob/master/app.js
Я использую его как перехватчик для примера Google Actions API (Number Genie). В Number Genie пользователь начинает игру с "Talk to Number Genie". Джинн отвечает, что я думаю о числе ... угадай. Пользователь отвечает числом, а затем (и только тогда) запускается логика для сравнения предположения с ответом.
Но у меня есть вызов api для каждого почтового запроса из дома Google. Другими словами, публикация веб-перехватчика создается каждый раз, когда пользователь взаимодействует с API беседы. Это можно увидеть здесь, где тело не содержит параметров ввода пользователя, а Heroku отвечает на «поговорить с джинном числа»:
2017-04-30T18:59:19.480900+00:00 heroku[router]: at=info method=POST path="/API/switches/sw1?password=123456" host=myjsonparser.herokuapp.com request_id=64d51b1c-3253-4a64-b7f5-a29a7750945b fwd="54.224.155.160" dyno=web.1 connect=1ms service=35ms status=200 bytes=254 protocol=https
2017-04-30T18:59:19.473973+00:00 app[web.1]: headers: {"host":"myjsonparser.herokuapp.com","connection":"close","accept":"*/*","content-type":"application/json; charset=UTF-8","cache-control":"no-cache","pragma":"no-cache","user-agent":"Java/1.8.0_112","x-request-id":"64d51b1c-3253-4a64-b7f5-a29a7750945b","x-forwarded-for":"54.224.155.160","x-forwarded-proto":"https","x-forwarded-port":"443","via":"1.1 vegur","connect-time":"1","x-request-start":"1493578759443","total-route-time":"0","content-length":"575"}
2017-04-30T18:59:19.474002+00:00 app[web.1]: body: {"id":"14797289-b0b8-492a-b030-bf9f05c7ea17","timestamp":"2017-04-30T18:59:19.413Z","lang":"en","result":{"source":"agent","resolvedQuery":"talk to number genie","speech":"","action":"generate_answer","actionIncomplete":false,"parameters":{},"contexts":[],"metadata":{"intentId":"688b0da5-547e-4c7a-8adc-189844834bcc","webhookUsed":"true","webhookForSlotFillingUsed":"false","intentName":"start_game"},"fulfillment":{"speech":"","messages":[{"type":0,"speech":""}]},"score":0.61},"status":{"code":200,"errorType":"success"},"sessionId":"ff2e0c97-552b-40d3-8f06-32e612476897"}
2017-04-30T18:59:19.477116+00:00 app[web.1]: postSwitch {"id":"sw1","state":"off","name":"Koko's Lamp"}
И когда я тестирую его с помощью числа в Google Actions API, вы можете видеть в ответе Heroku на «44», что включен check_guess:
2017-04-30T19:00:31.901297+00:00 app[web.1]: headers: {"host":"myjsonparser.herokuapp.com","connection":"close","accept":"*/*","content-type":"application/json; charset=UTF-8","cache-control":"no-cache","pragma":"no-cache","user-agent":"Java/1.8.0_112","x-request-id":"5a7a2c31-9ce5-4b02-9bac-bcef55ad6818","x-forwarded-for":"54.224.155.160","x-forwarded-proto":"https","x-forwarded-port":"443","via":"1.1 vegur","connect-time":"1","x-request-start":"1493578831899","total-route-time":"0","content-length":"573"}
2017-04-30T19:00:31.901347+00:00 app[web.1]: body: {"id":"5478dfb5-54f3-451d-b975-4f984d1ce3cb","timestamp":"2017-04-30T19:00:31.858Z","lang":"en","result":{"source":"agent","resolvedQuery":"44","speech":"","action":"check_guess","actionIncomplete":false,"parameters":{"check_guess":"44"},"contexts":[],"metadata":{"intentId":"c863e1e2-c850-45d8-9b96-b57e0b1ee77e","webhookUsed":"true","webhookForSlotFillingUsed":"false","intentName":"provide_guess"},"fulfillment":{"speech":"","messages":[{"type":0,"speech":""}]},"score":1},"status":{"code":200,"errorType":"success"},"sessionId":"ff2e0c97-552b-40d3-8f06-32e612476897"}
2017-04-30T19:00:31.903553+00:00 app[web.1]: postSwitch {"id":"sw1","state":"on","name":"Koko's Lamp"}
2017-04-30T19:00:31.907017+00:00 heroku[router]: at=info method=POST path="/API/switches/sw1?password=123456" host=myjsonparser.herokuapp.com request_id=5a7a2c31-9ce5-4b02-9bac-bcef55ad6818 fwd="54.224.155.160" dyno=web.1 connect=1ms service=5ms status=200 bytes=253 protocol=https
Проблема в том, что postSwitch {} происходит в обоих случаях.
Всегда ли так Google Actions будет работать, и мне просто нужно работать с логикой, чтобы каждый раз анализировать json и реагировать только в случае обнаружения check_guess? Или есть способ контролировать публикацию веб-перехватчика, созданную Google Actions API, чтобы она была сделана только тогда, когда действие полностью заполнено, содержащее значение для параметра check_guess?