Vận hành máy chủ
Quản trị và cấu hình
Trang quản trị, gửi mã đăng ký (SMS, email), các giá trị cấu hình máy chủ, sao lưu và bảo mật — tài liệu tham chiếu cho người vận hành.
Máy chủ có sẵn một trang quản trị mở bằng trình duyệt. Tại đây bạn xem trạng thái máy chủ, quyết định cách gửi mã đăng ký và đăng nhập, và quản lý người dùng cũng như bot. Tài liệu này là tài liệu tham chiếu, tập hợp trang quản trị và các giá trị cấu hình máy chủ vào một chỗ. Nếu bạn cần cài đặt trước, hãy xem Cài đặt máy chủ.
Giao diện trang quản trị hiện bằng tiếng Hàn. Khi tài liệu này nhắc đến một tab, nút hay mục cài đặt, nhãn tiếng Hàn đúng như trên màn hình được ghi kèm trong ngoặc.
Mở trang quản trị
Trang quản trị nằm ở /admin/ trên cổng HTTP quản trị (8080 trong cấu hình vận hành), và chỉ mở trên chính máy chủ (127.0.0.1). Người vận hành truy cập qua tunnel SSH.
# Trên máy tính của bạn (để lệnh này tiếp tục chạy)
ssh -N -L 8080:127.0.0.1:8080 <người-dùng>@<máy-chủ>
# Trình duyệt: http://localhost:8080/admin/
# Token (trên máy chủ)
sudo cat /srv/pabal/pabal_server/data/admin-token
Nhập token rồi bấm Mở (열기). Trình duyệt sẽ ghi nhớ token; muốn xóa thì bấm Xóa token (토큰 지우기) ở góc trên bên phải. Muốn tự đặt token, hãy truyền TELEGRAM_ADMIN_TOKEN (từ 16 ký tự trở lên) — khi đó máy chủ sẽ không ghi tệp token.
Các tab hiển thị gì
| Tab | Nội dung | Làm mới |
|---|---|---|
| Bảng điều khiển (대시보드) | Số người, phiên và kết nối đang truy cập; số người, bot, nhóm, tin nhắn, ảnh, tệp; thời gian chạy, cổng, DB, JVM, kiểm tra trạng thái. Nếu số thử nghiệm đang bật thì có dải cảnh báo | 5 giây |
| Mã đăng ký (가입 코드) | Các mã đang chờ (số điện thoại, cách gửi, trạng thái gửi, mã, thời gian còn lại, số lần nhập sai) và lịch sử gần đây. Sao chép mã, hủy mã | 3 giây |
| Người dùng (사용자) | Mọi tài khoản — số điện thoại, email đăng nhập (sửa được), có đang truy cập không, số thiết bị đăng nhập, số tin nhắn. Đăng xuất mọi thiết bị (모든 기기 로그아웃), Chặn số (번호 차단), Xóa tài khoản (계정 삭제, kèm ghi chú về cách đã xác minh người yêu cầu — tài khoản đã xóa chỉ còn lại id và ghi chú) | 10 giây |
| Bot (봇) | Các bot được tạo bằng BotFather — người tạo, menu lệnh, cách kết nối (MTProto · HTTP polling · địa chỉ webhook và lý do thất bại), số update đang chờ | 10 giây |
| Thoại (음성) | Bot thoại — trạng thái của gateway, chuyển tiếp và chính sách, công tắc dừng khẩn cấp, công khai, cho phép bản ghi hội thoại, cuộc gọi đang diễn ra và ngắt cuộc gọi, cho phép và tạm dừng bot, người thử nghiệm, giới hạn (bên dưới) | 5 giây |
| Báo cáo (신고) | Những gì được gửi đến qua mục "Báo cáo" của ứng dụng — bản sao nội dung tại thời điểm báo cáo (vẫn đọc được sau khi người gửi xóa). Xóa (삭제; ở cả hai phía cuộc trò chuyện, nếu là nhóm thì khỏi mọi thành viên), Tạm khóa tài khoản (계정 정지; đăng xuất mọi thiết bị, không đăng nhập hay đăng ký lại được), danh sách tài khoản bị tạm khóa. Số điện thoại của tài khoản bị xóa khi đang bị tạm khóa không đăng ký lại được trong 1 năm kể từ khi xóa (mặc định) — kéo dài khi tạm khóa, hoặc sau đó bằng Chặn đăng ký lại (재가입 막기) trong danh sách: đến một ngày kết thúc muộn hơn (tính theo mốc muộn hơn giữa 1 năm đó và ngày đã chọn — không bao giờ rút ngắn) hoặc vô thời hạn (API quản trị: POST /admin/api/reports/<id>/suspend {"userId": …, "blockSignupUntil": "2028-01-01"} hoặc "blockSignupForever": true; để đổi sau, POST /admin/api/suspensions/<id>/block-signup, thân rỗng là quay về mặc định). Cũng xem được các báo cáo đã xử lý xong. Báo cáo đã xử lý xong bị xóa, kể cả bản sao, 3 năm sau ngày xử lý (thẻ hiện ngày đó); nếu bắt đầu có tranh chấp, điều tra hoặc kiện tụng, Giữ lại (보존) giữ nó cho đến khi bỏ giữ (API quản trị: POST /admin/api/reports/<id>/hold, và /release để bỏ giữ) | 10 giây |
| Hỗ trợ khách hàng (고객센터) | Các cuộc trò chuyện gửi đến @PabalSupport. Chọn một cuộc trò chuyện rồi trả lời thì tin nhắn được gửi vào đó dưới tên bot hỗ trợ | 10 giây |
| Cài đặt (설정) | Quy tắc đăng ký và đăng nhập, tài khoản xét duyệt ứng dụng, SMS, email (SMTP), chặn số điện thoại, thông tin người vận hành đăng trên trang web | Lưu thủ công |
| ID đặt trước (예약 아이디) | Tên người dùng bị chặn để không ai lấy được — tìm kiếm, thêm, tải danh sách (.txt), các ID máy chủ chặn sẵn. Tên đã có người dùng thì đặt trước cũng không lấy lại | Một lần khi mở |
| Lưu trữ (저장소) | Thư mục dữ liệu, địa chỉ DB (ẩn mật khẩu), số lượng và dung lượng của ảnh và tệp, số stream được lưu theo từng loại | 10 giây |
Các thao tác nguy hiểm (đăng xuất, chặn, hủy mã) phải bấm hai lần mới được thực hiện.
Mã đăng ký và đăng nhập
Khi người dùng nhập số điện thoại vào ứng dụng, máy chủ tạo mã và gửi theo cách đã chọn trong tab Cài đặt (설정).
| Cách gửi | Mã được gửi đến đâu | Màn hình ứng dụng |
|---|---|---|
| Trang quản trị (관리 화면) | Tab Mã đăng ký (가입 코드). Người vận hành sao chép và tự báo cho người dùng | Số điện thoại → "Đã gửi mã" → nhập mã (nếu là số mới thì nhập tên) |
| SMS | Tin nhắn qua một trong Twilio · Solapi · webhook | Giống như cách trang quản trị |
| Email (이메일) | Thư qua SMTP | Số điện thoại → nhập email → "Đã gửi mã qua email" → nhập mã |
- Với cách email, đăng ký mới có thể dùng địa chỉ bất kỳ, và địa chỉ đó trở thành email đăng nhập của tài khoản. Tài khoản đã có chỉ nhận mã qua email đăng nhập đã đăng ký — để ngăn việc ai đó điền địa chỉ của mình vào số điện thoại của người khác để vào tài khoản. Tài khoản đã có mà chưa có email đăng nhập sẽ được gửi mã qua SMS (nếu đã cấu hình) hoặc qua trang quản trị. Bạn có thể nhập email đăng nhập cho người dùng trong tab Người dùng (사용자).
- Việc gửi diễn ra ở phía sau, nên ứng dụng chuyển ngay sang màn hình nhập mã. Kết quả gửi (thành công, thất bại và lý do) hiện trong tab Mã đăng ký.
- Chỉ đăng ký (nhập tên) được sau khi đã nhập đúng mã. Mã sai chỉ được chấp nhận trong số lần cho phép; sau đó ngay cả mã đúng cũng bị từ chối.
- Đổi số của tài khoản (Cài đặt → số điện thoại trong ứng dụng) mặc định bị đóng, ứng dụng sẽ báo lỗi. Khi bật Cho phép đổi số, mã chỉ được gửi tới số mới qua SMS, bất kể cách gửi nào (tab Mã đăng ký không hiển thị mã này, kể cả khi bật hiển thị mã — người nhận mã ở đó chưa chắc là chủ của số), với nội dung riêng, là nội dung đổi số trong cài đặt SMS (번호 바꾸기 문구; mặc định
[파발] 번호 바꾸기 확인 코드: {code}). Khoảng chờ gửi lại và giới hạn mỗi ngày áp dụng cho cả số mới lẫn tài khoản; số bị chặn hoặc bị tạm khóa, và số mà tài khoản khác đang dùng, bị từ chối cả khi xin mã lẫn khi chuyển. Mã chỉ đúng cho tài khoản đó và số đó, và chỉ dùng được một lần; mã đăng nhập của người khác đang chờ số đó vẫn giữ nguyên. Sau khi chuyển, số cũ không còn đăng nhập được vào tài khoản đó.
Cài đặt — đăng ký và đăng nhập
| Mục | Ý nghĩa | Mặc định |
|---|---|---|
| Cho phép đăng ký mới (새 가입 허용) | Nếu tắt, chỉ tài khoản đã có mới đăng nhập được. Số mới bị từ chối với thông báo "số điện thoại không hợp lệ" | Bật |
| Cách gửi mã (코드 전달 방식) | Trang quản trị (관리 화면) / SMS / email (이메일) | Trang quản trị |
| Hiện mã trên trang quản trị (관리 화면에 코드 표시) | Hiện mã trong tab Mã đăng ký ngay cả khi dùng cách SMS hoặc email (phòng khi gửi thất bại) | Bật |
| Số thử nghiệm (테스트 번호) (+99966…) | Theo cấu hình máy chủ (서버 설정대로) / bật (켜기) / tắt (끄기). Khi vận hành thật thì tắt | Theo cấu hình máy chủ |
| Số chữ số của mã (코드 자릿수) · thời hạn hiệu lực (코드 유효 시간) | 5–6 chữ số · 1–60 phút | 5 chữ số · 5 phút |
| Khoảng cách yêu cầu lại (재요청 간격) · tối đa mỗi ngày (번호당 하루 최대 요청) | Số giây trước khi cùng một số được nhận mã lại (0–3600) · số lần tối đa trong 24 giờ (1–1000) | 60 giây · 10 lần |
| Số lần nhập sai cho phép (틀린 입력 허용 횟수) | Vượt quá thì mã đó bị khóa (1–20) | 5 lần |
| Cho phép đổi số (번호 바꾸기 허용) | Tài khoản đang đăng nhập có thể chuyển sang số khác bằng "Đổi số" trong ứng dụng. Chỉ bật được khi đã thiết lập SMS | Tắt |
Cài đặt — SMS
| Nhà cung cấp | Giá trị cần điền | Ghi chú |
|---|---|---|
| Webhook | Địa chỉ nhận (https://…), header Authorization (tùy chọn) | Máy chủ gửi POST {"phone":"+8210…","code":"12345","text":"…"}. Phản hồi 2xx là thành công. Dùng khi kết nối với máy chủ SMS riêng hoặc dịch vụ khác |
| Twilio | Account SID, Auth Token, số gửi hoặc Messaging Service SID | Toàn thế giới, kể cả số nước ngoài |
| Solapi (trước đây là CoolSMS) | API Key, API Secret, số gửi | SMS trong nước Hàn Quốc. Số gửi phải là số đã được đăng ký trước với Solapi. Số +82 được gửi theo định dạng 010… |
Nội dung tin nhắn có thể chứa {code} (mã) và {minutes} (thời hạn hiệu lực). Mặc định: [파발] 인증 코드: {code} (nghĩa là "[Pabal] Mã xác thực: {code}"; mặc định này bằng tiếng Hàn, bạn có thể đổi nội dung). Sau khi lưu, hãy kiểm tra bằng Gửi thử (테스트 발송).
Cài đặt — email (SMTP)
| Dịch vụ | Máy chủ · cổng · bảo mật | Tên người dùng · mật khẩu |
|---|---|---|
| Gmail | smtp.gmail.com · 587 · STARTTLS | Địa chỉ Gmail · mật khẩu ứng dụng (Tài khoản Google → Bảo mật → Xác minh 2 bước → Mật khẩu ứng dụng) |
| Naver | smtp.naver.com · 587 · STARTTLS | ID · mật khẩu (bật sử dụng POP3/SMTP trong cài đặt thư) |
| Máy chủ chuyển tiếp thư nội bộ | Địa chỉ máy chủ chuyển tiếp · 25 · không có | Để trống |
Địa chỉ gửi phải là địa chỉ mà tài khoản SMTP được phép gửi. Tiêu đề và nội dung cũng dùng được {code}, {minutes}.
Quản lý người dùng
- Đăng xuất mọi thiết bị (모든 기기 로그아웃): ngắt mọi phiên đăng nhập (khóa xác thực) của tài khoản đó. Dùng cho người dùng bị mất thiết bị.
- Chặn số (번호 차단): số đó không nhận được mã, và tài khoản của số đó bị đăng xuất ngay khỏi mọi thiết bị. Giống với danh sách chặn số điện thoại (전화번호 차단) trong tab Cài đặt.
- Email đăng nhập (로그인 이메일): cần thiết để tài khoản đã có đăng nhập bằng email khi dùng cách email.
- Xóa tài khoản (계정 삭제): dùng cho người dùng đã yêu cầu xóa tài khoản, sau khi xác nhận đúng là họ. Xóa đúng những gì chức năng xóa tài khoản trong ứng dụng xóa, và không thể hoàn tác. Chỉ thực hiện sau khi nhập lại ID hoặc số điện thoại của tài khoản và để lại ghi chú về việc yêu cầu đến từ đâu và đã xác nhận danh tính thế nào. Ghi chú được giữ cùng ID và ngày (số điện thoại, địa chỉ email, cùng tên và tên người dùng của tài khoản bị loại khỏi ghi chú). Với yêu cầu qua email không gửi từ email đăng nhập của tài khoản, cùng cửa sổ đó gửi mã qua SMS đến số của tài khoản; hãy nhập mã mà người đó gửi lại qua email. Không thể xóa bot và các tài khoản của chính máy chủ ở đây.
- @BotFather là bot bên trong máy chủ nên không thể bị đăng xuất.
Quản lý bot
Trong tab Bot (봇), bạn xem cách kết nối của từng bot — có đang kết nối qua MTProto không, có gọi getUpdates qua HTTP trong 1 phút gần đây không, địa chỉ webhook là gì và hiện có đang thất bại không (kèm lý do). Nếu số update đang chờ cứ tăng mãi, nghĩa là chương trình bot đã dừng hoặc webhook đang thất bại. Việc xóa bot và cấp lại token do người tạo bot thực hiện tại @BotFather.
Tab Thoại
Đây là nơi vận hành bot thoại (bot mà khi có người gọi thì một mô hình giọng nói AI trả lời — xem Bot thoại). Tab vẫn hiện kể cả khi máy chủ chưa bật tính năng thoại, và mục trạng thái cho biết còn thiếu gì. Cách bật xem ở Cài đặt máy chủ — Bot thoại. Tab làm mới mỗi 5 giây.
| Mục | Những gì thấy được và làm được |
|---|---|
| Các số ở trên cùng | Cuộc gọi đang diễn ra · thời lượng đã dùng hôm nay (giới hạn ngày của máy chủ, thời lượng đang giữ cho các cuộc gọi dở) · gateway đã kết nối · bot đã bật thoại (bot đã được cho phép) · người thử nghiệm (đã công khai hay chưa) |
| Trạng thái | Liên kết gateway (địa chỉ, hoặc "tắt (không có bí mật liên kết)" — 꺼짐 (링크 비밀 없음)), chuyển tiếp cuộc gọi (TURN; nếu không có thì "mọi cuộc gọi bot đều báo bận" — 모든 봇 통화가 통화 중), chính sách quyền riêng tư đã có mục bot-calls hay chưa (nếu chưa thì "không bot nào nhận cuộc gọi" — 어떤 봇도 받지 않음), các đồng ý đang chờ, và số cuộc gọi đã kết thúc bằng tín hiệu máy bận, theo từng lý do (ví dụ: 워치가 못 거는 모드 — chế độ đồng hồ không gọi được, khi gọi từ Apple Watch tới bot dùng công cụ · MCP · khóa riêng · chế độ âm thanh gốc · bản ghi hội thoại của chủ bot, WATCH_NOT_YET) |
| Công tắc dừng khẩn cấp | Dừng mọi cuộc gọi thoại (모든 음성 통화 멈추기): ngay khi bấm, công tắc có hiệu lực trên máy chủ này — mọi cuộc gọi bot đang diễn ra kết thúc, không nhận cuộc gọi mới và không bot nào hiện nút gọi. Sau đó nó được lưu lại nên vẫn giữ nguyên khi khởi động lại máy chủ (nếu lưu thất bại sẽ có cảnh báo). Gỡ bằng Mở lại cuộc gọi thoại (음성 통화 다시 열기) |
| Công khai | Trước khi công khai, chỉ những người thử nghiệm bên dưới mới gọi được bot thoại. Để mở cho mọi người, nhập đúng 공개합니다 (nghĩa là "Tôi công khai") vào ô rồi bấm Công khai cho mọi người (모두에게 공개) (bị từ chối nếu khóa nơi nhận của máy chủ TELEGRAM_VOICE_RECIPIENTS là …@unset, tức chưa định vùng xử lý — trước hết phải phát hành bản build ứng dụng có ghi vùng đó). Quay lại bằng Trở về chỉ người thử nghiệm (시험자만으로 되돌리기). Việc hoàn tất rà soát pháp lý và nhận câu trả lời bằng văn bản của nhà cung cấp (Google) trước khi công khai là do người vận hành tự phán đoán — mã nguồn không chặn điều đó |
| Gateway | Với mỗi gateway đã kết nối: ID, số cuộc gọi đang xử lý / sức chứa, nơi gửi âm thanh (google.vertex.gemini-live@us-central1 …), tính năng (tools·byok·transcripts·stream …), engine, boot |
| Bản ghi hội thoại · khóa riêng | Cho phép bản ghi hội thoại: nhập 대화 기록을 허용합니다 (nghĩa là "Tôi cho phép bản ghi hội thoại") vào ô rồi bấm Cho phép bản ghi hội thoại (대화 기록 허용). Đừng cho phép trước khi rà soát pháp lý. Khi tắt thì có hiệu lực ngay, và các đoạn hội thoại của cuộc gọi đang diễn ra cũng như những đoạn các bot chưa lấy đi đều bị bỏ. Tính năng lưu cuộc trò chuyện do người gọi chọn không phụ thuộc vào sự cho phép này và không có công tắc trên trang quản trị — mục bot-calls-keep-text của chính sách quyền riêng tư bật nó (Cài đặt máy chủ — Lưu cuộc trò chuyện). Khóa riêng: máy chủ có nhận hay không và lý do không nhận, ID khóa chủ, số bot có khóa (bản thân khóa không bao giờ hiện ra ở đâu) |
| Cuộc gọi đang diễn ra | ID cuộc gọi, bot, người gọi (tên · ID), trạng thái, thời gian đã trôi qua / tối đa, gateway, số truy vấn công cụ đang mở. Ngắt (끊기) (phải bấm hai lần mới thực hiện) |
| Bot thoại | Những bot được dùng thoại: Chỉ bot đã cho phép (허용한 봇만, mặc định) hoặc Mọi bot tạo bằng @BotFather (@BotFather 로 만든 모든 봇). Cho phép (허용) bằng ID bot hoặc @tên người dùng. Bảng: bot, người tạo, trạng thái (bật · tắt · có nhận được cuộc gọi không và lý do, tạm dừng, địa chỉ nhận âm thanh nếu ở chế độ âm thanh gốc, công cụ và số lần trả lời · lỗi · quá hạn), giọng · ngôn ngữ, giới hạn, cuộc gọi hôm nay. Thao tác: Cho phép (허용) · Hủy cho phép (허용 취소), Xem lại và cho phép lại (확인하고 다시 허용), Tạm dừng (멈추기) (bắt buộc ghi lý do, 200 ký tự, chủ bot nhìn thấy, cuộc gọi đang diễn ra sẽ kết thúc) · Mở lại (다시 열기), Xem cài đặt (설정 보기) |
| Xem cài đặt của bot | Nguyên văn chỉ dẫn và lời chào (để xem xét), định nghĩa công cụ và thời gian phản hồi của từng công cụ (p50 · p95), nơi truy vấn công cụ được gửi đến, phiên bản quy tắc đã đồng ý, áp dụng hay miễn kiểm tra mạo danh, những thay đổi gần đây, số cuộc gọi · thời lượng · cuộc gọi không nhận được · bị từ chối theo từng tháng |
| Người thử nghiệm | Thêm làm người thử nghiệm (시험자로 넣기) · Bỏ (빼기) theo ID người dùng hoặc @tên người dùng (có hay không có @ đều được, không phân biệt chữ hoa chữ thường) (không áp dụng cho bot và tài khoản riêng của máy chủ). Người được thêm qua cài đặt máy chủ TELEGRAM_VOICE_TESTERS được ghi là "máy chủ" (서버) và không bỏ được ở đây |
| Giới hạn | Bảng dưới đây + Tên thêm vào kiểm tra mạo danh (사칭 검사에 더할 이름) (mỗi dòng một tên). Khi lưu, trang cho biết những bot nào giờ không còn nhận được cuộc gọi |
| Cuộc gọi từ bot | Công tắc chung: gõ đúng 봇이 거는 전화를 켭니다 vào ô rồi bật — chỉ sau khi rà soát pháp lý (bị từ chối khi callme.legal_review của màn hình cho phép chưa là done; ngoại lệ cho máy chủ phát triển và thử nghiệm là TELEGRAM_VOICE_CALLME_UNREVIEWED). Tắt thì yêu cầu mới nhận 503 ngay. Quốc gia (mặc định 82, 999 chỉ trên máy chủ thử nghiệm), giới hạn (máy chủ vận hành không bao giờ lưu lỏng hơn mức sàn), bảng các bot mà chủ đã bật (trạng thái xét duyệt, đóng băng do token, tự động dừng, yêu cầu hôm nay), và chi tiết bot (tên, @tên người dùng, ảnh, chỉ dẫn, lời chào, công cụ, giọng nói, ngôn ngữ, chế độ, mục đích, tên chủ bot và outboundReviewHash của nó) với Cho phép·Thu hồi, Gỡ tự động dừng, và số lần từ chối theo từng bước xét duyệt |
Cho phép là một lần xem xét. Ở chế độ "chỉ bot đã cho phép", cho phép một bot nghĩa là cho phép chỉ dẫn, lời chào và công cụ hiện tại của nó (ở chế độ âm thanh gốc thì là địa chỉ âm thanh gốc). Nếu chủ bot thay đổi bất kỳ thứ nào trong số đó, bảng bot hiện dòng "chỉ dẫn · lời chào đã thay đổi — phải xem lại và cho phép lại thì mới nhận cuộc gọi" (지시문·인사말이 바뀜 — 확인하고 다시 허용해야 전화를 받습니다), và bot đó không nhận cuộc gọi cho đến khi bạn bấm Xem lại và cho phép lại (확인하고 다시 허용). Với bot có ngôn ngữ không phải tiếng Hàn hay tiếng Anh, điều này cũng áp dụng ở chế độ "mọi bot tạo bằng @BotFather" — vì bước kiểm tra quy tắc tự động khi lưu chỉ đọc được tiếng Hàn và tiếng Anh. Bảng của những bot đó hiện dòng "bot không dùng tiếng Hàn hay tiếng Anh (kiểm tra quy tắc tự động không đọc được): hãy đọc chỉ dẫn và lời chào — phải xem lại và cho phép lại thì mới nhận cuộc gọi" (한국어·영어가 아닌 봇 (자동 규칙 검사가 읽지 못함): 지시문·인사말을 읽어 주세요 — 확인하고 다시 허용해야 전화를 받습니다), nên hãy nhờ người đọc được ngôn ngữ đó đọc chỉ dẫn và lời chào rồi cho phép.
| Giới hạn | Mặc định | Phạm vi |
|---|---|---|
| Độ dài tối đa một cuộc gọi (giây) | 600 | 60–3600, không vượt cài đặt máy chủ TELEGRAM_VOICE_MAX_SECONDS |
| Cuộc gọi đồng thời của một bot | 2 | 1–100, không vượt cài đặt máy chủ TELEGRAM_VOICE_BOT_CONCURRENCY |
| Số cuộc gọi mỗi giờ của một người | 20 | 1–200 |
| Thời lượng gọi mỗi ngày của một người (phút) | 60 | 1–600 |
| Thời lượng gọi mỗi ngày của một bot (phút) | 60 | 1–6000 |
| Thời lượng gọi mỗi ngày của một chủ bot (phút) | 120 | 1–6000 |
| Thời lượng gọi mỗi ngày của toàn máy chủ (phút) | 300 | 1–100000 |
| Cuộc gọi ngắn nhất được nhận (giây) | 60 | 30–300 — nếu thời gian còn lại ít hơn mức này thì không nhận |
| Hạn chế tài khoản mới (ngày) | 7 | 0–90 (0 = tắt) — ngoại lệ: người thử nghiệm, và người mà bot đã gửi tin nhắn từ hơn một ngày trước |
- Một ngày được tính theo múi giờ của máy chủ (
TELEGRAM_VOICE_TIME_ZONE, mặc địnhAsia/Seoul). Khi nhận một cuộc gọi, máy chủ định độ dài tối đa trong phạm vi thời gian còn lại của ngày đó và giữ trước khoảng ấy ở mọi giới hạn; khi kết thúc, chỉ số giây thực tế theo đồng hồ máy chủ bị tính. Cuộc gọi nhận bằng khóa riêng của chủ bot chỉ dùng giới hạn của người gọi. - Chủ bot chỉ có thể đặt độ dài một cuộc gọi (mặc định 300 giây) và số cuộc gọi đồng thời của bot mình trong phạm vi các giới hạn này.
- Mọi thao tác (công tắc dừng khẩn cấp, công khai, cho phép, tạm dừng, ngắt cuộc gọi, giới hạn …) được ghi vào nhật ký hoạt động của tab Mã đăng ký (가입 코드) với tiền tố
음성: …(nghĩa là "thoại: …"). - Các chỉ số chất lượng của cuộc gọi thoại (thời gian đến âm thanh đầu tiên, thời gian đến khi dừng lại lúc bị ngắt lời, thời gian trả lời của công cụ …) không có trong tab này mà chỉ có ở
/metricscủa cổng quản trị (các tên bắt đầu bằngvoice.trong JSON, và bằngvoice_trong định dạng Prometheus/metrics?format=prometheus). Không có thông tin về người, bot hay lời nói, chỉ có tổng số.
Bạn cũng làm được những việc này qua API quản trị (tất cả đều cần Authorization: Bearer <token>): GET /admin/api/voice, GET /admin/api/voice/bots/<id>, dùng POST cho voice/kill {"on": true}, voice/launch {"launched": true, "confirm": "…"}, voice/transcripts {"allowed": true, "confirm": "…"}, voice/testers·voice/testers/remove {"userId": …}, voice/gate {"botGate": "ALLOWLIST"}, voice/bots/allow·voice/bots/disallow {"botId": …}, voice/bots/<id>/suspend {"reason": "…"}·…/lift·…/name-exempt, voice/calls/<id>/end; còn giới hạn thì dùng /admin/api/settings/voice. Cuộc gọi từ bot: voice/outbound {"on": true, "confirm": "…"}, voice/outbound/settings {"countries": […], "limits": {…}}, GET /admin/api/voice/outbound/bots/<id>, voice/outbound/bots/allow {"botId": …, "expect": "<outboundReviewHash>"}·voice/outbound/bots/disallow, voice/outbound/bots/<id>/lift.
Biến môi trường
Máy chủ đọc tệp cấu hình (server-config.json) rồi ghi đè bằng biến môi trường. Tệp compose vận hành đã đặt sẵn các giá trị dưới đây, nên thông thường bạn chỉ cần sửa .env.
| Biến | Ý nghĩa | Giá trị trong compose vận hành |
|---|---|---|
TELEGRAM_PORT | Cổng MTProto | MTPROTO_PORT (8443) |
TELEGRAM_HOST | Địa chỉ mà MTProto lắng nghe | 0.0.0.0 |
TELEGRAM_PUBLIC_HOST | Địa chỉ máy chủ thông báo cho ứng dụng (help.getConfig) | PUBLIC_IP |
TELEGRAM_WEB_PORT | Cổng của trang web, tài liệu, Bot API, trang quản trị | 8080 |
TELEGRAM_WEB_HOST | Địa chỉ mà cổng đó lắng nghe. Mặc định 127.0.0.1 | 0.0.0.0 (bên trong container; trên host chỉ công khai ở 127.0.0.1) |
TELEGRAM_PUBLIC_URL | Địa chỉ trang web. Dùng cho liên kết (me_url_prefix), liên kết mời, ví dụ trong tài liệu, ảnh xem trước | https://DOMAIN/ |
TELEGRAM_DATA_DIR | Vị trí của ảnh, tệp, admin-token, operations.json | /app/data |
TELEGRAM_RSA_KEY | Đường dẫn khóa bí mật RSA của máy chủ (nếu chưa có thì được tạo lần đầu, khóa công khai là .pub) | /app/keys/private.pem |
TELEGRAM_DC_ID | Số DC của máy chủ này. Phải trùng với DC mà ứng dụng dùng làm nhà (mọi ứng dụng Telegram đều là 2) — nếu khác, việc tải ảnh và tệp sẽ không bao giờ bắt đầu | DC_ID (2) |
TELEGRAM_DB_TYPE | memory · h2 · postgresql | postgresql |
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORD | Kết nối JDBC | jdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD |
TELEGRAM_DB_MAX_POOL_SIZE | Số kết nối DB | 20 |
TELEGRAM_ADMIN_TOKEN | Token trang quản trị (nếu để trống thì được tạo trong data/admin-token) | ADMIN_TOKEN |
TELEGRAM_MAX_FILE_SIZE | Tệp lớn nhất có thể gửi (2GB · 512MB · số byte). Các phần được ghi xuống đĩa ngay khi đến, nên giới hạn nằm ở đĩa chứ không phải bộ nhớ | MAX_FILE_SIZE (2GB) |
TELEGRAM_TEST_NUMBERS | Số thử nghiệm +99966…. Chỉ dùng khi phát triển | false |
TELEGRAM_WEBHOOK_ALLOW_LOCAL | Cho phép webhook của bot dùng http:// và địa chỉ nội bộ. Chỉ dùng khi phát triển | (không đặt = false) |
TELEGRAM_FCM_CREDENTIALS | Đường dẫn tệp khóa tài khoản dịch vụ Firebase dùng cho thông báo đẩy Android. Để trống thì tắt thông báo đẩy (Cài đặt máy chủ — bước 10) | FCM_CREDENTIALS (để trống) |
TELEGRAM_FCM_PROJECT_ID | Chỉ dùng khi gửi đến một dự án Firebase khác với project_id trong tệp khóa | FCM_PROJECT_ID (để trống) |
TELEGRAM_PUSH_PREVIEWS | Nếu là false, thông báo đẩy chỉ hiện người gửi, không có nội dung tin nhắn | PUSH_PREVIEWS (true) |
TELEGRAM_TURN_HOST, TELEGRAM_TURN_PORT, TELEGRAM_TURN_SECRET | Chuyển tiếp cuộc gọi (TURN) — nơi hai ứng dụng ở hai mạng khác nhau gặp nhau. Để trống bí mật thì chỉ có kết nối trực tiếp (Cài đặt máy chủ — Chuyển tiếp cuộc gọi) | TURN_HOST (để trống: DOMAIN), TURN_PORT (3478), TURN_SECRET (để trống) |
TELEGRAM_APNS_KEY, TELEGRAM_APNS_KEY_ID, TELEGRAM_APNS_TEAM_ID, TELEGRAM_APNS_TOPIC, TELEGRAM_APNS_MIN_BUILD, TELEGRAM_APNS_VOIP_MIN_BUILD | Thông báo đẩy iPhone (APNs) — đường dẫn tệp khóa, ID khóa (để trống: lấy từ tên tệp), nhóm đã ký ứng dụng, bundle ID, bản build thấp nhất được gửi, bản build đầu tiên có màn hình cuộc gọi CallKit. Không có khóa thì thông báo đẩy iPhone tắt (Cài đặt máy chủ — bước 11) | APNS_* (không có khóa, để trống — lấy từ tên tệp, 4Z8R468M2D, me.pabal.ios, 4, để trống) |
TELEGRAM_STATIC_MAPS_KEY, TELEGRAM_STATIC_MAPS_PER_DAY, TELEGRAM_STATIC_MAPS_PER_USER_HOUR | Ảnh bản đồ trong tin nhắn vị trí — khóa Google Maps Static API, số ảnh mới lấy mỗi ngày, số ảnh mới một người được gây ra mỗi giờ. Không có khóa thì ảnh bản đồ tắt (Cài đặt máy chủ — Ảnh bản đồ) | STATIC_MAPS_* (không có khóa, 300, 120) |
JAVA_OPTS | Tùy chọn JVM (bộ nhớ) | Giá trị trong .env |
Biến môi trường — bot thoại
Khi vận hành, tệp bổ sung deploy/docker-compose.voice.yml đặt một phần trong số này từ giá trị trong .env — liên kết, chuyển tiếp, múi giờ, giới hạn, người thử nghiệm và bản build tối thiểu; phần còn lại được thêm theo từng tính năng sau khi rà soát riêng (Cài đặt máy chủ — Bot thoại). Các cài đặt VOICE_* của gateway (pabal-voice) nằm trong voice/README.md của kho mã.
| Biến | Mặc định | Ý nghĩa |
|---|---|---|
TELEGRAM_VOICE_LINK_SECRET_FILE | — | Bí mật liên kết 32 byte (64 chữ số hex), giống hệt của gateway. Không có hoặc sai thì tính năng thoại tắt |
TELEGRAM_VOICE_LINK_HOST, TELEGRAM_VOICE_LINK_PORT | 127.0.0.1, 8095 | Nơi liên kết lắng nghe. Nếu không phải loopback thì cần TELEGRAM_VOICE_LINK_ANY_ADDRESS=true; địa chỉ công khai luôn bị từ chối |
TELEGRAM_VOICE_LINK_ANY_ADDRESS | — | Lời khẳng định "mạng này chỉ máy chủ và gateway dùng" |
TELEGRAM_VOICE_TURN_HOST, TELEGRAM_VOICE_TURN_PORT | — | Địa chỉ chuyển tiếp đưa cho gateway (địa chỉ LAN của máy chủ). Bị bỏ qua nếu là loopback |
TELEGRAM_VOICE_MAX_SECONDS | 600 | Cuộc gọi dài nhất mà máy chủ này cho phép (60–3600) |
TELEGRAM_VOICE_BOT_CONCURRENCY | 2 | Mức trần số cuộc gọi đồng thời của một bot (người vận hành và chủ bot chỉ hạ xuống được) |
TELEGRAM_VOICE_TIME_ZONE | Asia/Seoul | Mốc để tính giới hạn theo ngày và theo tháng |
TELEGRAM_VOICE_TESTERS | — | Danh sách ID người dùng là người thử nghiệm (gộp với danh sách trên trang quản trị). * chỉ dành cho máy chủ thử nghiệm |
TELEGRAM_VOICE_RECIPIENTS | google.vertex.gemini-live@us-central1 | Nơi nhận mà màn hình xác nhận của ứng dụng nêu ra. Phải trùng với của gateway thì cuộc gọi mới được chuyển tới gateway đó |
TELEGRAM_VOICE_MIN_BUILD_DESKTOP, _ANDROID, _IOS, _WATCHOS | 1, 62151, 5, 1 | Bản build ứng dụng đầu tiên thật sự có màn hình xác nhận (với máy tính là số sau thẻ pabal-bc). Khi nơi nhận thay đổi, hãy phát hành bản build mới rồi nâng các giá trị này. Với máy tính, nâng lên 2 khi lần đầu phê duyệt màn hình xác nhận không phải tiếng Hàn hay tiếng Anh |
TELEGRAM_VOICE_MIN_SHEET_VERSION | 1 | Phiên bản màn hình xác nhận thấp nhất được chấp nhận |
TELEGRAM_VOICE_TOOL_RESULT_BYTES | 16384 | Kích thước tối đa câu trả lời của công cụ (1024–16384) |
TELEGRAM_VOICE_KEYS_MASTER_FILE, TELEGRAM_VOICE_KEYS_PREVIOUS_MASTER_FILE | — | Khóa chủ bọc khóa riêng và bí mật âm thanh gốc, và khóa cũ đang được thay thế. Đặt trong thư mục quyền 700 nằm ngoài bản sao lưu |
TELEGRAM_VOICE_OWN_KEYS_APPS_READY | — | Chỉ đặt true sau khi ứng dụng đã hiển thị màn hình xác nhận (phiên bản 2) cho bot dùng khóa riêng. Trước đó máy chủ không nhận khóa riêng |
TELEGRAM_VOICE_OWN_KEY_MIN_SHEET_VERSION, TELEGRAM_VOICE_TRANSCRIPT_MIN_SHEET_VERSION | 2, 1 | Phiên bản màn hình xác nhận cần cho cuộc gọi dùng khóa riêng và cho thông báo bản ghi hội thoại (máy chủ vận hành không hạ phiên bản cho khóa riêng xuống dưới 2) |
TELEGRAM_VOICE_STREAM_MIN_BUILD_DESKTOP, _ANDROID, _IOS | 0 (không có) | Bản build ứng dụng đầu tiên có màn hình xác nhận âm thanh gốc. Nếu là 0 thì không ai gọi được bot dùng âm thanh gốc |
TELEGRAM_VOICE_STREAM_MIN_SHEET_VERSION | 2 | Phiên bản của màn hình xác nhận âm thanh gốc |
TELEGRAM_VOICE_STREAM_DENY_ADDRESSES | — | Các địa chỉ của bản triển khai này mà địa chỉ âm thanh gốc không được trỏ tới (host công khai và host của trang web được tự động thêm vào) |
TELEGRAM_WATCH_API_PORT, _HOST, _ANY_ADDRESS, TELEGRAM_WATCH_AUDIO_URL, TELEGRAM_WATCH_ALLOW_PLAIN, TELEGRAM_WATCH_SESSION_DAYS, TELEGRAM_WATCH_AUTH_PER_MINUTE | —, 127.0.0.1, —, —, —, 7, 30 | API Apple Watch và địa chỉ điểm vào âm thanh (Cài đặt máy chủ — Điểm vào của Apple Watch). ALLOW_PLAIN chỉ để phát triển |
TELEGRAM_VOICE_EVIDENCE_KEY_DIR | — | Thư mục chứa khóa dùng cho bản ghi quyền cho phép của cuộc gọi từ bot (bằng chứng HMAC). 700, nằm ngoài các thư mục được sao lưu. Tạo và thay bằng scripts/voice-evidence-key.py. Không có nó thì không ai bật được quyền cho phép. Với Docker Compose, biến chỉ đặt trong .env sẽ không tới được máy chủ — khi bật cuộc gọi từ bot, hãy thêm nó vào pabal-server trong deploy/docker-compose.voice.yml, ở environment (đường dẫn trong container) và volumes (thư mục đó trên máy host) |
TELEGRAM_VOICE_OUTBOUND_MIN_BUILD_DESKTOP, _ANDROID, _IOS, _WATCHOS | 0 (không có) | Bản ứng dụng đầu tiên có màn hình cho phép. Bản cũ hơn không bật được quyền cho phép và cuộc gọi từ bot không đổ chuông ở đó. 0 nghĩa là nền tảng đó không có |
TELEGRAM_VOICE_CALLME_DEVICE_AGE_SECONDS | 86400 | Sau khi đăng nhập bao lâu thì thiết bị được bật quyền cho phép (giây). Chỉ máy chủ thử nghiệm đổi được (máy chủ vận hành cảnh báo rồi bỏ qua) |
TELEGRAM_VOICE_KEEP_TEXT_UNREVIEWED | — | Hiện trên đồng hồ câu chữ hộp chọn lưu cuộc trò chuyện chưa qua rà soát pháp lý. Chỉ dành cho máy chủ thử nghiệm nội bộ |
TELEGRAM_MCP_*, TELEGRAM_MCP_APPS_READY | — | Thành phần MCP (do deploy/docker-compose.mcp.yml đặt). TELEGRAM_MCP_EGRESS_OWN_ADDRESSES (các địa chỉ công khai của Pabal) được dùng cả khi không có MCP, để webhook và yêu cầu công cụ không đi vào chính Pabal |
TELEGRAM_VOICE_BOTS, TELEGRAM_VOICE_NOTICE_CHECK=off, TELEGRAM_VOICE_STREAM_ALLOW_PRIVATE | — | Chỉ dành cho máy chủ thử nghiệm (chỉ khi TELEGRAM_TEST_NUMBERS=true): cho phép các bot được liệt kê (ID · @tên, * là mọi bot) · bỏ qua kiểm tra mục pháp lý · cho phép địa chỉ riêng (private) làm địa chỉ âm thanh gốc |
TELEGRAM_VOICE_CALLME_UNREVIEWED, TELEGRAM_VOICE_DEV_ECHO_OUTBOUND, TELEGRAM_VOICE_TEST_DIAL, TELEGRAM_VOICE_TEST_DIAL_USERS | — | Chỉ dành cho máy chủ thử nghiệm và phát triển: có thể bật công tắc cuộc gọi từ bot trước khi rà soát pháp lý (máy chủ phát triển và thử nghiệm) · gateway echo thực hiện cuộc gọi của bot (máy chủ phát triển, TELEGRAM_TEST_MODE) · cuộc gọi thử của API quản trị và các tài khoản nó được đổ chuông (tối đa 20 ngoài số thử nghiệm +99966, máy chủ thử nghiệm). Máy chủ vận hành cảnh báo rồi bỏ qua |
Tệp dữ liệu
| Tệp | Nội dung | Quyền |
|---|---|---|
keys/private.pem | Khóa bí mật RSA của máy chủ. Tuyệt đối không đưa ra ngoài | 600 |
keys/private.pem.pub | Khóa công khai. Dùng khi build ứng dụng và cho /docs/server-key.pem | — |
keys/firebase-service-account.json | (Tùy chọn) Khóa bí mật Firebase dùng cho thông báo đẩy Android. Nếu bị lộ, hãy xóa trong Firebase console rồi tải khóa mới | 600 |
data/admin-token | Token trang quản trị | 600 |
data/operations.json | Các giá trị trong tab Cài đặt — quy tắc đăng ký, giá trị bí mật SMS và SMTP, số bị chặn, cài đặt của tab Thoại (công tắc dừng khẩn cấp · công khai · người thử nghiệm · bot đã cho phép · giới hạn) | 600 |
keys/voice-link.secret | (Bot thoại) bí mật liên kết giống hệt của gateway | 400 |
/etc/pabal/voice/voice-master.key | (Bot thoại) khóa chủ bọc khóa riêng và bí mật âm thanh gốc của chủ bot. Nằm ngoài thư mục dữ liệu, không đưa vào bản sao lưu | 600 (thư mục 700) |
data/media/ | Bản gốc của ảnh và tệp | — |
Bảng events của PostgreSQL | Tài khoản, cuộc trò chuyện, tin nhắn, đăng nhập, bot, cấu hình webhook — nhật ký của mọi thay đổi | — |
Ghi chú bảo mật
- Đừng mở cổng quản trị trực tiếp ra Internet. Caddy trong cấu hình vận hành chặn các đường dẫn quản trị như
/admin,/health,/metricsbằng 404. - Mọi yêu cầu dữ liệu quản trị đều cần
Authorization: Bearer <token>, và trang của website khác không thể đọc được dữ liệu này. - Các giá trị bí mật SMS và SMTP chỉ nằm trong
operations.json; màn hình và API chỉ báo "đã lưu". Nếu để trống ô giá trị bí mật khi lưu, giá trị cũ vẫn được giữ. - Token và giá trị bí mật không bị ghi vào log, còn số điện thoại trong log được che bớt. Địa chỉ Bot API (có chứa token) cũng không được ghi vào log.
- Token thiết bị của thông báo đẩy chỉ được ghi vào log dưới dạng dấu vân tay, còn nội dung tệp khóa Firebase và nội dung thông báo không được ghi vào log.
- Khóa xác thực nằm trong DB, nên người truy cập được DB có thể giải mã lưu lượng của người dùng. Hãy bảo vệ DB và bản sao lưu kỹ như khóa RSA.
Giới hạn
- Mã đang chờ và lịch sử gần đây nằm trong bộ nhớ nên sẽ mất khi máy chủ khởi động lại (chỉ cần yêu cầu lại trong ứng dụng).
- Việc gửi thật của nhà cung cấp SMS cần được kiểm tra bằng tài khoản của từng nhà cung cấp. Máy chủ tạo yêu cầu theo đúng tài liệu của từng nhà cung cấp.
- Chưa có: buộc xóa bot, xem tin nhắn, xem log, biểu đồ, thống kê thông báo đẩy (thông báo đẩy được kiểm tra qua log máy chủ).