PBX管理-詳现な悪魔

箄1幎前、私は自分自身の新しいタスク、぀たり自動電話亀換管理の自動化に盎面しなければなりたせんでした。 䞀芋、耇雑なこずは䜕もありたせん。TCPたたはシリアルむンタヌフェむスを介しおPBX制埡ポヌトに接続し、コマンドを送信しお応答を分析する必芁がありたす。 䜜業䞭に刀明したように、この単玔さは誀解を招くこずが刀明したした。

私の蚘事では、仕事の過皋で盎面しなければならなかった困難に぀いお話したいず思いたす。 この蚘事が幅広い読者にずっお興味深いものになるこずはたずありたせんが、おそらく電話の専門家は䜕か有甚なものを芋぀けるでしょう。 説明資料ずしお、プロゞェクトで珟圚サポヌトされおいるAlcatel S12およびM200 PBXコマンドの䟋を䜿甚したす。

1.甚語集


手始めに、甚語を決定する必芁がありたす。

1.1課題


タスクは、アトミックに実行されるアクションのセットです。 機噚管理サブシステムの芳点から芋るず、タスクは䞀連のサヌビスで構成されおいたす 。 各サヌビスは、特定のサヌビスぞの加入者のアクセスを制埡したすたずえば、長距離および囜際電話ぞのアクセスサヌビスを遞択するこずができたす。

タスクを完了するず、個々のサヌビスをオンたたはオフにできたす。 さらに、倚くのサヌビスに぀いお、構成パラメヌタヌの倀を蚭定できたすたずえば、アラヌム時刻やPINコヌド倀など。 特定のサヌビスの接続たたは切断の状態を決定するブヌル倀もパラメヌタヌず芋なされたす。

機噚の芳点から芋るず、サヌビスの接続たたは切断のプロセスは、1぀以䞊のコマンドの実行に限定されたす 。 機噚でコマンドを実行するプロセスは、 アクティベヌションず呌ばれたす。

1.2仕様


仕様は、ゞョブの実行を制埡する泚文管理サブシステムずアプリケヌションを統合するように蚭蚈された特殊なORMの䜜業を制埡したす。 このトピックは、電話亀換機ずのやり取りの詳现ずは関係がないため、詳しく説明したせん。 次のステヌトメントを理解するには、この局がデヌタベヌスからロヌドされた倀を含む名前付き倉数ぞの読み取りおよび曞き蟌みアクセスを提䟛するこずを知るだけで十分です。

スカラヌ倀ぞのアクセスに加えお、タプルコレクションぞのアクセスが提䟛されたす。 たずえば、「tk」Tech。Cardずいう名前で衚されるコレクションを開くず、「tk.phone」加入者の電話番号たたは「tk.ats_type」PBXのタむプなどの技術カヌドデヌタを含むレコヌドにアクセスできたす。 たた、これらの゚ントリには他のコレクションぞのリンクが含たれる堎合がありたす。 コレクションのネストは制限されおいたせん。

䞊蚘のすべおから、仕様ずいう甚語が䜿甚される理由はおそらく明確ではないでしょうか 実際、このレむダヌを開発する際には、仕様やポリシヌなどのSIDの抂念が積極的に䜿甚されたため、私の芳点からは開発が倧幅に簡玠化されたした。 䞀般的に、機䌚のある人のためにTMフォヌラムの資料をよく理解するこずを匷くお勧めしたす。

1.3スクリプト


このサブシステムに぀いおはすでに説明したした。 最初に、スクリプトは2぀のタスクを実行したした。䜜業順序内でコマンドが実行される順序を蚘述し、プラットフォヌム固有の機胜を隠したした。 スクリプトは、PBXのタむプに応じお、仕様で提䟛された倉数にアクセスし、コマンドを圢成したした。 倖芳は次のずおりです。

最初のバヌゞョンのスクリプトの断片
... [002082] platform:M-200; if (tk.attach.service = 'SET_HOLD') { [020820] < text:settune %s enb_flash=on; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [020821] is_rollback:1; { [001020] < device_id:tk.ats_id; [020822] < text:settune %s enb_flash=off; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; } } [003082] platform:S-12; if (tk.attach.service = 'SET_HOLD') { [030820] < text:MODIFY-SUBSCR:DN=K'%s,RECALL=ADD&ECTRF.; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [030821] is_rollback:1; { [001020] < device_id:tk.ats_id; [030822] < text:MODIFY-SUBSCR:DN=K'%s,RECALL=REMOVE&ECTRF.; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; } } ... 

䞊蚘のスニペットから、tk.attach.service倉数を分析するこずにより、どのコマンドを実行する必芁があるかがわかりたす。 次に、プラットフォヌムに応じお、電話番号をtk.phone倉数から適切なコマンドテンプレヌトに眮き換えるこずにより、機噚で実行するためのコマンドが圢成されたす。

非垞に倚くの異なるコマンドがあったため、スクリプトは倧きく1000行を超える、わかりにくいこずが刀明したした。 その結果、2番目のバヌゞョンを開発する際、スクリプト内の個々のコマンドの圢成を攟棄し䞋䜍レベルに移動、既補のコマンドではなくサヌビスコヌドを枡すこずにしたした。 この決定は、スクリプトのサむズに非垞に有益な効果をもたらしたした。 次に、2番目のバヌゞョンのスクリプト党䜓を瀺したす。

2番目のバヌゞョンのスクリプト
 [002000] { [200001] var_list:retry_cnt = retry_cnt + 1, state = 1; [200002] if (subtype = -1) { [200003] foreach (devices) { [200004] < device_id:devices.ats_id; device_ip:devices.ats_ip; device_password:devices.ats_password; device_port:devices.ats_tcp_port; device_protocol:devices.ats_type; [200005] < device_id:devices.ats_id; [200006] < text:ROLLBACK; [200007] var_list:retry_cnt = 0; } } [200008] if (subtype = 1) { [200009] foreach (tk) { [200010] if (tk.phone = '') { [200011] var_list:tk.phone = tk.phone_old; } [200012] < device_id:tk.ats_id; device_protocol:tk.ats_type; device_ip:tk.ats_ip; device_port:tk.ats_tcp_port; device_password:tk.ats_password; [200013] var_list:action = 0, is_dou_activated = 0; [200014] target:tk.ats_type; foreach (tk.detach) { [200015] < device_id:tk.ats_id; [200016] var_list:activate_command = 1; [200017] platform:S-12; if (tk.detach.service = 'C_INTRAAREAL' | tk.detach.service = 'C_INTERCITY' | tk.detach.service = 'C_INTERNATIONAL') { [200018] if (is_dou_activated = 1) { [200019] var_list:activate_command = 0; } [200020] var_list:is_dou_activated = 1; } [200025] if (activate_command = 1) { [200026] < text:%s; var_list:tk.detach.service; [200027] var_list:retry_cnt = 0; } } [200028] var_list:action = 1, is_dou_activated = 0, is_cat_activated = 0; [200029] target:tk.ats_type; foreach (tk.attach) { [200030] < device_id:tk.ats_id; [200031] var_list:activate_command = 1; [200032] platform:S-12; if (tk.attach.service = 'C_INTRAAREAL' | tk.attach.service = 'C_INTERCITY' | tk.attach.service = 'C_INTERNATIONAL') { [200033] if (is_dou_activated = 1) { [200034] var_list:activate_command = 0; } [200035] var_list:is_dou_activated = 1; } [200021] if (tk.attach.service = 'CATEG_AON_0' | tk.attach.service = 'CATEG_AON_1' | tk.attach.service = 'CATEG_AON_2' | tk.attach.service = 'CATEG_AON_3' | tk.attach.service = 'CATEG_AON_4' | tk.attach.service = 'CATEG_AON_6' | tk.attach.service = 'CATEG_AON_7' | & tk.attach.service = 'CATEG_AON_8' | tk.attach.service = 'CATEG_AON_9') { [200022] if (is_cat_activated = 1) { [200023] var_list:activate_command = 0; } [200024] var_list:is_cat_activated = 1; } [200036] if (activate_command = 1) { [200037] < text:%s; var_list:tk.attach.service; [200038] var_list:retry_cnt = 0; } } } } } 

次のセクションでその実装のロゞックを説明したすが、今のずころは、スクリプトはタスクのフレヌムワヌク内でサヌビスの接続ず切断のシヌケンスを制埡するだけだず蚀うだけです。 䜿甚する機噚の皮類に応じお異なるコヌドを実行できたすが、個々のコマンドではなく、タスク党䜓を実行するずきにプラットフォヌムぞの䟝存が重芁な堎合にのみ䜿甚されたす。

1.4アダプタヌ


アダプタヌは、特定のタむプの機噚を操䜜するロゞックを実装するプラグむンモゞュヌルです。 最初のバヌゞョンでは、アダプタヌはスクリプトから既補のコマンドを受信し、その圹割は、TCPたたはシリアル接続を䜿甚しおこれらのコマンドをPBXに転送し、受信した応答を凊理するこずでした。 珟圚の2番目のバヌゞョンでは、特定のサヌビスを接続たたは切断するずきに、䞀連のコマンドを圢成するロゞックがアダプタヌに転送されたす。 これが行われた理由の説明は、この蚘事の䞻題です。

1.5同期


同期を、機噚から加入者の珟圚の蚭定を取埗するプロセスず呌びたす。 このクラスのタスクでは、デヌタベヌスに関するPBXのサブスクラむバヌ蚭定のステヌタスに関するデヌタの䞍敎合の問題が基本です。 この問題は、電話だけでなく関連しおいたす。 シスコ機噚の管理に関連する以前のアクティベヌションプロゞェクトでは、圌はそれほど鋭くはありたせんでした。 この蚘事では、同期を䜿甚しおアクティベヌションプロセスをより「スマヌト」にする方法に぀いお説明しおいるず蚀えたす。

2.職務レベル


明らかに、コマンドの完党に異なるシステムを䜿甚しお、さたざたなタむプの自動電話亀換を制埡したす。たずえば、自動電話亀換M-200の発信通信を無効にするには、次のコマンドを䜿甚したす。

 settune XXXXXXX cmn_outcome=off 

アルカテルS12の堎合

 MODIFY-SUBSCR:DN=K'XXXXXXX,OCB=REMOVE&TOTALBAR. 

しかし、このようなコマンド構文の違いは、耇雑さだけではありたせん。 この問題をより詳现に扱いたす。

2.1チヌムぞのサヌビスのマッピング


私たちが最初に盎面するこずは、異なる取匕所によっお提䟛されるさたざたなサヌビスをアクティブにする可胜性も異なるずいうこずです。 もちろん、発信コヌル管理、アラヌムの蚭定、自動リダむダルの管理など、ほずんどのタむプの自動電話亀換でサポヌトされる特定の䞀般的なサヌビスセットがありたす。

同時に、ビゞネスの芳点から興味深いチヌムの倧郚分は、1぀たたは別のタむプのPBXに実装されない堎合がありたすそしお、サポヌトされるPBXのタむプのセットが倧きいほど、このようなコマンドが倚くなりたす。 ぀たり、タスクの䞀郚であるサヌビスは、アクティベヌションが実行される゚クスチェンゞで垞に実行できるわけではありたせん。 そのようなサヌビスをアクティブにしようずする詊みは間違いず芋なされるか、単に無芖されたす。 サポヌトされおいるタむプの自動電話亀換で実装されたサヌビスのタスクの䞀郚ずしお䜿甚されるサヌビスを衚瀺するメカニズムを実装するこずが重芁です。

1぀のゞョブサヌビスを、PBXでサポヌトされるいく぀かの異なるサヌビスにマップできたす。 たずえば、M-200はPINコヌドを有効にする次のコマンドをサポヌトしおいたす。

 settune XXXXXXX dvo_pincode=on settune XXXXXXX dvo_pincodetwo=on 

1぀目は、長距離電話ず囜際電話にPINコヌドを䜿甚し、2぀目はすべおの発信通話に䜿甚したす。 この堎合、顧客の芁件の1぀は、これらのサヌビスの䞡方をタスクレベルで1぀の共通PINCODEサヌビスに衚瀺するこずでした。 実行されるサヌビスの皮類は、远加の倉数の倀によっお決たりたす。 Alcatel S12では、1぀のPINコヌド有効化コマンドのみが実装されおいたす。

 MODIFY-SUBSCR:DN=K'XXXXXXX,PASSWORD=ADD&"YYYY",SUBCTRL=ADD&OCBVAR. 

このサヌビスが2぀のタむプに分離されおいないこずに加えお、このコマンドにはPINコヌドの䜿甚が含たれるだけでなく、その倀も蚭定されるこずに泚意しおください。 もちろん、M-200では、たずえば次のコマンドを実行できたす。

 settune XXXXXXX dvo_pincode=on pincode=YYYY 

しかし、アクティベヌションモゞュヌルの最初のバヌゞョンを商甚運甚に導入する過皋で、これらのコマンドは個別にアクティベヌトする方が䟿利であるこずがわかりたした。 さらに、PINコヌドが機胜するためには、別のコマンドをアクティブにする必芁があるこずが刀明したした。 したがっお、M-200の堎合、PINむンストヌルコマンドは、指定された順序で3぀のコマンドをアクティブにする必芁がありたす。

 settune XXXXXXX enb_pincode=on settune XXXXXXX dvo_pincode=on settune XXXXXXX pincode=YYYY 

さらに、PINコヌドを䜿甚する可胜性を制埡するenb_pincodeコマンドを個別に実行できたすしたがっお、「PINCODE」サヌビスの別の衚瀺オプションを远加したす。 この堎合、PINコヌドは加入者が蚭定できたす。 これはかなり重芁な問題に぀ながりたす。これに぀いおは、以䞋のセクション「同期に関連する問題」で説明したす。

2.2発信制限


さたざたなタむプの自動電話亀換は、サポヌトされるサヌビスのセットだけでなく、これらのサヌビスの実装方法も異なりたす。 したがっお、むントラバンドぞのM-200アクセスでは、郜垂間および囜際通話を個別に制埡できたす。

 settune XXXXXXX cmn_82xxx=on settune XXXXXXX cmn_8xxx=on settune XXXXXXX cmn_10xxx=on 

Alcatel S12の堎合、同様のコマンドは次のようになりたす。

 MODIFY-SUBSCR:DN=K'XXXXXXX,OCB=MODIFY&PERM&5. MODIFY-SUBSCR:DN=K'XXXXXXX,OCB=MODIFY&PERM&4. MODIFY-SUBSCR:DN=K'XXXXXXX,OCB=REMOVE. 

これらのコマンドは、1぀の蚭定のみの状態を制埡するこずに気付く堎合がありたす長距離通信を有効にするず、制限が単玔に削陀されたす。 これにより、次の問題が発生したす。


これは、Alcatel S12で゚リア内および長距離通信を有効にする必芁がある堎合、長距離通信有効コマンドのみをアクティブ化する必芁があるこずを意味したす。 その埌、ゟヌン内通信有効化コマンドがアクティブになった堎合、加入者の長距離通信は切断されたす M-200ずは異なり長距離切断を䜿甚したゟヌン内および囜際通信の同時起動は䞍可胜です。

これは、アクティベヌションスクリプトレベルで実装された機胜の良い䟋です。 これを実装する方法を芋おみたしょう。

 [200028] var_list:action = 1, is_dou_activated = 0, is_cat_activated = 0; [200029] target:tk.ats_type; foreach (tk.attach) { [200031] var_list:activate_command = 1; [200032] platform:S-12; if (tk.attach.service = 'C_INTRAAREAL' | tk.attach.service = 'C_INTERCITY' | tk.attach.service = 'C_INTERNATIONAL') { [200033] if (is_dou_activated = 1) { [200034] var_list:activate_command = 0; } [200035] var_list:is_dou_activated = 1; } [200036] if (activate_command = 1) { [200037] < text:%s; var_list:tk.attach.service; [200038] var_list:retry_cnt = 0; } } 

倉数によっお保存されたす。 tk.attachコレクションからの発信通信を制埡する最初のコマンドをアクティブにした埌、is_dou_activatedフラグを蚭定し、埌続のコマンドのアクティブ化を犁止したす。 さらに、このコヌドはAlcatel S12でのみ機胜したす。

このアプロヌチが機胜するために必芁なこずは、チヌムが正しい順序で到着するこずだけです。たず、囜際的なコミュニケヌション存圚する堎合を含め、次に長距離および地域内で行いたす。 幞いなこずに、仕様によりサンプルを゜ヌトできたす
あらゆる基準によるコレクション。 接続ず切断の際にのみ、サヌビステヌブルに優先床フィヌルドを远加する必芁がありたす。

3.同期に関連する問題


䞊で述べたように、機噚から珟圚の蚭定を取埗する機胜は、少なくずもいく぀かの正しいアクティベヌションを実行するための䞻芁な芁件の1぀です。 なぜそうなのか芋おみたしょう。

3.1むンテリゞェントなアクティベヌション


補品の最初のバヌゞョンを導入する際にお客様から受け取った最初の远加芁件は、機噚で以前にアクティブ化された蚭定を再アクティブ化しないこずです。 これは、次の2぀の理由で非垞に重芁です。

  1. 機噚でコマンドをアクティブ化するのは簡単なプロセスではありたせん。 Alcatel S12での1぀のコマンドの平均実行時間は玄10秒ですM-200は、はるかに少ないデヌタを返すため、はるかに高速に動䜜したす玄1秒。 これに、PBXずの接続が非垞に䞍安定であり、これらの非垞に10秒間で接続が倱われる可胜性があるずいう事実を远加したす。 タスクを繰り返し実行するたびにそしお、実行のアトミック性を確保するためにタスクを構成するすべおのコマンドを実行する必芁がある堎合、すべおのコマンドを最初から再アクティブ化し、最悪の堎合、これらのコマンドを䜕床も䜕床もアクティブにしたす課題の終わりに到達する
  2. 堎合によっおはAlcatel S12で、コマンドを再アクティブ化するず゚ラヌが発生する堎合がありたす。 この堎合、このサブスクラむバヌのアクティベヌションが初めお実行される可胜性があるため、デヌタベヌスの蚭定のステヌタスを確認できたせん。 この堎合、唯䞀の正しい決定は、アクティベヌションコマンドの前に、機噚から蚭定のステヌタスを盎接取埗するこずです

぀たり、コマンドをアクティブにする前に、このコマンドの実行に圱響する珟圚の蚭定をPBXから受け取る必芁がありたす。 蚭定がすでに必芁な状態にある堎合、アクティブ化されたコマンドを実行しお先に進むこずはできたせん蚭定の競合によりアクティブ化されたコマンドを実行できない堎合、コマンドを実行するこずはできたせんが、すぐに䟋倖を発生させたす。 このアプロヌチは、M-200に最適です

  1. すべおのサブスクラむバヌ蚭定は、1぀のgettuneコマンドに察する応答で返されたす
  2. M-200のアクティベヌションは比范的速く、接続は安定しおいたす。 各アクティベヌションの開始時に远加のコマンドを実行する䜙裕がありたす

アルカテルS12の堎合、すべおがそれほどバラ色ではありたせん。 蚭定を読み取るには、さたざたなコマンドを実行する必芁があり、それらはすべおゆっくり実行されたす。 したがっお、デヌタベヌスに蚭定の状態を保存するこずは䞍可欠です。 アクティブ化するずき、デヌタベヌスから蚭定を取埗でき、蚭定がない堎合にのみ、必芁なコマンドを生成しお機噚から欠損倀を取埗できたす。

もちろん、これは理想的な゜リュヌションではありたせん。手動でコマンドを実行し、アクティベヌションサブシステムをバむパスするず、デヌタベヌス内のデヌタが同期しなくなるためです。 さらに、コマンドのアクティブ化が完了するず、実際の蚭定がチヌムが正垞に倉曎したため認識され、デヌタベヌス内の非同期デヌタを曎新できるようになりたす。

M-200にも問題がありたす。 堎合によっおは、以䞋で説明するPBXずの察話に䜿甚される調敎サヌバヌが正しく動䜜しなくなりたす。 圌はすべおのsettuneコマンドにOkで応答したすが、亀換のデヌタは倉曎されたせん この堎合、gettuneを呌び出すず゚ラヌが発生したす。

これは、M-200の堎合、アクティベヌションの前だけでなく、gettuneを呌び出す必芁があり、゚ラヌが発生した堎合は2番目のタスクを開始する必芁があるこずを意味したす。 調敎サヌバヌが正垞に機胜し始めるずすぐに、アクティブ化が実際には前のタスクで機胜しなかったチヌムをアクティブ化できたす。 正垞にアクティブ化されたものは再アクティブ化されたせん。

3.2䟝存サヌビス


前述したように、M-200 PBXでは、PINCODEサヌビスを含めるず仕様倉数の倀に応じお、次の3぀のコマンドシヌケンスのいずれかがアクティブになりたす。

 settune XXXXXXX enb_pincode=on 

 settune XXXXXXX enb_pincode=on settune XXXXXXX dvo_pincode=on settune XXXXXXX pincode=YYYY 

 settune XXXXXXX enb_pincode=on settune XXXXXXX dvo_pincodetwo=on settune XXXXXXX pincode=YYYY 

enb_pincode蚭定は、3぀の堎合すべおで有効になりたす。 これらのコマンドをアクティブ化する単玔な実装で発生する可胜性のある゚ラヌは簡単に想像できたす。

  1. 加入者がPINコヌドを個別に蚭定できるようにするenb_pincode蚭定を含むサヌビスがアクティブ化されたす。
  2. 発信通信甚のPINコヌドを蚭定するサヌビスがアクティブ化されたすその䞭で、enb_pincodeが再床アクティブ化されたす。
  3. サブスクラむバヌがenb_pincodeサヌビスを拒吊したす

この䞀連のアクションの結果ずしお、enb_pincode蚭定がオフになり、2番目のステップで蚭定されたPINコヌドが機胜しなくなりたす これを防ぐために䜕ができたすか

䞀般的に、解決策は明らかです。 アクティブ化されたすべおのサヌビスをデヌタベヌスに蚘録し、シャットダりンコマンドをアクティブ化するずきに远加のチェックを行う必芁がありたす。 切断された蚭定がただ切断されおいない他のサヌビスによっお䜿甚されおいる堎合、切断されたコマンドは無芖する必芁がありたす。

はい、サブスクラむバヌは実際に拒吊したenb_pincodeサヌビスを䜿甚できたすが、蚭定されたPINコヌドはサブスクラむバヌからの苊情なしに機胜したす。 M200コマンドシステムには倚くの同様の䟝存関係はありたせんが、それらはすべお重芁なサヌビスアラヌムの蚭定や自動転送の有効化などに関連付けられおいたす。 これらの䟝存関係を考慮するこずは、正しいアクティベヌションの芳点から重芁です。

3.3ロヌルバックの実装


すべおのタスクが正垞に完了できるわけではありたせん。 コマンドを有効にするず、䞍正なデヌタこのPBXが加入者の番号にサヌビスを提䟛しおいない、アラヌムを蚭定するずきの時刻が正しくないなど、たたは有効なサヌビスの競合これはAlcatel S12で頻繁に発生したすにより゚ラヌになる可胜性がありたす。 このような゚ラヌは回埩䞍胜ず呌ばれたす。

タスクはアトミックに実行する必芁があるため、修埩できない゚ラヌが発生した堎合、同じタスクの䞀郚ずしお、以前に正垞にアクティブ化されたすべおのコマンドを「ロヌルバック」する必芁がありたす。 最初に思い浮かぶのは、実行できたすべおのコマンドを蚘憶し、゚ラヌが発生した堎合は、それらに察しお逆のコマンドを実行するこずです。 このアプロヌチの実装は、スクリプトの叀いバヌゞョンで芋るこずができたす。

 ... [002391] platform:M-200; if (tk.detach.service = 'PINCODE' & tk.detach.act_mode = 0 & tk.detach.act_level = 2) { [023910] < text:settune %s dvo_pincode=off; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [001610] < text:settune %s pincode=; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [022010] < text:settune %s enb_pincode=off; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [023911] is_rollback:1; if (tk.detach.value != '') { [001020] < device_id:tk.ats_id; [023912] < text:settune %s dvo_pincode=on; var_list:tk.phone; [001041] > is_error:1; regexp:(.+); var_list:error; [001603] < text:settune %s pincode=%s; var_list:tk.phone, tk.detach.value; [001041] > is_error:1; regexp:(.+); var_list:error; } } ... 

ここでは、「PINCODE」サヌビスが正垞に切断された盎埌に、逆コマンドが保存され、ロヌルバックコマンドスタックでサヌビスがアクティブになりたす。 このアプロヌチには冗長すぎるだけでなく、他にも倚くの欠点がありたす。

  1. このアプロヌチの正しい実装は非垞に面倒です。 実際には、リバヌスコマンドを実行するには、ダむレクトコマンドのアクティブ化時に倉数の倀が必芁ですが、これらの倉数の䞀郚はforeachオペレヌタヌによっお衚瀺されるコレクションにありたす。 これは、逆コマンドを䜜成するずきに、これらのコレクションおよびそれらに埋め蟌たれたサブコレクションの状態の「スナップショット」を保存し、ロヌルバック時に元の仕様の代わりに䜿甚する必芁があるこずを意味したす。 さらに、PINコヌドのリセットなどのコマンドは、埩元できるようにリバヌスコマンドのPINコヌド倀を必芁ずし、ダむレクトコマンドでは䜿甚されたせんが、この倀を仕様に远加する必芁がありたす
  2. アクティベヌション゚ラヌが発生した埌にロヌルバックコマンドを実行するず、Alcatel S12で゚ラヌが発生する可胜性がありたす。 たずえば、パラメヌタの1぀が正しく蚭定されおいない堎合、PBXは正しい倀を芁求し、ロヌルバックコマンドではなく、その倀を受け取るこずを期埅したす。 このコンテキストでコマンドを受信するず゚ラヌが発生し、その結果、ロヌルバックコマンドは実行されたせん。 「パラメヌタヌの怜蚌」セクションで、この質問をさらに詳しく分析したす。
  3. このアプロヌチは機胜したせん 実際、PINむンストヌルコマンドだけでなく、enb_pincodeおよびdvo_pincode enableコマンドの正しいパラメヌタヌ倀を取埗する堎所もありたせん。 タスク䞭にそれらをオフにした堎合、これはタスクがアクティブになる前にオフにならなかったこずを意味したせん。 この堎合、ロヌルバックプロセス䞭にこれらの蚭定を含めるず゚ラヌになりたす

, , , — , , .

, , . , ( ).

tk , , . tk, , , . — , . , «» 'ROLLBACK' , :

 ... [200002] if (subtype = -1) { [200003] foreach (tk) { [200015] < device_id:tk.ats_id; [200006] < text:ROLLBACK; ... } } ... 


3.4


前のセクションで説明した回埩䞍胜な゚ラヌに加えお、゚ラヌが発生する可胜性がありたすが、その埌はアクティブ化を続行できたす。たずえば、アクティベヌションプロセス䞭にPBXぞのTCP接続が切断された堎合、ロヌルバックする必芁はありたせん。この堎合、以前にアクティブ化されたコマンドの実行をスキップしお、アクティブ化を繰り返すだけで十分です。アクティベヌションプロセス䞭に発生した䟋倖の階局は次のようになりたす。

画像

, , RetryRequiredException. RollbackRequiredException . RuntimeAeException, . (TcpConnectionLostException) :


最初のケヌスでは、管理者による介入は必芁ありたせん。原則ずしお、PBXはアクティベヌションを数回数分遅れお繰り返すこずで利甚できるため、遅かれ早かれ、タスクを完了したす。

2番目のケヌスでは、たずえば、PBXぞのアクセスパラメヌタが正しく蚭定されおいないずいう事実によっお゚ラヌが発生する可胜性がありたす。この堎合、いく぀かの接続を詊行する必芁がありたす。その埌、゚ラヌメッセヌゞが生成されたす。このロゞックは、スクリプトによっお実装されたす。

 [002000] { [200001] var_list:retry_cnt = retry_cnt + 1, state = 1; ... [200008] if (subtype = 1) { [200009] foreach (tk) { ... [200014] target:tk.ats_type; foreach (tk.detach) { [200015] < device_id:tk.ats_id; ... [200025] if (activate_command = 1) { [200026] < text:%s; var_list:tk.detach.service; [200027] var_list:retry_cnt = 0; } } ... } 

, ( , ), , 0. , .

4.


, . , ( ):

 10.0.5.130:4001> MODIFY-SUBSCR:DN=K'8553377684,ALMCALL=ACTIVATE&06&00&00. 10.0.5.130:4001> SEQ=1306.130403 9002 10.0.5.130:4001> COM=4294 10.0.5.130:4001> JOB SUBMITTED 10.0.5.130:4001> 10.0.5.130:4001> 10.0.5.130:4001> ARGUMENT SEMANTIC ERROR : ALMCALL ARG 0004 10.0.5.130:4001> ERROR CODE = 0008 10.0.5.130:4001> < 10.0.5.130:4001< MODIFY-SUBSCR:DN=K'8553377684,ALMCALL=ACTIVATE&06&00&00. 10.0.5.130:4001> MODIFY-SUBSCR:DN=K'8553377684,SUBCTRL=REMOVE&CWTG. 10.0.5.130:4001> PARAMETER NOT EXISTENT ; MODIFY-S 10.0.5.130:4001> < 

, , , . . . , , , :

 ^([1-9])$ 

, Order Management, . , , , . .

5.


. Alcatel S12 M-200 ( tune) , . , - «» ( , , , ). :

  1. . . , Alcatel S12 . 'PASSWORD' . , , , , . , , , 'INVALID PASSWORD'. , , , ,
  2. . , - . , , , , ( ). , ,

Alcatel S12の倚くの機胜も考慮する必芁がありたす。そのため、出力には印刷できない文字0x05、0x17が含たれおいる可胜性があり、コマンドを入力するずきに改行ず埩垰の文字は䜿甚されたせん。Alcatel S12に送信されるコマンドラむンは、文字「。」で終わる必芁がありたす。たたは「;」認蚌䞭に送信されるパスワヌドも、蚘号「;」で終了する必芁がありたす。亀換機に送信される各バむトの最䞊䜍ビットは、パリティに䜿甚できたすこれは亀換機で構成されたす。これらの蚭定は、PBXから送信されるテキストには適甚されたせん。

珟圚、TelnetのようなTCP接続がAlcatel S12ずM-200の䞡方に接続するために䜿甚されおいたすが、この゜リュヌションは唯䞀可胜な゜リュヌションではありたせん。以䞋に、これらのPBXに接続するための他のオプションに぀いお簡単に説明したす。

5.1シリアルvs TCP


, - Alcatel S12. , ( , ) Serial-, , . , .

, RXTX jSSC ( ) Serial- Java SE ( ) , :

  1. , Serial-. , USB-Serial ( ) . , , . , Serial- «»
  2. RS-232 , . , ( , ), !

この゜リュヌションは、PBXずのやり取りの経隓が豊富な顧客ずのコミュニケヌションの過皋で芋぀かりたした。もちろん、電話事業者もすべおのPBXを1か所から管理したいず考えおおり、MOXA通信機噚を䜿甚しおこれを長期にわたっお成功させ、むントラネットを介しおシリアル接続を「スルヌ」できたした。残念ながら、クラむアント偎でMOXAによっお䜜成された仮想ポヌトに接続しようずするず問題が発生したした。

䞀郚のMOXAモデルではTCP接続を䜿甚できるこずが刀明するたで、この問題の解決にかなりの時間を費やしたした。このアプロヌチが䜿甚されたした。シリアルポヌトモニタヌずスニファヌは、私たちの仕事に倧いに圹立ちたした。

5.2チュヌニングずTCP


M-200 , TCP. « ». TCP-, , M-200 . ( TCP) , .

« » ( ), , , , tune- . , .

おわりに


この蚘事では、実際のアクティベヌションプロゞェクトで発生した問題を説明および䜕らかの方法で分類しようずしたした。埓来のテレフォニヌ機噚に重点が眮かれおいたしたが、この資料は、あらゆる機噚たずえば、シスコスむッチの制埡の自動化に取り組む堎合に圹立ちたす。この蚘事が誰かに圹立぀こずを願っおいたす。

Source: https://habr.com/ru/post/J186900/


All Articles