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

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

新規登録して質問してみよう
ただいま回答率
86.12%
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のクラウドのスクリプト言語です。

解決済

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

BBA
BBA

総合スコア57

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のクラウドのスクリプト言語です。

1回答

0リアクション

0クリップ

213閲覧

投稿2022/09/15 17:05

前提

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

実現したいこと

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

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

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

ログのソースコード

log.gs

function doPost(e){ var ACCESS_TOKEN = "****コピペしてます****"; var replyUrl = "https://api.line.me/v2/bot/message/reply"; var sss = SpreadsheetApp.openById("****コピペしてます****"); var sheet = sss.getSheetByName("b"); var lastRow = sheet.getLastRow()+1; var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; //ユーザーのIDを取得 var user_id = JSON.parse(e.postData.contents).events[0].source.userld; //ユーザー名を取得 var user_disp_name = JSON.parse(e.postData.contents).events[0].displayName; //ユーザーのメッセージを取得 var user_message = JSON.parse(e.postData.contents).events[0].message.text; var reply_messages = [user_message]; //メッセージを返信する配列を生成します。 var messages = reply_messages.map(function (v) { return {'type':'text', 'text': v}; }); UrlFetchApp.fetch(url, { 'headers':{ 'Content-Type': 'application/json; charset-UTF-8', 'Authorization': 'Bearer' + ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': replyToken, 'messages': messages, 'user_id': user_id, 'text': user_disp_name, 'text': user_message, }), }); //現在時刻を取得する var date = new Date(); 1 //各列のそれぞれの値をセットする sheet.getRange(lastrow, 1).setValue(date); sheet.getRange(lastrow, 2).setValue(user_id); sheet.getRange(lastrow, 3).setValue(user_disp_name); sheet.getRange(lastrow, 4).setValue(user_message); return ContentService.createTextOutput(JSON.stringify({'content':'post ok'})).setMimeType(ContentService.MimeType.JSON); }

返答用コード

text.gs

//★★LINE Messaging APIのチャネルアクセストークン★★ var LINE_ACCESS_TOKEN = "****コピペしてます****"; //★★スプレッドシートID★★ var ss = SpreadsheetApp.openById("****コピペしてます****"); //★★シート名★★ var sh = ss.getSheetByName("a"); //LINE Messaging APIからPOST送信を受けたときに起動する // e はJSON文字列 function doPost(e){ if (typeof e === "undefined"){ //動作を終了する return; } else { //JSON文字列をパース(解析)し、変数jsonに格納する var json = JSON.parse(e.postData.contents); //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する replyFromSheet(json) } } //返信用の関数replyFromSheet // data には変数jsonが代入される function replyFromSheet(data) { //返信先URL var replyUrl = "https://api.line.me/v2/bot/message/reply"; //シートの最終行を取得する var lastRow = sh.getLastRow(); //シートの全受信語句と返信語句を二次元配列で取得する var wordList = sh.getRange(1,1,lastRow,2).getValues(); //受信したメッセージ情報を変数に格納する var reply_token = data.events[0].replyToken; //reply token var text = data.events[0].message.text; //ユーザーが送信した語句 //返信語句を格納するための空配列を宣言する var replyTextList = []; //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする for(var i = 1; i < wordList.length; i++) { if(wordList[i][0] == text) {  replyTextList.push(wordList[i][1]); } } //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する if(replyTextList.length < 1) { return; //replyTextListのLengthが5より大きい場合、messageLengthを5にする //※※一度に最大5つの吹き出ししか返信できないためです※※ } else if(replyTextList.length > 5) { var messageLength = 5; } else { var messageLength = replyTextList.length; } //"messages"に渡す配列を格納するための空配列を宣言する //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....] var messageArray = []; //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする for(var j = 0; j < messageLength; j++) { messageArray.push({"type": "text", "text": replyTextList[j]}); } var headers = { "Content-Type": "application/json; charset=UTF-8", "Authorization": "Bearer " + LINE_ACCESS_TOKEN, }; var postData = { "replyToken": reply_token, "messages": messageArray }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; //LINE Messaging APIにデータを送信する UrlFetchApp.fetch(replyUrl, options); }

試したこと

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

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

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

参考サイト

参考サイト

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

qnoir

2022/09/17 10:47

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

2022/09/20 05:03

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

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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のクラウドのスクリプト言語です。