Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 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 .