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

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

新規登録して質問してみよう
ただいま回答率
85.32%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1244閲覧

LINE messaging APIを用いて音声データ(.m4a)を送りたい

yoyoda

総合スコア11

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/06/17 12:56

編集2023/06/18 04:18

実現したいこと

LINE messaging APIを用いて音声データ(hissatsu.mondo.m4a)を送りたい

前提

音声データをcodespace上に置き、URLは以下のようにしました。
https://〇〇〇〇〇〇〇/△△△△/Folder1/Floder2/hissatsu.mondo.m4aとしました。

イメージ説明

発生している問題・エラーメッセージ

GitHubのcodespaceのターミナルでは”Message sent successfully”と表示されます。しかし、携帯のLINEアプリ、PCのLINEアプリともに再生できませんでした。

(携帯のLINEアプリ)
実際にLINEアプリを確認したところ何かしらデータらしきものは届いているのですが、再生ボタンを押しても音声が再生されません。

イメージ説明


(PCのLINEアプリ)
何かしらデータらしきものは届いているのですが、同じく再生ボタンを押しても音声が再生されません。
こちらは”ネットワークやサーバのエラーにより再生できません。もう一度お試しくださいという”エラーメッセージが出ます。
さらに、下記でフォルダを開くを選択すると、”×××.aac”という.m4aとは違う拡張子のデータ、かつ音声ファイル名も数字の羅列の違う名前になっているのも気になりました。

イメージ説明
イメージ説明


該当のソースコード

javascript

1const axios = require('axios'); 2 3// LINEのアクセストークンとチャネルシークレット 4const CHANNEL_SECRET = '△△△△△△△△△△△△△△△△△△△'; 5const ACCESS_TOKEN= '〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇'; 6 7// メッセージイベントの送信先ユーザID 8const userId = '●●●●●●●●'; 9 10// 再生する音声ファイルのURL 11//const audioUrl = 'https://drive.google.com/file/d/■■■■■■■■■/view?usp=sharing' 12const audioUrl = 'https://〇〇〇〇〇〇〇/△△△△/Folder1/Floder2/hissatsu.mondo.m4a'; 13 14// Messaging APIのメッセージイベントの送信 15function sendAudioMessage(userId, audioUrl) { 16 const headers = { 17 'Content-Type': 'application/json', 18 'Authorization': `Bearer ${ACCESS_TOKEN}` 19 }; 20 21 const payload = { 22 to: userId, 23 messages: [ 24 { 25 type: 'audio', 26 originalContentUrl: audioUrl, 27 duration: 97000 // 音声の長さ(ミリ秒) 28 } 29 ] 30 }; 31 32 axios.post('https://api.line.me/v2/bot/message/push', payload, { headers: headers }) 33 .then((response) => { 34 console.log('Message sent successfully'); 35 }) 36 .catch((error) => { 37 console.error('Error:', error.message); 38 }); 39} 40 41// メッセージイベントの送信 42sendAudioMessage(userId, audioUrl); 43

試したこと

CodespaceのURLに問題があるかと思いましたので、Google driveに保存しなおして、共有レベルをリンクを知ってる全員に変更してリンクをコピーのURLに変更して再度試しましたが、ダメでした。

// 再生する音声ファイルのURL
const audioUrl = 'https://drive.google.com/file/d/■■■■■■■■■/view?usp=sharing'

イメージ説明

補足情報(FW/ツールのバージョンなど)

node.js : version19. 9. 0

ここにより詳細な情報を記載してください。

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

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

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

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

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

yoyoda

2023/06/17 22:44

コメント有難うございます。はい。変数名、引用符は上のとおりです。 (なお11行目と12行目はそれぞれの実行で片方コメントアウト//して実行してます。すみません。コメントアウトが抜けていました。) 宜しくお願いします。
YellowGreen

2023/06/18 03:00 編集

引用符が閉じられていませんが、それはさておき、 axiosは使ったことがないので、そちらが原因なら不明ですが、 axiosを使わない通常のコードで、 function sendAudio() { const token = CHANNEL_ACSESS_TOKEN; const userId = BOT_USER_ID; const payload = { to: userId, messages: [ { "type": "audio", "originalContentUrl": "https://symfo.web.fc2.com/sample_src/line/tamahome.m4a", "duration": 30000 } ] } const options ={ "method" : "post", "payload" : JSON.stringify(payload), "headers" : { "Content-Type": "application/json", "Authorization": "Bearer "+ token } }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options); } としてみるとLINEに送信されたコマーシャルソングを再生できます。 参考になりますでしょうか?
yoyoda

2023/06/18 04:15

大変参考になります!! 有難うございます!! コメント頂きましたコードをGAS環境で実行しましたところ、無事音声が届き再生も出来ております! 私が最初に書いたコードで、URLのところを "https://symfo.web.fc2.com/sample_src/line/tamahome.m4a"に置き換えて実行しましたところ、こちらも音声が再生でき、ちゃんと音が流れております!! "hissatsu.mondo.m4a"で動かなかったのは、やはりURLのところが原因の可能性が非常に高いというところが分かりました。(音声共有のURLが間違っているか、共有の権限など。。) (ご指摘有難うございます。すみません。引用符のところは実際のコードでは閉じられてはおりました。引用符以外で何かこのあたり原因があるのかもしれません。)
YellowGreen

2023/06/18 04:17

パスに日本語が使われていたりしませんか?
yoyoda

2023/06/18 04:43 編集

パスですが、全て英語になっております。 あと、追加で検証しましたが、tamahome.m4aのファイルを一旦ダウンロードし、先のgoogle drive上、またはcodespaceのファイルにおいて実行してもうまくいかなかったです。なので、音声ファイルの問題というよりはURLのパスか共有権限?の問題な可能性が高いかもしれません。 YellowGreen様が音声データをどこのサイトにアップロードして、どのようにURLを取得したかの方法、もし可能ならご存じでしょうか? (無料なら一旦、私が音声データを置いたGoogle driveやcodespaceを保存場所とするのには、こだわるつもりは全くないので。ただ良いサイト?がよく分からないのと、そこの部分のやり方があまりよくわかっていないのでもし可能ならご教示頂けると有難く思います。)
YellowGreen

2023/06/18 04:47

音声データはアップロードしたものではなく、手持ちがなかったので検索して見つけたものです。
yoyoda

2023/06/18 04:58

有難うございます!承知しました。 ほぼ原因はここだと思っていて、本当にここさえうまくいけば、行けそうな気がします。 もう少し粘ってみたいと思います。 ここまで特定できたのは、YellowGreen様のコメントがあったからだと思っております。 本当に有難うございます!!
YellowGreen

2023/06/18 04:59

お役に立てて良かったです。
yoyoda

2023/06/18 05:15

有難うございます! 解決しました!! AWS のS3にファイルを置き、パブリックアクセスを許可にして、URLを取得したら無事解決し、音声が流れるようになりました!! この度は本当に有難うございます!!
yoyoda

2023/06/18 05:18

(補足) AWS のS3にファイルを置き、S3 の ブロックパブリックアクセスを無効にして、 バケットポリシーを以下のように設定 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::test-buckect-123456789012/*" } ] } S3にファイルをアップロードして、URLを取得したら無事解決し、音声が流れるようになりました!!
guest

回答1

0

自己解決

(補足) AWS のS3にファイルを置き、S3 の ブロックパブリックアクセスを無効にして、 バケットポリシーを以下のように設定

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::test-buckect-123456789012/*" } ] }

アップロードしたファイルのURLを取得し、コードのURLを修正して再実行したら無事音声が流れるようになり、解決しました!!

投稿2023/06/18 05:28

編集2023/06/18 11:54
yoyoda

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問