Інтеграція Бітрікс24 з сервісом Clearbit
12 Липня 2016
наступна статтяВступ
У кожну компанію щодня надходить багато безіменних листів, у яких складно визначити відправника. На сьогодні вже є сервіси, які зберігають основну інформацію про фірму або приватну особу, але для зручності співробітників і збільшення продуктивності їх роботи компанії шукають способи як інтегрувати свої 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 хвилин