# root로 connected only if 실행 (이미 일반 User면 skip)adduser deploy
usermod-aG sudo deploy
su- deploy
Install Ollama (for RAG Embeddings)
Ollama is used for contact vector storage (RAG embeddings). AI conversations are handled by the Groq API, so server resources are barely used.
# Auto-install Ollamacurl-fsSL https://ollama.ai/install.sh | sh
# Download embedding model (~300MB)ollama pull nomic-embed-text
# Verify installationollama list
# Success if nomic-embed-text is shown
Install Docker
# Docker auto-install scriptcurl-fsSL https://get.docker.com | sh
# 현재 User를 docker group 추가sudo usermod -aG docker $USER
# ⚠️ Important: Re-login to apply group changeexit# Re-connect via SSH
Verify Docker Installation
docker--versiondocker compose version
docker ps
# Success if output shows without errors
# Check Docker container statuscd ~/OpenWebUI &&docker compose ps
# All 4 containers should show "Up" status:
# qdrant → Up
# openapi-tools → Up
# open-webui → Up
# twilio-bot → Up# Service 접속 테스트curl-s http://localhost:3000/health # OpenWebUIcurl-s http://localhost:8000/health # Tools Servercurl-s http://localhost:6333/collections # Qdrantcurl-s http://localhost:5000/health # Twilio Bot
OpenWebUI 웹 접속 + API Key How to Get
In your browser, go to http://서버IP:3000 then:
Log in with the email/password entered during installation
Bottom left User 아이콘 click → Settings
Account tab → API Keys section
Create new API Key click → 키 복사 후 안전한 곳에 저장
Make sure to save this API Key! You will need it when installing the Telegram bridge in Phase 3. You cannot view it again after creation, so copy it now.
PHONE
📞Phone Assistant (Twilio)
AI makes and receives calls via the Twilio API. Invoke from OpenWebUI chat with "Call me."
Key Features
Feature
Usage
Tool
Call Me
"Call me"
phone_assistant_v2/call_me
Call Contact
"Call Hong Gildong"
phone_assistant_v2/call_contact
Welfare Call
"Check on Kim Cheolsu"
phone_assistant_v2/call_contact
Send SMS
"Text Hong Gildong"
sms_sender
Save Contact
"Save Kim Cheolsu 010-1234-5678"
phone_assistant_v2
Delete Contact
"Delete Kim Cheolsu"
phone_assistant_v2
Contact List
"Show contacts"
phone_assistant_v2
Call History
"Show recent call history"
phone_assistant_v2
Schedule Call
"Call Kim Cheolsu tomorrow at 3 PM"
schedule_manager
Schedule SMS
"Text Hong Gildong tomorrow at 9 AM"
schedule_manager
Schedule List
"Show schedule list"
schedule_manager
Cancel Schedule
"Cancel Schedule해줘"
schedule_manager
Recording ON/OFF
"Turn on call recording"
recording_manager
Recording Files
"Show recording files"
recording_manager
PDF Report ON/OFF
"Turn on PDF reports"
pdf_report_manager
PDF Report List
"Show PDF reports"
pdf_report_manager
Feature Status Check
"Check recording and PDF status"
feature_status
Call Result Report
"Call Kim Cheolsu and report to Hong Gildong"
phone_assistant_v2
Auto Inbound Report
(Auto on incoming) SMS+Telegram+PDF
Auto-triggered
Block Number
"Block 010-9999-8888"
phone_assistant_v2
Media File List
"Show media files"
media_manager
Media Upload
Drag & drop at localhost:8000/upload
media_manager
Play Recordings
"Show recording files" → 클릭해서 재생
media_manager
Open PDF Reports
"Show PDF reports" → 클릭해서 열기
media_manager
📱 SMS Usage
Sending: 👤 Text Hong Gildong "Please attend the meeting" 👤 Text 010-1234-5678 "Let's meet at 3 PM tomorrow"
Auto-forwarding replies: When the recipient replies, it is auto-forwarded to Telegram.
Limits: 1600자 이내, 8개국 country codes only 허용 (프리미엄 Block Number)
📅 예약 스케줄러 Usage
Schedule Call: 👤 내일 오후 3시에 to Kim Cheolsu 안부 Schedule Call해줘 👤 매주 월요일 10시에 to Kim Cheolsu Schedule Call해줘
Schedule SMS: 👤 Schedule text to Hong Gildong at 9 AM tomorrow "Please attend the meeting"
Manage Schedules: 👤 Show schedule list 👤 Cancel Schedule해줘 👤 Pause schedule
Repeat Options: Daily, weekly, monthly recurring schedules available Missed Schedules:👤 Check missed schedules — View schedules missed due to server downtime
📼 Call Recording & PDF Reports
Default is OFF. Enable from chat.
Recording ON/OFF:👤 Turn on call recording / 👤 Turn off call recording PDF ON/OFF:👤 PDF reports 켜줘 / 👤 Turn off PDF reports
Recording workflow: Legal notice (4 languages) → Record call → Save MP3 → Delete from Twilio → Telegram notification PDF workflow: 3 sec after call ends → Auto-generate PDF with full transcript + AI summary + call duration
File locations: Recordings ~/OpenWebUI/twilio-bot/data/recordings/ | PDF ~/OpenWebUI/twilio-bot/data/reports/
Welfare Call 후 results Admin 아닌 another contact via phone + text.
Usage: 👤 Call Kim Cheolsu and report results to Hong Gildong 👤 Check on Kim Cheolsu and let me know 👤 Confirm Kim Cheolsu's meeting attendance and report to Park Younghee
Report method (automatic):
① 35 sec after call → To report recipient via voice call with result summary
② 40 sec after call → To report recipient via SMS with result summary
③ Simultaneously, Telegram always notifies the admin (regardless of report target)
※ Saying "let me know" sends voice+SMS to the admin's own number.
※ If another person is specified, voice+SMS goes to them, while Telegram notification goes to the admin.
🔧 AI 어시스턴트 Settings 수정 (ai_config.py)
To modify AI personality, tone, conversation rules, and timing, edit ai_config.py
Language is auto-detected based on phone number country code.
Language
TTS Voice
Auto-Detect Country Code
Korean
Polly.Seoyeon-Neural
+82
English
Polly.Joanna-Neural
+1, +44, +61, +64
Japanese
Google.ja-JP-Neural2-B
+81
Chinese
Google.cmn-CN-Wavenet-A
+86, +886, +852
📞 Auto Inbound Report
When an external call comes in, the AI answers and then automatically reports to the admin.
Workflow:
External call received → AI answers → Conversation tracked → Call end detected 60s after last speech → Auto report
Report Content (automatic):
① SMS → Admin 번호로 80자 요약 발송
② Telegram notification → Caller name/number + AI summary
③ PDF report → Full transcript + AI summary (when ENABLE_PDF_REPORT=true)
④ Dashboard 기록 → Call History에 자동 저장
Report Example (Telegram): 📞 [Inbound Call Report] 👤 Caller: Kim Cheolsu (010-1234-5678) 📊 Content: Refund procedure inquiry. AI provided refund policy. Additional documents needed.
※ Admin calls are 보고 target 제외. 외부 번호만 추적.
※ Registered contacts show names; unregistered numbers show as "Unknown + phone number".
🚫 Block Number
Block spam or malicious phone numbers.
From chat: 👤 Block 010-9999-8888 👤 Show blocked numbers
Docker restart reverts to original (4 min). For permanent change, modify the numbers in the install script and reinstall.
📷 Media Management (Photos/Videos/Audio)
from chat Photos, Videos, Audio 파일을 upload and, 저장된 파일을 클릭해서 브라우저로 바로 볼 수 있습니다. 통화 Recordings(MP3)과 PDF reports can also be clicked to play/open.
File Upload (Browser Drag & Drop):
In your browser, go to http://localhost:8000/upload → drag & drop files to upload
Folder selection available (e.g., photos/john) · No file size limit · Click to open after upload
File List (from chat): 👤 Show media files → Full list 👤 Show recording files → Call recording list (click to play) 👤 Show PDF reports → Report list (click to open)
Browse by folder: 👤 Show photos of Hong Gildong → Browse photos/honggildong folder
Supported formats:
Type
Format
Browser Preview
Photos
.jpg .png .gif .webp
✅ Direct display
Videos
.mp4 .webm
✅ Direct play
Audio
.mp3 .wav
✅ Direct play
PDF
.pdf
✅ Direct display
Storage location:~/ai-share/ (directly accessible from terminal) Recordings 파일:~/OpenWebUI/twilio-bot/data/recordings/ (read-only) PDF reports:~/OpenWebUI/twilio-bot/data/reports/ (read-only)
※ 🔧 미디어 관리 Tool이 활성화되어 있어야 .
DASHBOARD
📊AI Phone Assistant Dashboard
Dashboard for viewing call records, AI summaries, and conversation history at a glance. External access is blocked for security — use the methods below.
Dashboard Type
Dashboard
Address
Content
Direct Browser Access
AI Phone Assistant
localhost:5000/dashboard
Call History, 대화 전문, AI 요약, Recordings 파일
❌ (Triple security — use methods below)
Qdrant DB
localhost:6333/dashboard
Contact vector storage status
✅ Opens directly
RAG API Docs
localhost:8000/docs
OpenAPI Tool endpoint list and testing
✅ Opens directly
Media Upload
localhost:8000/upload
Photos/Videos/Audio drag & drop 업로드
✅ Opens directly (로컬 전용)
All 127.0.0.1 binding — not accessible from external internet. 로컬(서버 자체 or SSH 접속)에서만 열 수 있습니다.
📊 AI Phone Assistant Dashboard 접속 방법
Method 1: Check from OpenWebUI Chat (Easiest)
OpenWebUI or Telegram 채팅창에서 자연어로 물어보면 . 별도 명령어나 터미널 access needed .
👤 Show call history 👤 Show recent call list 👤 Show call details for Kim Cheolsu 👤 Show recording files 👤 Show PDF report list
※ 전화 어시스턴트, 통화 Recordings 관리, PDF reports 관리 Tool이 활성화되어 있어야 .
Run the command below once, then just type dashboard from then on.
# Register shortcut (one-time)echo'alias dashboard="docker exec twilio-bot curl -s http://127.0.0.1:5000/dashboard > /tmp/dashboard.html && explorer.exe \"\$(wslpath -w /tmp/dashboard.html)\""' >> ~/.bashrc
source ~/.bashrc
# Just type this from now ondashboard
explorer.exe는 WSL(Windows) 환경에서만 작동. 통화 Recordings 파일(MP3)이나 PDF reports도 같은 방식으로 바로 열 수 있습니다: cd ~/OpenWebUI/twilio-bot/data/recordings/ && explorer.exe . → Recordings 파일 폴더 열기 cd ~/OpenWebUI/twilio-bot/data/reports/ && explorer.exe . → Open PDF reports folder
PHASE 3
💬Telegram Bridge Installation (Admin Only)
Connects the Telegram Bot using the OpenWebUI API Key. Only registered admins can use the bot습니다.
Telegram 봇 Download + Run Install Script (One-Click)
The following one-liner downloads, sets permissions, and runs the script automatically:
Required — Installation cannot proceed without this
④
Admin PIN
123456
Enter = Disabled
⑤
Server Domain
https://yourdomain.com
Enter = Polling mode
Admin User ID is required. Telegram에서 @userinfobot → Send any message to get your User ID. Only registered admin IDs can access the bot; non-admins are blocked entirely. At least 1 admin must be registered for installation to proceed.
BROWSER AGENT
🌐AI Browser Agent v6.4 Installation
AI가 웹 browser directly 조작하여 검색, 스크린샷, page analysis 수행. from chat "Search Naver news"로 호출.
After installation, register the tool in OpenWebUI:
OpenWebUI → Workspace → Tools → AI 브라우저 에이전트 → ⚙️ Valves → BROWSER_AGENT_API_KEY → paste key → Save
# Check API Keygrep BROWSER_AGENT_API_KEY ~/OpenWebUI/.env
Usage Examples
👤 Search Naver news 👤 https://example.com page Content 요약해줘 👤 Search for today's weather 👤 Take a screenshot of this site 👤 Save search results to a file
📁 File Access (ai-share 폴더)
The browser agent can read/write files via the ~/ai-share 폴더를 통해 파일 Read/Write가 가능.
Path:~/ai-share/ (host) ↔ /app/data/ (container)
👤 Save search results to a file → ~/ai-share/ 👤 Read files in ai-share → Can read files in folder
🧠 Memory/Learning (브라우저 작업 시 자동 기억)
When performing web search/browsing with the browser agent 대화 Content에서 User Info를 자동 추출하여 기억. Not saved during regular chat습니다.
Remembered (🔧 Browser Tool ON): 👤 Search for good restaurants in Busan → "Busan" location info auto-saved 👤 Find Python tech blogs → "Python interest" auto-saved
Not remembered (regular chat): 👤 I live in Busan → Not saved (not a browser task)
Memory management: 👤 What do you remember about me? → Check stored user info 👤 Reset my info → Delete stored info
Storage location:~/OpenWebUI/browser-agent/data/user_memory.json Save timing: Auto-saved after browser search/browsing tasks complete
🔑 Manual API Key Renewal (on 403 Error)
If the browser agent shows "Access Denied" or 403 Forbidden error, the API key was not entered in Valves or does not match.
# 1. Check current API keygrep BROWSER_AGENT_API_KEY ~/OpenWebUI/.env
# 2. Copy the output key (long string after =)# e.g.: BROWSER_AGENT_API_KEY=61bf5a8e...c806# 3. Enter in OpenWebUI:# Workspace → Tools → AI 브라우저 에이전트# → ⚙️ (gear icon) → BROWSER_AGENT_API_KEY# → Paste key → Save# 4. To generate a new key:NEW_KEY=$(openssl rand -hex 64)
sed-i "s/BROWSER_AGENT_API_KEY=.*/BROWSER_AGENT_API_KEY=$NEW_KEY/" ~/OpenWebUI/.env
cd ~/OpenWebUI &&docker compose restart browser-agent
echo "New key: $NEW_KEY"
# → Enter the new key in Valves again!
RAG
📚RAG Document Search
PDF 문서를 uploads AI가 Content을 벡터로 converts to Qdrant에 저장. 이후 채팅이나 전화에서 ask questions 문서에서 관련 Content을 찾아 답변.
How It Works
① PDF Upload → Text extraction → Vector conversion via Ollama (nomic-embed-text) → Stored in Qdrant ② Question → Question vectorized → Similar docs found in Qdrant → AI generates answer
📄 PDF Upload Methods
방법 1: 채팅창에서 업로드 (Recommended)
OpenWebUI or Telegram 채팅창에서 RAG Document Search tool in OpenWebUI or Telegram chat, then:
👤 Find the refund policy in this PDF (attach file) 👤 Show contract terms from the uploaded document
※ RAG Document Search Tool이 모델에 할당되어 있어야 .
Method 2: Upload via API
# Upload PDFcurl-X POST http://localhost:8000/documents/upload \
-F "file=@문서.pdf"
# Upload result example# {"status":"indexed","filename":"문서.pdf","chunks":15,"total_chars":12340}
🔍 Document Search Methods
Search from Chat
👤 What is the refund policy? 👤 How many days is the delivery period? 👤 Show contract termination conditions
AI가 업로드된 PDF에서 관련 Content을 찾아 답변.
📞 RAG in Inbound Calls
외부에서 전화가 comes in AI가 automatically RAG를 검색.
Example: 고객이 calls asking "What is the refund policy?" → AI가 PDF에서 환불 policy 찾아 Audio으로 답변
※ Welfare Call(발신)에서는 속도 optimization for RAG search is disabled 있습니다. 수신전화에서만 작동.
📁 Storage Locations
Item
경로
Uploaded PDF originals
~/OpenWebUI/openapi-tools/data/
Vector data (Qdrant)
~/OpenWebUI/qdrant/
Embedding model
Ollama nomic-embed-text
VERIFY
✅Installation Verification (verify-install.sh)
전체 system(Phase 2 + Phase 3 + Browser Agent)을 한 번에 Verify하는 script.
How to Run
chmod +x verify-install.sh
./verify-install.sh
Verify Item (13개 section)
#
Verify Item
Content
1
Directory Structure (25)
Phase2/Phase3/Browser folder existence + permissions
2
Required 파일 (38개)
.env, docker-compose, source code, etc.
3
Security Permissions
.env 600, secrets 700, API 키 Settings
4
Docker Containers
6 containers running status + ports
5
API Health
각 Service /health 엔드포인트 응답
6
Docker Network
Inter-container communication check
7
Security Check
포트 binding, UFW, Nginx Settings
8
Browser Use + Chromium
Browser Use, Chromium, multi-provider packages
9
seccomp Profile
JSON validity, syscall count
10
Telegram Settings
BOT TOKEN, Admin ID
11
Twilio + Telegram Integration
Account SID, notification integration
12
OpenWebUI Tool Registration
브라우저 에이전트, 전화, SMS 등 Tool
13
Cloudflare Tunnel
select Item
Verify 결과 해석
✅ OK │ ⚠️ Warning (no impact on operation) │ ❌ Failed (fix required) │ ℹ️ Info
MAINTENANCE
🔧Maintenance
OpenWebUI Version Downgrade (e.g., v0.9.5 → v0.9.2)
When issues occur on a specific version (e.g., tool calling 400 errors), you can roll back to a previous stable version.
# 1. Navigate to OpenWebUI directorycd ~/OpenWebUI
# 2. Change image tag in docker-compose.yml to desired version# (e.g., :main → :v0.9.2 / same approach for any version)sed-i 's|ghcr.io/open-webui/open-webui:main|ghcr.io/open-webui/open-webui:v0.9.2|g' docker-compose.yml
# 3. Bring down containers and restart with new versiondocker compose down &&docker compose up -d# 4. In your browser, go to Ctrl+Shift+R 로 캐시 초기화# ──────────────────────────────────────# 📌 To restore to latest version:cd ~/OpenWebUI
sed-i 's|ghcr.io/open-webui/open-webui:v0.9.2|ghcr.io/open-webui/open-webui:main|g' docker-compose.yml
docker compose down &&docker compose up -d
🧹 Clean Up Old Images After Downgrade
버전 변경 시 이전 Docker 이미지가 Disk에 remain. 아래 명령어로 정리하세요.
# Check unused image disk usagedocker system df
# Remove all unused images (running containers not affected)docker image prune -a-f
Available version tags can be found on the GitHub Releases page.
⚠️ Rolling back across a major update with DB schema changes (e.g., v0.9.0) may cause compatibility issues. Always back up before a large-scale downgrade.
💾 Backup & Restore
Back up data before updates or periodically. Restore if issues arise.