2016-09-02 7 views
2

私はこのJavaScriptコードがあります。方法sendVoice()電報のボットは - ファイルは空です

bot.sendVoice(chatId, 'C:/Users/a.repetto/Desktop/repettobot/hello_world.ogg', { 
    disable_notification: true, 
    reply_to_message_id: msg.message_id 
    }).then(function() { 
    // reply sent! 
    }); 

ファイルが存在すると音声が含まれているが、私は全体のコードを実行しようとすると、私はこのエラーを取得:

""error_code":400,"description":"Bad Request: File must be non-empty "

私はsendAudioでも試しましたが、これも機能しません。

編集1:より具体的には、

「sendAudio」または「sendVoice」のみを使用してスクリプトを書き込むと、そのファイルは電文に正しく送信されます。しかし、このスクリプトを使用すると、ファイルは空になります。

var Bot = require('node-telegram-bot-api'); 
var watson = require('watson-developer-cloud'); 
var request = require('request'); 
var fs = require('fs'); 

function sleep (time) { 
return new Promise((resolve) => setTimeout(resolve, time)); 
} 

var speech_to_text = watson.speech_to_text({ 
username: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX, //username from VCAPSERVICES 
password: 'XXXXXXXX', //password from VCAP SERVICES 
version: 'v1', 
url: 'https://stream.watsonplatform.net/speech-to-text/api' 
}); 

var language_translation = watson.language_translator({ 
    username: 'XXXXXXXXXXXXXXXXXX', 
    password: 'XXXXXXXX', 
    version: 'v2' 
}); 

var text_to_speech = watson.text_to_speech({ 
    username: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 
    password: 'XXXXXXXXXX', 
    version: 'v1' 
}); 

var params = { 
model: 'en-US_BroadbandModel', //you can change the language here 
content_type: 'audio/ogg;codecs=opus', 
continuous: true, 
interim_results: false 
}; 

var bot = new Bot('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', {polling: true }); //token generated by the bot you created 
bot.on('message', function (msg) { 
if(msg['voice']){ return onVoiceMessage(msg); } 
}); 

function onVoiceMessage(msg) { 
    var chatId = msg.chat.id; 

    bot.getFileLink(msg.voice.file_id).then(function(link) { 
    var recognizeStream = speech_to_text.createRecognizeStream(params); 
    recognizeStream.setEncoding('utf8'); 
    recognizeStream.on('results', function(data) { 
     var result = data.results[0].alternatives[0].transcript; 
     var c = result; 

     console.log("testo: " + result); 

     bot.sendMessage(chatId, result, { 
     disable_notification: true, 
     reply_to_message_id: msg.message_id 
     }).then(function(){}) 

     language_translation.translate({ 
     text: result, 
     source: 'en', 
     target: 'it' 
     }, function(err,translation) { 
     if (err) { 
      console.log(err); 
     } 
     else { 
      var trad = translation.translations[0].translation; 
      console.log("traduzione: " + trad + "\n") 
     } 
     bot.sendMessage(chatId, trad, { 
     disable_notification: true, 
     reply_to_message_id: msg.message_id 
     }).then(function(){}) 
     var params1 = { 
     text: trad, 
     voice: 'it-IT_FrancescaVoice', 
     accept: 'audio/ogg;codecs=opus' 
     } 
     bot.sendVoice(chatId, text_to_speech.synthesize(params1), { 
     disable_notification: true, 
     reply_to_message_id: msg.message_id 
     }).then(function(promise){console.log(promise)}) 
    }) 
    }) 
    request(link).pipe(recognizeStream); 
}) 
} 
+0

Telegram APIにはどのライブラリを使用していますか? –

+0

私はnode-telegram-bot-apiを使用します –

答えて

0

テレグラムはPCからファイルを送信できません。まずファイルをアップロードし、ローカルアドレスをウェブアドレスに置き換えます。他の方法は、ファイルを電報ボットに送信し、file_idgetUpdateメソッドを使用)を取得し、file_idをコードに入れます。

+0

ありがとうございます。私はより明確にするために質問を編集しました –

関連する問題