完整手册

安装并配置以承载通话

一份通俗易懂的指南,教你把 KatoCall 装到服务器上,并让它对真实通话计费。按顺序完成各部分——无需电信背景。

版本 1.0.0适用于 Debian 12 服务器约 30–45 分钟接通首个电话

从这里开始

两分钟了解 KatoCall 如何运作

KatoCall 是一台内置计费引擎的电话交换机。你的客户通过它拨打电话;它检查余额、选择最便宜的出局路由、计时并对通话计费——全部自动完成。

你的客户 发起通话 KatoCall 检查余额, 选择最便宜路由, 计时并计费 你的运营商 (SIP 中继) 任何人 拨号 路由 来电以相反方式同样运作:一个号码(DID)拨入并转接给某个客户。
每一通电话——呼入或呼出——都经过 KatoCall,计费就在这里发生。

你的利润从何而来

你以一个价格从运营商买入分钟数,再以更高价格卖给客户。KatoCall 保存两个价格,并在每通电话上保留差额。

你付给运营商
$0.0090
供应商费率,每分钟
你向客户收取
$0.0150
客户费率,每分钟
你留下
$0.0060
你的利润,自动

小提示: KatoCall 不做货币换算。在设置中选择一种货币(默认美元),买卖都用它,这样每笔利润都是简单的减法。

第 1 部分

安装到服务器

这只需在全新服务器上做一次。若由技术人员为你搭建服务器,把这一部分交给他们。

先准备什么

一台服务器Debian 12 (Bookworm),64 位——全新安装。任何像样的 VPS 都行(OVH、Hetzner、DigitalOcean、Vultr)。
规格2 核 CPU、4 GB 内存、20 GB 磁盘。2 GB 内存是下限。
一个公网 IP服务器需要自己的公网地址——由你的服务商提供。
服务器登录root 密码,或一个拥有 sudo 的用户。
来自你的运营商一条 SIP 中继(其主机,以及一个受信任 IP 或用户名/密码),外加你拥有的号码(DID)。
一个域名(可选)仅当你想要 https 挂锁。可以先不用,之后再加。

开始安装

把 katocall-1.0.0.tar.gz 复制到服务器上,逐条运行这些命令。每条都会显示它在做什么,若缺少什么会以清晰提示停止。

  1. 解压并检查服务器

    第一条命令不改动任何东西——它确认服务器就绪,并在缺少什么时告知你。

    root@your-server
    # unpack the package
    tar -xzf katocall-1.0.0.tar.gz
    cd katocall-1.0.0
    
    # 检查服务器(安全——不改动任何东西)
    sudo bash install/00-preflight.sh
  2. 按顺序运行安装脚本

    逐条运行。第 01 号编译电话引擎,需 10–20 分钟;其余都很快。

    root@your-server
    sudo bash install/01-install-asterisk.sh   # 电话引擎(10–20 分钟)
    sudo bash install/02-install-base-stack.sh
    sudo bash install/03-setup-admin-panel.sh
    sudo bash install/04-configure-ami.sh
    sudo bash install/05-production-hardening.sh
    sudo bash install/06-configure-did-forwarding.sh
    sudo bash install/07-configure-fail2ban.sh
    sudo bash install/08-configure-nat.sh
    sudo bash install/09-configure-outbound.sh
    sudo bash install/11-configure-backups.sh
    sudo bash install/12-configure-dialer.sh   # 仅当你需要外呼器

    01 到 09 为必需。第 12 步仅用于外呼器——跳过它,其余一切照常运作。

  3. 确认一切正常

    它运行约 65 项检查——每个服务、防火墙、备份、安全——并对失败项指出要修复什么。

    root@your-server
    sudo bash install/verify.sh
    
    PASS 66   WARN 1   FAIL 0
  4. 首次登录

    在浏览器打开服务器地址并登录。它会立即强制你设置新密码——在你设置前,什么都不能用。

    • 地址: http://your-server-address/
    • 用户名: admin
    • 密码(必须立即更改): Katocall

承载真实通话前:启用 HTTPS。 在此之前,面板走的是明文 http,你的登录会毫无保护地在互联网上传输。一旦有域名指向服务器,运行:

sudo bash install/10-configure-tls.sh panel.yourcompany.com you@yourcompany.com

第 2 部分

配置以承载通话

现在你已进入面板。按此顺序创建这六样东西——每一样都用到前一样。全部都在侧边菜单里。

1Suppliers你向谁购买分钟数
2Rate Cards你的买入与卖出价格
3Trunks通往运营商的线路
4Routing Groups哪条线路走哪种通话
5Accounts你的客户
6DIDs呼入号码
  1. Suppliers — 你向谁购买分钟数

    供应商(Supplier)是你向其购买分钟数的运营商。从这里开始,因为其余一切都指向它。打开 Suppliers → New Supplier 并起个名字。

    Suppliers+ New Supplier
    e.g. IDT Gold
    USD — $ US Dollar
    Account manager, contract terms…
    Suppliers → New Supplier
  2. Rate Cards — 你的买入与卖出价格

    费率卡(Rate Card)是一份价目表,每个目的地一行(前缀,如美国的 1 或英国的 44)。创建两种:

    • Provider Rates — 你的供应商向你收取的价格。
    • Customer Rates — 你向客户收取的价格(更高——这个差额就是你的利润)。

    不要手打几百个前缀:打开该卡并点击 Import CSV,一次性载入运营商的价目文件。

    USA Wholesale — ProviderImport CSV
    DestinationPrefixPer min
    United States1$0.0090
    United Kingdom44$0.0110
    Mexico Mobile521$0.0180
    Rates → Import CSV

    小提示: 费率保存到小数点后 4 位;5 位的价目表在导入时会四舍五入。

  3. Trunks — 通往运营商的真实线路

    中继(Trunk)是与供应商的实时连接。打开 Trunks → New Trunk。两点很重要:

    • Direction — Outbound(呼出)、Inbound(呼入)或 Both(两者)。
    • Authentication — IP-based(他们信任你服务器的地址)或 Username/Password(他们给了你 SIP 登录凭据)。

    保存后,用 Test Call 确认能拨通,再把客户导向它。

    New TrunkSave
    IDT-GOLD
    Outbound
    IP-based
    sip.idtgold.com
    30
    Trunks → New Trunk

    中继名称不能含空格——用 IDT-GOLD,而不是 IDT GOLD。

  4. Routing Groups — 哪条线路走哪种通话

    路由组表示:对这类号码,按此顺序尝试这些中继。两个旋钮:

    • Priority — 越小越先尝试。把最便宜的运营商设为优先级 1。
    • Weight — 在同一优先级的中继之间分配流量。

    若第一条中继占线或失败,KatoCall 会转到下一条。用 Preview 输入一个号码,看看它会用哪条中继。

    Standard LCR+ Add Route
    TrunkPriorityWeight
    IDT-GOLD1 first100
    Backup-Carrier2100
    Routing Groups → Add Route
  5. Accounts — 你的客户

    账户(Account)就是一个客户。打开 Accounts → New Account。重要选择:

    • Billing Type — Prepaid(充值余额;余额为零时停止通话)或 Postpaid(事后开账单)。
    • Rate Card — 第 2 步中的客户价目表。
    • Routing Group — 他们的通话如何出局,来自第 4 步。
    • 他们如何连接 — 一个受信任 IP,或供其话机/PBX 使用的用户名和密码。
    New AccountSave
    Acme Telecom
    Prepaid
    $250.00
    USA Retail
    Standard LCR
    Accounts → New Account

    小提示: 每个进行呼出的账户都需要一张覆盖你所售前缀的客户 Rate Card——否则这些通话会被拒绝(绝不会按零计费)。

  6. DIDs — 拨入的号码

    DID 是人们拨打以联系你某位客户的号码。打开该账户,进入 DIDs → Add DID,输入号码及其转接目标。(先保存账户。)

    Acme Telecom · DIDs+ Add DID
    DID NumberForwards To
    +1 305 555 0100Acme main lineactive
    Accounts → DIDs → Add DID

面板中的每个字段旁都有一个小小的 ?,用全部十种语言解释它的用途。Settings → Network 在重大更改后把你的配置推送到电话引擎。

第 3 部分

运行外呼活动

外呼器会拨打一份号码列表、播放一段录音,并让人按键以接通、回拨或退订。必须先完成安装第 12 步。

了解它是什么: 这是一个功率外呼器(power dialer),不是预测式。没有答录机检测(语音信箱算作已接听),也没有自动节奏——你设定一个固定的并发通话数。一次只在一台服务器上运行。

  1. 创建活动

    打开 Dialer Campaigns → New Campaign。选择计费到的账户,命名它,设置节奏:Max Concurrent Calls、Max Attempts 和 Retry gap。

    New CampaignSave
    Acme Telecom
    10
    3
    Upload a .wav / .mp3…
    Dialer Campaigns → New Campaign
  2. 添加你的留言和菜单

    上传接听时播放的 Prerecorded Message。然后搭建 IVR Menu——每个按键做什么:

    • 按 1 → 转接给坐席
    • 按 2 → 请求回拨
    • 按 9 → 加入 Do-Not-Call(不再拨打)
  3. 上传你的联系人

    在活动的 Contacts 部分,点击 Upload CSV——一个简单的电话号码文件。

  4. 按下 Start——并查看结果

    按下 Start,几秒内即开始拨号;Pause 同样迅速停止。完成后,Download Results 给你一个文件,显示每个号码的结果。

    Spring PromoStart
    Phone NumberAttemptsResult
    +1 305 555 00001answered
    +1 305 555 00012no answer
    +1 305 555 00021transferred
    活动为每个号码填入一个结果。

第 4 部分

日常运维

四条命令覆盖了你在服务器上要做的几乎一切。

root@your-server
sudo bash install/verify.sh            # 一切正常吗?
sudo /usr/local/sbin/katocall-backup    # 立即备份
sudo bash install/upgrade.sh           # 应用新版本
sudo bash install/uninstall.sh         # 移除它(保留你的数据)

你的备份和它们保护的数据在同一块磁盘上。 定期把它们复制到别处,否则磁盘故障会把数据和它唯一的备份一起带走。

在你信任一份收入报表之前,可以证明账目分毫不差:

sudo -u softswitch admin/backend/venv/bin/python admin/backend/manage.py verify_ledger

第 5 部分

出问题时

登录时出现「无法连接服务器」。
某个服务可能正在重启。稍候并刷新。若持续,运行 install/verify.sh——它会指出确切宕掉的服务。
电话无法接通。
按顺序检查三件事:Account 有余额和 Rate Card;Routing Group 有通往该目的地的中继(用 Preview);中继的 Test Call 能用。
输错密码后我被锁定了。
KatoCall 在多次失败后会故意封锁某地址。等封锁到期,或从另一台设备在 IP Bans 页面解除。
我的外呼器显示「Running」却不拨号。
很可能跳过了安装第 12 步。运行 install/12-configure-dialer.sh,然后 install/verify.sh。
利润列是空的。
客户的货币与中继的货币不同。KatoCall 不做货币换算——用一种货币买卖,利润就会显示。

无论遇到什么问题,sudo bash install/verify.sh 都是第一个要运行的。它检查约 65 项并指出要重跑的脚本。