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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

3440閲覧

LINEbotからGoogle Spreadsheetに書き込めるようにしてます。

Ringome

総合スコア6

LINE Messaging API

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/04/29 12:08

編集2020/04/30 00:03

質問内容

LINE Messaiging APIとGASを使ってGoogle Spreadsheetに書き込めれるようにしています。
しかし、GAS側にエラーが走りメッセージの返信やSpreadsheetに書き込むことができません。

このサイトの6までやっています。
https://note.com/ky120930/n/n4e6c3fc68dd9

エラー :
・TypeError: Cannot read property 'getLastRow' of null(行 10、ファイル「コード」)
(翻訳 :TypeError:nullのプロパティ 'getLastRow'を読み取れません(行10、ファイル「コード」))

試したこと :
・LINE Messaiging APIのチャンネルを変えてみる

GAS

1//LINE Developersで取得したアクセストークンを入れる 2var CHANNEL_ACCESS_TOKEN = 'アクセストークン'; 3var line_endpoint = 'https://api.line.me/v2/bot/message/reply'; 4 5//取得したメッセージを格納するためのスプレッドシート情報を入力 6var id = 'シートID'; 7var dateSheet = SpreadsheetApp.openById(id).getSheetByName('シート名1'); 8 9//スプレッドシートの最終行を取得 10var lastlow = dateSheet.getLastRow(); 11 12//ポストで送られてくるので、送られてきたJSONをパース 13function doPost(e) { 14 var json = JSON.parse(e.postData.contents); 15 16 //返信するためのトークン取得 17 var reply_token= json.events[0].replyToken; 18 if (typeof reply_token === 'undefined') { 19 return; 20 } 21 22 //送られたメッセージ内容を取得 23 var message = json.events[0].message.text; 24 25 //配列を宣言 26 var arr_test = []; 27 28 //LINEの内容を改行毎に区切って配列に格納 29 var arr_test = message.split(/\r\n|\r|\n/); 30 31 //指定の文言を置換する 32 arr_test[0] = arr_test[0].replace('タイトル:', ''); 33 arr_test[1] = arr_test[1].replace('日付:', ''); 34 arr_test[2] = arr_test[2].replace('場所:', ''); 35 arr_test[3] = arr_test[3].replace('開始時間:', ''); 36 arr_test[4] = arr_test[4].replace('終了時間:', ''); 37 38 //置換後の配列の値をスプレッドシートの最終行に指定のセルに格納 39 dateSheet.getRange(lastlow+1, 1).setValue(arr_test[0]); 40 dateSheet.getRange(lastlow+1, 2).setValue(arr_test[1]); 41 dateSheet.getRange(lastlow+1, 3).setValue(arr_test[2]); 42 dateSheet.getRange(lastlow+1, 4).setValue(arr_test[3]); 43 dateSheet.getRange(lastlow+1, 5).setValue(arr_test[4]); 44 dateSheet.getRange(lastlow+1, 6).setValue("登録"); 45 46 // メッセージを返信 47 UrlFetchApp.fetch(line_endpoint, { 48 'headers': { 49 'Content-Type': 'application/json; charset=UTF-8', 50 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 51 }, 52 'method': 'post', 53 'payload': JSON.stringify({ 54 'replyToken': reply_token, 55 'messages': [{ 56 'type': 'text', 57 'text': 'スプレッドシートに登録したよ!!!', 58 }], 59 }), 60 }); 61 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 62}

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

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

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

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

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

guest

回答1

0

ベストアンサー

LINEどうこうでなく、そのエラーが出るってことは単純にシート名が違ってたりしませんか?

投稿2020/04/29 13:48

sawa

総合スコア3002

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

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

Ringome

2020/04/30 00:08

おはようございます。 ご指摘の通りにSpreadsheetとGASのシート名を合わせてみました。 質問のエラーは消えました。 しかしLINEbotに 『タイトル:テスト 日付:2019/11/29 場所:日本 開始時間:21:00 終了時間:22:00』と送信してみたら、 ウェブアプリからdoPostが実行中のままSpreadsheetに記録されません。 何故でしょうか。
sawa

2020/04/30 02:28 編集

LINEbotからのdoPost実行時のエラー については申し訳ないですが、わからないです。 arr_test[]が希望する形式で取得できるいるか ログを出して確認してみるとか、スプレッドシートの権限を変えて試してみるといったアドバイスしか出来ません。 質問を修正するか、こちらをクローズして別質問として、 経験者の方の回答を求めた方がよいです。
Ringome

2020/04/30 04:35

わかりました。 ご指摘の検証結果を添えて再度質問してみます。 私の質問に付き合っていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問