Размещение пользовательских навыков для Alexa путем внедрения веб-службы

Я работаю над разработкой веб-службы, которая используется для обработки запросов, отправленных Alexa, и отвечаю конкретным ответом в платформе .net. Тело запроса, отправленное Alexa вашей службе в формате JSON, как показано ниже:

{
  "version": "string",
  "session": {
    "new": true,
    "sessionId": "string",
    "application": {
      "applicationId": "string"
    },
    "attributes": {
      "string": {}
    },
    "user": {
      "userId": "string",
      "accessToken": "string"
    }
  },
  "context": {
    "System": {
      "application": {
        "applicationId": "string"
      },
      "user": {
        "userId": "string",
        "accessToken": "string"
      },
      "device": {
        "supportedInterfaces": {
          "AudioPlayer": {}
        }
      }
    },
    "AudioPlayer": {
      "token": "string",
      "offsetInMilliseconds": 0,
      "playerActivity": "string"
    }
  },
  "request": {}
}

и Синтаксис тела ответа в формате Json ниже:

{
  "version": "string",
  "sessionAttributes": {
    "string": object
  },
  "response": {
    "outputSpeech": {
      "type": "string",
      "text": "string",
      "ssml": "string"
    },
    "card": {
      "type": "string",
      "title": "string",
      "content": "string",
      "text": "string",
      "image": {
        "smallImageUrl": "string",
        "largeImageUrl": "string"
      }
    },
    "reprompt": {
      "outputSpeech": {
        "type": "string",
        "text": "string",
        "ssml": "string"
      }
    },
    "directives": [
      {
        "type": "string",
        "playBehavior": "string",
        "audioItem": {
          "stream": {
            "token": "string",
            "url": "string",
            "offsetInMilliseconds": 0
          }
        }
      }
    ],
    "shouldEndSession": boolean
  }
}

Я исследовал на форуме разработчиков Amazon Размещение пользовательского навыка в качестве веб-службы, Обработка запросов, отправленных Alexa, но я не могу этого добиться, и я не использую функцию Lambda i хочу создать индивидуальный навык, и я не нахожусь в северной части США.

Я получил Lib. из github здесь и используется в моей веб-службе, но не может синхронизироваться с этой библиотекой, кто-нибудь здесь, чтобы дайте мне направление, как я могу это сделать или как я могу начать, заранее спасибо.


person Sanjeev Sangral    schedule 22.09.2016    source источник


Ответы (2)


Я только что опубликовал проект, в котором используется тот же пакет AlexaSkillsKit.NET, о котором вы упомянули. Цель состоит в том, чтобы помочь каждому создать Alexa Custom Skills с помощью .NET + Visual Studio, которые можно легко развернуть в Azure.

https://github.com/tamhinsf/Azure4Alexa

Существует образец реализации навыка, который вы можете использовать в качестве шаблона для своего собственного пользовательского навыка. Он использует httpClient и обычные шаблоны async.

Просто скачайте и запустите Visual Studio, чтобы начать!

person Tam Huynh    schedule 23.09.2016
comment
Привет @Tam! Спасибо за ответ. У меня есть вопрос, могу ли я развернуть на собственном удаленном сервере IIS вместо Azure, если да, то какой файл мне нужно установить в качестве файла / страницы запуска, спасибо. - person Sanjeev Sangral; 23.09.2016
comment
Привет, я реализовал этот проект как веб-API, поэтому здесь нет начальной страницы, настроенной, как в проекте MVC. В корне проекта есть статическая страница с именем default.htm, если вы хотите указать пользователям на что-то, чтобы познакомить вас с вашими индивидуальными навыками. - person Tam Huynh; 27.09.2016
comment
Привет, @Tam, спасибо за ответ. Я выполнил шаги ваших инструкций на github. com / tamhinsf / Azure4Alexa / blob / master / README.md, но получил сообщение об ошибке: произошла ошибка при вызове удаленной конечной точки, которая вернула HTTP 405: метод не разрешен, не дает понять, почему это произошло. - person Sanjeev Sangral; 28.09.2016
comment
Что происходит, когда вы переходите на yourserver / default.htm - статическая HTML-страница Azure4Alexa загружается нормально? - person Tam Huynh; 29.09.2016
comment
да, он загружен default.htm, но когда я пытаюсь ввести высказывание в тесте, есть ли в трубке хороший сервис, тогда я получил ответ: - Произошла ошибка при вызове удаленной конечной точки, которая вернула HTTP 405: метод запрещен. URL-адрес конечной точки: myservername.com/alexa на данный момент я действительно не знаю, почему это произошло, пожалуйста помогите мне или поделитесь своим идентификатором, где я могу сказать вам весь процесс спасибо. - person Sanjeev Sangral; 29.09.2016
comment
@SanjeevSangral, ваша конечная точка должна быть myservername.com/api/alexa, если вы не изменили конфигурацию проекта по умолчанию, которую я создал. Не могли бы вы изменить этот параметр на панели управления Amazon / Alexa и посмотреть, что произойдет? - person Tam Huynh; 29.09.2016
comment
Я внес это изменение, но ошибка изменилась. Произошла ошибка при вызове удаленной конечной точки, которая вернула HTTP 404: не найдено. - person Sanjeev Sangral; 29.09.2016
comment
Если я изменю путь myservername.com/api/alexa, тогда я не смогу запустить страницу default.htm, но в myservername.com/alexa смогу, так что мне делать? - person Sanjeev Sangral; 29.09.2016
comment
Могу ли я убедить вас бесплатно зарегистрироваться в Azure и развернуть там проект? :) К сожалению, я не вижу вашу конфигурацию IIS, но вам не следует настраивать какую-либо стартовую страницу, так как это проект WebAPI. Я думаю, у вас может быть сопоставление, из-за которого / api / alexa перестает работать. - person Tam Huynh; 29.09.2016
comment
теперь myservername.com/api/alexa/default.htm работает нормально, но ответ, который вернул HTTP 405: Метод запрещен - person Sanjeev Sangral; 30.09.2016
comment
@SanjeevSangral - Могу я предложить вам начать с чистого развертывания? Как я уже сказал, это проект веб-API, и здесь нет документа по умолчанию. Похоже, в вашей конфигурации IIS введено сопоставление, которое отбрасывает маршрут / контроллер API. В моем исходном продукте default.htm обслуживается из корневого каталога, а конечная точка API Alexa находится в / api / alexa. - person Tam Huynh; 04.10.2016
comment
Я выполнил следующие шаги: - person Sanjeev Sangral; 05.10.2016
comment
1 - скачайте код с github и распакуйте в определенное место. 2- Импортируйте проект или вы можете сказать, что откройте Sol в Visual Studio 2015. 3 - Обновите значение AppId до идентификатора приложения в Azure4Alexa ›Alexa› AlexaConstants.cs. 4 - Скомпилируйте и перестройте проект, запустите в chrome и страницу default.htm. - person Sanjeev Sangral; 05.10.2016
comment
5 - Теперь развернул проект на сервере с необходимыми учетными данными, такими как имя сайта, сервер, имя пользователя и т. Д., И после запуска развернутой страницы default.htm. 6. Скопируйте URL-адрес без default.htm, и URL-адрес будет выглядеть как alexa.myservername.com/api/alexa войдите в местоположение конечной точки в наборе навыков Alexa. - person Sanjeev Sangral; 05.10.2016
comment
7 - Обновите схему намерения и образцы высказываний так же, как они находятся в пути к файлу: Azure4Alexa - ›Alexa -› Регистрация. 8 - введите высказывание и нажмите кнопку «Спросить Azure». - person Sanjeev Sangral; 05.10.2016
comment
9 - получить запрос и ответ Json: - Произошла ошибка при вызове удаленной конечной точки, которая вернула HTTP 405: метод запрещен. Это весь процесс, за которым я следил, сейчас я полностью застрял в этом моменте. - person Sanjeev Sangral; 05.10.2016
comment
5 - Теперь развернул проект на сервере с необходимыми учетными данными, такими как имя сайта, сервер, имя пользователя и т. Д., И после запуска развернутой страницы default.htm. - Каков URL-адрес файла default.htm после развертывания? - person Tam Huynh; 05.10.2016

Прошло некоторое время, когда был написан последний ответ, плюс пример, который реализует образец Azure4Alexa, использует устаревшие базовые классы, в тех случаях, когда вы, возможно, захотите использовать «контекстную» часть своего запроса Alexa, вы захотите реализовать SpeechletBase, ISpeechWithContext в своем последний класс Speechlet.

Честно говоря, я знаю, что README.md на AlexaSkillsKit.net очень плотный, но если вы дадите ему некоторое время и пройдетесь по проекту AlexaSkillsKit.Sample и пройдете через определения реализованных базовых классов, вы полностью поймете обработку запроса.

Позвольте мне также воспользоваться этой возможностью, чтобы рассказать о том, как я понимаю классы и их структуру:

SampleSessionSpeechlet Класс - это просто последний класс, который регистрирует ваш запрос и реализует ISpecchletWithContext (который требует реализации OnSessionStarted(), OnLaunch(), OnIntent() & OnSessionEnded()), эти четыре функции в основном являются обработчиками всех запросов, которые Alexa может отправлять вашей веб-службе.

SpecchletBase Класс - в основном оборачивается вокруг класса SpeechletService, который фактически выполняет всю тяжелую работу.

SpeechletService Класс - вы в основном вызываете его GetResponseAsync() (который оборачивается SpeechletSerive GetResponse()), который принимает переданный запрос Alexa, анализирует его в симпатичный маленький класс данных с именем SpeechletRequestEnvelope, выполняет управление сеансом, передает SpeechletRequestEnvelope вашей реализации OnSessionStarted(), OnLaunch(), OnIntent() или OnSessionEnded(), получает ваши возвращенные объекты и возвращает ваш ответ Alexa в виде класса, называемого SpeechletResponseEnvelope

Надеюсь, что это поможет с некоторой быстрой реализацией, но я настоятельно рекомендую пройтись по каталогу Lib и понять, как все работает. А кто знает? Способствовать!

person Yashash Gaurav    schedule 03.12.2018