Как добавить новый источник CID Superfecta в FreePBX?

Я не нахожу информацию о том, как добавить новый источник CID Superfecta (мой собственный запрограммированный) в FreePBX. В документации ничего не сказано, и нет очевидного способа сделать это в интерфейсе администрирования FreePBX. Я только нахожу варианты для добавления новых схем (которые являются коллекциями источников).

Как я могу добавить новый источник?

Я хочу сделать HTTP GETили предпочтительно POST, чтобы посмотреть идентификатор звонящего.

Использование FreePBX 14.0.2.10.

0 ответов

Используйте модуль FreePBX и добавьте его.

Одно замечание: я внес изменения в CID Superfecta для FreePBX Asterisk, чтобы включить ConnectWise ClientID и REST API.

Вам потребуется запросить доступ к сети разработчиков ConnectWise и создать частный ClientID.

См. https://developer.connectwise.com/ClientID.

Модификация касается php-скрипта, расположенного на сервере FreePBX по адресу /var/www/html/admin/modules/superfecta/sources/source-ConnectWise.module

Это сначала проверит компании CW на соответствие номера телефона, вернет название компании, а затем, если не найден, контакты CW, вернув имя и фамилию контакта.

Вырежьте и вставьте нижеприведенное в модуль source-ConnectWise.module. Следите за возвратами строк для строк, которые должны быть 1 строкой, вставленной как 2.

Пожалуйста, свободно делитесь этим за пределами форумов CW, пока мне предоставляется кредит. Есть способ иметь ClientID разработчика для нескольких установок.


<?php

/***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
 * Module Dev notes:
 *
 *
 * Revision History:
 *    v0.1.0: Initial Release Version by myitguy
 *    v0.1.1: Minor bug fix by bushbomb
 *    v0.1.2: More bug fixes id'd by bushbomb
 *    v0.1.3: Initial migration to 2.11 by lgaetz
 *    2014-08-22  Added user param to set the API version in the URL
 *    2015-05-01  Add field for user supplied CNAM prefix
 *    2018-06-30  Fix for bug FREEPBX-17727
 *    2020-01-06  Modified by Clinton Pownall of Computer Business to
 *                accommodate the ConnectWise REST API and the ConnectWise
 *                Required ClientID.
***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****/

class ConnectWise extends superfecta_base {

    public $description = "Look up data in local or remote ConnectWise CRM.";
    public $version_requirement = "2.11";
    public $source_param = array(
        'DB_Site' => array(
                'description' => 'ConnectWise Site URL not including the initial https://',
                'type' => 'text',
        ),
        'DB_Company' => array(
                'description' => 'ConnectWise Company ID',
                'type' => 'text',
        ),
        'DB_Public_Key' => array(
                'description' => 'Integration Public Key Created in ConnectWise: Members -> API Members -> API Keys',
                'type' => 'text',
        ),
        'DB_Private_Key' => array(
                'description' => 'Integration Private Key Created in ConnectWise: Members -> API Members -> API Keys',
                'type' => 'password',
        ),
        'DB_ClientID' => array(
                'description' => 'Client ID created using the ConnectWise Developer Site, See https:// developer.connectwise.com/ClientID',
                'type' => 'password',
        ),
        'Search_Type' => array(
                'description' => 'The ConnectWise type of entries that should be used to match the number',
                'type' => 'select',
                'option' => array (
                    '1' => 'Companies Only',
                    '2' => 'Contacts Only',
                    '3' => 'Companies --> Contacts',
                ),
                'default' => '3',
        ),
        'Filter_Length' => array(
                'description' => 'The number of rightmost digits to check for a match. Enter zero to disable this setting',
                'type' => 'number',
                'default' => 10
        ),
        'CNAM_prefix' => array(
                'description' => 'This text will be prefixed to all CNAM returned by this module (optional)',
                'type' => 'text',
                'default' => null
        ),
        'API_Version' => array(
                'description' => 'The part of the URL excluding slashes following the host name that indicates the API version, e.g. "v2014_4" or "v4_6_release" (without quotes)',
                'type' => 'text',
                'default' => 'v2014_4',
        ),
    );


    function get_caller_id($thenumber, $run_param=array()) {
        $caller_id = null;

                $site = $run_param['DB_Site'];
                $companyid = $run_param['DB_Company'];
                $APIPublicKey = $run_param['DB_Public_Key'];
                $APIPrivateKey = $run_param['DB_Private_Key'];
                $varSearchType = $run_param['Search_Type'];
        $clientid = $run_param['DB_ClientID'];

        $varSearchType = $run_param['Search_Type'];
        if ($run_param['API_Version']) {
            $apiver = $run_param['API_Version'];
        } else {
            $apiver = 'v4_6_release';
        }

        $wquery_string = "";
        $wquery_result = "";
        $wresult_caller_name = "";

        $this->DebugPrint("Searching ConnectWise ... ");

        if ($run_param['Filter_Length'] != 0) {
            if (strlen($thenumber) > $run_param['Filter_Length']) $thenumber = substr($thenumber, -$run_param['Filter_Length']);  // keep only the filter_length rightmost digits
        }

        $APIEndpoint = 'https://' .$site. '/'.$apiver.'/apis/3.0';

        $APIkey = 'Basic ' . base64_encode($companyid . '+' . $APIPublicKey . ':' . $APIPrivateKey);


        // Search Companies
        if($run_param['Search_Type'] == 1 || $run_param['Search_Type'] == 3)  {
            $this->DebugPrint("Searching Companies ... ");
            /* COMPANY */
            $conditions='conditions=phoneNumber%20like%20%22'.$thenumber.'%22%20';

            $url = '/company/companies?'.$conditions.'&fields=name&pageSize=1000';

            $url = $APIEndpoint . $url;

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('clientId:' . $clientid,'Authorization:'. $APIkey,    'Content-Type: application/json',));
               curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
               curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
               curl_setopt($curl, CURLINFO_HEADER_OUT, true);

            $result = curl_exec($curl);

            if(!$result){die("Connection Failure");}
            curl_close($curl);

            $name=preg_split('/"*"/i', $result, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

            if (!empty($name[3])) {
                $wresult_caller_name = $name[3];
            }
            else
            {
                $this->DebugPrint("Not found in Companies... ");
            }
        }

        // Search Contacts
        if($run_param['Search_Type'] == 2 || $run_param['Search_Type'] == 3 && $wresult_caller_name =="")  {
            $this->DebugPrint("Searching Contacts ... ");
            /* CONTACT */
            $conditions='childconditions=communicationItems/value%20like%20%22'.$thenumber.'%22%20AND%20communicationItems/communicationType="Phone"';

            $url = '/company/contacts?'.$conditions.'&fields=&pageSize=1000';

            $url = $APIEndpoint . $url;

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('clientId:' . $clientid,'Authorization:'. $APIkey,    'Content-Type: application/json',));
             curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curl, CURLINFO_HEADER_OUT, true);
            $result = curl_exec($curl);

            if(!$result){die("Connection Failure");}
            curl_close($curl);

            $name=preg_split('/"*"/i', $result, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);;

            if (!empty($name[9])) {
                 $wresult_caller_name = $name[5]." ".$name[9]; }

            }
            if ($wresult_caller_name =="")  {
                $this->DebugPrint("Not found in Contacts... ");
            }


            if(strlen($wresult_caller_name) > 0) {
                $caller_id = $run_param['CNAM_prefix'].trim(strip_tags($wresult_caller_name));
                return $run_param['CNAM_prefix'].$caller_id;
            }
            else {
                $this->DebugPrint("Not found in ConneceWise");
            }
    }
}

?>

Другие вопросы по тегам