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

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

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

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

5615閲覧

GASとLINEを連携してLINEボットを作成するも、LINEにコメントしても既読のみで返信つかず

uuu1010

総合スコア7

LINE Messaging API

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/10/23 00:06

編集2020/10/25 21:33

本件についてご教示をお願いしたく質問いたします。

GASを利用してLINEでおうむ返しの返信ができるLINEボットを作成しています。
しかし、以下のコードを書いてもLINEには既読がつくだけで返信が来ません。

【確認済事項】
・LINEのアクセストークンは誤差なくコピペ済
・webhookのURLも誤差なくコピペ済、LINE Developersサイトで接続も成功している旨確認済
・GASでログを確認したところ、doPostでエラーが出ています。
・こちらのサイト'LINEボット作成方法の記事'に書いてあるコードをコピペのため、コード自体に誤差は生まれない想定。
・上記サイトのコードから、""と''が混在していたため、''に統一し直すも、エラーが発生。(doPostで失敗すると出ます。)
・エラーメッセージの詳細ですが、GASの各関数のステータスが見れるページでdoPostの関数で「失敗しました」と言うステータスが反映されているのみです。それ以上の確認ができません。
・回答いただいたご指摘で「myFunctionを消して、その中身だけにする」のもしましたが、やはり同様のエラー(doPostの「失敗しました」と言うステータス反映)が出るのみで改善ならず。
・GASではトリガーとしてどの関数を使うか設定する必要があると聞き、doPostを選択するも、やはり同様のエラー(doPostの「失敗しました」と言うステータス反映)が出るのみで改善ならず。

念のためエラーメッセージ画面についても添付します。

エラーメッセージ画面・ログ確認

doPostでエラーとあり、'contents'に問題があるようですが、その上に記載あるようにdoPostのウェブアプリの方で「失敗しました」と続いており、doPost自体に問題があるのが、他のLINE設定に問題があるのか全く分かりません。

お手数をおかけしますが、どうかご教示のほどお願いいたします。

なお、コードの画面は次の通りです。※LINEのアクセストークンは消して撮影してます。
コード画面

ログの詳細画面がこちらです。
ログ詳細画面

【追記事項(追加確認事項)】
・UrlFetchApp を使うことを承認していなかった可能性を踏まえ、GASのメニューの「ファイル」->「プロジェクトのプロパティ」を選び、「スコープ」タブに「https://www.googleapis.com/auth/script.external_request」があるか確認。
→上記があることを確認。※詳細画面は以下↓

スコープタブ画面

・さらにGASのメニューの「表示」->「マニフェストファイル表示」を選び、「appsscript.json」の内容も確認。
appsscript.json に "oauthScopes" が設定されている場合は、自動的に承認ポップアップは出ないらしいので、承認できていなかった可能性あるが、特に設定されていなかったため、問題はないように見える。
※詳細画面は以下↓

詳細画面

・また、Googleより本ソースコードのエラーについてメールで報告が来たのでこちらに掲載します。
やはり承認されていないことがエラーとなっているようですが、トリガー欄の「time-based」については全く覚えがないもので不明です。
※詳細画面は以下↓

メール画面詳細

詳細のコードは以下。

function myFunction() { //コード.gs // line developersに書いてあるChannel Access Token var channel_access_token = '****' /** * reply_tokenを使ってreplyする */ function reply(data) { var url = 'https://api.line.me/v2/bot/message/reply'; var headers = { 'Content-Type' : 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + channel_access_token, }; var postData = { 'replyToken' : data.events[0].replyToken, 'messages' : [ { 'type':'text', 'text':data.events[0].message.text, } ] }; var options = { 'method' : 'post', 'headers' : headers, 'payload' : JSON.stringify(postData) }; return UrlFetchApp.fetch(url, options); } /** * postされたときの処理 */ function doPost(e) { var json = JSON.parse(e.postData.contents); reply(json); }}

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

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

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

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

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

draq

2020/10/23 15:14

LINEのアクセストークンは公開すると誰でもそのチャンネルからメッセージを投げられるようになってしまいます。質問から削除して、アクセストークンも変更しましょう。
draq

2020/10/23 15:15

エラーメッセージも要約せずに質問にそのままコピペしてください。
gentaro

2020/10/23 17:55

質問文を編集しても履歴は残るから質問の削除依頼をした方が良いと思うけど。 まぁ既にそのトークンが無効になってるなら構わないのかも知れないけど。
uuu1010

2020/10/23 18:03

ありがとうございます!アクセストークンについては削除済です。エラーメッセージはGAS内の関数のステータス状態を確認できるページにてdoPostが「失敗しました」とエラーメッセージが出ていました。(質問内に記載します。)
uuu1010

2020/10/23 18:11

トークン自体も無効となっているので大丈夫です!
guest

回答1

0

ベストアンサー

コード全体が myFunction 内に含まれているせいでは?
中身だけにしてください。

DIFF

1-function myFunction() { 2 //コード.gs 3 // line developersに書いてあるChannel Access Token 4 var channel_access_token = "(アクセストークン)"; 5 /** 6 * reply_tokenを使ってreplyする 7 */ 8 function reply(data) { 9 //(省略) 10 } 11 12 /** 13 * postされたときの処理 14 */ 15 function doPost(e) { 16 //(省略) 17 } 18-}

投稿2020/10/23 15:24

draq

総合スコア2577

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

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

uuu1010

2020/10/23 18:11

コメントありがとうございます!myFunctionを消して中身のみにしましたが、それでも全く同じエラーとなります。doPostがステータスで「失敗しました」とGASのログ確認ページで出てきます・・・。なお、他の関数に関しては何も失敗しましたというステータス反映はありません。
draq

2020/10/24 00:42

ソースを変更したら、新しいバージョンをWEBアプリケーションとして導入し直す必要がありますがやってますか?
uuu1010

2020/10/24 02:21

はい!やっております。webアプリケーションとして導入、その際新しいバージョンとして更新しております。
draq

2020/10/24 03:03

自分のテスト用チャネルで質問のコードの1行目のmyfunctionを消したコード動かしてみましたがちゃんとオウム返しされるので、書かれていないことでなにか違うんでしょう。
uuu1010

2020/10/24 05:28

そうなんですね。。。コードに問題がないとするとLINEの設定に問題があるんでしょうか。 LINEの設定ではbotをオンにして、メッセージの自動返信と挨拶メッセージは無効としていますが、合ってますでしょうか?
uuu1010

2020/10/24 05:30

また、GASにおける設定でwebアプリケーションとして導入する際、プロジェクトバージョンを「NEW」を選んで更新していますがこれも問題ないですよね? 他だと何かGASで事前に設定しなければならないことってありますか? お手数をおかけして申し訳ございませんが、どうかよろしくお願いいたします。????
draq

2020/10/24 05:58

設定は問題無さそうです。後はdoPostでログ出力してみてdoPostが確かに呼ばれているか等確認してみるぐらいです。
uuu1010

2020/10/24 06:25

ありがとうございます。ログを確認すると以下のメッセージが出ました。 TypeError: Cannot read property 'contents' of undefined at doPost(コード:35:38) つまり、doPost内の'contents'に問題があると言うことでしょうか。
uuu1010

2020/10/24 06:36

質問本文にログ確認をした画面写真を追加しました。 上記のエラーメッセージの他、doPostの「ウェブアプリ」と言う種類の方で「失敗しました」と言うエラーが出続けており、そちらは詳しいエラ〜メッセージが確認できませんでした。 問題の切り分けができなくて困ってます。。。
draq

2020/10/24 06:38

そのエラーメッセージは e.postData が undefined ってことです。編集された質問の画像は種類がトリガーになってますが、トリガーでdoPost実行しているのでしょうか?種類がウェブアプリのもののエラー内容の記載をお願いします。
draq

2020/10/24 07:03

doPost の先頭で、 console.log(JSON.stringify(e)) とかしてログ出力してみてください。 実行数のところではログ確認できないと思うので、 https://teratail.com/questions/224727 の回答にあるように Cloud Platform と連携してログビューアでログ確認してみてください。
uuu1010

2020/10/24 07:31

すみません、トリガーで実行の意味が分かりませんが、トリガーの設定?と言うもので自動的になっております。
uuu1010

2020/10/24 07:37

GASのソースを書いてる画面も直接撮影して質問本文内に載せました。 ログも今確認中です。
uuu1010

2020/10/24 07:48

以下のようにコードを書いてログを出してみました。 その時のログ画面も撮影して質問本文に載せております。 正直google cloud plattformのどの部分を見れば何が分かるか自分では分からなかったです。 本当にご面倒をかけて申し訳ございません。よろしくお願いします。 function doPost(e) {  console.log(JSON.stringify(e)) var json = JSON.parse(e.postData.contents); reply(json); }
draq

2020/10/24 14:36

まずログビューアの「ログのフィールド」の「RESOURCE TYPE」の「Apps Script Function」をクリックしてログを絞り込みましょう。ディスプレイサイズが小さいようなら、ログのフィールドとヒストグラムはバツ押して消してもいいです。(右上の「ページレイアウト」から再表示もできます。)「クエリ結果」にログが順番に並びます。 添付画像のクエリ結果は console.log で出力されたログでは無さそうです。console.log から出力されたログは logName が ~/script.googleapis.com%2Fconsole_logs になるはずです。 まずは GAS と GCP の連携の確認に console.log("test") とかだけの適当な function 作って実行してみるといいと思います。ログの反映は10秒ぐらいかかることあるので、少し待ってください。 概要列とjsonPayload.messageにログテキストが表示されます。
uuu1010

2020/10/25 01:08

ありがとうございます!詳細画面を質問本文に追加しました。 console.logから出力されたログであることも確認できます。 クエリ結果の概要欄には"その操作を実行するには承認が必要です。"と書いてあります。 これはコードの問題ではないと言うことでしょうか?
draq

2020/10/25 08:30 編集

UrlFetchApp を使うには、開発者(=uuu1010さん)が承認しておく必要があります。普通は実行またはWEB アプリケーションとして導入時に承認可否のポップアップが出ます。 メニューの「ファイル」->「プロジェクトのプロパティ」を選んで、「スコープ」タブに「https://www.googleapis.com/auth/script.external_request」があるかどうか確認してください。 念のためにメニューの「表示」->「マニフェストファイル表示」を選んでください。「appsscript.json」がファイルの一覧に表示されるのでその内容も質問に追記してください。 appsscript.json に "oauthScopes" が設定されている場合は、自動的に承認ポップアップは出ないらしいので消してから再度 WEB アプリケーションとして導入してみてください。
uuu1010

2020/10/25 21:35

ありがとうございます、質問本文の下の方に【追記事項(追加確認事項)】で上記ご指摘内容について確認したことを掲載しました。 結論として問題はないように見えました。 また、別途Googleよりメールでエラーのまとめが来ていたのでそれも併せて写真で掲載しています。 Googleより本ソースコードのエラーについてメールで報告が来たのでこちらに掲載します。 そのメール本文にもあるように、やはり承認されていないことがエラーとなっているようですが、トリガー欄の「time-based」については全く覚えがないもので不明です。
draq

2020/10/26 01:33

time-based は何か時間ベーストリガーが設定されていて毎分実行されているようです。 https://script.google.com/home にアクセスすると、GASのプロジェクトの一覧が確認できます。マイトリガーから設定されているトリガーを確認し不要なものは削除してみてください。
uuu1010

2020/10/28 04:17

ありがとうございます。マイトリガーには一個した設定がなかったので、かつそれが時間ベーストリガーだったので削除しました。 しかし、まだ返信が出ず、エラー内容も「承認されておりません」とあるので、他の設定で何か問題がないか調べております。
uuu1010

2020/11/06 09:05

ご連絡遅くなり申し訳ございません。 しばらく原因が分からずじまいでしたが、再度最初からご指摘の通りやり直してみましたら無事に作動しました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問