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

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

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

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

Q&A

解決済

1回答

427閲覧

lineで送ったメッセージを記録するbotを作成したい(GAS)。反応しない。

BBA

総合スコア60

LINE Messaging API

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

0グッド

0クリップ

投稿2022/09/15 17:05

前提

google apps scriptとLine messaging APIを使ってLINE BOTを作成中です。
スプレッドシートから返答する機能と、送ったメッセージが保存される機能(ログ)を作っています。

実現したいこと

スプレッドシートに送ったメッセージが記録されるようにしたい。
スプレッドシートに保存してる単語があるとメッセージが返答される機能はつけました。

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

エラーメッセージはないですが、メッセージを送っても保存されません。
返答される機能はできているので、
コードの問題なのかなと考えています。

ログのソースコード

log.gs

1function doPost(e){ 2 3var ACCESS_TOKEN = "****コピペしてます****"; 4 5var replyUrl = "https://api.line.me/v2/bot/message/reply"; 6var sss = SpreadsheetApp.openById("****コピペしてます****"); 7var sheet = sss.getSheetByName("b"); 8var lastRow = sheet.getLastRow()+1; 9 10var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 11//ユーザーのIDを取得 12var user_id = JSON.parse(e.postData.contents).events[0].source.userld; 13//ユーザー名を取得 14var user_disp_name = JSON.parse(e.postData.contents).events[0].displayName; 15//ユーザーのメッセージを取得 16var user_message = JSON.parse(e.postData.contents).events[0].message.text; 17 18var reply_messages = [user_message]; 19//メッセージを返信する配列を生成します。 20var messages = reply_messages.map(function (v) { 21return {'type':'text', 'text': v}; 22}); 23 24UrlFetchApp.fetch(url, { 25'headers':{ 26'Content-Type': 'application/json; charset-UTF-8', 27'Authorization': 'Bearer' + ACCESS_TOKEN, 28}, 29'method': 'post', 30'payload': JSON.stringify({ 31'replyToken': replyToken, 32'messages': messages, 33'user_id': user_id, 34'text': user_disp_name, 35'text': user_message, 36}), 37}); 38 39//現在時刻を取得する 40var date = new Date(); 1 41//各列のそれぞれの値をセットする 42sheet.getRange(lastrow, 1).setValue(date); 43sheet.getRange(lastrow, 2).setValue(user_id); 44sheet.getRange(lastrow, 3).setValue(user_disp_name); 45sheet.getRange(lastrow, 4).setValue(user_message); 46 47return ContentService.createTextOutput(JSON.stringify({'content':'post ok'})).setMimeType(ContentService.MimeType.JSON); 48 49 50} 51 52

返答用コード

text.gs

1//★★LINE Messaging APIのチャネルアクセストークン★★ 2var LINE_ACCESS_TOKEN = "****コピペしてます****"; 3 4//★★スプレッドシートID★★ 5var ss = SpreadsheetApp.openById("****コピペしてます****"); 6 7//★★シート名★★ 8var sh = ss.getSheetByName("a"); 9 10 11//LINE Messaging APIからPOST送信を受けたときに起動する 12// e はJSON文字列 13function doPost(e){ 14 if (typeof e === "undefined"){ 15 //動作を終了する 16 return; 17 } else { 18 //JSON文字列をパース(解析)し、変数jsonに格納する 19 var json = JSON.parse(e.postData.contents); 20 21 //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 22 replyFromSheet(json) 23 } 24 25 26} 27 28//返信用の関数replyFromSheet 29// data には変数jsonが代入される 30function replyFromSheet(data) { 31 //返信先URL 32 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 33 34 //シートの最終行を取得する 35 var lastRow = sh.getLastRow(); 36 37 //シートの全受信語句と返信語句を二次元配列で取得する 38 var wordList = sh.getRange(1,1,lastRow,2).getValues(); 39 40 //受信したメッセージ情報を変数に格納する 41 var reply_token = data.events[0].replyToken; //reply token 42 var text = data.events[0].message.text; //ユーザーが送信した語句 43 44 //返信語句を格納するための空配列を宣言する 45 var replyTextList = []; 46 47 //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする 48 for(var i = 1; i < wordList.length; i++) { 49 if(wordList[i][0] == text) { 50  replyTextList.push(wordList[i][1]); 51 } 52 } 53 54 55 //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する 56 if(replyTextList.length < 1) { 57 return; 58 59 //replyTextListのLengthが5より大きい場合、messageLengthを5にする 60 //※※一度に最大5つの吹き出ししか返信できないためです※※ 61 } else if(replyTextList.length > 5) { 62 var messageLength = 5; 63 } else { 64 var messageLength = replyTextList.length; 65 } 66 67 //"messages"に渡す配列を格納するための空配列を宣言する 68 //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....] 69 var messageArray = []; 70 71 //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする 72 for(var j = 0; j < messageLength; j++) { 73 messageArray.push({"type": "text", "text": replyTextList[j]}); 74 } 75 76 var headers = { 77 "Content-Type": "application/json; charset=UTF-8", 78 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 79 }; 80 81 var postData = { 82 "replyToken": reply_token, 83 "messages": messageArray 84 }; 85 86 var options = { 87 "method" : "post", 88 "headers" : headers, 89 "payload" : JSON.stringify(postData) 90 }; 91 92 //LINE Messaging APIにデータを送信する 93 UrlFetchApp.fetch(replyUrl, options); 94} 95 96 97

試したこと

ログだけの機能でLINE BOTを起動しましたが反応がなかったです。
function doPostを返答機能でも使用してるので合わせてみましたが、
反応なかったです。

エラーはなく実行ボタンを押して完了は出来ました。

返答機能は新しい言葉を保存して機能できているため、デプロイの更新はできているかなと思っています。

参考サイト

参考サイト

GASを勉強し基礎的な部分は検索し学習しましたが、
抜けがあるかもしれません。
すみません。
どなたかご教授いただけるかたいらっしゃったら幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/17 10:47

コードを見るに、異なるgsファイルに同じ関数名が重複して存在しています。 「スプレッドシートに送ったメッセージが記録されるようにする機能」だけ実現できれば良いのでしょうか。 それとも「スプレッドシートに保存してる単語があるとメッセージが返答される機能」に追加して「スプレッドシートに送ったメッセージが記録されるようにする機能」も実装したい、ということでしょうか?
BBA

2022/09/20 05:03

遅くなってすみません。 作りたい機能は、「スプレッドシートに保存してる単語があるとメッセージが返答される機能」に追加して「スプレッドシートに送ったメッセージが記録されるようにする機能」です。追加したいです。
guest

回答1

0

自己解決

GASを用いLINE Messaging APIのフォローイベントでuserIdをスプレッドシートに転記する

Lineチャットボットで受け取ったテキストをスプレッドシートへ記録する

を参考に、機能を別で作って後で合わせようと単体で作成しました。
送信したメッセージのテキストと日時、ユーザーid、ニックネームを保存することができました。

応答する機能と合わせて動くように考えていきます。

投稿2022/09/21 01:30

BBA

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問