GAS를 사용하여 LINE Messaging API의 팔로우 이벤트에서 userId를 스프레드 시트에 전기

소개



"LINE Messaging API의 Push API를 사용하여 메시지를 보내고 싶다면 userId를 사용하여 보내려면 친구를 추가 할 때 userId를 가져 와서 스프레드 시트에 저장해야합니다."
이 기사에서는 친구 추가 시 userId를 스프레드시트에 전기하고 만약 ID가 중복된 경우 자동으로 삭제할 때까지의 흐름을 설명합니다.

전제



LINE Messaging API와 GAS의 연결은 이미 완료된 것으로 진행하고 있습니다.

목차



・완성도
· 전체 코드 샘플
・해설

완성도



개인정보 보호를 위해 이미지의 일부를 가공하고 있습니다


코드 전체



코드 전체는 이런 구도입니다.

코드.gs
// LINE Developersに書いてあるChannel Access Token
var access_token = "ここにトークンを入力"


function doPost(e){
//ポストで送られてきたJSONをパース
  var event = JSON.parse(e.postData.contents).events[0];

  var user_id = event.source.userId
  var eventType = event.type
  var nickname = getUserProfile(user_id);

// botが友達追加された場合に起きる処理
  if(eventType == "follow") {
    var data = SpreadsheetApp.openById("スプレッドシートのIDを入力").getSheetByName('シートの名前');
    var last_row = data.getLastRow();
    for(var i = last_row; i >= 1; i--) {
      if(data.getRange(i,1).getValue() != '') {
        var j = i + 1;
        data.getRange(j,1).setValue(nickname);
        data.getRange(j,2).setValue(user_id);
        data.getDataRange().removeDuplicates([2])
        break;
      }
    }
  }
}

// profileを取得してくる関数(コピペでOK)
function getUserProfile(user_id){ 
  var url = 'https://api.line.me/v2/bot/profile/' + user_id;
  var userProfile = UrlFetchApp.fetch(url,{
    'headers': {
      'Authorization' :  'Bearer ' + access_token,
    },
  })
  return JSON.parse(userProfile).displayName;
}

해설



1. 각 정보 취득


  var user_id = event.source.userId
  var eventType = event.type
  var nickname = getUserProfile(user_id);

처음은 if(event.type == true) 처럼 기술했습니다만 취득할 수 없었으므로 필요한 정보를 한 번 변수로 정의했습니다.
"사용자 ID 및 이벤트 유형 검색은 공식 참조"을 참조했습니다. 그런 다음 LINE의 표시 이름을 얻기 위해 getUserProfile 함수를 호출합니다.

2.친구 추가되었을 때 일어나는 처리



  if(eventType == "follow") {
    var data = SpreadsheetApp.openById("スプレッドシートのIDを入力").getSheetByName('シートの名前');
    var last_row = data.getLastRow();
    for(var i = last_row; i >= 1; i--) {
      if(data.getRange(i,1).getValue() != '') {
        var j = i + 1;
        data.getRange(j,1).setValue(nickname);
        data.getRange(j,2).setValue(user_id);
        data.getDataRange().removeDuplicates([2])
        break;
      }
    }
  }

먼저 스프레드시트를 지정합니다. 스프레드 시트의 ID는 ↓의 이미지로 말하면1WFnaEsqsOZ46hfx46_gOe-Rp4rf7BEIA_UxC6bDlQ3E의 부분입니다. 각자 ID를 복사해 주세요.


시트의 이름은 ↓의 birthday 라든지 user_id 의 부분입니다.

var last_row = data.getLastRow();

그런 다음 getLastRow() 에서 마지막 줄을 얻습니다.

for 문 처리


    for(var i = last_row; i >= 1; i--) {
      if(data.getRange(i,1).getValue() != '') {
        var j = i + 1;
        data.getRange(j,1).setValue(nickname);
        data.getRange(j,2).setValue(user_id);
        data.getDataRange().removeDuplicates([2])
        break;
      }
    }

방금 얻은 마지막 행의 한 줄 아래에 정보를 전기합니다.
var j = i + 1;
data.getRange(j,1).setValue(nickname);
data.getRange(j,2).setValue(user_id);
var j = i + 1; 에서 마지막 행의 다음 행을 지정하고 거기에 setValue에 값을 입력합니다.

여기에 하나의 주의점이 있습니다. 팔로우 이벤트는 친구 추가 시뿐만 아니라 차단 해제 시에도 발생하므로 그때마다 ID가 전기됩니다. 그 때문에, 중복했을 경우에 삭제하기 위한 처리를 써야 합니다.
data.getDataRange().removeDuplicates([2])
.removeDuplicates([2]) 라고 하는 바람에 써 주는 것만으로 간단하게 중복을 소거할 수 있습니다.
([2]에서 B열의 중복을 체크, [1]에서 A열의 중복을 체크할 수 있음)

끝에



이제 무사한 사용자 이름과 사용자 ID를 획득하고 전기할 수 있었습니다. 여기서 전기한 정보를 이용하면 다양한 Bot을 만들 수 있을 것 같네요. 덧붙여서 필자는 서클 멤버의 생일이 오면 전원에게 개인차로 통지하는 Bot을 작성해 보았습니다.

좋은 웹페이지 즐겨찾기