質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

1回答

381閲覧

Facebook bot でbase64エンコードしたwavデータが"name_placeholder[url] should represent a valid URL"

Miz21358

総合スコア13

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2017/10/02 06:31

編集2017/10/03 06:53

###実現したいこと

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);

###試したこと

  1. クライアント側に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 ])

→ エミュレータではローカルに保存できていたが、サーバにアップロードしたコードからは保存できなかった。(当たり前ですが…)

  1. サーバ側に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を指定する方法はありますでしょうか?

解決策、調査方法、手がかり等、どのような小さな事でも構いませんので、何かご存じの方がいらっしゃいましたら、お手数をおかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決いたしました。

  • mp3に変換する
  • publicフォルダ内に配置する
  • base64エンコードではなく、自身の公開用URLをmediaに設定する

上記方法で、ひとまずAudioCardを投稿することができるようになりました。

投稿2017/10/08 12:51

Miz21358

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問