###実現したいこと
Botframework で作成したbot でAudioCard を使って、Facebook Messenger で音声を流したい
###詳細
現在、Botframeworkを使って、Facebook Messenger botを作成しています。
AudioCardに、wavデータをbase64エンコードしたURLを指定して、音声を流そうとしていますが、エラーが発生しまています。
エミュレータでは問題なくAuidoCardを実行でき、音声を聞くことができました。
###発生している問題・エラーメッセージ
Microsoft Bot Framework
{"error":{"message":"(#100) name_placeholder[url] should represent a valid URL","type":"OAuthException","code":100,"fbtrace_id":"xxxxxx"}}
Azure Web App
!And error ocurred Error: Request to 'https://facebook.botframework.com/v3/conversations/xxxxxx/activities/xxxxxx' failed: [400] Bad Request at Request._callback (D:\home\site\wwwroot\node_modules\botbuilder\lib\bots\ChatConnector.js:537:46) at Request.self.callback (D:\home\site\wwwroot\node_modules\request\request.js:186:22) at emitTwo (events.js:106:13)
###該当のソースコード
javascript
1console.log(result); 2 3//Base64にエンコーディング 4var base64 = Buffer.from(result.wave).toString('base64'); 5 6// console.log("base64"); 7// console.log(base64); 8 9// URL生成 10var wavUrl = util.format('data:%s;base64,%s', 'audio/wav', base64); 11 12console.log("wavUrl"); 13console.log(wavUrl); 14 15var speechCard = new builder.AudioCard(session) 16 .title(languageDoc.language_name + " ("+ dialectCountryName +")") 17 .text(inputText +" => "+ translatedText) 18 .media([ 19 {url: wavUrl} 20 ]); 21// Audioカードを発信する 22var msg = new builder.Message(session).addAttachment(speechCard); 23session.send(msg);
###試したこと
- クライアント側にwavデータを保存して再生
javascript
1var file = path.join(os.tmpdir(), inputText +'.wav'); 2var wstream = fs.createWriteStream(file); 3wstream.write(result.wave); 4console.log('Text To Speech completed. Audio file written to', file) 5 6var speechCard = new builder.AudioCard(session) 7 .title(languageDoc.language_name + " ("+ dialect") 8 .text(inputText +" => "+ translatedText) 9 .media([ 10 {url: file} 11 ])
→ エミュレータではローカルに保存できていたが、サーバにアップロードしたコードからは保存できなかった。(当たり前ですが…)
- サーバ側にwavデータを保存して再生
var file = './wav/'+ inputText +'.wav'; var wstream = fs.createWriteStream(file); speechClient.synthesizeStream(translatedText, speechDoc.dialect_code, speechDoc.gender).then(resultStream => { resultStream.pipe(wstream); resultStream.on('end', function(){ wstream.close(); console.log('音声ファイル出力', file); var speechCard = new builder.AudioCard(session) .title(languageDoc.language_name + " ("+ dialectCountryName +")") .text(inputText +" => "+ translatedText) .media([ {url: __dirname + file} ]) // スピーチカードを発信する var msg = new builder.Message(session).addAttachment(speechCard); session.send(msg); }) });
→ サーバ内の静的コンテンツURLの取得方法が分かりませんでした。
###質問事項
Facebook Messenger で、base64 エンコードした wavデータを流すことは可能でしょうか?
もしくは、サーバ側で保存したwavファイルのURLを指定する方法はありますでしょうか?
解決策、調査方法、手がかり等、どのような小さな事でも構いませんので、何かご存じの方がいらっしゃいましたら、お手数をおかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。