Amazon Alexa Device Discovery для API умного дома с ошибкой лямбда

Я установил навык Alexa Smart Home Skill, все настройки выполнены, oauth2 обработано, и навык включен на моем устройстве Amazon Echo. Лямбда-функция настраивается и связана с навыком. Когда я «Обнаруживаю устройства», я вижу, что полезная нагрузка попала в мою лямбда-функцию в журнале. Я буквально возвращаю через метод context.succeed () следующий JSON с тестовым устройством. Однако Echo сообщает мне, что не может найти никаких устройств.

{
  "header": {
    "messageId": "42e0bf9c-18e2-424f-bb11-f8a12df1a79e",
    "name": "DiscoverAppliancesResponse",
    "namespace": "Alexa.ConnectedHome.Discovery",
    "payloadVersion": "2"
  },
  "payload": {
    "discoveredAppliances": [
      {
        "actions": [
          "incrementPercentage",
          "decrementPercentage",
          "setPercentage",
          "turnOn",
          "turnOff"
        ],
        "applianceId": "0d6884ab-030e-8ff4-ffffaa15c06e0453",
        "friendlyDescription": "Study Light connected to Loxone Kit",
        "friendlyName": "Study Light",
        "isReachable": true,
        "manufacturerName": "Loxone",
        "modelName": "Spot"
      }
    ]
  }
}

Правильно ли выглядит приведенная выше полезная нагрузка?


person daviemanchester    schedule 03.06.2016    source источник
comment
Вам удалось заставить его работать? Я столкнулся с той же проблемой. Я уже пробовал сгенерировать истинный случайный идентификатор сообщения и на всякий случай изменить другие значения, но ничего не вышло :(   -  person jotadepicas    schedule 21.11.2016
comment
Я только что заставил мин работать! В моем случае значения name и namespace перепутались. К сожалению, я должен сказать, что теперь мой ответ выглядит так же, как ваш ... Я думаю, что отсутствие хорошего инструмента отладки на стороне Alexa затрудняет поиск этих мелких ошибок ...   -  person jotadepicas    schedule 21.11.2016


Ответы (5)


Согласно https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/smart-home-skill-api-reference#discovery-messages, атрибут version является обязательным. В вашем ответе отсутствует этот атрибут.

По моему (очень короткому) опыту с этим, даже самая маленькая ошибка в ответе приведет к тихой ошибке, подобной той, которую вы испытываете.

person jotadepicas    schedule 20.11.2016
comment
Версия точно отсутствует. - person Helmar; 03.01.2017
comment
Domotics, IoT и Batman, безусловно, также актуальны в новом IoT.SE (iot.stackexchange.com) - person Helmar; 03.01.2017

У меня такая же проблема. Если вы создаете обнаружение для «Развлекательного устройства», убедитесь, что вы заключили вывод в ключ «событие» для context.succeed

var payload = {
    endpoints:
        [
            {
                "endpointId": "My-id",
                "manufacturerName": "Manufacturer",
                "friendlyName": "Living room TV",
                "description": "65in LED TV from Demo AV Company",
                "displayCategories": [  ],
                "cookie": {
                    "data": "e.g. ip address",
                },
                "capabilities":
                    [

                        {
                            "interface": "Alexa.Speaker",
                            "version": "1.0",
                            "type": "AlexaInterface"
                        },

                    ]
            }
        ]
};
var header = request.directive.header;
header.name = "Discover.Response";
context.succeed({ event: {
    header: header, payload: payload
} });

Хотя в примере кода это никогда не упоминается, а приводится неверный пример (https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/steps-to-create-a-smart-home-skill). Однако предоставленное тело ответа включает ключ «событие».

person Laurynas    schedule 22.07.2017
comment
Это все еще актуально, поставил меня в тупик примерно на 2 часа, спасибо! - person Trey; 02.10.2018

Воссоздание лямбда-функции помогло мне решить проблему. Я также установил кнопку проверки «Включить триггер» при создании, хотя я не уверен, что это имеет значение. После этого мое устройство, предоставленное навыком, было успешно найдено.

person rightaway717    schedule 19.07.2016

Изменить: ответ был неправильным. Только полезная информация была этой

Этот синтаксис context.fail фактически устарел. Найдите свойства объекта контекста Lambda, теперь он должен больше походить на «callback (null, resultObj)».

person master565    schedule 20.06.2016
comment
у вас есть ссылки на доказательства? Как я вижу, есть много примеров, когда результат возвращается как параметр функции context.succeed. Более того, в Smart Home API нет метода обратного вызова, переданного обработчику намерений в навыке. - person rightaway717; 20.07.2016
comment
Нет, мой ответ на самом деле неверен. Я что-то неправильно понял. Все, что вам нужно, это функция обратного вызова. Я с тех пор редактировал это - person master565; 20.07.2016

Включили ли вы оператор return в свою функцию?

    return {
        "header": header,
        "payload": payload
    }

Его не было в примере, и после его добавления я смог «обнаружить» свое устройство.

person XRAY Enabler    schedule 23.09.2016
comment
Поскольку вопрос относится к JSON, это не применимо, поскольку там есть и заголовок, и полезная нагрузка. - person Helmar; 03.01.2017