21기 세븐톡스
안녕하세요!
세븐톡스AI에게 무엇이든 물어보세요
궁금한 카테고리를 선택하세요
로그인 확인 중...
로그인 후 세븐톡스AI와 만나보세요
서비스 이용을 위해 아래 개인정보 처리방침에 동의해주세요.
더 클라세움(이하 "회사")은 「개인정보 보호법」에 따라 이용자의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보처리방침을 수립·공개합니다.
회사는 다음의 목적을 위해 개인정보를 수집·이용합니다.
회사는 다음의 개인정보 항목을 수집합니다.
| 구분 | 수집 항목 |
|---|---|
| 필수항목 | 이름, 연락처, 성별, 나이, 신장, 체중 |
| 선택항목 | 추천인 정보, 팀명 |
| 건강정보 (민감정보) |
목표 감량치, 스트레스 정도, 다이어트 경험, 건강 이상 증상, 소화 상태, 배변 습관, 현재 복용 약물 |
회사는 이용자의 건강정보(민감정보)를 수집합니다. 이는 「개인정보 보호법」 제23조에 따른 민감정보에 해당하며, 맞춤형 건강관리 서비스 제공을 위해 필수적으로 수집됩니다.
※ 민감정보는 오직 건강관리 서비스 제공 목적으로만 사용되며, 제3자에게 제공되지 않습니다.
회사는 원칙적으로 개인정보 수집 및 이용목적이 달성된 후에는 해당 정보를 지체 없이 파기합니다.
| 보유 항목 | 보유 기간 | 근거 |
|---|---|---|
| 회원 기본정보 (이름, 연락처 등) |
회원 탈퇴 시까지 또는 최대 3년 |
개인정보 보호법 |
| 건강정보 (민감정보) |
3년 | 정보주체 동의 |
| 서비스 이용기록 소비자 불만/분쟁처리 |
3년 | 전자상거래법 |
| 표시·광고에 관한 기록 | 6개월 | 전자상거래법 |
| 웹사이트 방문 기록 | 3개월 | 통신비밀보호법 |
파기 방법: 전자적 파일 형태는 복구 불가능한 방법으로 영구 삭제하며, 종이 문서는 분쇄기로 분쇄하거나 소각합니다.
회사는 원칙적으로 이용자의 개인정보를 제3자에게 제공하지 않습니다. 다만, 이용자의 동의가 있거나 법령에 의한 경우는 예외로 합니다.
이용자는 언제든지 다음의 권리를 행사할 수 있습니다.
시행일자: 2025년 1월 1일
최종 수정일: 2025년 1월 1일
본 방침은 관련 법령 및 회사 정책에 따라 변경될 수 있으며,
변경 시 서비스 내 공지를 통해 안내드립니다.
입금하지 않으시면 서비스 등록이 어렵습니다.
숫자만 입력해주세요
cm 단위로 입력해주세요
kg 단위로 입력해주세요
빼고 싶은 체중을 입력해주세요
해당하는 것을 선택해주세요
경험이 있다면 종류와 횟수를 적어주세요
증상이나 불편사항을 적어주세요
속쓰림, 더부룩함, 위염 등
평균 횟수를 선택해주세요
건강 관련 고민을 적어주세요
고혈압약, 당뇨약, 알러지약 등
Apps Script에서 배포한 웹앱 URL을 붙여넣으세요
// SevenTox-GPT Google Apps Script (v2.0)
// 회원목록 시트 컬럼 (20개):
// 1이름, 2연락처, 3등록일시, 4개인정보동의, 5추천인, 6추천인전화번호, 7팀명,
// 8성별, 9신장, 10나이, 11몸무게, 12감량치, 13스트레스, 14다이어트유무,
// 15아픈곳, 16소화상태, 17대변횟수, 18현재문제점, 19드시는약, 20입금여부
function doGet(e) {
var action = e.parameter.action;
if (action === 'logQuestion') return logQuestion(e);
if (action === 'verify') return verifyMember(e);
if (action === 'getPreviousData') return getPreviousData(e);
// 하위 호환 (이름만으로 확인)
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('회원목록');
var name = e.parameter.name;
if (!name) return jsonResponse({success: false, error: '이름 필요'});
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][0] && data[i][0].toString().trim() === name.trim()) {
return jsonResponse({success: true, verified: true});
}
}
return jsonResponse({success: true, verified: false});
}
// 회원 확인 (이름 + 전화번호 뒷4자리)
function verifyMember(e) {
try {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('회원목록');
var name = e.parameter.name;
var phone4 = e.parameter.phone4;
if (!name || !phone4) {
return jsonResponse({success: false, error: '이름과 전화번호 뒷4자리 필요'});
}
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
var rowName = data[i][0] ? data[i][0].toString().trim() : '';
var rowPhone = data[i][1] ? data[i][1].toString().replace(/[^0-9]/g, '') : '';
var rowPhone4 = rowPhone.slice(-4);
if (rowName === name.trim() && rowPhone4 === phone4) {
var hasAge = data[i][9] ? true : false; // 나이는 10번째 컬럼 (인덱스 9)
return jsonResponse({
success: true, verified: true,
surveyCompleted: hasAge,
message: hasAge ? '로그인 성공' : '서베이를 완료해주세요.'
});
}
}
return jsonResponse({success: true, verified: false, message: '회원정보 불일치'});
} catch(err) {
return jsonResponse({success: false, error: err.toString()});
}
}
// 이전 참가자 데이터 조회
// 컬럼순서: 1이름,2연락처,3등록일시,4개인정보동의,5추천인,6추천인전화번호,7팀명,
// 8성별,9신장,10나이,11몸무게,12감량치,13스트레스,14다이어트유무,15아픈곳,
// 16소화상태,17대변횟수,18현재문제점,19드시는약,20입금여부
function getPreviousData(e) {
try {
var name = e.parameter.name;
var phone4 = e.parameter.phone4;
if (!name || !phone4) {
return jsonResponse({success: false, message: '이름과 전화번호 필요'});
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('이전참가자');
if (!sheet) {
return jsonResponse({success: true, found: false, message: '이전참가자 시트 없음'});
}
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
var rowName = String(data[i][0]).trim();
var rowPhone = String(data[i][1]).replace(/[^0-9]/g, '');
if (rowName === name.trim() && rowPhone.slice(-4) === phone4) {
return jsonResponse({
success: true,
found: true,
data: {
team: data[i][6] || '', // 7번째 컬럼 (인덱스 6)
gender: data[i][7] || '', // 8번째 컬럼 (인덱스 7)
height: data[i][8] || '', // 9번째 컬럼 (인덱스 8)
age: data[i][9] || '', // 10번째 컬럼 (인덱스 9)
weight: data[i][10] || '', // 11번째 컬럼 (인덱스 10)
targetLoss: data[i][11] || '', // 12번째 컬럼 (인덱스 11)
stress: data[i][12] || '', // 13번째 컬럼 (인덱스 12)
dietExperience: data[i][13] || '',// 14번째 컬럼 (인덱스 13)
painAreas: data[i][14] || '', // 15번째 컬럼 (인덱스 14)
digestion: data[i][15] || '', // 16번째 컬럼 (인덱스 15)
bowel: data[i][16] || '', // 17번째 컬럼 (인덱스 16)
currentIssue: data[i][17] || '', // 18번째 컬럼 (인덱스 17)
medication: data[i][18] || '' // 19번째 컬럼 (인덱스 18)
}
});
}
}
return jsonResponse({success: true, found: false});
} catch(err) {
return jsonResponse({success: false, error: err.toString()});
}
}
// 질문 로깅
function logQuestion(e) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('질문내용');
if (!sheet) {
sheet = ss.insertSheet('질문내용');
sheet.appendRow(['날짜', '이름', '질문1', '질문2', '질문3', '질문4', '질문5', '질문6', '질문7', '질문8', '질문9', '질문10']);
}
var name = e.parameter.name || '';
var question = e.parameter.question || '';
var questionNum = parseInt(e.parameter.questionNum) || 1;
var sessionId = e.parameter.sessionId;
var timestamp = e.parameter.timestamp || new Date().toLocaleString('ko-KR');
// sessionId가 유효한 숫자인 경우에만 기존 행 업데이트
if (sessionId && sessionId !== '' && !isNaN(parseInt(sessionId))) {
var row = parseInt(sessionId);
var colIndex = questionNum + 2;
if (colIndex <= 12 && row > 1) {
sheet.getRange(row, colIndex).setValue(question);
}
return jsonResponse({success: true, sessionId: sessionId});
}
// 새 행 추가
var lastRow = sheet.getLastRow() + 1;
sheet.getRange(lastRow, 1).setValue(timestamp);
sheet.getRange(lastRow, 2).setValue(name);
sheet.getRange(lastRow, 3).setValue(question);
return jsonResponse({success: true, sessionId: lastRow.toString()});
} catch(err) {
return jsonResponse({success: false, error: err.toString()});
}
}
// 회원 등록 (POST) - 서베이 포함 (20컬럼)
// 컬럼순서: 1이름,2연락처,3등록일시,4개인정보동의,5추천인,6추천인전화번호,7팀명,
// 8성별,9신장,10나이,11몸무게,12감량치,13스트레스,14다이어트유무,15아픈곳,
// 16소화상태,17대변횟수,18현재문제점,19드시는약,20입금여부
function doPost(e) {
try {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('회원목록');
var data = JSON.parse(e.postData.contents);
var existing = sheet.getDataRange().getValues();
var phone = data.phone ? data.phone.toString().replace(/[^0-9]/g, '') : '';
var refPhone = data.referrerPhone ? data.referrerPhone.toString().replace(/[^0-9]/g, '') : '';
// 중복 체크 및 업데이트
for (var i = 1; i < existing.length; i++) {
var existName = existing[i][0] ? existing[i][0].toString().trim() : '';
var existPhone = existing[i][1] ? existing[i][1].toString().replace(/[^0-9]/g, '') : '';
if (existName === data.name.trim() && existPhone === phone) {
updateSurvey(sheet, i + 1, data);
return jsonResponse({success: true, message: '정보 업데이트 완료'});
}
}
// 새 회원 (20컬럼) - 실제 시트 순서에 맞춤
sheet.appendRow([
data.name || '', // 1. 이름
phone ? "'" + phone : '', // 2. 연락처
data.registrationDate || new Date().toLocaleString('ko-KR'), // 3. 등록일시
data.privacyAgree || 'Y', // 4. 개인정보동의
data.referrer || '', // 5. 추천인
refPhone ? "'" + refPhone : '', // 6. 추천인전화번호
data.team || '', // 7. 팀명
data.gender || '', // 8. 성별
data.height || '', // 9. 신장
data.age || '', // 10. 나이
data.weight || '', // 11. 몸무게
data.targetLoss || '', // 12. 감량치
data.stress || '', // 13. 스트레스
data.dietExperience || '', // 14. 다이어트유무
data.painAreas || '', // 15. 아픈곳
data.digestion || '', // 16. 소화상태
data.bowel || '', // 17. 대변횟수
data.currentIssue || '', // 18. 현재문제점
data.medication || '', // 19. 드시는약
data.payment || '' // 20. 입금여부
]);
return jsonResponse({success: true, message: '회원 등록 완료!'});
} catch(err) {
return jsonResponse({success: false, error: err.toString()});
}
}
function updateSurvey(sheet, row, data) {
if (data.team) sheet.getRange(row, 7).setValue(data.team);
if (data.gender) sheet.getRange(row, 8).setValue(data.gender);
if (data.height) sheet.getRange(row, 9).setValue(data.height);
if (data.age) sheet.getRange(row, 10).setValue(data.age);
if (data.weight) sheet.getRange(row, 11).setValue(data.weight);
if (data.targetLoss) sheet.getRange(row, 12).setValue(data.targetLoss);
if (data.stress) sheet.getRange(row, 13).setValue(data.stress);
if (data.dietExperience) sheet.getRange(row, 14).setValue(data.dietExperience);
if (data.painAreas) sheet.getRange(row, 15).setValue(data.painAreas);
if (data.digestion) sheet.getRange(row, 16).setValue(data.digestion);
if (data.bowel) sheet.getRange(row, 17).setValue(data.bowel);
if (data.currentIssue) sheet.getRange(row, 18).setValue(data.currentIssue);
if (data.medication) sheet.getRange(row, 19).setValue(data.medication);
if (data.payment) sheet.getRange(row, 20).setValue(data.payment);
}
function jsonResponse(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
중요: 스프레드시트에 3개 시트 필요:
회원목록: 이름 | 연락처 | 등록일시 | 개인정보동의 | 추천인 | 추천인전화번호 | 팀명 | 성별 | 신장 | 나이 | 몸무게 | 감량치 | 스트레스 | 다이어트유무 | 아픈곳 | 소화상태 | 대변횟수 | 현재문제점 | 드시는약 | 입금여부
이전참가자: 이전 기수 데이터 (동일 컬럼)
질문내용: 자동 생성됨
A열=1, B열=2, C열=3...
세븐톡스AI에게 무엇이든 물어보세요
궁금한 카테고리를 선택하세요