Почему ответы об ошибках notSupported обрабатываются по-разному в разных сценариях QUERY?

Этот вопрос был вызван нашим предыдущим вопросом о требованиях к проверке намерений QUERY, найденных здесь.

Хотя в настоящее время мы не можем реализовать запрос подробного состояния многих наших устройств, мы хотели бы должным образом реагировать на попытки запроса намерений QUERY. В частности: ответ с ошибкой notSupported кажется уместным. Для обычного пользовательского запроса, такого как "Горит ли рабочий стол?", это работает так, как мы и ожидали:

"Этот режим недоступен для настольной лампы".

Однако при попытке выполнения относительных операций, таких как «Приглушить свет на рабочем столе», тот же формат ответа приводит к следующему ответу Google Home:

"Обнаружена неизвестная ошибка настольной лампы".

В обоих сценариях возвращается один и тот же ответ json:

{ 

"requestId": "****************", 

"payload": { 

    "devices": { 
        "********": { 
            "errorCode": "notSupported" 
            } 
        } 
    } 
}

Мы проверили, подделав ответ на запрос с фактическим состоянием яркости, что намерение продолжает работать правильно после возврата QUERY; получение намерения EXECUTE для изменения яркости.

Мы не уверены, почему ошибка notSupported в этом случае обрабатывается иначе; возможно, мы неправильно понимаем, как должен быть отформатирован ответ об ошибке на этот тип ЗАПРОСА? Если да, то как мы можем отличить намерение QUERY, за которым следует намерение EXECUTE, от одиночного намерения QUERY? Возможно, есть что-то еще, что мы упустили?

Спасибо за чтение.


person Tobias van de Ven    schedule 15.11.2017    source источник


Ответы (2)


При подаче относительной команды, например «приглушить свет на столе», Google Assistant сначала должен знать текущую яркость. Для этого Ассистенту необходимо либо сначала запросить ваш сервер, либо использовать REPORT_STATE. для хранения данных непосредственно в HomeGraph.

Ответы преднамеренные. Если я спрашиваю, горит ли свет, устройство не может ответить на такой запрос.

Если я хочу изменить яркость, это режим, который может поддерживать ваш свет. Сказать иначе было бы некорректно. Однако поток выполнения завершается сбоем, поскольку он не может получить текущую яркость. Не зная, что это такое сейчас, он не может относительно изменить яркость и возвращает ошибку.

Сказать что-то вроде «установи мой свет на 10 процентов» — это абсолютное изменение.

person Nick Felker    schedule 15.11.2017
comment
Спасибо за комментарий. Однако мы понимаем это, и нас больше всего беспокоит тот факт, что Google сообщает о неизвестной ошибке во втором сценарии, несмотря на то, что мы (как разработчики) хорошо осведомлены о том, что это за ошибка; и хотим сообщить об этом нашим пользователям. Свет действительно поддерживает изменение яркости, но это относительно не поддерживается (из-за нашей неспособности правильно реагировать на команды QUERY). Возможно, вы знаете, как мы можем сообщить об этом Google Home, чтобы он мог различать их? - person Tobias van de Ven; 17.11.2017
comment
Одним из основных аспектов Умного дома является возможность отвечать на команды QUERY. Можете ли вы хранить состояние своих устройств в своем облаке, чтобы вы могли делать это без необходимости проходить весь путь до устройства? - person Nick Felker; 17.11.2017
comment
Мы согласны с тем, что желательно поддерживать запросы состояния устройства. Из-за отсутствия такого функционала в нашем облаке на данный момент и невозможности запроса с некоторых устройств из-за аппаратных ограничений, к сожалению, изначально мы решили обойтись без этой опции. Однако после переоценки ситуации мы решили осуществить это немедленно. Спасибо за совет. - person Tobias van de Ven; 20.11.2017

просто следуя этому - я понимаю логику в запросе - но сам запрос совершенно ванильный - откуда мы знаем, что это запрос, который должен вернуть: "яркость": 65

а не - "вкл": правда

person Madgeni    schedule 16.11.2017
comment
Я полагаю, что цель ЗАПРОСА состоит в том, чтобы всегда отвечать всеми состояниями, в которых находится устройство. Предполагается, что все состояния будут по крайней мере включать состояние, в котором находится запрос. на самом деле ищет (в данном случае: яркость). Таким образом, в вашем сценарии вы можете включить все следующее в свой ответ {онлайн: правда, вкл: правда, яркость: 65}. - person Tobias van de Ven; 17.11.2017
comment
ах, хорошо, я пропустил это в документации. Я обновлю свои ответы со всеми состояниями - сделал быстрое изменение, и оно работает. На самом деле очень аккуратно, лучше, чем Alexa - person Madgeni; 17.11.2017