단건 / 대량 SMS 발송¶
진입 위치 (다수): - 환자 검색 → 환자 선택 → SMS 버튼 - 리콜 관리 → 다중 선택 → 일괄 SMS - 신청자관리 → 신청자 선택 → 콜 응대 → 안내 SMS - 예약노트 → 발송 설정 4종 (즉시/오시는길/전일/당일) - 고객관리 대시보드 → 실패 행 [재발송] 발송 엔진: 알리고 SMS API (
aligo.in)
한 줄 요약
환자/리드 1명 또는 다수에게 SMS·LMS·MMS 즉시 발송. 본문 직접 입력 또는 템플릿 선택 후 변수 치환.
단건 발송 (한 명)¶
진입¶
| 위치 | 버튼/메뉴 |
|---|---|
| 환자 검색 | 환자 행 → 우측 [SMS] 아이콘 |
| 환자 상세 | 우측 상단 [문자 보내기] |
| 차트(진료실) | 우측 패널 [SMS] 버튼 |
| 신청자 상세 | 콜 응대 모달 → [SMS 발송] |
SmsMessagePopup 모달¶
[SMS 발송 — 김보혜 (010-1234-5678)] [X]
─────────────────────────────────────────────────────────
[템플릿 선택 ▾] 본문 입력 (변수 자동 치환):
[본문]
김보혜님, 안녕하세요. ...
[글자수 78 / 90 LMS 자동 전환 ⓘ]
─────────────────────────────────────────────────────────
[취소] [발송]
| 필드 | 설명 |
|---|---|
| 수신자 | 자동 입력 (현재 환자) — 수정 불가 |
| 템플릿 | 시드 + 운영자 등록 템플릿 선택 → 본문 자동 채움 |
| 본문 | 직접 작성 또는 템플릿 후 수정 |
| 변수 치환 | {{환자명}}, {{예약일}} 등 자동 치환 미리보기 |
| 글자수 자동 전환 | 90자 초과 → LMS / 2000자 초과 → MMS |
[발송] 클릭 → 알리고 즉시 발송 + sms_send_logs INSERT.
대량 발송 (다수)¶
진입 (3종)¶
| 위치 | 방법 |
|---|---|
| 리콜 관리 | 대상 환자 다중 선택 → 하단 [일괄 SMS 발송] |
| 환자 검색 | 검색 결과 다중 체크 → [일괄 SMS] |
| 고객관리 리스트 | 큐 다중 선택 → [일괄 발송] (Phase B-2) |
| 신청자관리 | 신청자 다중 선택 → [일괄 SMS] |
SmsMessagePopup (bulk 모드)¶
[SMS 일괄 발송 — 수신자 N명] [X]
─────────────────────────────────────────────────────────
[수신자 리스트 N명 펼치기 ▾]
[템플릿 선택 ▾] 본문:
[발송 전 미리보기 — 첫 환자 본문] [수신자별 변수 치환 확인]
─────────────────────────────────────────────────────────
[취소] [N명에게 발송]
| 안전장치 | 동작 |
|---|---|
| 수신거부 자동 차단 | sms_consent=0, ad_consent=0 환자 발송 제외 (전송 전 화면에 "N명 중 M명 제외" 표시) |
| 빈 전화번호 차단 | mobile_phone 빈 환자 자동 제외 |
| 5초 중복 클릭 가드 | global.__inflightCrmSendNow (PM2 fork mode 단일 프로세스) |
| 글자수 일관성 검증 | 본문이 SMS/LMS/MMS 경계에 걸치면 사용자에게 안내 |
템플릿 변수¶
| 변수 | 치환 값 |
|---|---|
{{환자명}} |
patients.name |
{{예약일}} |
예약된 가장 가까운 미래 예약일 (patient_reservations.scheduled_date) |
{{예약시간}} |
예약 시간 |
{{차트번호}} |
patients.chart_no |
{{병원명}} |
vegas_hospitals.hospitalName |
{{병원전화}} |
vegas_hospitals.phone |
추가 변수는 향후 추가 가능 — 코드 수정 필요.
발송 시각 / 지연¶
- 즉시 발송: 모달 [발송] 클릭 → 알리고 API 호출 (1~3초 내 환자 수신)
- 예약 발송: 예약노트 발송설정의 [예약] 버튼 →
sms_reserveINSERT (status=pending) → 1분 cron이 시각 도래 시 자동 발송
수신거부 (정보통신망법)¶
SMS 발송 전 자동 검사:
| 컬럼 | 값 | 결과 |
|---|---|---|
patients.sms_consent |
0 / NULL | ❌ 차단 (수신거부) |
patients.ad_consent |
0 / NULL | ❌ 차단 (광고/마케팅 거부) |
직원이 환자관리에서 환자 수정 시 동의 항목 변경 가능. 거부 환자는 모든 자동/수동 SMS 차단 — 정보통신망법 준수.
발송 이력¶
/crm/tasks(고객관리 리스트) — 자동 룰 발송 + 일괄 발송 통합/popup/customer-management/{patient_uid}→ 「문자」 탭 — 환자별 SMS 이력- 예약노트 좌측 "발송 이력" 섹션 — 해당 환자의 SMS 이력 (WI#18 v2)
알리고 비용¶
- SMS (90자): 약 8~9원
- LMS (2000자): 약 25~30원
- MMS (이미지): 약 75원
상세: 알리고 aligo.in 계정 → 단가 페이지
자주 묻는 질문 / FAQ¶
Q. SMS 발송했는데 환자가 안 받았다고 해요
체크 항목:
1. sms_send_logs 에서 해당 발송 ID 검색 → status가 sent인지 / failed인지
2. 환자 전화번호가 올바른지 (patients.mobile_phone)
3. 환자가 수신거부 등록되어 있는지 (sms_consent, ad_consent)
4. 환자 폰의 SMS 차단 설정 (KISA 스팸 신고 등)
5. 알리고 잔액 0원이면 발송 실패 → 알리고 계정 충전
Q. 글자수가 90자 넘어도 SMS로 보낼 수 있나요?
아니요. 90자 초과 시 자동 LMS로 전환 (비용 ↑). 2000자 초과 시 MMS로 전환.
Q. 일괄 발송 중 일부만 실패하면 어떻게 되나요?
각 환자별로 sms_send_logs INSERT — 성공/실패가 행별로 기록. 발송 완료 후 alert에 "N건 성공, M건 실패" 표시. 실패 행은 [재발송] 버튼.
Q. 발송 메시지 내용을 나중에 보고 싶어요
sms_send_logs.message_body 컬럼에 본문 저장. 환자별 문자 이력에서 클릭 → 전체 본문 확인.
Q. 광고 메시지를 보내려면 어떤 동의가 필요한가요?
patients.ad_consent=1 인 환자만 발송 가능. 정보성 안내(예약 안내, 결제 안내)는 sms_consent=1 로 충분.
Q. 카카오 알림톡으로 전환하면 비용이 절감되나요?
예. 알림톡은 건당 9~12원 + 사전 등록된 템플릿만 사용 가능. 친구톡은 단가 더 저렴. 현재 WI#19로 백엔드 개발 진행 중.
관련 페이지¶
- 메시지 자동 발송 — 예약 안내 / 시술 후 안내 자동화
- 예약노트 SMS 4종 — 예약 D-1/D 당일 자동 발송
- 고객관리 리스트 — 발송 이력 통합 검색
- 고객관리 상세 — 환자별 SMS/통화 이력
- 정보통신망법 안내 — 수신거부 처리