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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1073閲覧

webhookとgasの連携ができない

ishidakouiki

総合スコア73

LINE Messaging API

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

Google Apps Script

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

0グッド

1クリップ

投稿2023/09/16 08:15

実現したいこと

Lineとスプレットシートを連携させて、
Lineから仕事内容をスプレットシートで管理したい。

前提

Lineで仕事の進捗を上司に報告する機会があり、
Line Messageing API を使いスプレットシートを管理したいと考えております。

■■な機能を実装中に以下のエラーメッセージが発生しました。

実装手順・エラーメッセージ

①LIneとgasの連携
②gasとスプレットシートの連携
の順に実装しようと考えておりますが
①の連携が上手くいかなく困っております。

該当のソースコード

gasのコード

1function doGet(e) { 2 value = "デバックテスト" 3 const sheet = SpreadsheetApp.openById('削除しております'); 4 const ss = sheet.getSheetByName('顧客管理シート'); 5 const date = new Date(); 6 const targetRow = ss.getLastRow() + 1; 7 ss.getRange('A' + targetRow).setValue(date); 8 ss.getRange('B' + targetRow).setValue(value); 9 10 // //対象のスプレッドシートのID(対象のURLを開いてURLの「https://docs.google.com/spreadsheets/d/」以降から「/edit#gid=0」の間の文字列) 11 // var SPREADSHEET_ID = ''; 12 13 // // ユーザーのメッセージを取得 14 // var userMessage = JSON.parse(e.postData.contents).events[0].message.text; 15 // //LINEメッセージを「改行」で分割 16 // var messageParameter = userMessage.split(/\r\n|\n/); 17 18 // //対象のスプレッドシートを取得 19 // var targetSs = SpreadsheetApp.openById(SPREADSHEET_ID); 20 // //対象のシート取得 21 // var targetSht = targetSs.getSheetByName('顧客管理シート'); 22 // //最終行取得 23 // var lastRow = targetSht.getLastRow(); 24 // //現在年月日取得 25 // var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy年MM月dd日'); 26 27 // //各セルに書き込み 28 // //A列に年月日 29 // targetSht.getRange('A' + (lastRow + 1)).setValue(date); 30 // //B列に天気(メッセージの1行目) 31 // targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter[0]); 32 // //C列に今日あったこと(メッセージの2行目) 33 // targetSht.getRange('C' + (lastRow + 1)).setValue(messageParameter[1]); 34 35 // return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 36 37} 38 39

試したこと


gasでdoGet関数を実行=>顧客管理シートにデバックテストの文字が出力されるので
②gasとスプレットシートの連携は問題なし。


LIneとgasの連携
gasでデプロイ
イメージ説明
webhookで設定
イメージ説明

動作確認のためline画面で
文字を送信するが、
スプレットシートにデバックテストと表示されません。
またpostmanでURLを実行したところ
スプレットシートにデバックテストと表示される状態です。

原因がわからないのでご教授いただけるとありがたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

LINE Developers の Webhook設定の検証ボタンを押した場合に送出されるのは、GET リクエストではなく POST リクエストです。
したがって、Line Messaging API から GAS への通信疎通を正確に検証したい場合は、doPOSTメソッドにテスト内容を記述してください。

js

1function doPost(e) { 2 value = "デバックテスト" 3 const sheet = SpreadsheetApp.openById('削除しております'); 4 const ss = sheet.getSheetByName('顧客管理シート'); 5 const date = new Date(); 6 const targetRow = ss.getLastRow() + 1; 7 ss.getRange('A' + targetRow).setValue(date); 8 ss.getRange('B' + targetRow).setValue(value); 9}

補足

doPost 関数 が GAS になくても、LINE Developers 側での検証時に「OK」が表示されてしまう理由について。

doPost 関数 が GAS にない場合、LINE Developers からの POST リクエストに対して、GAS側は「doPost関数がありません」という内容が書かれたエラーページを返します。
ただし、GAS はこのエラーメッセージが書かれたページをステータスコード 200(OK)で返します。

一方、LINE Developers側では、「送出先から、何らかのレスポンスが、ステータスコード200(OK)で返ってくるかどうか」しかチェックしていないものと考えられます。(レスポンスの中身は何でもいい)

このため、GAS では有効な処理を行えていないのに、LINE Developersの検証側ではあたかも成功したかのように表示されてしまいます。

投稿2023/09/16 10:03

編集2023/09/16 11:14
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問