FreeSWITCH 自动注册号码脚本使用指南

151 阅读16分钟

一键生成 FreeSWITCH 用户配置,让 SIP 号码快速在 Linphone 上注册使用

🎯 前言

在使用 FreeSWITCH 搭建 VoIP 系统时,经常需要为大量用户创建 SIP 账号配置。手动编写 XML 配置文件不仅繁琐,还容易出错。本文提供了一个 自动化 Python 脚本,可以:

  • 一键创建单个或批量 SIP 用户
  • 🚀 自动生成符合 FreeSWITCH 规范的 XML 配置
  • 🔄 自动重载配置,无需重启服务
  • 📱 直接使用,号码立即可在 Linphone 等客户端注册

无论你是 FreeSWITCH 新手还是运维人员,这个脚本都能大幅提升你的工作效率!


📖 目录


功能介绍

本脚本用于自动化创建 FreeSWITCH SIP 用户配置,让号码可以快速在 Linphone 或其他 SIP 客户端上注册使用。

主要功能

✅ 自动生成符合 FreeSWITCH 规范的 XML 配置文件
✅ 支持单个号码或批量号码创建
✅ 支持号码范围批量生成(如 1000-1050)
✅ 自动重载 FreeSWITCH 配置(无需手动重启)
✅ 显示 Linphone 注册信息
✅ 防止配置覆盖(有确认提示)


工作原理

整体流程图

用户输入号码和密码
      ↓
生成 XML 配置文件
      ↓
保存到 directory/default/ 目录
      ↓
执行 fs_cli -x 'reloadxml'
      ↓
FreeSWITCH 加载新用户配置
      ↓
Linphone 客户端可以注册该号码

配置文件结构说明

<include>
  <user id="1000">                    <!-- 用户号码/ID -->
    <params>
      <param name="password" value="123456"/>     <!-- SIP 认证密码 -->
      <param name="vm-password" value="1000"/>    <!-- 语音信箱密码 -->
    </params>
    <variables>
      <!-- 允许的呼叫类型 -->
      <variable name="toll_allow" value="domestic,international,local"/>
      
      <!-- 账户代码 -->
      <variable name="accountcode" value="1000"/>
      
      <!-- 用户上下文(拨号计划) -->
      <variable name="user_context" value="default"/>
      
      <!-- 显示的来电名称和号码 -->
      <variable name="effective_caller_id_name" value="Extension 1000"/>
      <variable name="effective_caller_id_number" value="1000"/>
      
      <!-- 外呼显示的名称和号码 -->
      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
      
      <!-- 呼叫组 -->
      <variable name="callgroup" value="techsupport"/>
    </variables>
  </user>
</include>

关键参数说明

参数说明示例值
id用户号码,也是 SIP 用户名1000
passwordSIP 注册认证密码123456
vm-password语音信箱密码1000
user_context用户所属拨号计划上下文default
effective_caller_id_number呼入时显示的号码1000
toll_allow允许的呼叫类型domestic,international,local

环境要求

系统要求

  • 操作系统:Linux(Debian/Ubuntu/CentOS 等)
  • Python 版本:Python 3.6+
  • FreeSWITCH:已安装并运行中

权限要求

  • 需要有写入 FreeSWITCH 配置目录的权限(通常需要 sudo)
  • 需要能够执行 fs_cli 命令(如果需要自动重载)

检查环境

# 检查 Python 版本
python3 --version

# 检查 FreeSWITCH 是否运行
systemctl status freeswitch
# 或
service freeswitch status

# 检查 fs_cli 是否可用
which fs_cli
fs_cli -x "status"

# 检查配置目录是否存在
ls -la /usr/local/freeswitch/conf/directory/default/

完整脚本代码

install_freeswitch_user.py

直接复制以下完整代码,保存为 install_freeswitch_user.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FreeSWITCH 用户号码自动注册脚本

功能:
1. 自动生成 FreeSWITCH 用户配置文件
2. 支持单个号码或批量号码注册
3. 自动重载 FreeSWITCH 配置

使用方法:
    python3 install_freeswitch_user.py --number 1000 --password 123456
    python3 install_freeswitch_user.py --numbers 1000,1001,1002 --password 123456
    python3 install_freeswitch_user.py --range 1000-1010 --password 123456
"""

import os
import sys
import argparse
import subprocess
from pathlib import Path


class FreeSwitchUserManager:
    """FreeSWITCH 用户管理器"""
    
    def __init__(self, config_dir="/usr/local/freeswitch/conf/directory/default"):
        self.config_dir = config_dir
        
    def generate_user_xml(self, user_id, password):
        """
        生成用户配置 XML 内容
        
        Args:
            user_id: 用户号码
            password: 认证密码
            
        Returns:
            str: XML 配置内容
        """
        xml_template = f"""<include>
  <user id="{user_id}">
    <params>
      <param name="password" value="{password}"/>
      <param name="vm-password" value="{user_id}"/>
    </params>
    <variables>
      <variable name="toll_allow" value="domestic,international,local"/>
      <variable name="accountcode" value="{user_id}"/>
      <variable name="user_context" value="default"/>
      <variable name="effective_caller_id_name" value="Extension {user_id}"/>
      <variable name="effective_caller_id_number" value="{user_id}"/>
      <variable name="outbound_caller_id_name" value="${{{{outbound_caller_name}}}}"/>
      <variable name="outbound_caller_id_number" value="${{{{outbound_caller_id}}}}"/>
      <variable name="callgroup" value="techsupport"/>
    </variables>
  </user>
</include>"""
        return xml_template
    
    def create_user_file(self, user_id, password):
        """
        创建用户配置文件
        
        Args:
            user_id: 用户号码
            password: 认证密码
            
        Returns:
            bool: 是否创建成功
        """
        try:
            # 确保配置目录存在
            os.makedirs(self.config_dir, exist_ok=True)
            
            # 生成配置文件路径
            file_path = os.path.join(self.config_dir, f"{user_id}.xml")
            
            # 检查文件是否已存在
            if os.path.exists(file_path):
                print(f"⚠️  警告: 用户 {user_id} 的配置文件已存在: {file_path}")
                response = input("是否覆盖?(y/n): ").strip().lower()
                if response != 'y':
                    print(f"❌ 跳过用户 {user_id}")
                    return False
            
            # 生成并写入配置内容
            xml_content = self.generate_user_xml(user_id, password)
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(xml_content)
            
            print(f"✅ 成功创建用户配置: {file_path}")
            return True
            
        except PermissionError:
            print(f"❌ 错误: 没有权限写入 {self.config_dir}")
            print("💡 提示: 请使用 sudo 运行此脚本")
            return False
        except Exception as e:
            print(f"❌ 错误: 创建用户 {user_id} 失败: {e}")
            return False
    
    def reload_freeswitch(self):
        """
        重载 FreeSWITCH 配置
        
        Returns:
            bool: 是否重载成功
        """
        try:
            print("\n🔄 正在重载 FreeSWITCH 配置...")
            
            # 尝试使用 fs_cli 重载配置
            result = subprocess.run(
                ['fs_cli', '-x', 'reloadxml'],
                capture_output=True,
                text=True,
                timeout=10
            )
            
            if result.returncode == 0:
                print("✅ FreeSWITCH 配置重载成功")
                return True
            else:
                print(f"⚠️  FreeSWITCH 配置重载失败: {result.stderr}")
                print("💡 请手动执行: fs_cli -x 'reloadxml'")
                return False
                
        except FileNotFoundError:
            print("⚠️  未找到 fs_cli 命令")
            print("💡 请手动执行: fs_cli -x 'reloadxml'")
            return False
        except subprocess.TimeoutExpired:
            print("⚠️  FreeSWITCH 重载超时")
            return False
        except Exception as e:
            print(f"⚠️  重载配置时出错: {e}")
            print("💡 请手动执行: fs_cli -x 'reloadxml'")
            return False
    
    def batch_create_users(self, user_ids, password):
        """
        批量创建用户
        
        Args:
            user_ids: 用户号码列表
            password: 统一密码
            
        Returns:
            tuple: (成功数量, 失败数量)
        """
        success_count = 0
        fail_count = 0
        
        print(f"\n📝 开始批量创建 {len(user_ids)} 个用户...")
        print("=" * 60)
        
        for user_id in user_ids:
            if self.create_user_file(user_id, password):
                success_count += 1
            else:
                fail_count += 1
        
        print("=" * 60)
        print(f"\n📊 创建完成: 成功 {success_count} 个, 失败 {fail_count} 个")
        
        return success_count, fail_count
    
    def show_registration_info(self, user_ids, password, domain="your.server.ip"):
        """
        显示 Linphone 注册信息
        
        Args:
            user_ids: 用户号码列表
            password: 密码
            domain: FreeSWITCH 服务器域名或 IP
        """
        print("\n" + "=" * 60)
        print("📱 Linphone 注册信息")
        print("=" * 60)
        
        for user_id in user_ids:
            print(f"\n用户号码: {user_id}")
            print(f"  - SIP 地址: {user_id}@{domain}")
            print(f"  - 用户名: {user_id}")
            print(f"  - 密码: {password}")
            print(f"  - 域: {domain}")
            print(f"  - 传输: UDP/TCP/TLS (默认 UDP:5060)")
        
        print("\n" + "=" * 60)
        print("💡 提示:")
        print("  1. 请将 'your.server.ip' 替换为你的 FreeSWITCH 服务器 IP 地址")
        print("  2. 在 Linphone 中添加 SIP 账户时使用上述信息")
        print("  3. 确保防火墙开放 5060(SIP) 和 RTP 端口范围")
        print("=" * 60)


def parse_number_range(range_str):
    """
    解析号码范围字符串
    
    Args:
        range_str: 范围字符串,如 "1000-1010"
        
    Returns:
        list: 号码列表
    """
    try:
        start, end = map(int, range_str.split('-'))
        if start > end:
            raise ValueError("起始号码不能大于结束号码")
        return [str(i) for i in range(start, end + 1)]
    except Exception as e:
        raise ValueError(f"无效的号码范围格式: {range_str}, 错误: {e}")


def main():
    """主函数"""
    parser = argparse.ArgumentParser(
        description='FreeSWITCH 用户号码自动注册脚本',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  # 创建单个用户
  python3 install_freeswitch_user.py --number 1000 --password 123456
  
  # 批量创建多个用户(逗号分隔)
  python3 install_freeswitch_user.py --numbers 1000,1001,1002 --password 123456
  
  # 批量创建号码范围
  python3 install_freeswitch_user.py --range 1000-1010 --password 123456
  
  # 指定配置目录
  python3 install_freeswitch_user.py --number 1000 --password 123456 --config-dir /etc/freeswitch/directory/default
  
  # 创建后不自动重载
  python3 install_freeswitch_user.py --number 1000 --password 123456 --no-reload
        """
    )
    
    # 号码参数组(三选一)
    number_group = parser.add_mutually_exclusive_group(required=True)
    number_group.add_argument(
        '--number',
        type=str,
        help='单个用户号码,如: 1000'
    )
    number_group.add_argument(
        '--numbers',
        type=str,
        help='多个用户号码(逗号分隔),如: 1000,1001,1002'
    )
    number_group.add_argument(
        '--range',
        type=str,
        help='号码范围,如: 1000-1010'
    )
    
    # 其他参数
    parser.add_argument(
        '--password',
        type=str,
        required=True,
        help='用户密码(所有用户使用相同密码)'
    )
    parser.add_argument(
        '--config-dir',
        type=str,
        default='/usr/local/freeswitch/conf/directory/default',
        help='FreeSWITCH 配置目录路径(默认: /usr/local/freeswitch/conf/directory/default)'
    )
    parser.add_argument(
        '--domain',
        type=str,
        default='your.server.ip',
        help='FreeSWITCH 服务器域名或 IP 地址'
    )
    parser.add_argument(
        '--no-reload',
        action='store_true',
        help='创建配置后不自动重载 FreeSWITCH'
    )
    
    args = parser.parse_args()
    
    # 解析用户号码列表
    user_ids = []
    if args.number:
        user_ids = [args.number]
    elif args.numbers:
        user_ids = [n.strip() for n in args.numbers.split(',')]
    elif args.range:
        try:
            user_ids = parse_number_range(args.range)
        except ValueError as e:
            print(f"❌ 错误: {e}")
            sys.exit(1)
    
    # 创建管理器实例
    manager = FreeSwitchUserManager(config_dir=args.config_dir)
    
    # 显示配置信息
    print("\n" + "=" * 60)
    print("🚀 FreeSWITCH 用户自动注册工具")
    print("=" * 60)
    print(f"📂 配置目录: {args.config_dir}")
    print(f"🔢 用户数量: {len(user_ids)}")
    print(f"📋 用户列表: {', '.join(user_ids)}")
    print(f"🔐 统一密码: {args.password}")
    print("=" * 60)
    
    # 批量创建用户
    success_count, fail_count = manager.batch_create_users(user_ids, args.password)
    
    # 重载配置
    if not args.no_reload and success_count > 0:
        manager.reload_freeswitch()
    
    # 显示注册信息
    if success_count > 0:
        manager.show_registration_info(user_ids, args.password, args.domain)
    
    # 返回退出码
    sys.exit(0 if fail_count == 0 else 1)


if __name__ == '__main__':
    main()

快速开始

1. 创建脚本文件

# 创建脚本文件
nano install_freeswitch_user.py

# 将上面的完整代码复制进去,保存退出

2. 添加执行权限

chmod +x install_freeswitch_user.py

3. 创建第一个用户

sudo python3 install_freeswitch_user.py --number 1000 --password 123456

4. 查看生成的配置文件

cat /usr/local/freeswitch/conf/directory/default/1000.xml

使用示例

示例 1:创建单个用户

sudo python3 install_freeswitch_user.py --number 1000 --password mypassword123

输出示例:

============================================================
🚀 FreeSWITCH 用户自动注册工具
============================================================
📂 配置目录: /usr/local/freeswitch/conf/directory/default
🔢 用户数量: 1
📋 用户列表: 1000
🔐 统一密码: mypassword123
============================================================

📝 开始批量创建 1 个用户...
============================================================
✅ 成功创建用户配置: /usr/local/freeswitch/conf/directory/default/1000.xml
============================================================

📊 创建完成: 成功 1 个, 失败 0 个

🔄 正在重载 FreeSWITCH 配置...
✅ FreeSWITCH 配置重载成功

示例 2:批量创建多个用户(逗号分隔)

sudo python3 install_freeswitch_user.py \
  --numbers 1000,1001,1002,1003 \
  --password 123456

示例 3:批量创建号码范围

# 创建从 1000 到 1050 共 51 个号码
sudo python3 install_freeswitch_user.py \
  --range 1000-1050 \
  --password strongpass123

示例 4:指定自定义配置目录

sudo python3 install_freeswitch_user.py \
  --number 2000 \
  --password pass123 \
  --config-dir /etc/freeswitch/directory/default

示例 5:创建用户但不自动重载

# 如果要批量创建很多用户,可以最后手动重载一次
sudo python3 install_freeswitch_user.py \
  --range 1000-1100 \
  --password 123456 \
  --no-reload

# 创建完成后手动重载
fs_cli -x "reloadxml"

示例 6:指定服务器域名

sudo python3 install_freeswitch_user.py \
  --number 1000 \
  --password 123456 \
  --domain 192.168.1.100

Linphone 配置

在 Linphone 中注册号码

方式一:使用向导(推荐新手)

  1. 打开 Linphone,点击 "设置" → "添加账户"
  2. 选择 "使用 SIP 账户"
  3. 填写以下信息:
    • 用户名: 1000
    • 密码: 123456(你设置的密码)
    • : 192.168.1.100(你的 FreeSWITCH 服务器 IP)
    • 传输方式: UDP(默认)

方式二:手动配置

  1. 打开 Linphone 设置
  2. 找到 "账户" → "添加"
  3. 填写完整信息:
SIP 身份: sip:1000@192.168.1.100
SIP 服务器地址: sip:192.168.1.100:5060
传输方式: UDP
用户名: 1000
密码: 123456

方式三:使用配置文件(批量配置)

# Linphone 配置文件示例
[sip_account_1]
reg_identity=sip:1000@192.168.1.100
reg_proxy=<sip:192.168.1.100:5060>
realm=192.168.1.100
username=1000
password=123456

验证注册状态

在 Linphone 中查看

  • 打开 Linphone
  • 查看状态栏,应显示 "已注册" 或绿色图标

在 FreeSWITCH 中查看

# 查看所有注册用户
fs_cli -x "show registrations"

# 查看特定用户状态
fs_cli -x "sofia status profile internal reg 1000"

# 查看 SIP 详细信息
fs_cli -x "sofia status"

常见问题

Q1: 提示 "没有权限写入配置目录"

解决方法:

# 使用 sudo 运行
sudo python3 install_freeswitch_user.py --number 1000 --password 123456

# 或者修改目录权限(不推荐)
sudo chmod 755 /usr/local/freeswitch/conf/directory/default/

Q2: 提示 "未找到 fs_cli 命令"

原因: fs_cli 不在系统 PATH 中

解决方法:

# 找到 fs_cli 位置
find /usr -name fs_cli

# 创建软链接
sudo ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli

# 或使用完整路径
/usr/local/freeswitch/bin/fs_cli -x "reloadxml"

Q3: Linphone 无法注册

排查步骤:

  1. 检查 FreeSWITCH 是否运行
systemctl status freeswitch
  1. 检查配置文件是否生成
ls -la /usr/local/freeswitch/conf/directory/default/1000.xml
cat /usr/local/freeswitch/conf/directory/default/1000.xml
  1. 检查防火墙
# 开放 SIP 端口
sudo ufw allow 5060/udp
sudo ufw allow 5060/tcp

# 开放 RTP 端口范围
sudo ufw allow 16384:32768/udp
  1. 查看 FreeSWITCH 日志
tail -f /usr/local/freeswitch/log/freeswitch.log
  1. 检查 SIP 配置文件
fs_cli -x "sofia status profile internal"

Q4: 配置文件已存在如何处理?

脚本会提示:

⚠️  警告: 用户 1000 的配置文件已存在
是否覆盖?(y/n):
  • 输入 y 覆盖
  • 输入 n 跳过

Q5: 如何批量删除用户?

# 删除单个用户
sudo rm /usr/local/freeswitch/conf/directory/default/1000.xml

# 批量删除号码范围
sudo rm /usr/local/freeswitch/conf/directory/default/{1000..1050}.xml

# 重载配置
fs_cli -x "reloadxml"

Q6: 如何修改用户密码?

方法 1:重新运行脚本

sudo python3 install_freeswitch_user.py --number 1000 --password new_password
# 输入 y 确认覆盖

方法 2:手动编辑配置文件

sudo nano /usr/local/freeswitch/conf/directory/default/1000.xml
# 修改 password 值
# 保存后执行
fs_cli -x "reloadxml"

Q7: 出现 "503 Maximum Calls In Progress" 错误

问题描述: Linphone 注册时提示 503 Maximum Calls In Progress

原因: FreeSWITCH 的最大并发会话数限制过低

解决方法:

步骤 1:修改 internal.xml 配置

sudo nano /usr/local/freeswitch/conf/sip_profiles/internal.xml

<settings> 标签内添加或修改:

<settings>
  <!-- 增加最大呼叫数 -->
  <param name="max-calls" value="1000"/>
  <param name="sessions-per-second" value="30"/>
  <param name="max-sessions" value="1000"/>
  
  <!-- 其他已有配置... -->
</settings>

步骤 2:修改全局配置

sudo nano /usr/local/freeswitch/conf/autoload_configs/switch.conf.xml

修改:

<configuration name="switch.conf" description="Core Configuration">
  <settings>
    <param name="max-sessions" value="1000"/>
    <param name="sessions-per-second" value="30"/>
  </settings>
</configuration>

步骤 3:重启 FreeSWITCH

# 重载配置
fs_cli -x "reloadxml"
fs_cli -x "sofia profile internal restart"

# 或直接重启服务
sudo systemctl restart freeswitch

临时快速解决:

# 通过命令行临时增加限制(重启后失效)
fs_cli -x "fsctl max_sessions 1000"
fs_cli -x "fsctl sessions_per_second 30"

Q8: 批量注册时部分号码失败

排查步骤:

  1. 检查配置文件是否生成:
ls -la /usr/local/freeswitch/conf/directory/default/
  1. 查看失败号码的详细错误:
tail -f /usr/local/freeswitch/log/freeswitch.log
  1. 验证 XML 语法:
xmllint --noout /usr/local/freeswitch/conf/directory/default/1000.xml
  1. 重新尝试创建失败的号码:
sudo python3 install_freeswitch_user.py --number 失败的号码 --password 密码

高级用法

1. 自定义配置模板

如果需要修改默认配置模板,编辑脚本中的 generate_user_xml 方法:

def generate_user_xml(self, user_id, password):
    xml_template = f"""<include>
  <user id="{user_id}">
    <params>
      <param name="password" value="{password}"/>
      <param name="vm-password" value="{user_id}"/>
      <!-- 添加你的自定义参数 -->
    </params>
    <variables>
      <!-- 添加你的自定义变量 -->
    </variables>
  </user>
</include>"""
    return xml_template

2. 从 CSV 文件批量导入

创建 users.csv:

number,password
1000,pass1000
1001,pass1001
1002,pass1002

扩展脚本读取 CSV:

import csv

with open('users.csv', 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        manager.create_user_file(row['number'], row['password'])

3. 集成到自动化脚本

#!/bin/bash
# 自动化部署脚本

# 创建用户组
echo "创建客服组用户..."
sudo python3 install_freeswitch_user.py --range 2000-2020 --password service123 --no-reload

echo "创建销售组用户..."
sudo python3 install_freeswitch_user.py --range 3000-3020 --password sales123 --no-reload

echo "创建管理组用户..."
sudo python3 install_freeswitch_user.py --range 9000-9010 --password admin123 --no-reload

# 统一重载配置
echo "重载 FreeSWITCH 配置..."
fs_cli -x "reloadxml"

echo "完成!"

4. 配合日志记录

# 记录创建日志
sudo python3 install_freeswitch_user.py \
  --range 1000-1100 \
  --password 123456 \
  2>&1 | tee freeswitch_user_creation.log

5. 定时任务自动创建

# 添加到 crontab
crontab -e

# 每天凌晨 2 点创建新用户(从其他系统同步)
0 2 * * * /usr/bin/python3 /path/to/install_freeswitch_user.py --range 1000-1100 --password daily123

安全建议

密码策略

✅ 使用强密码(至少 8 位,包含字母、数字、特殊字符)
✅ 不同用户组使用不同密码
✅ 定期更换密码
❌ 不要在命令行历史中暴露密码

保护配置文件

# 限制配置文件权限
sudo chmod 600 /usr/local/freeswitch/conf/directory/default/*.xml
sudo chown freeswitch:freeswitch /usr/local/freeswitch/conf/directory/default/*.xml

网络安全

  • 使用防火墙限制 SIP 端口访问
  • 考虑使用 TLS 加密 SIP 通信
  • 使用 fail2ban 防止暴力破解

相关命令参考

FreeSWITCH 管理命令

# 重载 XML 配置
fs_cli -x "reloadxml"

# 查看所有注册用户
fs_cli -x "show registrations"

# 查看呼叫状态
fs_cli -x "show channels"

# 踢出用户
fs_cli -x "sofia profile internal flush_inbound_reg 1000"

# 查看 SIP 配置文件状态
fs_cli -x "sofia status profile internal"

# 启用 SIP 调试
fs_cli -x "sofia profile internal siptrace on"

测试命令

# 从命令行发起测试呼叫
fs_cli -x "originate user/1000 &echo"

# 测试两个用户之间的呼叫
fs_cli -x "originate user/1000 &bridge(user/1001)"

参考资料


技术支持

如有问题,请查看:

  1. FreeSWITCH 日志:/usr/local/freeswitch/log/freeswitch.log
  2. 系统日志:journalctl -u freeswitch -f
  3. 配置文件路径:/usr/local/freeswitch/conf/directory/default/

📝 总结

本文提供的 FreeSWITCH 自动注册脚本解决了以下痛点:

✅ 解决的问题

  1. 手动创建繁琐 - 自动化批量生成 XML 配置
  2. 容易出错 - 统一模板,避免语法错误
  3. 效率低下 - 支持一次性创建成百上千个号码
  4. 配置复杂 - 封装了所有必要参数,开箱即用

🎯 适用场景

  • 🏢 企业电话系统:快速为员工分配分机号
  • 📞 呼叫中心:批量创建客服坐席号码
  • 🏫 教育机构:为师生提供通信账号
  • 🔬 测试环境:快速搭建测试用户

💡 最佳实践

  1. 安全性

    • 使用强密码
    • 定期更换密码
    • 限制 SIP 端口访问
    • 启用 fail2ban 防护
  2. 性能优化

    • 批量创建时使用 --no-reload,最后统一重载
    • 适当调整 max-sessions 参数
    • 监控系统资源使用情况
  3. 运维建议

    • 定期备份配置文件
    • 记录用户创建日志
    • 建立号码分配规范
    • 配合自动化部署脚本

🚀 扩展方向

基于本脚本,你还可以:

  • 集成到 Web 管理后台
  • 对接用户管理系统
  • 添加号码回收功能
  • 实现配置模板管理
  • 支持不同用户组权限

🔗 相关资源


💬 反馈与贡献

如果您在使用过程中遇到问题或有改进建议,欢迎:

  • 📧 提交 Issue
  • 🔧 提交 Pull Request
  • 💬 分享使用经验

⭐ 如果这篇文章对你有帮助

  • 🌟 给项目点个 Star
  • 📢 分享给更多需要的人
  • 💬 留下你的使用反馈

版本: 1.0
最后更新: 2025-11-06
作者: AI Assistant
许可证: MIT


📌 快速参考卡片

常用命令速查

# 创建单个用户
sudo python3 install_freeswitch_user.py --number 1000 --password pass123

# 批量创建(逗号分隔)
sudo python3 install_freeswitch_user.py --numbers 1000,1001,1002 --password pass123

# 批量创建(范围)
sudo python3 install_freeswitch_user.py --range 1000-1050 --password pass123

# 指定服务器 IP
sudo python3 install_freeswitch_user.py --number 1000 --password pass123 --domain 192.168.1.100

# 不自动重载
sudo python3 install_freeswitch_user.py --range 1000-1100 --password pass123 --no-reload

# 查看注册状态
fs_cli -x "show registrations"

# 重载配置
fs_cli -x "reloadxml"

# 重启 SIP profile
fs_cli -x "sofia profile internal restart"

Linphone 配置速查

项目
SIP 地址1000@你的服务器IP
用户名1000
密码你设置的密码
你的服务器IP
传输UDP
端口5060

🎉 感谢阅读,祝你使用愉快!