企業ポータルからの組織内の呼び出し



多くの組織は、さまざまな情報システムと技術ソリューションを使用して、作業を確実にし、促進しています。 遅かれ早かれ、これらのシステムとソリューションの統合について疑問が生じ、多くの場合、「リンク」の選択はWebテクノロジーに有利になります。 そのような瞬間に、Webプログラマーはこれらのこれまで馴染みのない製品やソリューションをすべて習得する必要があります。




この記事では、統合プロセスについて説明します。



Webプログラマーの観点からコールシステムを作成する例について。





もちろん、まず、次のものが必要です。

  1. 組織内のカスタマイズされた電話システム
  2. アスタリスクとそのWebサーバーの接続に使用可能
  3. 電話番号情報
  4. 企業ポータル(ただし、この例のみ。このソリューションは、同様の機能を備えた任意のエンジンで使用できます)




基本的に、これらの問題の解決策はWebテクノロジーの専門家の能力を超えているため、すべてが必要であると想定し、サーバーとクライアントの部分に直接行きます。



次の要素を使用します。

  1. ログインと従業員番号を含む別のMySQLテーブル。 データはADからアップロードされ、最小限の労力でインポートされます。 原則として、ポータルユーザーの表も参照できますが、第一に、これはBitrix開発者には歓迎されません。第二に、私たちが考えるように、他の多くの組織では、電話番号は個人的なだけでなく、したがって、不合理なユーザーは1人だけです。 さらに、ポータルのデスクトップ用のガジェットを個別に作成しました。これにより、コールシステムの内部番号を即座に変更でき、コーディネーションセンターのスペシャリストが自分のプロファイルから物理ワークステーションから簡単に呼び出すことができます。

    `phones`テーブルのエントリの例:

    id ユーザー
    238 LutovVO 50512


  2. CURLライブラリを使用してパラメーターをAsteriskサーバーに直接渡し、戻り値を処理するPHPファイル

    call.php
    <? //       require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); $USER = new CUser; $userlogin = $USER->GetLogin(); //       $results = $DB->Query("SELECT `number` FROM `phones` WHERE `user`='".$userlogin."' LIMIT 1"); $userphone = $results->Fetch(); if (!empty($_POST['call'])) { //      $recipient = str_replace(' ', '', $_POST['recipient']); $recipient = str_replace('+', '', $recipient); $recipient = str_replace('-', '', $recipient); $recipient = str_replace('(', '', $recipient); $recipient = str_replace(')', '', $recipient); $answer = ''; // C   Asterisk $command = array(); $command[1] = 'action=login&username=PORTAL&secret=PASSWORD&events=off'; $command[2] = 'action=originate&channel=local/'.$userphone['number'].'@PORTAL&context=redirportal&exten='.$recipient.'&priority=1&CallerID=PORTAL'; $command[3] = 'action=logoff'; //      CURL $curl = curl_init(); foreach($command as $key => $data) { //    ,       $mansession = $_COOKIE['mansession_id']; $cookie = 'mansession_id="'.$mansession.'"'; //   - Asterisk curl_setopt($curl, CURLOPT_URL, 'http://127.0.0.1:8088/rawman'); //    curl_setopt($curl, CURLOPT_HEADER, 1); //    POST curl_setopt($curl, CURLOPT_POST, 1); //   cookie curl_setopt($curl, CURLOPT_COOKIE, $cookie); // CURL  ,      (    ) curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //   curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $res = curl_exec($curl); //   ,       if(!$res) { $error = curl_error($curl).'('.curl_errno($curl).')'; echo $error; } //    ,   else { //          preg_match('/mansession_id="(.*)";/', $res, $cut); $_COOKIE['mansession_id'] = $cut[1]; //     $tech_answer .= '<h2> '.$key.': '.$data.'</h2>'.'<p><b>:</b></p>'.nl2br($res).'<br/><hr><br/>'; $answer = '<p style="color:green;"> </p>'; } } curl_close($curl); die('ok'); } else { die('not_ok'); } ?>
          
          







  3. ページをリロードせずにAJAXテクノロジーを使用して呼び出しを行うことができるJavaScriptファイル。 その90%は、悪名高いXMLHTTPRequestオブジェクトとそのラッパーの作成で構成されているため、jsライブラリからこのオブジェクトの実装を既に使用している場合、すべてをさらにコンパクトにすることができます。

    script.js
     function createRequestObject() { if (typeof XMLHttpRequest === 'undefined') { XMLHttpRequest = function() { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} throw new Error("This browser does not support XMLHttpRequest."); }; } return new XMLHttpRequest(); } function ajax_submit(params, path) { var req; req = createRequestObject(); req.open('POST', path, true); req.timeout=5000; req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); req.onreadystatechange = function() { if (req.readyState == 4) { if(req.status == 200) { // alert(" : "+req.responseText); if (req.responseText=='ok') { // alert('!'); } else { // alert(' !'); } } else { // alert(' '); } } } req.send(params); } function call_to (number) { var params = 'call=1&recipient='+number; var path = '/services/telephony/call/'; ajax_submit(params, path) }
          
          







  4. 必要なテンプレートまたはBitrixページでの関数呼び出し

     <span class="link" onclick="call_to('50512')"></span> 
          
          









一般に、これで十分です。

電話をかけたい従業員のアルゴリズムは次のとおりです。

  1. ポータルのデスクトップで、その番号がネットワークに登録されているかどうかを確認します(ほとんどの場合、番号は既に記録されているため、新規または移動する従業員のみが再登録する必要があります。
  2. 検索、会社構造、または電話帳からターゲット番号を見つける
  3. 番号をクリック


その後、彼の机の上に立っている電話が鳴り始めます。 電話を受け取ると、ターゲット番号に接続します。



All Articles