var nickname = getUserProfile(user_id);の箇所及びProfile関連のコードを全て削除したら動作しました。
矢崎 誠様 回答遅くなりました。
https://developers.line.biz/ja/docs/messaging-api/receiving-messages/#webhook-event-types
ご確認されたいのは、上記URLに記載のあるこのことでしょうか? フォロー解除イベントには"replyToken"が含まれないことがわかりましたがこのことが関係しているのでしょうか。
1対1のトークでは以下のWebhookイベントを受信できます。 メッセージイベント フォローイベント フォロー解除イベント 参加イベント 退出イベント メンバー参加イベント メンバー退出イベント ポストバックイベント ビーコンイベント アカウント連携イベント
フォローイベント LINE公式アカウントが友だち追加またはブロック解除されたことを示すイベントです。フォローイベントには応答できます。
JSON { "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "follow", "mode": "active", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U4af4980629..." } }
フォロー解除イベント LINE公式アカウントがブロックされたことを示すイベントです。
JSON { "type": "unfollow", "mode": "active", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U4af4980629..." } }
event.typeにはなにが入っているのかわかりますか? もうすごく前なので見てないかな…
ご回答ありがとうございます。 以下が実行内容の中身で実行内容 ①~③全て共通ですが 以下の” InsertRowBefore(reg); //1行目の前に行を挿入する処理”すら動作しません。
実行内容の中身 ①~③共通 else if(event.type == "unfollow") { var reg = 1; InsertRowBefore(reg); //1行目の前に行を挿入する処理 data.getRange(reg,1).setValue(user_id); //スプレッドシートにユーザーIDを入力する処理 data.getRange(reg,2).setValue(nickname); //スプレッドシートにニックネームを入力(getUserProfile(user_id)は別途関数で正しく取得済) data.getRange(3,3).setValue(4); //単に数値を入力するテストする処理 removeRow(); //スプレッドシート空白行削除 removeDuplicates(); //スプレッドシート同じユーザーIDがあれば重複行削除する処理 Logger.log('test'); //ログ出力 }
ブロックしてるとprofileが取れないのでgetUserProfileで失敗してるのかと思いました
矢崎 誠様回答ありがとうございます。 実行内容①~③はスプレッドシートへの書き込み動作です。 LINEでの「ブロック」以外のフォロー・メッセージ送信では問題なく シートへ書き込みできます。
※省略していましたが SpreadsheetApp.openById("シートID").getSheetByName("シート名"); もdoPostの前に設定しています。
サーバーレベルの確認で Logger.log('test');を色んな箇所にしかけて テストしましたが、LINEからフォローなどPOSTしても全くログがとれません。
※LINE関係なしの全く別のスクリプトでは正常にログとれます。
実行内容②③は、サーバーにログを出力する程度のものにしても動きませんか?