📱 telinfo · 부재중 자동 SMS

부재중 전화 → 자동 SMS 응답 · 2026 최적 구현 설계

앱 설치 기기에서 부재중 전화가 오면 발신자에게 미리 설정된 SMS를 자동 발송하는 기능의 실현 가능성·아키텍처·안전장치·단계별 실행 계획. telinfo 코드 전수분석 + 2026 커뮤니티 레퍼런스 + 유사 앱 조사 기반.

기기 감지 + 서버 발송 하이브리드 스토커웨어 시그니처 최소화 기존 Solapi 인프라 재사용 2026-07 기준

✅ 결론: 가능. 단, telinfo는 의도적으로 SMS 발송을 배제한 설계

telinfo는 RECEIVE_SMS를 제거하고 SEND_SMS를 넣지 않은 스토커웨어 시그니처 회피 설계입니다. 따라서 기기 SMS 대신 "기기 BroadcastReceiver 감지 + 서버 Solapi 발송" 하이브리드가 2026 최적 — 기기 권한을 늘리지 않고 기존 인프라(sms.service.ts, device-token)를 재사용합니다.

1

telinfo 현재 능력 (전수분석)

"있는 것 vs 없는 것" — 코드 근거 기반.

요소상태근거 / 설명
SMS 발송 (기기)없음SEND_SMS 권한 없음, sms_adapter는 읽기만
SMS 발송 (서버)있음sms.service.ts — Solapi / AWS SNS (현재 관리자 테스트용)
부재중 실시간 감지없음call_log 사후 조회만. BroadcastReceiver·PhoneStateListener 없음
백그라운드 실행없음MainActivity, foreground service·WorkManager 없음
네이티브 코드없음순수 Flutter 플러그인만
연락처 매칭있음contact_directory 번호→이름 정규화
설정 저장부분shared_preferences 있음, 메시지 템플릿 저장 없음
another_telephony부분SMS 발송·수신 지원, 통화상태(부재중) 감지는 미지원 → 네이티브 필요
2

발송 경로 비교 (핵심 결정)

감지는 어느 경로든 기기 필수. 발송만 기기/서버 선택.

A. 기기 SMS (SmsManager)

  • 발신번호 = 사용자 실번호(수신자가 앎)
  • 무료(통신사 SMS)
  • SEND_SMS 권한 필요 — 스토커웨어 시그니처↑
  • Play Store default-handler 정책 관문
  • rate limit·로그를 기기가 관리

B. 서버 SMS (Solapi) 추천

  • 발신번호 = 사전등록 발신번호(사용자 번호 인증 등록 가능)
  • SEND_SMS 불필요 — 기기는 감지만
  • Play 정책 무관 · 스토커웨어 시그니처 낮음
  • 서버 rate limit·중복가드·발송 로그 (이미 인프라)
  • 건당 과금 · 발신번호 소유 인증(OTP) 필요

B 권장: telinfo 스토커웨어 회피 설계 유지 + 기존 Solapi 재사용. 사용자 번호를 Solapi 발신번호로 인증 등록하면 수신자에게 개인번호로 표시됩니다.

3

최적 아키텍처

이벤트 기반 — BroadcastReceiver는 시스템이 깨워주므로 상시 foreground 불필요(배터리 유리).

[기기 · Kotlin] MissedCallReceiver(android.intent.action.PHONE_STATE) RINGING ─(응답 OFFHOOK)──▶ 무시 RINGING ─(응답없이 IDLE)─▶ 부재중 확정 + incomingNumber ▶ 로컬 1차 필터(on/off·연락처만·업무시간·쿨다운) ▶ WorkManager 큐(오프라인 재시도) ─ device-token 서명 ─▶ API [서버 · Elysia] POST /recordings-device/auto-sms ▶ 2차 게이트(config·rate limit·중복·발신번호 인증) ▶ sms.service.sendSms(발신=사용자 등록번호, Solapi) ▶ auto_sms_log 기록
4

데이터 모델 & 컴포넌트

서버 SSOT(Postgres) + 기기 로컬 미러(오프라인 1차 필터).

레이어구성
서버 DB (Drizzle·UUIDv7)auto_sms_config: deviceId·enabled·template·senderNumber·senderVerified·onlyContacts·quietHours·cooldownHours·dailyLimit
auto_sms_log: id·deviceId·toNumber(마스킹)·body·status(sent/skipped/failed)·reason·sentAt
네이티브 (Kotlin)MissedCallReceiver.kt(PHONE_STATE 상태머신) · AutoSmsWorker.kt(WorkManager·백오프) · MainActivity.kt MethodChannel · Manifest receiver 등록(SEND_SMS 불필요)
Flutter (features/auto_sms/)domain AutoSmsConfig · data(서버 sync+prefs, MethodChannel 브리지) · presentation(설정 UI·미리보기·동의 온보딩 모달)
서버 (Elysia)라우트 +3(POST /auto-sms·GET|PUT /auto-sms/config·GET /auto-sms/logs) · auto-sms.service.ts 게이트 · db/schema/auto-sms.ts
5

안전장치 (필수)

자동 SMS는 남용·스팸 위험이 커 다층 가드가 필수입니다.

장치위치
명시적 동의 온보딩(1회)Flutter 모달
발신번호 소유 인증(Solapi 등록·OTP)서버 config
쿨다운(동일번호 재발송 차단, 기본 6h)기기 1차 + 서버 2차
일일 발송 한도(rate limit)서버
업무시간 게이트 · 연락처 화이트리스트기기 + 서버
발송 이력 전량 로깅auto_sms_log
응답한 통화 · 초단타 로봇콜 제외네이티브 판정
6

실행 계획 (DAG)

Critical Path: N0.1 → N1.1 → N2.1 → N3.1 (≈4 PR). N1.2/N1.3/N2.2는 병렬 가능.

Layer0 Layer1 Layer2 Layer3 ┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌──────────────┐ │N0.1* M 서버 │═▶│N1.1* M 서버API │═▶│N2.1* M 감지→서버│═▶│N3.1 M E2E+ │ │ DB스키마 │ │ 3종+게이트 │ │ WorkManager연결 │ │ 발송이력UI │ ├──────────────┤ ├──────────────────┤ ├─────────────────┤ └──────────────┘ │N0.2 S FE설정 │─▶│N1.2 M 네이티브 │─▶│N2.2 S 안전장치 │ │ 모델·prefs │ │ Receiver+판정 │ │ 쿨다운·발신인증 │ └──────────────┘ ├──────────────────┤ └─────────────────┘ │N1.3 S FE설정UI │ │ +동의온보딩 │ └──────────────────┘ ═ Critical Path ─ 의존
노드규모의존산출
N0.1*Mauto_sms_config·auto_sms_log 마이그레이션
N0.2SFlutter AutoSmsConfig + shared_preferences
N1.1*MN0.1서버 API 3종 + auto-sms.service 게이트
N1.2MN0.2Kotlin MissedCallReceiver + 부재중 판정
N1.3SN0.2설정 UI + 동의 온보딩
N2.1*MN1.1·N1.2WorkManager→device-token 서버 호출
N2.2SN1.1쿨다운·rate limit·발신번호 인증
N3.1MN2.1·N2.2E2E(감지→발송→로그) + 이력 UI
7

리스크 & 유사 앱

발신번호 인증 — Solapi는 발신번호 사전등록(OTP) 필요. 미인증 시 발송 차단(N2.2)
부재중 오탐 — 로봇콜·짧은 벨: RINGING 지속시간 임계 + 쿨다운 + 화이트리스트
Android 14+ 백그라운드 제약 — WorkManager expedited + 배터리 최적화 예외 안내
Play Store 전환 시 — CALL_LOG default-handler 정책. 현행 Firebase App Distribution 유지 전제(서버발송이라 SEND_SMS는 애초에 없음)

유사 앱 (전수조사)

특징
LeMi Call/SMS Auto Reply부재중·SMS·15+ 메신저 자동응답, 업무외 시간
AUTO MESSAGE1M+ 설치·4.2★, 거절/무시 통화 자동응답, Google 클라우드 싱크
Auto Message통화 거절/무시 시 발송, SMS 포워딩·스케줄
Smarter: Missed Call AssistantAI 자동응답, SMS·WhatsApp·WhatsApp Business
anandankur2816/auto-reply-calls (GitHub)오픈소스 BroadcastReceiver + SmsManager 레퍼런스

공통: 대부분 기기 SMS(SmsManager)라 Play에서 default-handler 이슈를 겪음 → telinfo가 서버 발송을 택하면 정책 관문 자체를 회피하는 차별점.