Как соединить watson assisstant v2 с набором навыков Amazon в Aws Lambda? - PullRequest
1 голос
/ 09 мая 2019

Здравствуйте! Я хочу подключить своего помощника Уотсона к устройству alexa, для этого мне понадобится набор навыков для разработки Amazon и лямбда-амба AWS.Но я не могу подключиться к Уотсону, потому что у меня возникли проблемы с моими обещаниями, и я не вижу журналы своего кода в консоли разработчика Amazon.И мой помощник работает над приложением nodeJs.

Есть заголовки моего watson:

const assistant = new AssistantV2({
  version: '2019-02-28',
  iam_apikey: 'apiSecretKey',
  url: 'https://gateway-lon.watsonplatform.net/assistant/api'
});

const assistant_id = "assistantIDSecret" ; 

Есть несколько кодов, которые я пробовал:

const MyNameIsIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'SearchIntent';
  },
   async handle(handlerInput) {


      assistant.createSession({
        assistant_id: assistant_id
      })
          .then(res => {
              session_id = res.session_id;
          })
          .catch(err => {
              console.log(err);
          });
        assistant.message({
            assistant_id: assistant_id,
            session_id: session_id,
            input: {
                'message_type': 'text',
                'text': "hello"
            }
        })
            .then(res => {
                console.log(JSON.stringify(res, null, 2));
                 speechText = res.output.generic.response.text;
            })
            .catch(err => {
              speechText = err;
      });


    }, function(err){
      speechText = "Problem with Api call";
    });

    return handlerInput.responseBuilder
      .speak(speechText)
      .getResponse();
  },
};

Я пыталсячтобы заменить, поймать в ожидании:

 try{

      let res = await assistant.createSession({
        assistant_id: assistant_id
      });

      session_id = res.session_id;

      let message = await assistant.message({
        assistant_id: assistant_id,
        session_id: session_id,
        input: {
          'message_type': 'text',
          'text': "hello"
        }

      });
      speechText = message.output.generic.response.text;

    }catch(err){
      speechText = err;
    }

Результаты speechText должны дать мне «Добрый день», это ответ, который приходит от Watson.но теперь Алекса говорит: «Извините, я не могупонять команду. Пожалуйста, скажите еще раз. "

У вас есть другие способы попробовать это?спасибо!

1 Ответ

0 голосов
/ 11 мая 2019

Похоже, вам удалось вызвать Watson Assistant, и если ответ, настроенный в вашем диалоговом узле, был «Добрый день вам» - то, что вы получили, значит, это соединение работает. Однако, если я правильно помню, ответ, который ожидает Alexa, является объектом JSON, а не строкой. Таким образом, вам нужно отформатировать ответ, чтобы удовлетворить потребности Алекса.

Беглый взгляд на этот сайт: https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html
указывает, что ниже приведен хороший пример требуемого отклика json пакета.

{
  "version": "string",
  "sessionAttributes": {
      "key": "value"
  },
  "response": {
      "outputSpeech": {
      "type": "PlainText",
      "text": "Plain text string to speak",
      "playBehavior": "REPLACE_ENQUEUED"      
  },
  "reprompt": {
      "outputSpeech": {
         "type": "PlainText",
         "text": "Plain text string to speak",
         "playBehavior": "REPLACE_ENQUEUED"             
      }
  },
  "shouldEndSession": true
 }
}

Примечание. Я не могу подтвердить, поскольку у меня никогда не было умения Alexa Skill, запущенного в производство (только собрал их как демо в среде разработки и поделился с ограниченным количеством). Но меня проинформировали, что Amazon недовольны тем, что умеют снимать работу с Watson. Который является позором.

...