しかし、1Cに問題がありました... 1Cとアスタリスクを接続するための無料のライブラリである、最も重要なものはありませんでした。 この状況を修正したかった。 したがって、1Cとアスタリスクを接続するための無料のDLLが(1C-「外部コンポーネント」の観点から)作成されました。
この記事は、主に1Cプログラマーに役立ちます。 ライブラリと、1Cとアスタリスクの統合のいくつかの側面について説明します。
図書館について
ROM-Asteriskライブラリは無料です。 非同期、非ブロッキング、イベントベースのソケットを実装します。 1C:エンタープライズプラットフォームでは、外部ライブラリの開発時に特定の要件が課されるため、DLLは1Cの推奨事項に厳密に従って記述されています。 ライブラリの機能の中で、その中の正規表現に基づいたフィルターの実装に注目したいと思います。
AMIイベントフィルタリング機能
アスタリスクでは、バージョン10からのみ、AMIイベントを柔軟にフィルタリングする機能が登場しました。 バージョン10より前は、AMIクライアントは過剰な数のイベントを処理する必要があります。
より明確になるように、着信コール用のAMIパッケージの例を示します。
Event: Dial
Privilege: call,all
SubEvent: Begin
Channel: SIP/202-0000019c
Destination: SIP/200-0000019d
CallerIDNum: 202
CallerIDName: Operator202
ConnectedLineNum: 200
ConnectedLineName: Operator200
UniqueID: 1335616897.790
DestUniqueID: 1335616897.791
Dialstring: 200
アスタリスクを使用すると、特権特権クラス(呼び出し、ダイヤルプラン、エージェントなど)にフィルターを設定できます。 ただし、特権クラス内の特定のタイプのイベント(イベント:ダイヤル、ブリッジ、ハングアップなど)のみにサブスクライブするようにクライアントを制限することはできません。 さらに、イベントフィールドの値ConnectedLineNum:200でフィルタリングすることはできません。
シーザーを帝王切開にしたかった。
1Cユーザーセッションが内線番号200のIPデスクフォン/ソフトフォンのステータスを監視し、着信コールの場合、「クライアントカード」フォームを開く必要があるとします。
同時に、1Cセッションは、アスタリスクで発生したすべての「イベント:ダイヤル」イベントを完全に受信します。 その後、彼はそれらをすべて分析し、番号200を参照するもののみを選択する必要があります。
ライブラリ側のイベントフィルタリング
1Cユーザーセッションが不要なイベントを受信するのを防ぐために、イベントをフィルタリングするメソッドがライブラリ側に実装されています。 自転車を発明したくなかったので、 PCREに基づく正規表現メカニズムが使用されました
フィルタの例:Dial。{1、}?200 | Bridge。{1、}?200 | Hangup。{1、}?200
これで、1Cセッションは、クラス内の呼び出し特権、ダイヤル、ブリッジ、ハングアップイベントのみ、および番号200を持つイベントのみを受け取ります。
アスタリスクによる構成
複雑なことは何もありません。 純粋なアスタリスクを使用する場合は、ファイル/etc/asterisk/manager.confを編集する必要があります
[general]
enabled=yes ; AMI (- no)
port=5038 ; TCP 5038
bindaddr=192.168.1.0 ; . (0.0.0.0 - )
timestampevents=no ;
displayconnects=yes ; AMI
allowmultiplelogin=yes ;
ユーザーに責任があるセクション:
[user1c] ;
secret=passwd1234 ; AMI
deny=0.0.0.0/0.0.0.0 ; ip-
permit=192.168.1.0/255.255.255.0 ;
read=system,call,command,agent ;
write=system,call,command,agent ;
FreePBXバージョン2.9以降を使用している場合、設定はWebインターフェイスを介して行われます。
1Cで使用:エンタープライズ
ライブラリは、1Cバージョン7.7、8.1、8.2で動作します。 唯一の制限は、バージョン8.2でWebクライアントモードで起動することです。 これは必要な措置です-バージョン7.7との互換性のためにWebクライアント8.2を犠牲にしなければなりませんでした。
ダウンロードは、標準の1Cメソッドを使用して実行されます。ExternalComponentまたはConnectExternalComponentをダウンロードします。
1C環境でROM-Asteriskの外部コンポーネントが受信したイベントは、事前定義された手順で利用可能になります外部イベントの処理
コンポーネントのプロパティ:
接続済み-(読み取り)アスタリスク接続ステータス
フィルター-(読み取り)部分文字列を検索する通常の文字列フィルター
正規表現/ RegEx-(読み取り)正規表現に基づくフィルター
リスニングモード/リッスン-(読み取り)アスタリスクAMIイベントリスニングモード、1-on、0-no
バージョン-(読み取り)外部コンポーネントのバージョン
コンポーネントメソッド:
接続/接続(IP、ポート)-Asterisk AMIサーバーとの接続を確立します
切断/切断()-アスタリスクサーバーから切断します
Run Command / SendCommand(コマンドライン)-任意のアスタリスクAMIコマンドを実行する
リッスンモード/リッスンモード(フラグ)-アスタリスクAMIイベントリッスンモードの有効化/無効化、1-有効化、0-無効化
Set Filter / SetFilter(文字列フィルター)-部分文字列の通常の出現を設定します
SetRegular Expression / SetRegEx(フィルター文字列)-正規表現に基づいてフィルターを設定します
参照資料
バージョン8.2の準備ができた例
プロパティとメソッドの説明
統合に成功しました!