Google Apps Script의 트리거 기능을 이용해서 메시지 발송을 자동화 하는 방법
안녕하세요. 저는 SOLAPI에서 DevOps이자 DX 엔지니어 업무를 담당하고 있는 Lucy입니다!
이번 글에서는 Google Apps Script를 이용해서 메시지를 발송하는 방법에 이어서 설치형 트리거를 이용해 메시지를 자동으로 발송하는 방법을 알아보겠습니다.
트리거 기능을 활용하시지 않는 분들께서는 지난글을 참조해주세요!
트리거 이용을 위한 코드 변경
위의 사진은 이번 글에 예제로 사용될 구글 스프레드시트 데이터입니다.
해당 스프레드시트의 자료를 이용해 주문상품이 변경되면 오른쪽에 있는 전화번호로 문자를 발송하도록 해보겠습니다.
기존에 있던 코드를 트리거에 있는 값을 수신번호로 사용하여 메시지를 발송할 수 있도록 코드를 수정해보겠습니다.
// 010-1234-5678 형식을 01012345678로 바꿔주는 함수
function cleanPhoneNumber(phoneNumber) {
return phoneNumber.replace(/[^0-9]/g, "");
}
// 특정 셀의 값이 변경되었을 때 실행되는 함수
function editTrigger(e) {
const sheet = e.range.getSheet();
const editedCell = e.range;
// 현재 셀의 값
const editedCellValue = editedCell.getValue();
// 편집된 셀 바로 왼쪽 셀 가져오기 (같은 행, 열 - 1)
const leftCell = sheet.getRange(editedCell.getRow(), editedCell.getColumn() - 1);
const leftValue = leftCell.getValue();
// 편집된 셀 바로 오른쪽 셀 가져오기 (같은 행, 열 + 1)
const rightCell = sheet.getRange(editedCell.getRow(), editedCell.getColumn() + 1);
const rightValue = rightCell.getValue();
Logger.log(`왼쪽 셀 값: ${leftValue}, 오른쪽 셀 값:${rightValue}, 현재 셀 값: ${editedCellValue}`);
sendTextMessage(cleanPhoneNumber(rightValue), leftValue, editedCellValue);
}
// 발송 코드, 복사 붙여넣기 후 apiKey, secret, from, to, text 등을 수정해서 발송해보세요! / 알림톡 발송의 경우 kakaoOptions 내 속성까지도 수정해주세요.
function sendTextMessage(phoneNumber = '01000000000', userName = '', productName = '') {
// SOLAPI에서 발급받은 자격증명 / https://console.solapi.com/credentials
var apiKey = 'SOLAPI에서 발급받은 API Key'
var secret = 'SOLAPI에서 발급받은 API Secret Key'
// 인증을 위해 헤더에 포함될 인증정보 생성
var now = new Date().toISOString()
var genRanHex = size => [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
var salt = genRanHex(64)
var message = now + salt
var byteSignature = Utilities.computeHmacSha256Signature(message, secret);
var signature = byteSignature.reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length === 1 ? '0' : '') + chr;
},'');
// SOLAPI API 발송에 필요한 데이터 설정
var url = "https://api.solapi.com/messages/v4/send-many/detail";
var data = {
messages: [{
from: 'SOLAPI에서 등록한 발신번호/01000000000 형식으로 입력해주세요!',
to: phoneNumber,
// \n은 엔터대신 활용할 수 있습니다!
text: `${userName}님, 주문하신 ${productName}이 배송준비 중 상태입니다.\n운송장번호: 12345678`,
// 알림톡 발송 시 주석을 풀고 pfId, templateId를 입력해주셔야 합니다 / #{변수} 등의 치환문구가 존재하면 variables 값도 채워넣어주세요!
// 알림톡 발송시에는 text를 제거하고 발송해야 합니다!
// kakaoOptions: {
// pfId: '등록하신 카카오 채널 ID(pfId)를 입력해주세요!',
// templateId: '등록하신 카카오 알림톡 템플릿 ID를 입력해주세요!',
// variables: {'#{홍길동}': text, '#{변수2}': ''}
// }
}]
}
var response = UrlFetchApp.fetch(url, {
payload: JSON.stringify(data),
method: 'post',
headers: { Authorization: `HMAC-SHA256 apiKey=${apiKey}, date=${now}, salt=${salt}, signature=${signature}`},
contentType: 'application/json'
})
var result = JSON.parse(response) || {};
// API 발송 결과에 대한 내용 출력
Logger.log(result)
}
이전과는 달리 cleanPhoneNumber
, editTrigger
등의 새로운 코드가 생성되었습니다.
또다른 특이사항으로는 sendTextMessage
코드가 수신번호, 유저명, 상품명을 입력받도록 변경된 것을 확인할 수 있습니다.
변경된 코드를 다시 그대로 복사 붙여넣기 후 기존의 Google Apps Script 코드 편집화면에 붙여넣어 주세요.
복사 붙여넣기 한 코드를 연동하시는 상황에 맞게 apiKey
, secret
, from
, to
등을 수정한 다음, 트리거를 추가하는 방법을 설명해드리겠습니다.
트리거 추가하기
SOLAPI의 발송 시스템을 이용하기 위해서는 onEdit과 같은 단순 트리거가 아닌 설치형 트리거를 이용해야 합니다.
이번 글에서는 셀 값이 바뀌면 발송하도록 설정해야 하기 때문에 설치형 트리거 중에서도 이벤트 기반 트리거를 추가해 보겠습니다.
앱 스크립트 메뉴 중 알람 시계 모양의 아이콘을 클릭합니다.
그 다음, 트리거 페이지에서 + 트리거 추가
버튼을 클릭한 다음, 설정화면에서 아래의 이미지와 같이 설정하고 저장 버튼을 클릭합니다.
처음 트리거를 설정하면 아래와 같이 로그인 화면과 권한을 요구하는 팝업을 확인할 수 있습니다.
그럴 때 아래 이미지 기준 자신이 사용할 구글스프레드 소유 계정을 클릭하여 로그인합니다.
그 다음 아래의 이미지에서 빨간색으로 표시된 부분을 클릭합니다.
허용 버튼을 클릭하고 나면 아래와 같이 trigger가 생성된 것을 확인할 수 있습니다.
이제 마지막으로 주문상품을 변경해서 실제로 발송이 진행되는지 테스트 해보겠습니다.
김철수의 주문 상품을 신발 1켤레
에서 신발 2켤레
로 변경 해보겠습니다.
값이 정상적으로 변경되었습니다. 이제 실제로 메시지가 발송되었는지 확인 해보겠습니다.
실제로 접수가 되어 발송이 진행된 것을 확인할 수 있습니다!
글에서는 발송이 실패가 되었지만, 이는 실제 존재하지 않는 번호로 발송하여 표시되는 상태값입니다.
실제 연동하실 때에는 수신번호, 발신번호 등을 올바른 값으로 지정한 다음 테스트하시면 정상적으로 수신되는 것을 확인하실 수 있습니다.
솔라피는 다양한 도구들을 통해 메시지 발송을 쉽게 연동하도록 도와드리고 있습니다!
관련하여 궁금하신 사항은 채팅 상담 혹은 기술 상담을 통해 문의하시면 언제든 빠르게 담당자가 확인하여 답변하고 있으니 편히 문의해주세요!