
それは実際には何についてですか?
大企業や支店数の少ない中規模企業で働く場合、リソースの最適化、管理の簡素化、すべての人の標準化について考えることが多くなります。
たとえば、10〜100人の従業員用に同じタイプのブランチオフィスがいくつか(少なからず)あります。テレフォニーはさまざまな方法で編成できます。
プロバイダーのクラウドで既製のソリューションを利用する
各ブランチに独自のミニサーバーとアスタリスクをインストールします
中央にアスタリスクを1つ作成します
もちろん、最初の2つのオプションは実行されますが、十分な欠点があります。これは、いくつかの小さなインスタンスを維持するのに便利ではなく、財務上の問題やその他のいくつかの点でもあります。
, , , , . , , . , , 3 , 6 . - 6 ("6 ! !"), 6 .
, - SIP . , -, .
, . , - , -. . ? , - , , - .
18.1 PJSIP .
? , . - . , " ".
(Numbers), . , ?
, (Number)
- ? (Secret)
- , , (domain)
CID -
: , DTMF, -
Flags - -, . , , .

, . ? , , . - , , VIEW. , , . 3 :
Endpoints (ps_endpoints)
(ps_auths)
Aors (ps_aors)
, , "" PJSIP. SQL:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `ps_aors` AS select concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')) AS `id`,180 AS `default_expiration`,2 AS `max_contacts`,30 AS `minimum_expiration`,'yes' AS `remove_existing`,'' AS `contact` from `Numbers`;
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `ps_auths` AS select concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')) AS `id`,'userpass' AS `auth_type`,3600 AS `nonce_lifetime`,`Numbers`.`Secret` AS `password`,`Numbers`.`Number` AS `username`,`Numbers`.`domain` AS `realm` from `Numbers` where `Numbers`.`Secret` <> '';
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `ps_endpoints` AS select concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')) AS `id`,concat('transport-',lcase(`Numbers`.`Protocol`)) AS `transport`,concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')) AS `aors`,if(`Numbers`.`Secret` <> '',concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')),NULL) AS `auth`,'SIP' AS `context`,'all' AS `disallow`,concat('ulaw,alaw,opus',if(find_in_set('Video',`Numbers`.`Flags`),',h263,h261,h263p,h264','')) AS `allow`,concat(`Numbers`.`Number`,if(`Numbers`.`domain` is not null,concat('@',`Numbers`.`domain`),'')) AS `outbound_auth`,concat(`Numbers`.`CID`,' <',`Numbers`.`Number`,'>') AS `callerid`,if(`Numbers`.`Protocol` = 'TLS','sdes','no') AS `media_encryption`,`Numbers`.`PickupGroup` AS `named_pickup_group`,2 AS `device_state_busy_at`,concat('vRecord=',if(find_in_set('Record',`Numbers`.`Flags`) > 0,'yes','no'),';','vRussia=',if(find_in_set('Russia',`Numbers`.`Flags`) > 0,'yes','no'),';','vAbroad=',if(find_in_set('Abroad',`Numbers`.`Flags`) > 0,'yes','no'),';','vVoicemail=',if(find_in_set('Voicemail',`Numbers`.`Flags`) > 0,'yes','no'),';','vFilterCID=no') AS `set_var`,`Numbers`.`NumberID` AS `callerid_tag`,'username,auth_username,ip' AS `identify_by` from `Numbers`;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
. - - "" "":
, 5 . , . , .
, 3 , , , , , 101, 102, "" 007 ..
, Numbers .
Numbers:

, " " , , .
ps_endpoints

, - Numbers.
ps_auth

ps_aors

, . , Numbers, .
, . - id. 5 , - . 3 @ . , , - .
. , . AOR endpointa , .. @, . , (id) , AOR . . - AOR , . , .
, , .
pjsip.conf

, .
disable multi domain
, no. , . - . , , yes. 2 . .
endpoint identifier order
, , . = ip,username. , , .. IP . , username, endpoint .
, .
res config mysql.conf
, - :

extconfig.conf

, .
ps_contacts , astdb.
Spoiler
CDR. , . , GitHub
sorcery.conf
. , , .

.
, ?
, endpoint :

, . " " . " " .
, . .., 5 :
Dial(PJSIP/19960)
3
Dial(PJSIP/123@test3)
, , .
?
Microsip, :

101 . ?

PS:
- .
- , , . , .
domains:
domain (VARCHAR) | code (VARCHAR)
たとえば、次のように入力します。
test2 | 01
test3 | 02
もちろん、1文字でも任意のブランチコードを使用できます。私たちは支店へのアクセスを決定します。たとえば、私は9時以降に「都市」にアクセスでき、8番の支店に行きます。あなたは、都合のよいものを利用します。少なくとも*(アスタリスク)。
ドメインテーブルをextconfig.confのドメイン識別子にリンクします。ダイヤルプランを作成します。
exten => _8XXXXX,1,NoOp(Call from ${CALLERID(all)} to filial ${EXTEN:1:2})
same => n, Set(domain=${REALTIME_FIELD(domains,code,${EXTEN:1:2},domain)})
same => n, GotoIF($[ "${domain}" = "" ]?GotoError) ;
same => n, Dial(PJSIP/${EXTEN:3}@${domain})
same => n, Hangip
合計で、電話で801123をダイヤルし、123のtest2ブランチに到達します。
管理を容易にするために、別のキー制約を追加できます。
番号.domain-外国の鍵->ドメイン.domain
これにより、編集中にドメインが失われるのを防ぐことができます。