📇 명함 인식 결과
👤 #홍길동 과장 (ABC주식회사)
🏢 ABC주식회사 / 영업부
💼 과장
📱 +82-10-1234-5678
📧 [email protected]
🌐 www.example.co.kr
📍 본사:
📞 +82-63-450-3500 / 📠 +82-63-450-3517
서울특별시 강남구 테헤란로 123
📍 영업부:
📞 +82-2-597-8071~3 / 📠 +82-2-586-4388
경기도 성남시 분당구 판교로 456
🖼️ 명함 사진 → 연락처 프로필 사진으로 저장
1. 저장
2. 수정
3. 취소
거점이 1개뿐이면 📍 label 없이 한 줄로:
📞 +82-2-9876-5432
📠 +82-2-9876-5433
📍 서울시 강남구 테헤란로 123
외국 명함 템플릿 (koreanReading=true, 이 포맷 그대로 사용):
📇 명함 인식 결과
👤 John Smith (존 스미스)
🏢 Google LLC (구글)
💼 VP of Engineering
📱 +1-555-123-4567
📧 [email protected]
🖼️ 명함 사진 → 연락처 프로필 사진으로 저장
1. 저장
2. 수정
3. 취소
규칙:
이모지 순서 고정: 👤🏢💼📱📞📠📧🌐📍🖼️
없는 필드는 해당 줄 자체를 생략 (빈 줄 금지)
부가 설명이나 "20년차 전문가" 같은 OCR 잡데이터를 이름에 넣지 마라. 타이틀 필드에만 표시.
이름 라인(👤)에는 config 포맷만 적용: #이름 직함 (회사명)
직함은 💼 줄에 별도 표시. 👤 줄의 직함은 config appendTitle 적용 시에만, 짧게. ALL CAPS 금지.
✅ 👤 #Kweh Hoong Wayne + 💼 Technical Service Manager
❌ 👤 #Kweh Hoong Wayne TECHNICAL SERVICE MANAGER
하단은 반드시 1. 저장 / 2. 수정 / 3. 취소 번호 선택. "저장할까?" 같은 서술형 금지.
복수 거점: 명함에 주소가 2개 이상이면 거점(location) 단위로 그룹핑하여 출력.
각 거점은 📍 label + 해당 거점의 📞/📠/주소를 묶어서 표시.
명함에서 전화/팩스/주소가 시각적으로 분리되어 있으면 반드시 별도 거점으로 분리. 절대 병합하지 마라.
거점 label(본사/공장/영업부 등)은 명함에서 추출. 없으면 "거점1", "거점2"로 표시.
응답 처리
입력
동작
1
저장 진행
2
"뭘 수정할까?" 물은 뒤, 수정 후 다시 1/2/3 선택
3
취소
번호 외 텍스트 입력도 허용: "ㅇㅇ", "ok" → 1번 처리, "취소" → 3번 처리.
하지만 번호 입력을 우선 유도한다.
8. 명함 이미지 보정 + 사진 업로드 (항상 실행)
cardAsPhoto=true이면 무조건 실행한다. 모든 명함을 일관되게 보정한다.
말로만 "적용했어" 하지 말고 실제로 exec 도구로 명령어를 실행해라.
ImageMagick -deskew나 -distort Perspective 사용 (Nano Banana Pro가 전부 처리)
Nano Banana Pro API 실패 시: 원본(raw.jpg)을 그대로 업로드하고 "이미지 보정 실패: 원본으로 저장" 알림.
9. 중복 감지 (자동 2필드 매칭)
저장 전 반드시 이름 + 휴대폰 번호 2개 필드로 기존 연락처를 자동 검색한다. 사용자가 요청하지 않아도 항상 실행.
검색 로직
# 1단계: 이름으로 검색
GET /google-contacts/v1/people:searchContacts?query=홍길동&readMask=names,phoneNumbers,emailAddresses
# 2단계: 휴대폰 번호로 검색
GET /google-contacts/v1/people:searchContacts?query=%2B82-10-1234-5678&readMask=names,phoneNumbers,emailAddresses
번호 검색 시 정규화된 +82 포맷과 원본(010) 포맷 모두로 검색하여 누락을 방지한다.
매칭 판정
이름 일치
번호 일치
판정
동작
✅
✅
확정 중복
사용자에게 옵션 제시
✅
❌
동명이인 가능
사용자에게 알림 후 진행
❌
✅
번호 재사용 가능
사용자에게 알림 후 진행
❌
❌
신규
바로 저장
확정 중복 시 출력 (이름+번호 모두 일치)
아래 템플릿을 그대로 출력한다. 포맷 변경 금지.
⚠️ 중복 연락처 발견
기존:
👤 홍길동
📱 +82-10-1234-5678
📧 [email protected]
이번 명함:
👤 #홍길동 과장 (ABC주식회사)
📱 +82-10-1234-5678
📧 [email protected]
1. 새로 저장
2. 기존 업데이트
3. 취소
부분 일치 시 출력 (이름만 또는 번호만 일치)
아래 템플릿을 그대로 출력한다. 포맷 변경 금지.
ℹ️ 유사 연락처 발견
기존:
👤 홍길동
📱 +82-10-9999-0000
이번 명함:
👤 #홍길동 과장 (ABC주식회사)
📱 +82-10-1234-5678
번호가 다름. 그대로 새로 저장할까?
신규 (중복 없음)
중복 없으면 중복 관련 메시지 자체를 출력하지 않는다. 바로 사용자 확인으로 넘어간다.
10. Google Contacts 저장
Maton API Gateway (People API)를 사용. 전체 필드 + 커스텀 Name + 사진 지원.
파이프라인 종료 시 (성공, 취소, 에러 무관) $BIZCARD_TMP 디렉터리 전체 삭제 (rm -rf "$BIZCARD_TMP").
다른 세션의 파일을 건드리지 않는다.
11. 설정 관리 — /bizcard config
설정 조회
사용자가 /bizcard config 또는 "명함 설정"을 입력하면, 아래 템플릿을 그대로 복사해서 출력한다. 절대 다른 포맷으로 바꾸지 마라. on/off 값만 config.json 실제 상태에 맞춰 교체.
출력 템플릿 (이 포맷 그대로 사용):
📇 Bizcard Settings
1. Hashtag : on 🟢 — #이름 (카카오 자동추가 방지)
2. Append title : on 🟢 — 이름 뒤에 직함
3. Append company : off ❌ — 이름 뒤에 (회사명)
4. Card as photo : on 🟢 — 명함→연락처 사진
5. Korean reading : on 🟢 — 외국 이름 한국어 독음
6. Korean style name : on 🟢 — 성 비움, 이름에 풀네임
00 = Reset ♺
38 = All on 🟢
49 = All off ❌
번호만 입력하면 on↔off 전환.
이모지 규칙:on → 🟢, off → ❌. 값 바로 뒤에 이모지 붙인다.
규칙:
번호, 항목명, 설명은 고정. 변경 금지.
on / off 값만 config.json 실제 상태에 맞춰 출력.
불릿 리스트(•)나 다른 포맷으로 변환 금지.
부가 설명이나 "원하면 바꿔줄게" 같은 멘트 추가 금지.
설정 변경 — 번호 토글
번호만 입력하면 현재 상태의 반대로 자동 전환된다. config.json 파일을 실제로 수정하고, 아래 응답 포맷 그대로 출력.
세션 규칙:/bizcard config 실행 후 다음 1회 입력만 설정 변경으로 처리한다. 그 이후의 숫자 입력은 일반 대화로 취급. 설정을 연속 변경하려면 /bizcard config를 다시 입력.
예시 1: 현재 3. Append company : off 상태에서 사용자가 3 입력
응답 (이 포맷 그대로):
3. Append company : on 🟢
All set now.
예시 2: 현재 1. Hashtag : on 상태에서 사용자가 1 입력
응답 (이 포맷 그대로):
1. Hashtag : off ❌
All set now.
규칙: 변경된 항목만 한 줄 출력 + "All set now." 그 외 추가 멘트 금지.
특수 명령
코드
동작
설명
00
Reset
기본값으로 초기화
38
All on
전체 설정 켜기
49
All off
전체 설정 끄기
입력:49응답:
📇 Bizcard Settings
1. Hashtag : off ❌ — #이름 (카카오 자동추가 방지)
2. Append title : off ❌ — 이름 뒤에 직함
3. Append company : off ❌ — 이름 뒤에 (회사명)
4. Card as photo : off ❌ — 명함→연락처 사진
5. Korean reading : off ❌ — 외국 이름 한국어 독음
6. Korean style name : off ❌ — 성 비움, 이름에 풀네임
00 = Reset ♺
38 = All on 🟢
49 = All off ❌
All off. All set now.
입력:00응답:
📇 Bizcard Settings (defaults)
1. Hashtag : on 🟢 — #이름 (카카오 자동추가 방지)
2. Append title : on 🟢 — 이름 뒤에 직함
3. Append company : off ❌ — 이름 뒤에 (회사명)
4. Card as photo : on 🟢 — 명함→연락처 사진
5. Korean reading : on 🟢 — 외국 이름 한국어 독음
6. Korean style name : on 🟢 — 성 비움, 이름에 풀네임
00 = Reset ♺
38 = All on 🟢
49 = All off ❌
Reset to defaults. All set now.
📇 명함 스캐너 첫 사용!
기본 설정:
1. Hashtag : on
2. Append title : on
3. Append company : off
4. Card as photo : on
5. Korean reading : on
6. Korean style name : on
설정 변경: /bizcard config
이 명함 처리할까?
이후에는 온보딩 없이 바로 처리.
13. 메모리 로깅
저장 성공 시 memory/bizcard-log.jsonl에 최소한의 정보만 기록한다. 이메일, 전화번호 등 민감한 PII는 저장하지 않는다. 상세 정보는 Google Contacts에서 resourceName으로 조회.