FusionPBX、または再びクール、FreeSWITCH

同じ川へ



最近では、FreeSWITCHをセットアップするためのチートシートを自分で書きました。 そこに記載されているセットアッププロセスは、テスト条件下で動作する構成につながりました。 このテストは、組織を移動し、運用環境でテレフォニーを開始した後、何を処理するかの予備的なアイデアを作成するために必要でした。 ただし、移動が行われ、接続が動作モードで開始されたとき、最初のインクルージョンでは、構成が動作していなかったことが示されました。内部コールは停止しました。



チートシートが書き込まれた最終セットアップとヘルスチェックの瞬間から、動作モードでスイッチを入れたとき、設定に変更が加えられなかったため、これは私にとって完全な驚きでした。 直接的な都市番号(約60個の数字の末尾)が割り当てられた従業員の着信および発信コールに対して、内部番号とルートのみが一括して追加されました。



デバッグが行われ、妨害が明らかになり、すべて機能しました。 しかし、松葉杖の感覚がありました。 私はそれを説明しません。なぜなら、私は適用された解決策が正しいと確信しているからです。 さらに、ニュアンスが明確になりました。内部から外部への発信コールについては、 default_provider_usernameフィールドのSIPトランク設定で指定された番号のみが決定されました



<X-PRE-PROCESS cmd="set" data="default_provider_username=3435555555"/>
      
      





加入者番号の構成に示されているものではありません。



 <variable name="outbound_caller_id_name" value="3435555566"/>
      
      





プロバイダーのテクニカルサポートは、 Fromフィールドで私たちからそれらに到着するすべてのコールには、正確に3435555555番号、つまり、私の側の横棒があることを報告しました。 さらに、私は突然電話を転送するタスクに完全に電話を切った。 そして、ケーキの桜は、コールの転送を拒否したEricsson Dialog 4422デバイスと、設定にこのような設定のわずかなヒントがない場合、接続期間の制限が90〜100秒であると決定したCisco 7945gデバイスによる脳の除去でした。 同時に、Yealink T21 E2デバイスは完全に問題なく動作しました。



この段階で、電話の分野で自分の能力の限界に達したことに気付き、すべてが落ち着いて頭に収まるようにタイムアウトしました。 また、この決定は、休業日のない2週間の絶対的な野生の後、組織の新しい場所に到着した直後に不規則な労働時間を伴う一般的な疲労のため、非常に強力でした。



Fusionpbx



コンソールルールとテキスト設定のグラフィカルインターフェイスに対する同情がなかったにもかかわらず、FusionPBXと呼ばれるWebマズルを使用したソリューションに目を向け始めました。 このような独自の原則の裏切りの最初の理由は、各機能要素の設定のボリューム全体を、実行可能な「箱から出した」構成の形で1か所に集めたいという欲求でした。 これはまさにグラフィカルインターフェースが提供するものです。 よく考え抜かれたグラフィカルインターフェイスの追加のボーナスは、モジュールと機能間の関係を視覚的に表現することです。 初心者にとって(個人的には)、特定の実装方法を使用した抽象化のレベルが低いほど、このことの仕組みの学習と理解が速くなります。 2番目の理由はwww.pbxforums.comでFreeSWITCHの情報を検索するときにリンクを介して取得しましたが、皮肉なことに、FusionPBX設定ページのスクリーンショットでした。



FusionPBXは、データベースにWeb銃口と設定が保存されているFreeSWITCHです。 無人インストールスクリプトは、FreeSWITCH、Nginx、PostgreSQL、および実際にはFusionPBX自体のWebインターフェイスの両方をインストールします。 私はこの瞬間にこだわるつもりはありません。すべてはドキュメントの指示に従ってためらうことなく設定されています。 開発者が推奨する64ビットDebian 8にすべてを置きました。



加入者番号のインポート



ここでは、加入者番号と着信ルートを設定するプロセスは考慮されません。 このプロセスは公式ドキュメントに記載されています。



代わりに、すべてを一括でインポートする手順について説明します。 この手順を実行するための説明、マニュアル、ヒントは見つかりませんでした。



インストールの最後に、Adminer(phpMyAdminのアナログ)への自動ログインを有効にします。

詳細設定→デフォルト設定
auto_login

Value : true

Enabled : true




現在のページの値を変更した後、デフォルト設定ページの「再読み込み 」で「保存 」をクリックします



管理者: 詳細設定→管理者に移動します。



次の表は、私たちにとって興味深いものです。



v_extensions-サブスクライバー番号。

v_destinations-内部加入者番号に割り当てられた都市番号への着信コールのルート。

v_dialplans - dialplansディレクトリ。

v_dialplan_details-着信コールのダイヤルプラン設定。

v_voicemails-ボイスメール設定。



タスクのステートメントは次のとおりでした:AD名から従業員とその内部電話番号をアンロードし、CSVファイルにアップロードを保存し、サブスクライバー番号とボイスメール設定のテーブルのデータベースにインポートします(ボイスメールは無効にする必要があります)。

都市番号と内線番号の対応ディレクトリを使用して、着信コールのルートとダイヤルプランを含むテーブルにインポートするためのCSVファイルを作成します。



このタスクを詳細に検討するのではなく、完成したスクリプトをネタバレの下に隠すだけです。

注意!



提案されたスクリプトはご自身の責任で使用してください。作成者は、誤った使用または正しい使用による予期しない副作用について責任を負いません。



  • $ nums変数を、数値に一致する値に設定します。
  • スクリプトを使用する前に、ドメインUUIDを常にインストール中にドメインに割り当てられた値( domain_uuidフィールド)に置き換える必要があります。
  • ドメインのIPアドレス(172.18.253.1)を自分のものに置き換える必要もあります。
  • -SearchBaseスイッチの値を調整することを忘れないでください。 「OU =エカテリンブルグ、DC = dc、DC =ドメイン、DC =ローカル」ではなくサンプリングエリアを示します
  • ボイスメールアプリケーションのUUID( app_uuidフィールド)も、インストール中に割り当てられたUUIDに置き換えられます。
  • UUIDの値は、たとえばv_dialplansテーブルで表示できます。
  • すべての加入者番号には登録用のパスワード「12345」が割り当てられ、ボイスメールおよび他のサービスのパスワードは加入者番号と同じになります。
  • スクリプトはファイルを1行ずつ追加します! したがって、各スクリプトを実行する前にファイルを削除するか、その内容を消去することを忘れないでください!
加入者番号とボイスメール
 $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False $nums=@{"1111"="5555555";"1112"="5555566"} [System.IO.File]::AppendAllText("d:\v_extensions.csv", "extension_uuid;domain_uuid;extension;number_alias;password;accountcode;effective_caller_id_name;effective_caller_id_number;outbound_caller_id_name;outbound_caller_id_number;emergency_caller_id_name;emergency_caller_id_number;directory_full_name;directory_visible;directory_exten_visible;limit_max;limit_destination;missed_call_app;missed_call_data;user_context;toll_allow;call_timeout;call_group;call_screen_enabled;user_record;hold_music;auth_acl;cidr;sip_force_contact;nibble_account;sip_force_expires;mwi_account;sip_bypass_media;unique_id;dial_string;dial_user;dial_domain;do_not_disturb;forward_all_destination;forward_all_enabled;forward_busy_destination;forward_busy_enabled;forward_no_answer_destination;forward_no_answer_enabled;follow_me_uuid;enabled;description;forward_caller_id_uuid;absolute_codec_string;forward_user_not_registered_destination;forward_user_not_registered_enabled;force_ping`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "domain_uuid;voicemail_uuid;voicemail_id;voicemail_password;greeting_id;voicemail_alternate_greet_id;voicemail_mail_to;voicemail_sms_to;voicemail_attach_file;voicemail_file;voicemail_local_after_email;voicemail_enabled;voicemail_description;voicemail_name_base64`r`n", $Utf8NoBomEncoding) Get-ADUser -Filter * -SearchBase "OU=Ekaterinburg,DC=dc,DC=domain,DC=local" -Properties Telephonenumber,sn,initials,cn|%{ if(-not $_.Telephonenumber -eq ""){ if($nums.Get_Item($_.Telephonenumber) -eq $null) {$outn = "5555555"} else {$outn = $nums.Get_Item($_.Telephonenumber)} $extension_uuid = (New-Guid).Tostring() $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $extension = $_.Telephonenumber $number_alias = "" $password = "12345" $accountcode = "172.18.253.1" $effective_caller_id_name = $_.sn + " " + $_.initials $effective_caller_id_number = $extension $outbound_caller_id_name = $outn $outbound_caller_id_number = $outn $emergency_caller_id_name = $effective_caller_id_name $emergency_caller_id_number = $extension $directory_full_name = $_.cn $directory_visible = "true" $directory_exten_visible = "true" $limit_max = "1" $limit_destination = "error/user_busy" $missed_call_app = "" $missed_call_data = "" $user_context = "172.18.253.1" $toll_allow = "domestic,international,local" $call_timeout = "30" $call_group = "" $call_screen_enabled = "false" $user_record = "" $hold_music = "local_stream://default" $auth_acl = "" $cidr = "" $sip_force_contact = "" $nibble_account = "" $sip_force_expires = "3600" $mwi_account = "" $sip_bypass_media = "" $unique_id = "" $dial_string = "" $dial_user = "" $dial_domain = "" $do_not_disturb = "" $forward_all_destination = "" $forward_all_enabled = "" $forward_busy_destination = "" $forward_busy_enabled = "" $forward_no_answer_destination = "" $forward_no_answer_enabled = "" $follow_me_uuid = "" $enabled = "true" $description = $_.sn + " " + $_.initials $forward_caller_id_uuid = "" $absolute_codec_string = "" $forward_user_not_registered_destination = "" $forward_user_not_registered_enabled = "" $force_ping = "" $csv="$extension_uuid;$domain_uuid;$extension;$number_alias;$password;$accountcode;$effective_caller_id_name;$effective_caller_id_number;$outbound_caller_id_name;$outbound_caller_id_number;$emergency_caller_id_name;$emergency_caller_id_number;$directory_full_name;$directory_visible;$directory_exten_visible;$limit_max;$limit_destination;$missed_call_app;$missed_call_data;$user_context;`"$toll_allow`";$call_timeout;$call_group;$call_screen_enabled;$user_record;$hold_music;$auth_acl;$cidr;$sip_force_contact;$nibble_account;$sip_force_expires;$mwi_account;$sip_bypass_media;$unique_id;$dial_string;$dial_user;$dial_domain;$do_not_disturb;$forward_all_destination;$forward_all_enabled;$forward_busy_destination;$forward_busy_enabled;$forward_no_answer_destination;$forward_no_answer_enabled;$follow_me_uuid;$enabled;$description;$forward_caller_id_uuid;$absolute_codec_string;$forward_user_not_registered_destination;$forward_user_not_registered_enabled;`"$force_ping`"`r`n" [System.IO.File]::AppendAllText("d:\v_extensions.csv", $csv, $Utf8NoBomEncoding) $voicemail_uuid = (New-Guid).Tostring() $voicemail_id = $extension $voicemail_password = $extension $greeting_id $voicemail_alternate_greet_id $voicemail_mail_to = "" $voicemail_sms_to $voicemail_attach_file $voicemail_file = "" $voicemail_local_after_email = "true" $voicemail_enabled = "false" $voicemail_description = $description $voicemail_name_base64 [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "$domain_uuid;$voicemail_uuid;$voicemail_id;$voicemail_password;$greeting_id;$voicemail_alternate_greet_id;$voicemail_mail_to;$voicemail_sms_to;$voicemail_attach_file;$voicemail_file;$voicemail_local_after_email;$voicemail_enabled;$voicemail_description;$voicemail_name_base64`r`n", $Utf8NoBomEncoding)}}
      
      



:\ v_extensions.csv"、「extension_uuid; domain_uuid;拡張; number_alias;パスワード; accountcode; effective_caller_id_name; effective_caller_id_number; outbound_caller_id_name; outbound_caller_id_number; emergency_caller_id_name; emergency_caller_id_number; directory_full_name; directory_visible; directory_exten_visible $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False $nums=@{"1111"="5555555";"1112"="5555566"} [System.IO.File]::AppendAllText("d:\v_extensions.csv", "extension_uuid;domain_uuid;extension;number_alias;password;accountcode;effective_caller_id_name;effective_caller_id_number;outbound_caller_id_name;outbound_caller_id_number;emergency_caller_id_name;emergency_caller_id_number;directory_full_name;directory_visible;directory_exten_visible;limit_max;limit_destination;missed_call_app;missed_call_data;user_context;toll_allow;call_timeout;call_group;call_screen_enabled;user_record;hold_music;auth_acl;cidr;sip_force_contact;nibble_account;sip_force_expires;mwi_account;sip_bypass_media;unique_id;dial_string;dial_user;dial_domain;do_not_disturb;forward_all_destination;forward_all_enabled;forward_busy_destination;forward_busy_enabled;forward_no_answer_destination;forward_no_answer_enabled;follow_me_uuid;enabled;description;forward_caller_id_uuid;absolute_codec_string;forward_user_not_registered_destination;forward_user_not_registered_enabled;force_ping`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "domain_uuid;voicemail_uuid;voicemail_id;voicemail_password;greeting_id;voicemail_alternate_greet_id;voicemail_mail_to;voicemail_sms_to;voicemail_attach_file;voicemail_file;voicemail_local_after_email;voicemail_enabled;voicemail_description;voicemail_name_base64`r`n", $Utf8NoBomEncoding) Get-ADUser -Filter * -SearchBase "OU=Ekaterinburg,DC=dc,DC=domain,DC=local" -Properties Telephonenumber,sn,initials,cn|%{ if(-not $_.Telephonenumber -eq ""){ if($nums.Get_Item($_.Telephonenumber) -eq $null) {$outn = "5555555"} else {$outn = $nums.Get_Item($_.Telephonenumber)} $extension_uuid = (New-Guid).Tostring() $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $extension = $_.Telephonenumber $number_alias = "" $password = "12345" $accountcode = "172.18.253.1" $effective_caller_id_name = $_.sn + " " + $_.initials $effective_caller_id_number = $extension $outbound_caller_id_name = $outn $outbound_caller_id_number = $outn $emergency_caller_id_name = $effective_caller_id_name $emergency_caller_id_number = $extension $directory_full_name = $_.cn $directory_visible = "true" $directory_exten_visible = "true" $limit_max = "1" $limit_destination = "error/user_busy" $missed_call_app = "" $missed_call_data = "" $user_context = "172.18.253.1" $toll_allow = "domestic,international,local" $call_timeout = "30" $call_group = "" $call_screen_enabled = "false" $user_record = "" $hold_music = "local_stream://default" $auth_acl = "" $cidr = "" $sip_force_contact = "" $nibble_account = "" $sip_force_expires = "3600" $mwi_account = "" $sip_bypass_media = "" $unique_id = "" $dial_string = "" $dial_user = "" $dial_domain = "" $do_not_disturb = "" $forward_all_destination = "" $forward_all_enabled = "" $forward_busy_destination = "" $forward_busy_enabled = "" $forward_no_answer_destination = "" $forward_no_answer_enabled = "" $follow_me_uuid = "" $enabled = "true" $description = $_.sn + " " + $_.initials $forward_caller_id_uuid = "" $absolute_codec_string = "" $forward_user_not_registered_destination = "" $forward_user_not_registered_enabled = "" $force_ping = "" $csv="$extension_uuid;$domain_uuid;$extension;$number_alias;$password;$accountcode;$effective_caller_id_name;$effective_caller_id_number;$outbound_caller_id_name;$outbound_caller_id_number;$emergency_caller_id_name;$emergency_caller_id_number;$directory_full_name;$directory_visible;$directory_exten_visible;$limit_max;$limit_destination;$missed_call_app;$missed_call_data;$user_context;`"$toll_allow`";$call_timeout;$call_group;$call_screen_enabled;$user_record;$hold_music;$auth_acl;$cidr;$sip_force_contact;$nibble_account;$sip_force_expires;$mwi_account;$sip_bypass_media;$unique_id;$dial_string;$dial_user;$dial_domain;$do_not_disturb;$forward_all_destination;$forward_all_enabled;$forward_busy_destination;$forward_busy_enabled;$forward_no_answer_destination;$forward_no_answer_enabled;$follow_me_uuid;$enabled;$description;$forward_caller_id_uuid;$absolute_codec_string;$forward_user_not_registered_destination;$forward_user_not_registered_enabled;`"$force_ping`"`r`n" [System.IO.File]::AppendAllText("d:\v_extensions.csv", $csv, $Utf8NoBomEncoding) $voicemail_uuid = (New-Guid).Tostring() $voicemail_id = $extension $voicemail_password = $extension $greeting_id $voicemail_alternate_greet_id $voicemail_mail_to = "" $voicemail_sms_to $voicemail_attach_file $voicemail_file = "" $voicemail_local_after_email = "true" $voicemail_enabled = "false" $voicemail_description = $description $voicemail_name_base64 [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "$domain_uuid;$voicemail_uuid;$voicemail_id;$voicemail_password;$greeting_id;$voicemail_alternate_greet_id;$voicemail_mail_to;$voicemail_sms_to;$voicemail_attach_file;$voicemail_file;$voicemail_local_after_email;$voicemail_enabled;$voicemail_description;$voicemail_name_base64`r`n", $Utf8NoBomEncoding)}}



; user_context; toll_allow; call_timeout; call_group; call_screen_enabled; user_record; hold_music; auth_acl; CIDR; sip_force_contact; nibble_account; sip_force_expires; mwi_account; sip_bypass_media; UNIQUE_ID; dial_string; dial_user; dial_domain; do_not_disturb; forward_all_destination; forward_all_enabled $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False $nums=@{"1111"="5555555";"1112"="5555566"} [System.IO.File]::AppendAllText("d:\v_extensions.csv", "extension_uuid;domain_uuid;extension;number_alias;password;accountcode;effective_caller_id_name;effective_caller_id_number;outbound_caller_id_name;outbound_caller_id_number;emergency_caller_id_name;emergency_caller_id_number;directory_full_name;directory_visible;directory_exten_visible;limit_max;limit_destination;missed_call_app;missed_call_data;user_context;toll_allow;call_timeout;call_group;call_screen_enabled;user_record;hold_music;auth_acl;cidr;sip_force_contact;nibble_account;sip_force_expires;mwi_account;sip_bypass_media;unique_id;dial_string;dial_user;dial_domain;do_not_disturb;forward_all_destination;forward_all_enabled;forward_busy_destination;forward_busy_enabled;forward_no_answer_destination;forward_no_answer_enabled;follow_me_uuid;enabled;description;forward_caller_id_uuid;absolute_codec_string;forward_user_not_registered_destination;forward_user_not_registered_enabled;force_ping`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "domain_uuid;voicemail_uuid;voicemail_id;voicemail_password;greeting_id;voicemail_alternate_greet_id;voicemail_mail_to;voicemail_sms_to;voicemail_attach_file;voicemail_file;voicemail_local_after_email;voicemail_enabled;voicemail_description;voicemail_name_base64`r`n", $Utf8NoBomEncoding) Get-ADUser -Filter * -SearchBase "OU=Ekaterinburg,DC=dc,DC=domain,DC=local" -Properties Telephonenumber,sn,initials,cn|%{ if(-not $_.Telephonenumber -eq ""){ if($nums.Get_Item($_.Telephonenumber) -eq $null) {$outn = "5555555"} else {$outn = $nums.Get_Item($_.Telephonenumber)} $extension_uuid = (New-Guid).Tostring() $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $extension = $_.Telephonenumber $number_alias = "" $password = "12345" $accountcode = "172.18.253.1" $effective_caller_id_name = $_.sn + " " + $_.initials $effective_caller_id_number = $extension $outbound_caller_id_name = $outn $outbound_caller_id_number = $outn $emergency_caller_id_name = $effective_caller_id_name $emergency_caller_id_number = $extension $directory_full_name = $_.cn $directory_visible = "true" $directory_exten_visible = "true" $limit_max = "1" $limit_destination = "error/user_busy" $missed_call_app = "" $missed_call_data = "" $user_context = "172.18.253.1" $toll_allow = "domestic,international,local" $call_timeout = "30" $call_group = "" $call_screen_enabled = "false" $user_record = "" $hold_music = "local_stream://default" $auth_acl = "" $cidr = "" $sip_force_contact = "" $nibble_account = "" $sip_force_expires = "3600" $mwi_account = "" $sip_bypass_media = "" $unique_id = "" $dial_string = "" $dial_user = "" $dial_domain = "" $do_not_disturb = "" $forward_all_destination = "" $forward_all_enabled = "" $forward_busy_destination = "" $forward_busy_enabled = "" $forward_no_answer_destination = "" $forward_no_answer_enabled = "" $follow_me_uuid = "" $enabled = "true" $description = $_.sn + " " + $_.initials $forward_caller_id_uuid = "" $absolute_codec_string = "" $forward_user_not_registered_destination = "" $forward_user_not_registered_enabled = "" $force_ping = "" $csv="$extension_uuid;$domain_uuid;$extension;$number_alias;$password;$accountcode;$effective_caller_id_name;$effective_caller_id_number;$outbound_caller_id_name;$outbound_caller_id_number;$emergency_caller_id_name;$emergency_caller_id_number;$directory_full_name;$directory_visible;$directory_exten_visible;$limit_max;$limit_destination;$missed_call_app;$missed_call_data;$user_context;`"$toll_allow`";$call_timeout;$call_group;$call_screen_enabled;$user_record;$hold_music;$auth_acl;$cidr;$sip_force_contact;$nibble_account;$sip_force_expires;$mwi_account;$sip_bypass_media;$unique_id;$dial_string;$dial_user;$dial_domain;$do_not_disturb;$forward_all_destination;$forward_all_enabled;$forward_busy_destination;$forward_busy_enabled;$forward_no_answer_destination;$forward_no_answer_enabled;$follow_me_uuid;$enabled;$description;$forward_caller_id_uuid;$absolute_codec_string;$forward_user_not_registered_destination;$forward_user_not_registered_enabled;`"$force_ping`"`r`n" [System.IO.File]::AppendAllText("d:\v_extensions.csv", $csv, $Utf8NoBomEncoding) $voicemail_uuid = (New-Guid).Tostring() $voicemail_id = $extension $voicemail_password = $extension $greeting_id $voicemail_alternate_greet_id $voicemail_mail_to = "" $voicemail_sms_to $voicemail_attach_file $voicemail_file = "" $voicemail_local_after_email = "true" $voicemail_enabled = "false" $voicemail_description = $description $voicemail_name_base64 [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "$domain_uuid;$voicemail_uuid;$voicemail_id;$voicemail_password;$greeting_id;$voicemail_alternate_greet_id;$voicemail_mail_to;$voicemail_sms_to;$voicemail_attach_file;$voicemail_file;$voicemail_local_after_email;$voicemail_enabled;$voicemail_description;$voicemail_name_base64`r`n", $Utf8NoBomEncoding)}}



:\ v_voicemails.csv"、「domain_uuid; voicemail_uuid; voicemail_id; voicemail_password; greeting_id; voicemail_alternate_greet_id; voicemail_mail_to; voicemail_sms_to; voicemail_attach_file; voicemail_file; voicemail_local_after_email; voicemail_enabled; voicemail_description; voicemail_name_base64`r $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False $nums=@{"1111"="5555555";"1112"="5555566"} [System.IO.File]::AppendAllText("d:\v_extensions.csv", "extension_uuid;domain_uuid;extension;number_alias;password;accountcode;effective_caller_id_name;effective_caller_id_number;outbound_caller_id_name;outbound_caller_id_number;emergency_caller_id_name;emergency_caller_id_number;directory_full_name;directory_visible;directory_exten_visible;limit_max;limit_destination;missed_call_app;missed_call_data;user_context;toll_allow;call_timeout;call_group;call_screen_enabled;user_record;hold_music;auth_acl;cidr;sip_force_contact;nibble_account;sip_force_expires;mwi_account;sip_bypass_media;unique_id;dial_string;dial_user;dial_domain;do_not_disturb;forward_all_destination;forward_all_enabled;forward_busy_destination;forward_busy_enabled;forward_no_answer_destination;forward_no_answer_enabled;follow_me_uuid;enabled;description;forward_caller_id_uuid;absolute_codec_string;forward_user_not_registered_destination;forward_user_not_registered_enabled;force_ping`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "domain_uuid;voicemail_uuid;voicemail_id;voicemail_password;greeting_id;voicemail_alternate_greet_id;voicemail_mail_to;voicemail_sms_to;voicemail_attach_file;voicemail_file;voicemail_local_after_email;voicemail_enabled;voicemail_description;voicemail_name_base64`r`n", $Utf8NoBomEncoding) Get-ADUser -Filter * -SearchBase "OU=Ekaterinburg,DC=dc,DC=domain,DC=local" -Properties Telephonenumber,sn,initials,cn|%{ if(-not $_.Telephonenumber -eq ""){ if($nums.Get_Item($_.Telephonenumber) -eq $null) {$outn = "5555555"} else {$outn = $nums.Get_Item($_.Telephonenumber)} $extension_uuid = (New-Guid).Tostring() $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $extension = $_.Telephonenumber $number_alias = "" $password = "12345" $accountcode = "172.18.253.1" $effective_caller_id_name = $_.sn + " " + $_.initials $effective_caller_id_number = $extension $outbound_caller_id_name = $outn $outbound_caller_id_number = $outn $emergency_caller_id_name = $effective_caller_id_name $emergency_caller_id_number = $extension $directory_full_name = $_.cn $directory_visible = "true" $directory_exten_visible = "true" $limit_max = "1" $limit_destination = "error/user_busy" $missed_call_app = "" $missed_call_data = "" $user_context = "172.18.253.1" $toll_allow = "domestic,international,local" $call_timeout = "30" $call_group = "" $call_screen_enabled = "false" $user_record = "" $hold_music = "local_stream://default" $auth_acl = "" $cidr = "" $sip_force_contact = "" $nibble_account = "" $sip_force_expires = "3600" $mwi_account = "" $sip_bypass_media = "" $unique_id = "" $dial_string = "" $dial_user = "" $dial_domain = "" $do_not_disturb = "" $forward_all_destination = "" $forward_all_enabled = "" $forward_busy_destination = "" $forward_busy_enabled = "" $forward_no_answer_destination = "" $forward_no_answer_enabled = "" $follow_me_uuid = "" $enabled = "true" $description = $_.sn + " " + $_.initials $forward_caller_id_uuid = "" $absolute_codec_string = "" $forward_user_not_registered_destination = "" $forward_user_not_registered_enabled = "" $force_ping = "" $csv="$extension_uuid;$domain_uuid;$extension;$number_alias;$password;$accountcode;$effective_caller_id_name;$effective_caller_id_number;$outbound_caller_id_name;$outbound_caller_id_number;$emergency_caller_id_name;$emergency_caller_id_number;$directory_full_name;$directory_visible;$directory_exten_visible;$limit_max;$limit_destination;$missed_call_app;$missed_call_data;$user_context;`"$toll_allow`";$call_timeout;$call_group;$call_screen_enabled;$user_record;$hold_music;$auth_acl;$cidr;$sip_force_contact;$nibble_account;$sip_force_expires;$mwi_account;$sip_bypass_media;$unique_id;$dial_string;$dial_user;$dial_domain;$do_not_disturb;$forward_all_destination;$forward_all_enabled;$forward_busy_destination;$forward_busy_enabled;$forward_no_answer_destination;$forward_no_answer_enabled;$follow_me_uuid;$enabled;$description;$forward_caller_id_uuid;$absolute_codec_string;$forward_user_not_registered_destination;$forward_user_not_registered_enabled;`"$force_ping`"`r`n" [System.IO.File]::AppendAllText("d:\v_extensions.csv", $csv, $Utf8NoBomEncoding) $voicemail_uuid = (New-Guid).Tostring() $voicemail_id = $extension $voicemail_password = $extension $greeting_id $voicemail_alternate_greet_id $voicemail_mail_to = "" $voicemail_sms_to $voicemail_attach_file $voicemail_file = "" $voicemail_local_after_email = "true" $voicemail_enabled = "false" $voicemail_description = $description $voicemail_name_base64 [System.IO.File]::AppendAllText("d:\v_voicemails.csv", "$domain_uuid;$voicemail_uuid;$voicemail_id;$voicemail_password;$greeting_id;$voicemail_alternate_greet_id;$voicemail_mail_to;$voicemail_sms_to;$voicemail_attach_file;$voicemail_file;$voicemail_local_after_email;$voicemail_enabled;$voicemail_description;$voicemail_name_base64`r`n", $Utf8NoBomEncoding)}}





ルートとダイヤルプレーン
 $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False [System.IO.File]::AppendAllText("d:\v_destinations.csv", "domain_uuid;destination_uuid;dialplan_uuid;fax_uuid;destination_type;destination_number;destination_number_regex;destination_caller_id_name;destination_caller_id_number;destination_cid_name_prefix;destination_context;destination_app;destination_data;destination_enabled;destination_description;destination_accountcode`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "domain_uuid;dialplan_uuid;app_uuid;dialplan_context;dialplan_name;dialplan_number;dialplan_continue;dialplan_order;dialplan_enabled;dialplan_description`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "domain_uuid;dialplan_uuid;dialplan_detail_uuid;dialplan_detail_tag;dialplan_detail_type;dialplan_detail_data;dialplan_detail_break;dialplan_detail_inline;dialplan_detail_group;dialplan_detail_order`r`n", $Utf8NoBomEncoding) $nums="1111=5555555;1112=5555566" $nums.Split(";")|%{ $innum = $_.Split("=")[0] $outnum = $_.Split("=")[1] $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $destination_uuid = (New-Guid).Tostring() $dialplan_uuid = (New-Guid).Tostring() $fax_uuid $destination_type = "inbound" $destination_number = "343$outnum" $destination_number_regex = "^(343$outnum)$" $destination_caller_id_name $destination_caller_id_number $destination_cid_name_prefix $destination_context = "public" $destination_app $destination_data $destination_enabled = "true" $destination_description = "$outnum-$innum" $destination_accountcode [System.IO.File]::AppendAllText("d:\v_destinations.csv", "$domain_uuid;$destination_uuid;$dialplan_uuid;$fax_uuid;$destination_type;$destination_number;$destination_number_regex;$destination_caller_id_name;$destination_caller_id_number;$destination_cid_name_prefix;$destination_context;$destination_app;$destination_data;$destination_enabled;$destination_description;$destination_accountcode`r`n", $Utf8NoBomEncoding) $app_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $dialplan_context = "public" $dialplan_name = $destination_number $dialplan_number = $destination_number $dialplan_continue = "false" $dialplan_order = "100" $dialplan_enabled = "true" $dialplan_description = $destination_description [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "$domain_uuid;$dialplan_uuid;$app_uuid;$dialplan_context;$dialplan_name;$dialplan_number;$dialplan_continue;$dialplan_order;$dialplan_enabled;$dialplan_description`r`n", $Utf8NoBomEncoding) $dialplan_detail_break $dialplan_detail_inline $dialplan_detail_group $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "condition" $dialplan_detail_type = "destination_number" $dialplan_detail_data = "^(343$outnum)$" $dialplan_detail_order = 20 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "action" $dialplan_detail_type = "transfer" $dialplan_detail_data = "$innum XML 172.18.253.1" $dialplan_detail_order = 30 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) }
      
      



:\ v_dialplans.csv"、 "domain_uuid; dialplan_uuid; app_uuid; dialplan_context; dialplan_name; dialplan_number; dialplan_continue; dialplan_order; dialplan_enabled; dialplan_description`r`n"、$ Utf8NoBomEncoding) $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False [System.IO.File]::AppendAllText("d:\v_destinations.csv", "domain_uuid;destination_uuid;dialplan_uuid;fax_uuid;destination_type;destination_number;destination_number_regex;destination_caller_id_name;destination_caller_id_number;destination_cid_name_prefix;destination_context;destination_app;destination_data;destination_enabled;destination_description;destination_accountcode`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "domain_uuid;dialplan_uuid;app_uuid;dialplan_context;dialplan_name;dialplan_number;dialplan_continue;dialplan_order;dialplan_enabled;dialplan_description`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "domain_uuid;dialplan_uuid;dialplan_detail_uuid;dialplan_detail_tag;dialplan_detail_type;dialplan_detail_data;dialplan_detail_break;dialplan_detail_inline;dialplan_detail_group;dialplan_detail_order`r`n", $Utf8NoBomEncoding) $nums="1111=5555555;1112=5555566" $nums.Split(";")|%{ $innum = $_.Split("=")[0] $outnum = $_.Split("=")[1] $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $destination_uuid = (New-Guid).Tostring() $dialplan_uuid = (New-Guid).Tostring() $fax_uuid $destination_type = "inbound" $destination_number = "343$outnum" $destination_number_regex = "^(343$outnum)$" $destination_caller_id_name $destination_caller_id_number $destination_cid_name_prefix $destination_context = "public" $destination_app $destination_data $destination_enabled = "true" $destination_description = "$outnum-$innum" $destination_accountcode [System.IO.File]::AppendAllText("d:\v_destinations.csv", "$domain_uuid;$destination_uuid;$dialplan_uuid;$fax_uuid;$destination_type;$destination_number;$destination_number_regex;$destination_caller_id_name;$destination_caller_id_number;$destination_cid_name_prefix;$destination_context;$destination_app;$destination_data;$destination_enabled;$destination_description;$destination_accountcode`r`n", $Utf8NoBomEncoding) $app_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $dialplan_context = "public" $dialplan_name = $destination_number $dialplan_number = $destination_number $dialplan_continue = "false" $dialplan_order = "100" $dialplan_enabled = "true" $dialplan_description = $destination_description [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "$domain_uuid;$dialplan_uuid;$app_uuid;$dialplan_context;$dialplan_name;$dialplan_number;$dialplan_continue;$dialplan_order;$dialplan_enabled;$dialplan_description`r`n", $Utf8NoBomEncoding) $dialplan_detail_break $dialplan_detail_inline $dialplan_detail_group $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "condition" $dialplan_detail_type = "destination_number" $dialplan_detail_data = "^(343$outnum)$" $dialplan_detail_order = 20 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "action" $dialplan_detail_type = "transfer" $dialplan_detail_data = "$innum XML 172.18.253.1" $dialplan_detail_order = 30 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) }



:\ v_dialplan_details.csv"、 "domain_uuid; dialplan_uuid; dialplan_detail_uuid; dialplan_detail_tag; dialplan_detail_type; dialplan_detail_data; dialplan_detail_break; dialplan_detail_inline; dialplan_detail_group; dialplan_detail_order`r`n"、$ Utf8NoBomEncoding) $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False [System.IO.File]::AppendAllText("d:\v_destinations.csv", "domain_uuid;destination_uuid;dialplan_uuid;fax_uuid;destination_type;destination_number;destination_number_regex;destination_caller_id_name;destination_caller_id_number;destination_cid_name_prefix;destination_context;destination_app;destination_data;destination_enabled;destination_description;destination_accountcode`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "domain_uuid;dialplan_uuid;app_uuid;dialplan_context;dialplan_name;dialplan_number;dialplan_continue;dialplan_order;dialplan_enabled;dialplan_description`r`n", $Utf8NoBomEncoding) [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "domain_uuid;dialplan_uuid;dialplan_detail_uuid;dialplan_detail_tag;dialplan_detail_type;dialplan_detail_data;dialplan_detail_break;dialplan_detail_inline;dialplan_detail_group;dialplan_detail_order`r`n", $Utf8NoBomEncoding) $nums="1111=5555555;1112=5555566" $nums.Split(";")|%{ $innum = $_.Split("=")[0] $outnum = $_.Split("=")[1] $domain_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $destination_uuid = (New-Guid).Tostring() $dialplan_uuid = (New-Guid).Tostring() $fax_uuid $destination_type = "inbound" $destination_number = "343$outnum" $destination_number_regex = "^(343$outnum)$" $destination_caller_id_name $destination_caller_id_number $destination_cid_name_prefix $destination_context = "public" $destination_app $destination_data $destination_enabled = "true" $destination_description = "$outnum-$innum" $destination_accountcode [System.IO.File]::AppendAllText("d:\v_destinations.csv", "$domain_uuid;$destination_uuid;$dialplan_uuid;$fax_uuid;$destination_type;$destination_number;$destination_number_regex;$destination_caller_id_name;$destination_caller_id_number;$destination_cid_name_prefix;$destination_context;$destination_app;$destination_data;$destination_enabled;$destination_description;$destination_accountcode`r`n", $Utf8NoBomEncoding) $app_uuid = "ffffffff-ffff-ffff-ffff-ffffffffffff" ## !!! $dialplan_context = "public" $dialplan_name = $destination_number $dialplan_number = $destination_number $dialplan_continue = "false" $dialplan_order = "100" $dialplan_enabled = "true" $dialplan_description = $destination_description [System.IO.File]::AppendAllText("d:\v_dialplans.csv", "$domain_uuid;$dialplan_uuid;$app_uuid;$dialplan_context;$dialplan_name;$dialplan_number;$dialplan_continue;$dialplan_order;$dialplan_enabled;$dialplan_description`r`n", $Utf8NoBomEncoding) $dialplan_detail_break $dialplan_detail_inline $dialplan_detail_group $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "condition" $dialplan_detail_type = "destination_number" $dialplan_detail_data = "^(343$outnum)$" $dialplan_detail_order = 20 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) $dialplan_detail_uuid = (New-Guid).Tostring() $dialplan_detail_tag = "action" $dialplan_detail_type = "transfer" $dialplan_detail_data = "$innum XML 172.18.253.1" $dialplan_detail_order = 30 [System.IO.File]::AppendAllText("d:\v_dialplan_details.csv", "$domain_uuid;$dialplan_uuid;$dialplan_detail_uuid;$dialplan_detail_tag;$dialplan_detail_type;$dialplan_detail_data;$dialplan_detail_break;$dialplan_detail_inline;$dialplan_detail_group;$dialplan_detail_order`r`n", $Utf8NoBomEncoding) }





ランダムに選択された番号への接続を確認すると、インポートのパフォーマンスが示されました。



ゲートウェイのセットアップ

アカウント→ゲートウェイ

Gateway : 172.16.253.3

Username : 3435555555

Password : not-used

From User : 3435555555

From Domain : 172.16.253.3

Proxy : 172.16.253.3

Register : False

Caller ID In From : True




注意してください!
FusionPBXのドキュメントには、設定を行う際に太字のフィールドが必須であることが明示的に記載されています。

ただし、なんらかの理由で理解できませんでしたが、 Proxyフィールドの脂肪含有量は認識できず、値を設定しませんでした。 その結果、私は外部からの通話を受信しましたが、発信は動作しませんでした。 sofia status gateway ffffffff-ffff-ffff-ffff-ffffffffffff



は、構成の異常を表示せず、 ゲートウェイ値に対応する割り当てられたプロキシフィールド値も表示しました。 まったく同じ設定のチームからのまったく同じ出力が、前のインストールの「裸の」FreeSWITCHによって実証されたと同時に、外部への発信を完全に問題なく行うことができました。

一方、FusionPBXは、 Proxyの値を明示的に指定した後にのみ機能しました。

* ffffffff-ffff-ffff-ffff-ffffffffffff



ゲートウェイUUID


ACLセットアップ



チートシートに従って設定を行い、すぐに壊れた内部コールを受け取りました。 ログは、何らかの理由でデバイスがそれぞれ外部コンテキストにあることを示し、それらは「異なる」ダイヤルパンによって処理され、そこから呼び出しがROUTE_NOT_FOUNDエラーで終了したことを示しました。



叙情的な余談
状況のユーモアは、 プロキシ設定がゲートウェイ設定で必須であることを発見する前に、この「トラブル」が私に起こったという事実にもありました。 そして、ACLを設定するとすぐに、外部からの呼び出しが開始されましたが、内部の呼び出しは壊れました。 そして、ACLを使用してその意味をどのように操作しても、結果は1つでした。外部から内部への呼び出し、または内部から外部へ、外部から内部への呼び出しのない内部呼び出しです。


判明したように、ACL構成は正しく実行されませんでした!

重要!



ACLは、ネットワークおよびドメインプロバイダー専用です。

独自のネットワークとドメインをそこに入れないでください。

ドメインリストはデフォルトで拒否する必要があります。

ルール自体は寛容である必要があり、マスク/ 32が付いたプロバイダーのゲートウェイのIPアドレスが書き込まれている必要があります。 ドメインフィールドに入力する必要はありません。


そこで、ACLを構成します: 詳細設定→アクセス制御→ドメイン 。 既存のルールを削除し、新しいルールを作成します。

Type : allow

CIDR : 172.16.253.3/32

Domain :

Description : default SIP-trunk






最後に[ 保存 ]をクリックし、新しいACLを有効にするために、[ ステータス ] [ Sipステータス ]をクリックし、[ ACLのリロード ]をクリックします。



システム変数



詳細設定→デフォルト設定

ここでは、チートシートで1:1 NATを設定するときに使用したプロバイダーから提供された外部IPアドレスを示します。音声応答の地域の電話コード、言語と音声、およびダイヤルトーンの種類を示します。



デフォルトセクション:
default_areacode : 343

default_language : ru

default_dialect : RU

default_voice : elena

ringback : $${ru-ring}

transfer_ringback : $${ru-ring}




IPアドレスセクション

external_rtp_ip : 172.16.160.154

external_sip_ip : 172.16.160.154




SIPプロファイルセクション:内部

internal_auth_calls : true



事実、サブスクライバー番号の設定を読み取り、 そこから$ {outbound_caller_id_number}および$ {outbound_caller_id_name}を転送するのは、 真の値のこの変数です。 この変数を有効にするには、ACLを介した内部加入者番号の許可を無効にする必要があります。 デフォルトでは、これはデフォルトで次のように行われます。ACL承認はありません。代わりにダイジェストが使用されます(サブスクライバー番号とパスワードによる): internal_auth_calls : true





重要!



設定の内部番号に割り当てられた直接の都市番号を[ 発信者ID名]および[ 発信者ID番号]フィールドを介して正しく判断するには、次の3つの条件を満たしている必要があります。

  1. 内部サブスクライバーのACL許可の欠如
  2. SIPプロファイル設定でダイジェスト認証を有効にしました:

    internal_auth_calls : true



  3. ゲートウェイ設定の可用性:

    Caller ID In From : True



発信ルート



ダイヤルプラン→アウトバウンドルート

おそらく、これは再考されていない唯一の設定項目です。

詳細には分解しません。 次の正規表現がさまざまな方向に使用されたことにのみ注意してください。





すべてのルートについて、2つのセット アクションタグが編集されました effective_caller_id_name= ${default_areacode} ${outbound_caller_id_name}



effective_caller_id_number= ${default_areacode} ${outbound_caller_id_number}



により、オペレーターに送信される発信者番号に市外局番が含まれます。



シスコデバイスで90〜100秒後にコールリセットを処理します。



上記のように、驚きは、すべてのCisco 7945gデバイスで90〜100秒後に確立された接続が切断されたことです。 デバイス構成内で多かれ少なかれ関連する変数名を持つすべてのタイマーのねじれは、結果を与えませんでした。 FreeSWITCHコンソールでの喫煙記録により、セッションの有効期限が明らかになりました。



グーグルは、CiscoデバイスがCall Manager以外の人と正常に動作することを望まないことに加えて、 aggressive-nat-detection



変数を無効にすることでこの動作を改善できることを明らかにしました。



詳細設定→SIPプロファイル

aggressive-nat-detection

Value : true

Enabled : False




音声応答のロシア化



利他的な専門家によって作成された音声ファイルが必要です。



ダウンロード:



files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-48000-1.0.51.tar.gz

files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-32000-1.0.51.tar.gz

files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-16000-1.0.51.tar.gz

files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-8000-1.0.51.tar.gz



各アーカイブには、既製のディレクトリ構造が含まれています。 / usr / share / freeswitch / sound /の各アーカイブを解凍します



以前にデフォルト値を設定していたので、これからロシア語の音声ファイルが取得され、追加の動きなしで再生が開始されます。 あなたがしなければならない(私がしなければならなかった)唯一のことは、4つのフォルダすべてにru / RU / elena / voicemail / _bitrate_ /ファイルvm-not_available_no_voicemail.wavの名前を変更し、新しい名前vm-no_answer_no_vm.wavを与えることです 。 この操作の後、私は呼び出された加入者のアクセス不能イベントへの音声応答を受け取りました。



PS: 前の部分と同様に、このテキストは、遭遇した困難とその解決策を文書化する目的でのみ書かれています。 このテキストは、「Free Face」の最初からのクイックスタートを「グラフィックフェイス」とはいえ、照らしているという事実にもかかわらず、テキストは自給自足であり、一種の分岐であり、自立した生活の権利を持っていると思います。 前の部分も、説明されたネットワーク機器のセットアップにより、ある程度の価値を保持しています。 そのテキストの誤った設定は修正され、この記事で使用されているものに削減されます。



All Articles