Заказать проект
Оставьте заявку для получения коммерческого предложения.
Заполните форму и мы вышлем Вам предложение в котором решим,
чем можем вам помочь.
Интеграция Битрикс24 с сервисом Clearbit

Интеграция Битрикс24 с сервисом Clearbit

14 Июля 2016
Михаил Цимбала
Backend developer
Михаил  Цимбала
следующая статья

Введение

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

Для решения данных проблем мы разработали приложение которое позволяет делать интеграцию Битрикс24 с сервисом Clearbit.

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

С помощью API Clearbit и при передачи ему такого параметра как электронная почта или домен в режиме реального времени проверяются миллионы источников по всему интернету, что бы получить актуальную информацию о компании или человеке.

Основы разработки

Для реализации приложения мы использовали REST-API Битрикс24 (https://dev.1c-bitrix.ru/rest_help/) и API сервиса https://clearbit.com/.

Техническая реализация

Основы

Для технической реализации мы использовали следующий алгоритм:

Напишем приложение второго типа, которое будет обращаться к сервису через промежуточный физический файл, для того что б приложение смогло принимать и записывать данные получены с сервиса нужно установить 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>");
      }
   }
);



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

Для получения ключа доступа нужно зарегистрироваться на сайте https://clecarbit.com/и перейти в личный кабинет.

Выберите пользователей имеющих право обновлять контакты через сервис clearbit.

После сохранения параметров откроется страничка списка контактов с указанным email.

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

Обновляем контакт.

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

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

Записаться На Консультацию
Записаться На Консультацию
Мы свяжемся
с вами
в течении
10 минут
laptop
Мы свяжемся с вами в течении 10 минут