GAS를 사용하여 LINE Messaging API의 팔로우 이벤트에서 userId를 스프레드 시트에 전기
14360 단어 LINEmessagingAPI자바스크립트linebotgas
소개
"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을 작성해 보았습니다.
Reference
이 문제에 관하여(GAS를 사용하여 LINE Messaging API의 팔로우 이벤트에서 userId를 스프레드 시트에 전기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/s_home/items/50bf4834189cf7ad1318
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 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;
}
var user_id = event.source.userId
var eventType = event.type
var nickname = getUserProfile(user_id);
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;
}
}
}
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;
}
}
var j = i + 1;
data.getRange(j,1).setValue(nickname);
data.getRange(j,2).setValue(user_id);
data.getDataRange().removeDuplicates([2])
이제 무사한 사용자 이름과 사용자 ID를 획득하고 전기할 수 있었습니다. 여기서 전기한 정보를 이용하면 다양한 Bot을 만들 수 있을 것 같네요. 덧붙여서 필자는 서클 멤버의 생일이 오면 전원에게 개인차로 통지하는 Bot을 작성해 보았습니다.
Reference
이 문제에 관하여(GAS를 사용하여 LINE Messaging API의 팔로우 이벤트에서 userId를 스프레드 시트에 전기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s_home/items/50bf4834189cf7ad1318텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)