Несколько месяцев назад мне закидывали удочку как создавать экстен во FreePBX, я ковырял запрос создания, но он получался очень длинным. И тут несколько дней назад в чате Asterisk Russian Community кто-то интересовался как можно создать диапазон номеров, даже кое-кто утверждал что такое было, но порыскав я не нашёл, зато наткнулся на API FreePBX и даже в gist.gihtub.com одного из разработчиков FreePBX нашёл скрипт удаления экстена с АТС. Попросил в чате поправить его на диапазон и мне прислали в личку простенький, но рабочий вариант.

Я его поправил для создания одного экстена с добавлением имени и выкладываю (актуальная версия всегда будет тут).

#!/usr/bin/env php

<?php

/*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
* Скрипт для быстрого создания экстена
* Требуется как минимум 1 аргумент - номер, второй аргумент может служить именем (описанием)
* 2025-03-05
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***/

if (!isset($argv[1])){
    echo "u need 1 arg";
    exit;
}

$settings=array();

if (!isset($argv[2])){
    $settings["name"] = $argv[1];
} else {
    $settings["name"] = $argv[2];
}
    $settings["max_contacts"] = 2;


include '/etc/freepbx.conf';

$FreePBX = FreePBX::Create();

$device=$FreePBX->Core->getDevice($argv[1]);
$user=$FreePBX->Core->getUser($argv[1]);

if($device["user"]){
    echo 'device exist '.$device["user"];
    exit;
}

if($user["name"]){
    echo 'user exist '.$user["name"];
    exit;
}

$FreePBX->Core->processQuickCreate("pjsip", $argv[1], $settings);

В изначальном варианте всё делалось через addUser и addDevice, но порыскав в исходном коде FreePBX, нашёл более подходящую функцию processQuickCreate, которой воспользовался.

Многие параметры экстена задаются через именованный массив ($settings), а ключи аргументов можно узнать в теле функции. Например в теле функции processQuickCreate есть аргументы name, max_contacts, emergency_cid, callerid, secret, outboundcid, password и channel для DAHDI. Так что использовать другие нет смысла (я пробовал задавать код языка и транспорт, но они не применяются).

Ну и запускается скрипт командой extension-add.php 100 Secretar, как указано в комментарии скрипта второй аргумент можно не указывать и имя будет аналогично номеру.