Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗아웃바운드 에이전트의 발신 통화 기록(CTI)을 집계해 보여주는 웹 대시보드입니다. Python 표준 라이브러리와 SQLite만 사용하며 별도 설치가 필요 없습니다(Python 3.10+). 차트는 static/vendor/chart.umd.js(Chart.js 4.4.1, MIT)를 내장해 오프라인에서도 동작합니다.
Cti) Import → 설정은 그대로 두고 Deployhttps://….vercel.app)로 접속 → admin / admin1234 로 로그인지금 Vercel 버전은 가짜 데이터로 화면을 확인하는 용도입니다(화면 위에 "데모 데이터" 표시).
CTI_ADMIN_PASSWORD(와 CTI_ADMIN_USER)를 넣으면 데모 계정 대신 그 관리자 계정이 만들어집니다.CTI_TZ, 기본 Asia/Seoul).녹취 파일이 있는 구글 드라이브 공유 폴더를 컴퓨터 폴더처럼 연결해서 읽습니다. 컴퓨터 한 대에만 설치하면 됩니다.
G: 드라이브가 생기고, 그 안에서 녹취 폴더를 찾을 수 있습니다(예: G:\공유 드라이브\녹취).Code → Download ZIP 후 원하는 곳(예: C:\CTI)에 압축을 풉니다.start.bat 더블클릭
CTI_SYNC_ROOT= 뒤를 녹취 폴더 경로로 바꾸고 저장합니다.
탐색기 주소창에서 경로를 복사해 붙여 넣으면 정확합니다.start.bat 을 실행하면 관리자 아이디·비밀번호를 만들고, 브라우저에 대시보드가 열립니다.Win + R → shell:startup 입력 → 열린 폴더에 start.bat 바로 가기를 넣습니다.config.bat 의 CTI_HOST=0.0.0.0(기본값)이면 휴대폰에서도 접속할 수 있습니다. 처음 실행 때 Windows 방화벽 창이 뜨면 허용을 누르세요. 검은 창에 휴대폰·다른 컴퓨터에서: http://… 주소가 나옵니다.
http://<컴퓨터의 Tailscale 주소 100.x.x.x>:8080 으로 어디서나 접속됩니다. 인터넷에 공개되지 않고 Tailscale에 로그인한 기기에서만 보여서, 고객 데이터를 외부에 노출하지 않습니다.계정 추가·비밀번호 변경: 프로그램 폴더에서 py -m scripts.create_user
사무실 다른 컴퓨터에서도 보려면 config.bat 에서 CTI_HOST=0.0.0.0 으로 바꾸고, 다른 컴퓨터에서 http://<설치한 컴퓨터 IP>:8080 으로 접속합니다(Windows 방화벽 허용 필요).
python -m scripts.seed_demo --reset # 데모 데이터(에이전트 6명, 최근 70일 통화, 오늘 녹취 WAV 24개)
python -m cti.app # http://127.0.0.1:8080
데모 계정: admin / admin1234(관리자), viewer / viewer1234(조회 전용)
| 환경 변수 | 기본값 | 설명 |
|---|---|---|
CTI_DB | data/cti.db | SQLite 파일 |
CTI_SYNC_ROOT | data/sync | 녹취 동기화 폴더 루트 (<루트>/<에이전트 이름>/...) |
CTI_BACKUP_ROOT | data/backup | 백업 zip 저장 위치 (<루트>/<에이전트ID>/<시각>.zip) |
CTI_HOST, CTI_PORT | 127.0.0.1, 8080 | 바인드 주소 |
CTI_INGEST_INTERVAL | 300 | 녹취 폴더 자동 적재 주기(초), 0이면 끔 |
settings.min_call_sec, 기본 10초)
duration_sec 평균duration_sec < min_call_sec (짧은 통화 비율과 통화 목록 필터에만 쓰임)min_call_sec(0~600초), 용량 기반 추정 비트레이트 변경, 녹취 적재 현황과 "지금 가져오기". 관리자만 저장할 수 있고 조회 계정은 읽기 전용입니다. 바꾸면 짧은 통화 비율과 통화 목록의 '짧은 통화 빼기'에 바로 적용됩니다(처리 건수·ATT 는 짧은 통화도 포함).testzip)과 파일 수를 검증동기화 폴더가 CTI_SYNC_ROOT 밖을 가리키면 거부합니다. 같은 에이전트에 대한 동시 실행도 막습니다.
● 연결됨 · 3분 전 동기화 처럼 보입니다.
Apps Script 가 대시보드에 들를 때마다 시각을 남기고, 회차가 끝나면 결과(POST /api/drive/run)를 알려 줍니다.
25분 넘게 소식이 없으면 "멈춘 것 같아요", 마지막 회차가 실패했으면 "오류"와 그 메시지를 보여 줍니다.
(결과·오류 알림과 빈 에이전트 폴더 등록은 새 스크립트부터라서, 설정에서 스크립트 복사로 한 번 다시 붙여넣어 주세요.)chat:write, users:read, users:read.email 추가 → Install to Workspacexoxb-…)을 설정 > 슬랙 알림의 봇 토큰에 저장(또는 서버 환경 변수 SLACK_BOT_TOKEN)U…), 채널 ID(C…) 또는 #채널이름(봇을 채널에 초대해야 함)녹취 파일 1개 = 통화 1건입니다.
CTI_SYNC_ROOT/
김민지/ ← 최상위 폴더 이름 = 에이전트 (처음 보면 자동 등록)
통화 녹음 010-1234-5678_261012_103015.m4a
01098765432_20261012_104500.wav
YYYYMMDD_HHMMSS, YYMMDD_HHMMSS, YYYY-MM-DD HH-MM-SS, YYYYMMDDHHMMSS010-1234-5678, 01012345678, +82 10 …, 지역번호)파일 크기 ÷ 비트레이트(설정에서 변경)customer_masked: 화면 표시용 010-****-5678customer_phone: 전체 번호 010-1234-5678 — 관리자에게만 화면·API 로 보여 줍니다(뷰어는 가린 번호)customer_key: DB별 비밀키로 만든 HMAC — 고객 수(중복 제외) 집계용, 원래 번호로 되돌릴 수 없음source_key)으로만 저장하고, 화면의 실패 목록도 마스킹합니다.단, 녹취 파일 자체(동기화 폴더·백업 zip)의 파일 이름에는 원래 번호가 남아 있으니 폴더 접근 권한은 따로 관리해야 합니다.
cti/db.py 참고.
python -m unittest discover -s tests -t .