Q&A

LINE公式をブロックしたときに「Messaging API フォロー解除イベント」が動作しません。

作成環境 Google Apps Script      LINE公式アカウント

端末からの操作は follow→QRからの友達追加、ブロック解除 unfollow→トーク画面でブロック message→トーク画面からメッセージ送信です。

以下、実行内容①と③は動作しますが、unfollowの実行内容②のみ動作しません。 ②と③は同じ動作です。(unfollowとmessage箇所以外はコピペで同一)

var access_token = "LINE Developersに書いてあるChannel Access Token;

function doPost(e){ var event = JSON.parse(e.postData.contents).events[0]; var user_id = event.source.userId; var nickname = getUserProfile(user_id);

if(event.type == "follow") { 実行内容① } else if(event.type == "unfollow"){ 実行内容② } else if(event.type == "message"){ 実行内容③ } }

  • 0
  • 7
  • 4359
  • twitter facebook

var nickname = getUserProfile(user_id);の箇所及びProfile関連のコードを全て削除したら動作しました。

  • 0

矢崎 誠様 回答遅くなりました。

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..." } }

  • 0

event.typeにはなにが入っているのかわかりますか? もうすごく前なので見てないかな…

  • 1

ご回答ありがとうございます。 以下が実行内容の中身で実行内容 ①~③全て共通ですが 以下の” 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'); //ログ出力 }

  • 0

ブロックしてるとprofileが取れないのでgetUserProfileで失敗してるのかと思いました

  • 1

矢崎 誠様回答ありがとうございます。 実行内容①~③はスプレッドシートへの書き込み動作です。 LINEでの「ブロック」以外のフォロー・メッセージ送信では問題なく シートへ書き込みできます。

※省略していましたが SpreadsheetApp.openById("シートID").getSheetByName("シート名"); もdoPostの前に設定しています。

サーバーレベルの確認で Logger.log('test');を色んな箇所にしかけて テストしましたが、LINEからフォローなどPOSTしても全くログがとれません。

※LINE関係なしの全く別のスクリプトでは正常にログとれます。

  • 0

実行内容②③は、サーバーにログを出力する程度のものにしても動きませんか?

  • 0

Similar posts

    No similar posts

Are you sure? question.vm