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

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回答

777閲覧

【GAS】ユーザーのメッセージ,表示名,時刻を表示する

trophymax

総合スコア1

LINE Messaging API

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/06/26 17:53

編集2022/06/26 19:19

前提・実現したいこと

  • LINEbotとユーザーとの一対一のやり取りにて

ユーザーが送ったメッセージ、送った時刻、ユーザーのdisplayName
を取得し、スプレッドシートに表示したい

  • displayNameという変数に格納したい
  • (できればユーザーのアイコン画像のURLも表示したい)

参考

https://teratail.com/questions/304140
こちらのページを参考にしました。

現在のコード

プログラミングを全く初めて行ったので、書き方が全く分からないです。

JavaScript

1 2var TOKEN = "..."; 3 4function doPost(e) { 5 var sheet; 6 var userMessage = JSON.parse(e.postData.contents).events[0].message.text; 7 8 var sheet = SpreadsheetApp.getActiveSheet(); 9 var lastRow = sheet.getLastRow() + 1; 10 11 const req = JSON.parse(e.postData.contents); 12 const event = req.events[0]; 13 14 const userId = event.source.userId; 15 16 const endPoint = `https://api.line.me/v2/bot/profile/${userId}`; 17 const res = UrlFetchApp.fetch(endPoint, { 18 headers: { 19 "Content-Type": "application/json; charset=UTF-8", 20 Authorization: "Bearer " + TOKEN, 21 }, 22 method: "GET", 23 }); 24 25 const userDisplayName = JSON.parse(res.getContentText()).displayName; 26 27 let dateCell = sheet.getRange(lastRow, 1); 28 dateCell.setValue(new Date()); 29 30 let messageCell = sheet.getRange(lastRow, 2); 31 messageCell.setValue(userMessage); 32 33 let usernameCell = sheet.getRange(lastRow, 3); 34 usernameCell.setValue(userDisplayName); 35 36 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})) 37 .setMimeType(ContentService.MimeType.JSON); 38} 39 40 41

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

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

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

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

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

draq

2022/06/27 01:14

ソースをざっと読んだだけですが、問題なさそうに見えます。具代的に何に困ってるのでしょうか?
trophymax

2022/06/27 06:22

スプレッドシートに書き込まれません。メッセージ、時刻を転記させるコードは正しく作動していたのですが、ユーザー表示名も転記させようと書き換えたら、何も転記されなくなってしまいました。
guest

回答1

0

ベストアンサー

スプレッドシートに書き込まれません。メッセージ、時刻を転記させるコードは正しく作動していたのですが、ユーザー表示名も転記させようと書き換えたら、何も転記されなくなってしまいました。

とのことなので、ユーザー表示名の取得時にエラーが発生して、doPost から抜けているのかもしれません。

JavaScript

1const userDisplayName = JSON.parse(res.getContentText()).displayName;

ここでHTTPレスポンスコードが 200 以外が返っていいる場合、JSON.parseSyntaxError 例外を投げている可能性があります。この処理の前にレスポンスコード(res.getResponseCode()) の値を確認して 200 が返っていることを確認してください。

※質問者さんが参考にした回答のコードはそのあたりを端折っているので、できればきちんとレスポンスコードの値を確認して例外処理を書いたほうがいいです。


念のため確認ですが、アクセストークンは指定してますよね?
var TOKEN = "...";をそのまま書いているなんてことはありませんか?

投稿2022/06/27 08:29

draq

総合スコア2573

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

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

trophymax

2022/06/27 16:39

var TOKEN = "..."; をそのまま書いてました!アクセストークンを入れたらうまくいきました!ありがとうございます!
draq

2022/06/28 07:00

解決できてよかったです。 レスポンスコードが200出ない場合、LINE Platform は res.GetContentText() でエラーの原因を返してくれます。 今後はその内容を確認するようにすれば自力で解決できるようになると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問