소개
시도하고자 했던 것과 그 이유
평소 고객 관리를 하면서 가장 번거로웠던 점은 두 가지였습니다.
매번 상황에 맞는 SMS 마케팅 문구를 고민해서 작성하는 것.
수많은 고객 리스트 중에서 특정 조건(예: "운동 좋아하는 사람")에 맞는 타겟만 골라내는 것.
"가장 익숙한 구글 스프레드시트에서 Gemini를 이용해 문구를 작성하고, 사람처럼 말해도 찰떡같이 타겟을 뽑아 문자로 바로 보낼 수 있다!!" 는 허세임님의 사례를 보고 그대로 따라하기 시작했습니다.
진행 방법
활용한 도구
Google Sheets & Apps Script: 데이터베이스 및 UI/로직 처리
Gemini 2.5 Flash Preview API: 마케팅 문구 작성 및 자연어 타겟 필터링 (조건식 생성)
Naver Cloud Platform (SENS): 실제 문자(SMS/LMS) 발송
주요 기능 및 구현 과정
1. 스마트칩을 활용한 프롬프트 관리 마케팅 문구를 작성할 때 프롬프트를 셀에 직접 치지 않고, 구 글 닥스(스마트칩)로 연결하여 관리했습니다. Apps Script의 Advanced Sheets API를 사용해 스마트칩 내부의 텍스트를 읽어와 Gemini에게 전달하도록 구현했습니다.
2. AI 기반 타겟 고객 추출 (자연어 처리) 가장 공들인 부분입니다. "운동 좋아하는 사람 찾아줘"라고 입력하면, DB에 '운동'이라는 단어가 없어도 '골프', '등산' 등을 찾아내도록 만들고 싶었습니다.
초기 문제: AI가
row[3].includes('운동')처럼 단순하게 짜서 검색 결과가 0건이 나옴.해결: 프롬프트에 "의미 기반 확장(Semantic Expansion)" 규칙을 추가하고, 실제 데이터 샘플 10개를 힌트로 주어 AI가 눈치껏 코드를 짜도록 유도했습니다. 잘 한 건지는 모르겠습니다. ㅠㅠ
[사용한 핵심 프롬프트]
Markdown
# Role
당신은 Google Apps Script JavaScript 전문가입니다.
# Context (데이터 힌트)
(실제 DB 데이터 10줄을 여기에 동적으로 주입)
# Critical Rules
[최우선] 의미 기반 무한 확장 (Semantic Expansion)
사용자가 '운동'이라고 했다고 해서 includes('운동')만 작성하면 실패입니다. DB에는 '운동'이라는 단어가 없을 수 있습니다.
반드시 구체적인 종목들로 확장하여 || (OR) 연산자로 연결하세요.
확장 예시 가이드:
"운동/스포츠" -> 골프, 등산, 축구, 야구, 헬스, 요가, 필라테스, 러닝, 수영
"재테크/돈" -> 주식, 부동산, 코인, 투자, 적금, 비트코인
"여행/휴식" -> 캠핑, 차박, 호캉스, 해외여행, 국내여행, 바, 수면
"예술/문화" -> 독서, 영화, 음악, 전시회, 뮤지컬
Null Safety (안전성 보장)
데이터가 비어있을 수 있으므로, 모든 문자열 비교에는 (row[n] || '') 패턴을 사용하세요.
예: (row[3] || '').includes('골프')
Output Format (출력 형식)
오직 JSON만 출력하세요: { "condition": "코드내용" }
3. 팝업 UI 및 문자 발송 추출된 명단을 바로 보내지 않고, 체크박스가 있는 팝업창(HtmlService)을 띄워 최종 확인 후 네이버 SENS API를 통해 문자를 발송했습니다. 이때 {{이름}} 변수를 실제 수신자 이름으로 치환하는 기능도 넣었습니다.
결과와 배운 점
배운 점과 나만의 꿀팁
AI에게 '정답지'를 보여주세요: 처음엔 타겟팅이 계속 실패했는데, DB에 들어있는 실제 데이터 샘플을 프롬프트에 같이 던져주니 정확도가 비약적으로 상승했습니다. (Few-shot prompting의 중요성)
API 연동의 복병은 '설정'에 있다: 코드가 완벽해도 네이버 클라우드 발신번호 승인 대기나, 통신사 부가서비스(번호도용차단) 때문에 실패하는 경우가 많았습니다. 에러 로그를 꼼꼼히 찍어보는 게 중요합니다.
시행착오 (Trial & Error)
이모지 문제: 네이버 문자는 이모지(🎄)를 지원하지 않아 전송 실패가 떴습니다. 정규식으로 이모지를 자동 제거하는 로직을 추가하여 해결했습니다.
통신사 차단: 코드는 성공했는데 문자가 안 와서 확인해보니, 제 폰에 '번호도용 문자차단 서비스'가 가입되어 있었습니다. 이를 해지하니 바로 문자가 도착했습니다. (에러코드 3018)
앞으로의 계획 지금은 단체 문자를 보내지만, 앞으로는 고객별로 Gemini가 각각 다른 맞춤형 안부 인사를 작성해서 보내는 '초개인화 CRM'