Использование Lex Runtime для публикации контента в Node JS

Я пытаюсь разработать приложение, которое будет принимать аудиофайл и отправлять его в Amazon Lex с помощью aws-sdk, в частности lexruntime для postContent.

В настоящее время у меня есть аудиофайлы в Интернете, которые я загружаю локально, а затем пытаюсь указать имя этого аудиофайла в моих параметрах postContent. Однако lex возвращает пустую транскрипцию и явное намерение, что означает, что он не смог правильно обработать мой аудиофайл. Вот как я загружаю / отправляю в lex:

var file = fs.createWriteStream("file.wav");
var request = https.get(url, function(response) {
  response.pipe(file);
});

var params = {
    botAlias: 'prod', /* required */
    botName: 'OrderFlowers', /* required */
    //inputText: `${command}`, /* required */
    contentType: 'audio/x-l16; sample-rate=16000; channel-count=1', /*required */
    inputStream: './file.wav',
    accept: 'text/plain; charset=utf-8',
    userId: 'Test'/* required */
    //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);  
}); 

Вышеупомянутое получает следующий ответ от Лекса:

{ contentType: 'text/plain;charset=utf-8',
  message: 'I didn\'t understand you, what would you like to do?',
  messageFormat: 'PlainText',
  dialogState: 'ElicitIntent',
  inputTranscript: '',
  audioStream: <Buffer > }

Я знаю, что аудиофайл загружается правильно и будет соответствовать правильному намерению Lex, но я не думаю, что отправляю аудиофайл правильно. Если было бы лучше никогда не загружать аудиофайл локально с URL-адреса, меня устраивает такой подход.

Вот документация Amazon: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/LexRuntime.html

Любая помощь будет оценена по достоинству.


person rocketlobster    schedule 17.08.2018    source источник


Ответы (1)


Мне нужно было сохранить файл в другом формате, изменить тип содержимого и создать поток чтения для отправки в lex. Решение здесь:

var file = fs.createWriteStream("file.pcm");
var request = https.get(url, function(response) {
  response.pipe(file);
});

var params = {
    botAlias: 'prod', /* required */
    botName: 'OrderFlowers', /* required */
    //inputText: `${command}`, /* required */
    contentType: 'audio/lpcm; sample-rate=8000; sample-size-bits=16; channel-count=1; is-big-endian=false',
    accept: 'text/plain; charset=utf-8',
    userId: 'Test'/* required */
    //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() */
  };

var lexFileStream = fs.createReadStream("file.pcm");
params.inputStream = lexFileStream;


lexruntime.postContent(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);  
}); 
person rocketlobster    schedule 18.08.2018