사전예약 CRM 자동화 2: Solapi·Google Sheets 연동
지난 글에 이어 프로젝트 CRM 파트 내용을 정리해보겠다.
💡 지난 글 참고!
사전예약 CRM 자동화 1: Solapi·Google Sheets 연동
🎯 모바일 게임 사전예약 캠페인 - CRM part 이번 프로젝트에서는 〈여고생과 리셋중〉 사전예약 캠페인의 CRM 파트를 맡아데이터 수집부터 웰컴 메일, SMS 리마인드까지 이어지는 흐름을 설계했다
yebeenxgrowth.tistory.com
📝 SMS

💡 SMS 역시 Google Sheets에 새 행이 추가되는 순간을 트리거로 사용한다.
사전예약 정보가 기록되면 Zapier가 이를 감지해, 바로 다음 액션을 실행한다.
📍 SMS는 메일과 달리 전송 가능한 시간이 제한(09:00–20:00)되어 있다.
그래서 시간 계산 → 조건 체크 → Delay 설정 등 여러 액션이 필요하고, 위와 같이 Mail보다 복잡한 플로우가 만들어진다.
step 1


📍 Trigger는 웰컴 메일과 동일하게 시트2를 기준으로 한다.
시트2에 ‘마케팅 수신 동의자’의 정보가 새로 들어오는 순간, SMS 자동화가 작동하도록 설정했다.
step 2

💡 Formatter by Zapier - Date / Time 설정
SMS는 법적으로 오전 9시~저녁 8시 사이에만 발송할 수 있기 때문에, 사용자가 사전예약을 입력한 시각을 정확하게 계산하는 것이 중요하다.
이때, Tally와 Zapier는 제출 시간을 기본적으로 UTC(협정 세계시)로 전달하기 때문에, SMS 발송 시간을 판단하려면 먼저 이를 한국 시간(KST)으로 바꿔야 한다.

📍 Transform: Format
UTC(협정 세계시) → 한국 시간(KST)
- Input: Tally에서 넘어온 제출 시간(UTC)
- From Format: YYYY-MM-DDTHH:mm:ssZ
→ Tally가 전달하는 기본 UTC 형식 - From Timezone: UTC
- To Format: YYYY-MM-DD HH:mm:ss
→ 이후 Python·Delay 단계에서 사용하기 쉬운 형태로 변환 - To Timezone: Asia/Seoul
→ 한국 시간으로 조정
step 3


💡 Looping by Zapier - Create Loop From Text 설정
Google Sheets에서 가져온 사용자 정보를 한 명씩 처리하기 위해 사용하는 단계다.
Loop는 데이터를 '단일 단위(이름 + 연락처 + 이메일 + 날짜)'로 묶어 다음 액션으로 넘기는 역할을 한다.
📍 이때, 날짜는 Formatter(step2)에서 변환된 날짜를 맵핑한다. Google Sheets에 있는 열을 가져오지 않도록 주의!
step 4


💡 Code by Zapier - Run Python
오전 9시~저녁 8시 사이 발송을 위해, SMS는 “사전예약 직후 가장 가까운 12:30에 일괄 발송”하도록 설계했다.
import datetime
try:
from zoneinfo import ZoneInfo
except ImportError:
from backports.zoneinfo import ZoneInfo
# 트리거에서 받은 날짜/시간
input_datetime = input_data['trigger_date']
# 한국 시간대 설정 (KST)
dt = datetime.datetime.strptime(input_datetime, "%Y-%m-%d %H:%M:%S")
dt = dt.replace(tzinfo=ZoneInfo("Asia/Seoul"))
# 1. 오늘 발송 목표 시각 (12:30:00 KST)을 계산
target_today = dt.replace(hour=12, minute=30, second=0, microsecond=0)
# 2. 조건에 따라 발송 시각 결정
if dt < target_today:
# dt가 오늘 12:30:00 KST보다 이전인 경우 (즉, 12:29:59까지 입력된 경우)
# :arrow_right: 오늘 12:30:00에 발송
delay_time = target_today
else:
# dt가 오늘 12:30:00 KST이거나 그 이후인 경우
# :arrow_right: 다음날 12:30:00에 발송
delay_time = target_today + datetime.timedelta(days=1)
# Zapier의 'Delay Until' 액션이 정확히 인식하도록 KST 시간대 정보(+09:00)가 포함된
# ISO 8601 형식으로 출력합니다.
output = {'delay_until': delay_time.isoformat()}
- 사전예약 입력 시간이 12:30 이전이면 → 오늘 12:30 발송
- 12:30 이후라면 → 다음날 12:30 발송
step 5


💡 Delay Until - Delay by Zapier 설정
Python 단계에서 계산된 발송 시각(delay_until)까지 Zap 실행을 잠시 멈춰 두는 단계다.
Zapier가 “12:30까지 기다렸다가 다음 액션을 실행하라”고 이해할 수 있는 표준 포맷이다.
step 6
SOLAPI - 알림톡과 문자메시지 발송, CRM 자동화 솔루션
CRM을 통해 고객에게 더 나은 서비스를 제공하고 비즈니스의 성장을 이룰 수 있는 방법을 소개합니다. 대량문자, 카카오 알림톡 친구톡, 문자 API연동, 앱발송, 웹발송, CRM자동화, 보이스톡
solapi.com

💡 Send Text Message - SOLAPI
Delay Until 단계에서 지정된 발송 시각이 되면, Zapier는 마지막 단계인 Solapi를 실행해 실제로 문자를 보내게 된다.
Solapi는 국내에서 많이 사용하는 SMS API 서비스로, Zapier와 연동하면 코드 없이도 자동 문자 발송이 가능하다.


📍 수신번호
Loop 단계에서 넘어온 사용자 연락처 값을 연결한다.
각 사용자마다 개별 번호가 매핑되므로, 자동화 전체가 1:1 개인 발송 방식으로 동작하게 된다.
📍 발신번호
Solapi 콘솔에서 사전에 등록해 둔 브랜드 발신번호를 선택한다.
(인증된 번호만 사용할 수 있기 때문에 브랜드 신뢰성을 지킬 수 있다.)
📍 문자 내용
이메일과 마찬가지로, SMS에도 개인화 텍스트(이름 필드)를 삽입해 사용자가 “나에게 온 메시지”라고 느끼도록 구성했다.

🧠 메시지 설계
이번 SMS는 단순 안내가 아니라 친밀감과 기대감을 유지하는 편지 형식으로 구성했다.
- 편지 톤으로 시작해 광고 문자 느낌을 줄이고, 사용자가 “나에게 온 메시지”로 느끼도록 설계
- 보상 3종(다이아·소환권·마정석)을 구체적으로 언급해 사전예약 유지 동기를 자연스럽게 강화
- 게임의 세계관 문장을 포함해 분위기·스토리 몰입을 이어감
- 사전예약 링크를 자연스럽게 삽입해 행동 유도로 연결
전반적으로, 출시까지 공백 기간이 있는 상황에서 사용자가 이탈하지 않도록 부드럽고 감성적인 리마인드 메시지 흐름을 만드는 데 초점을 맞췄다.
🌱 Pre-launch CRM을 진행하며, 유효데이터 기준 오류 및 지연 0%를 달성할 수 있었다. 이를 통해 데이터 기반 캠페인이 안정적으로 실행될 수 있는 환경을 구축했다.