Інтеграція Бітрікс24 з сервісом Clearbit

12 Липня 2016

наступна стаття
Михайло Цимбала

Backend developer

Михайло Цимбала
Інтеграція Бітрікс24 з сервісом Clearbit

Вступ

У кожну компанію щодня надходить багато безіменних листів, у яких складно визначити відправника. На сьогодні вже є сервіси, які зберігають основну інформацію про фірму або приватну особу, але для зручності співробітників і збільшення продуктивності їх роботи компанії шукають способи як інтегрувати свої CRM з цими сервісами.

Для розв’язання даних проблем ми розробили додаток, який дозволяє робити інтеграцію Бітрікс24 з сервісом Clearbit.

Clearbit надає набір API-інтерфейсів для бізнес-аналізу та інтеграції для стимулювання продажів і маркетингу для сучасних компаній.

За допомогою API Clearbit (при передачі йому такого параметра як електронна пошта або домен) в режимі реального часу перевіряються мільйони джерел по всьому інтернету, щоб отримати актуальну інформацію про компанію або людину.

Основи розробки

Для реалізації програми ми використовували REST API Бітрікс24 і API сервісу Clearbit.

Технічна реалізація

Основи

Для технічної реалізації ми використовували наступний алгоритм:

Напишемо додаток другого типу, який буде звертатися до сервісу через проміжний фізичний файл. Для того, щоб додаток зміг приймати і записувати дані, отримані з сервісу, потрібно встановити SSL сертифікат на проміжний домен, де ми будемо зберігати всі наші файли.

Також для побудови запитів на зовнішній сервіс буде потрібна авторизація на ньому, токени користувачів вирішили зберігати в порталі Бітрікс.

Однією з відмінностей додатків другого і третього типу від першого є обов'язкове зберігання логів запитів протягом трьох днів. Для реалізації логування написаний клас CB24Log.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class CB24Log {
   private $active=false;
   private function __construct() {}
   /**
    * Запись в лог
    * @param string  $msg   текст, который будет записан в лог
    * @param boolean $clean если установлено - очистит лог-файл
    */
   public static function Add($msg, $clean=false) {
      $lodDir=$_SERVER['DOCUMENT_ROOT'].'/clearbit/'.'logs';
//
      if ($lodDir && is_string($msg)) {
         $DATE = date('Y-m-d H:i:s');
         $strLogFile = date('Y-m-d').".log";
         $strCalledFrom = '';
         if (function_exists('debug_backtrace')) {
            $locations = debug_backtrace();
            $strCalledFrom = 'F: '.$locations[0]['file']. "\n" . '      L: '.$locations[0]['line'];
         }
         $logMsg = "\n" .
            'date: ' . $DATE . "\n" .
            'mess: ' . $msg . "\n" .
            'from: ' . $strCalledFrom . "\n" .
            'uri : ' . $_SERVER['REQUEST_URI'] . "\n" .
            '----------------------------------------------------------';
         if ($clean) {
            CB24Log::CleanLog($strLogFile);
         }
         CB24Log::AppendLog($logMsg, $strLogFile);
      }
   }
   /**
    * Функция добавления новой записи в лог
    * @param string $msg текст записи
    */
   private static function AppendLog($msg, $filename) {
      $lodDir=$_SERVER['DOCUMENT_ROOT'].'/clearbit/'.'logs';
      $log_file = $lodDir.'/'.$filename;
      $mode = 'ab';
      if (!file_exists($log_file)) $mode = 'x';
//
      if ($fp = fopen($lodDir.'/'.$filename, $mode)) {
         fwrite($fp, $msg);
         fclose($fp);
      }
   }
   /**
    * Удаление лог-файла
    */
   private static function CleanLog($filename) {
      $lodDir=$_SERVER['DOCUMENT_ROOT'].'/clearbit/'.'logs';
      @unlink($lodDir.'/'.$filename);
   }
   /**
    * Получение лог-файла
    */
   public static function GetLog($filename) {
      $lodDir=$_SERVER['DOCUMENT_ROOT'].'/clearbit/'.'logs';
      $log = false;
      if ($fp = fopen($lodDir.'/'.$filename, 'rb')) {
         $log = fread($fp);
         fclose($fp);
      }
      return $log;
   }
}



Його потрібно під’єднати в файлі-обробнику.

Надсилання даних з Бітрікс24 в файли додатка і сервіс.

Для передачі інформації з порталу в наш сервіс створимо сторінку з формою списку контактів користувача, при надсиланні форми обрані контакти будуть оновлені з використанням сервісу. .

Вибірка списку контактів реалізовано за допомогою API і JS.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
BX24.callMethod(
   "crm.contact.list",
   {
      order: { "DATE_UPDATE": "ASC" },
      select: [ "ID", "NAME", "EMAIL", "LAST_NAME", "DATE_MODIFY" ]
   },
   function(result)
   {
      if(result.error())
         console.error(result.error());
      else {
         var contact24 = '';
         $.each(result.data(), function () {
            var arrEmail = '';
            if (this.EMAIL) {
               $.each(this.EMAIL, function () {
                  arrEmail = this.VALUE;
               });
               contact24 = contact24 + '';
               contact24 = contact24 + '<input id="EMAIL" name="EMAIL['+this.ID+']" value="' + arrEmail + '" type="checkbox">';
               contact24 = contact24 + '' + this.DATE_MODIFY + '';
               contact24 = contact24 + '' + this.NAME + '';
               if (arrEmail) {
                  contact24 = contact24 + '' + arrEmail + '';
               } else {
                  contact24 = contact24 + '';
               }
               contact24 = contact24 + '';
            }
         });
         $('#paged').append(contact24).slideDown(100, BX24.fitWindow);
         if(result.more()){
            result.next();
         }
      }
   }
);



Інформація з форми надходить в файл-обробник, який за допомогою бібліотеки curl передає її на сервіс.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$mh = curl_multi_init();
$chs = array();
$content = array();
foreach ($urls as $url) {
    $chs[] = ( $ch = curl_init() );
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); //
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_multi_add_handle($mh, $ch);
}
$running = null;
do {
    curl_multi_exec($mh, $running);
    $info = curl_multi_info_read($mh);
    if (is_array($info) && ( $ch = $info['handle'] )) {
        // получаю содержимое загруженной страницы
        $arrContent=curl_multi_getcontent($ch);
        $arrInfo=curl_getinfo($ch);
        $key = array_search($arrInfo['url'], $urls);
//        $arrContent["myemail"]="123";
        CB24Log::Add('REQUEST url: '.$arrInfo['url']."\n\n"
            .'REQUEST curl raw result: '.print_r($arrContent, true));
        $content[$key] =$arrContent ;
    }
} while ($running);
foreach ($chs as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);



Оновлення інформації на порталі реалізовано за допомогою API і JS.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BX24.callMethod(
   "crm.contact.update",
   {
      id: contactid,
      fields:userfilds,
      params: { "REGISTER_SONET_EVENT": "Y" }
   },
   function(result)
   {
      if(result.error())
         console.error(result.error());
      else
      {
         $('#window').append("<p>"+key+" : "+window.menuMessage.CONTACT_UPDATE+"</p>");
      }
   }
);



Після завантаження програми показується сторінка введення параметрів.

Для отримання ключа доступу потрібно зареєструватися на сайті Clearbit і перейти в особистий кабінет.

Виберіть користувачів, які мають право оновлювати контакти через сервіс Clearbit.

Після збереження параметрів відкриється сторінка списку контактів із зазначеним email.

Контакт до оновлення.

Оновлюємо контакт.

Контакт після оновлення.

В результаті ми розробили додаток другого типу, з окремою сторінкою на порталі Бітрікс24, за допомогою якого користувачі порталу з певними правами можуть оновити інформацію про незаповнення контакти через сервіс Clearbit.


Схожі статті
Записатись на консультацію

Ми зв'яжемось з Вами протягом 10 хвилин