AWS Amplify MissingRequiredParameter userId error - PullRequest
0 голосов
/ 11 января 2019

Я следую инструкции по началу работы с Взаимодействия . Когда я вызываю метод send для взаимодействий, я получаю следующую ошибку:

(узел: 27796) UnhandledPromiseRejectionWarning: MissingRequiredParameter: отсутствует параметр userId в параметрах

Похоже, что Interactions ожидает параметр userId , который в @aws-amplify/interactions/lib/Providers/AWSLexProvider.js должен быть извлечен из credentials.identityId. Однако, когда я регистрирую credentials, это тип SharedIniFileCredentials, который не имеет свойства identityId согласно документации .

С чтение документов , identityId должен быть пользователем Cognito. AWSLexProvider.js не пытается позвонить CognitoIdentityCredentials для получения учетных данных Cognito.

Следовательно, Я не уверен, откуда identityId должен прибыть из .

Мой код - пример с сайта Amplify:

import Amplify, { Interactions } from 'aws-amplify';
import aws_exports from './aws-exports';

Amplify.configure(aws_exports);

async function test() {
    let userInput = "I want to reserve a hotel for tonight";

    // Provide a bot name and user input
    const response = await Interactions.send("BookTrip", userInput);

    // Log chatbot response
    console.log (response['message']);
}

test();

Так чего мне здесь не хватает?

1 Ответ

0 голосов
/ 14 января 2019

Я раньше не использовал AWS Amplify, поэтому этот ответ может и не быть причиной, но я уже много раз использовал Amazon Lex. Поле UserId, которое это ищет, может быть параметром UserId для запроса Lex PostText / PostContent (см. Код ниже)

Из PostText документации:

var params = {
  botAlias: 'STRING_VALUE', /* required */
  botName: 'STRING_VALUE', /* required */
  inputText: 'STRING_VALUE', /* required */
  userId: 'STRING_VALUE', /* required - THIS IS MISSING FROM YOUR EXAMPLE */
  requestAttributes: {
    '<String>': 'STRING_VALUE',
    /* '<String>': ... */
  },
  sessionAttributes: {
    '<String>': 'STRING_VALUE',
    /* '<String>': ... */
  }
};
lexruntime.postText(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

и Документация PostContent:

var params = {
  botAlias: 'STRING_VALUE', /* required */
  botName: 'STRING_VALUE', /* required */
  contentType: 'STRING_VALUE', /* required */
  inputStream: new Buffer('...') || 'STRING_VALUE' || streamObject, /* required */
  userId: 'STRING_VALUE', /* required - THIS IS MISSING FROM YOUR EXAMPLE */
  accept: 'STRING_VALUE',
  requestAttributes: any /* This value will be JSON encoded on your behalf with JSON.stringify() */,
  sessionAttributes: any /* This value will be JSON encoded on your behalf with JSON.stringify() */
};
lexruntime.postContent(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Теперь, как я уже говорил ранее, я не использовал AWS Amplify раньше, поэтому, честно говоря, не уверен, но, надеюсь, это укажет вам правильное направление.

...