GAS+linebot에서 google spreadsheet 근태 관리
대학의 아르바이트에서의 근태 관리용입니다.
하고 싶은 일
出勤
, 退勤
를 포함한 단어를 line에 투하하면, 그 사람의 유저명, 출근 시간대 및 메세지가 google spreadsheet에 기록된다. 出勤よろしくお願いします!
, お疲れ様でした!
등의 응답을 반환합니다. (바이트에서는 불필요했기 때문에 스프레드 시트에 퇴근의 기록을 남기지 않는 방침으로 실장했습니다. 아마 추가하는 것은 간단하다고 생각합니다.)
전제
우선 할 일
sheet1
로 한다. 아래와 같은 시트가 있으면 괜찮습니다.
line 의 액세스 토큰 취득
developers console에서 가져옵니다. 내 bot 채널의
Messaging API
에 있습니다.GAS 코드
스프레드시트 메뉴에서 GAS 코드 편집기를 엽니다.
GAS 스크립트는 다음과 같습니다.
ACCESSTOKEN
, id
빨리 각각 취득한 것을 사용합시다.덧붙여서, url을 get할 때에 돌려주어지는 변수는
reponse
라고 하는 변수명에 포함하지 않으면 에러가 됩니다.code.gs
var ACCESSTOKEN = "xxxxxx"
//spreadSheetの設定
var id = 'xxxxxx';//https://docs.google.com/spreadsheets/d/"この部分がidです"/edit#gid=1856578608
var spreadsheet = SpreadsheetApp.openById(id);
var URL = "https://api.line.me/v2/bot/message/reply"; // 応答メッセージ用のAPI URL
// ボットにメッセージ送信/フォロー/アンフォローした時の処理
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var reply_token= json.events[0].replyToken;
var user_id = json.events[0].source.userId;
var user_message = json.events[0].message.text; //ここにメッセージが格納される
// ユーザー名を取得する場合は、user_idから取得する必要がある。あと、ここはresponseという変数名に格納しないとエラーになる?
var response = UrlFetchApp.fetch(
'https://api.line.me/v2/bot/profile/' + user_id,
{
"headers": {
"Authorization": "Bearer " + ACCESSTOKEN,
}
}
);
profile = JSON.parse(response);
var username = profile.displayName
var today = new Date();
var month = today.getMonth() + 1;
var date = today.getDate();
var hour = today.getHours();
var minute = today.getMinutes();
var time = month + '月' + date + '日' +hour + ':' + minute;
// 時間帯によってどの時限のシフトか分ける
switch (true) {
case hour <= 13:
var period = "lunch";
break
case hour <= 14:
var period = "3rd period";
break
case hour <= 16:
var period = "4th period";
break
default:
var period = "finished";
break
}
if(user_message.includes('出勤')){//出勤という言葉を含む場合
var sheet;
sheet = spreadsheet.getSheetByName("sheet1");//sheet1に記入する
sheet.appendRow([user_message, username, period]);//シートにメッセージを記入
//返信
if (period == "finished") {
textMessage = "tutoring sessions are over for today!";
} else {
textMessage = username + 'さん、' + period + 'のシフトよろしくお願いします!';
}
pushMessage(textMessage, reply_token);
}
else if(user_message.includes('退勤')){//退勤という言葉を含む場合
textMessage = username + 'さん、' + 'お疲れ様でした!';
pushMessage(textMessage, reply_token);
}
}
/*メッセージを送信*/
function pushMessage(textMessage, replyToken) {
UrlFetchApp.fetch(URL, {
"headers": {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + ACCESSTOKEN,
},
"method": "post",
"payload": JSON.stringify({
"replyToken": replyToken,
"messages": [{
"type": "text",
"text": textMessage,
}],
}),
});
}
배포
웹 앱으로 배포합니다. 액세스할 수 있는 사용자는
全員
로 둡니다.이제 배포되므로 URL을 복사하고
webhook에 붙여넣습니다.
verify를 눌러 success이면 성공입니다.
라인에서의 행동
시간외에 출근하려고 했으므로, 이미 끝났다고 말해져 버렸습니다,,,
퇴근 때는 잘 작동합니다.
다만 출근과 퇴근으로 연동할 수 없는 것이 조금 걸린다. 하지만 괜찮습니까?
spreadsheet 측의 거동
여기는 고치는 것을 잊었고, finished 그대로 기록되고 있네요. 뭐 거동을 확인할 수 있었으므로 다음 번 이후 고치겠다고 합니다.
요약
GAS에서 Linebot을 만들어 스프레드 시트 측에서도 반영시킬 수있었습니다.
오류나 실수로 대체로 3시간 정도 걸렸다고 생각합니다.
GAS를 만질 수 있었던 것은 재미있었습니다! 그냥 디버깅하는 간단한 방법을 가르쳐주세요,,,
참고
GAS를 사용하여 LINEBOT을 만들자 (1).
Google Apps Script로 LINE Bot 만들기
Messaging API 참조 #분석
Messaging API 참조 #응답 메시지
클래스 UrlFetchApp
Reference
이 문제에 관하여(GAS+linebot에서 google spreadsheet 근태 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/greenteabiscuit/items/3ae7d58288e3382a8502텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)