- Введение
- Основы работы с PHP кодом в Битрикс24
- Доступные переменные и объекты
- Настройка активити «PHP код»
- Шаг 1: Создание бизнес процесса
- Шаг 2: Настройка активити
- Примеры PHP кода в бизнес процессах
- Пример 1: Расчет суммы сделки с НДС
- Пример 2: Отправка уведомления в Telegram
- Пример 3: Валидация данных контакта
- Работа с API Битрикс24 в PHP коде
- Использование CRest для API запросов
- Создание задач через API
- Обработка ошибок и отладка
- Логирование ошибок
- Отладочная информация
- Лучшие практики использования PHP кода
- Безопасность
- Производительность
- Пример оптимизированного кода
- Интеграция с внешними сервисами
- Работа с 1С через REST API
- Работа с почтовыми сервисами
- Расширенные возможности
- Условная логика и ветвления
- Работа с файлами и документами
- Мониторинг и аналитика
- Сбор статистики выполнения
- Заключение
Введение
Битрикс24 предоставляет мощные возможности для автоматизации бизнес-процессов с использованием PHP кода. Эта функциональность позволяет создавать сложные сценарии обработки данных, интегрировать внешние сервисы и реализовывать уникальную бизнес-логику прямо в рамках CRM-системы. В данной статье рассмотрим детальную инструкцию по работе с PHP кодом в бизнес процессах Битрикс24, включая настройку активити, примеры кода и лучшие практики.
Основы работы с PHP кодом в Битрикс24
PHP код в бизнес процессах Битрикс24 выполняется через специальное активити «PHP код», которое позволяет встраивать пользовательские скрипты в автоматизированные процессы. Это открывает широкие возможности для:
- Сложных вычислений и обработки данных
- Интеграции с внешними API
- Создания пользовательских уведомлений
- Работы с файлами и документами
- Валидации и трансформации данных
Доступные переменные и объекты
При выполнении PHP кода в бизнес процессе доступны следующие переменные:
- $rootActivity — корневой объект активити
- $arCurrentValues — текущие значения полей документа
- $arWorkflowParameters — параметры бизнес процесса
- $arWorkflowVariables — переменные бизнес процесса
- $documentId — ID документа
- $userId — ID пользователя
Настройка активити «PHP код»
Шаг 1: Создание бизнес процесса
Для начала работы с PHP кодом необходимо создать или открыть существующий бизнес процесс:
- Перейдите в раздел «CRM» → «Настройки» → «Бизнес процессы»
- Выберите нужный тип документа (лиды, сделки, контакты и т.д.)
- Создайте новый бизнес процесс или откройте существующий
- Добавьте активити «PHP код» в схему процесса
Шаг 2: Настройка активити
При настройке активити «PHP код» необходимо указать:
- Название активити — описательное имя для понимания функции
- PHP код — сам код для выполнения
- Возвращаемое значение — переменная для сохранения результата
- Условия выполнения — при необходимости
Примеры PHP кода в бизнес процессах
Пример 1: Расчет суммы сделки с НДС
Рассмотрим простой пример расчета суммы сделки с учетом НДС:
// Получаем сумму сделки
$dealAmount = floatval($arCurrentValues['OPPORTUNITY']);
// Рассчитываем НДС (20%)
$vatRate = 0.20;
$vatAmount = $dealAmount * $vatRate;
$totalAmount = $dealAmount + $vatAmount;
// Возвращаем результат
return array(
'VAT_AMOUNT' => $vatAmount,
'TOTAL_AMOUNT' => $totalAmount,
'MESSAGE' => 'Расчет выполнен успешно'
);
Пример 2: Отправка уведомления в Telegram
Пример интеграции с Telegram Bot API для отправки уведомлений:
// Параметры Telegram бота
$botToken = 'YOUR_BOT_TOKEN';
$chatId = 'YOUR_CHAT_ID';
// Формируем сообщение
$dealTitle = $arCurrentValues['TITLE'];
$dealAmount = $arCurrentValues['OPPORTUNITY'];
$message = "Новая сделка: {$dealTitle}\nСумма: {$dealAmount} руб.";
// Отправляем сообщение
$telegramUrl = "https://api.telegram.org/bot{$botToken}/sendMessage";
$postData = array(
'chat_id' => $chatId,
'text' => $message,
'parse_mode' => 'HTML'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $telegramUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return array('RESULT' => $result);
Пример 3: Валидация данных контакта
Пример валидации email и телефона контакта:
// Получаем данные контакта
$email = $arCurrentValues['EMAIL'][0]['VALUE'];
$phone = $arCurrentValues['PHONE'][0]['VALUE'];
$errors = array();
// Валидация email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Некорректный email адрес';
}
// Валидация телефона (простая проверка)
if (!preg_match('/^[\d\+\-\(\)\s]+$/', $phone)) {
$errors[] = 'Некорректный номер телефона';
}
// Возвращаем результат
if (empty($errors)) {
return array(
'STATUS' => 'SUCCESS',
'MESSAGE' => 'Данные валидны'
);
} else {
return array(
'STATUS' => 'ERROR',
'ERRORS' => implode(', ', $errors)
);
}
Работа с API Битрикс24 в PHP коде
Использование CRest для API запросов
Для работы с REST API Битрикс24 внутри PHP кода можно использовать встроенные возможности:
// Пример получения информации о пользователе
$userId = $arCurrentValues['ASSIGNED_BY_ID'];
// Выполняем запрос к API
$userInfo = CRest::call('user.get', array(
'ID' => $userId
));
if ($userInfo['result']) {
$user = $userInfo['result'][0];
$userName = $user['NAME'] . ' ' . $user['LAST_NAME'];
return array(
'USER_NAME' => $userName,
'USER_EMAIL' => $user['EMAIL']
);
}
return array('ERROR' => 'Не удалось получить информацию о пользователе');
Создание задач через API
Пример создания задачи при определенных условиях:
// Проверяем условие (например, сумма сделки больше 100000)
$dealAmount = floatval($arCurrentValues['OPPORTUNITY']);
if ($dealAmount > 100000) {
$responsibleId = $arCurrentValues['ASSIGNED_BY_ID'];
// Создаем задачу
$taskData = array(
'TITLE' => 'Проверить крупную сделку: ' . $arCurrentValues['TITLE'],
'DESCRIPTION' => 'Сделка на сумму ' . $dealAmount . ' руб. требует дополнительной проверки',
'RESPONSIBLE_ID' => $responsibleId,
'DEADLINE' => date('Y-m-d H:i:s', strtotime('+1 day'))
);
$taskResult = CRest::call('tasks.task.add', array(
'fields' => $taskData
));
if ($taskResult['result']) {
return array(
'STATUS' => 'SUCCESS',
'TASK_ID' => $taskResult['result']['task']['id']
);
}
}
return array('STATUS' => 'NO_ACTION');
Обработка ошибок и отладка
Логирование ошибок
Для отладки PHP кода в бизнес процессах важно правильно обрабатывать ошибки:
try {
// Основной код
$result = someComplexOperation();
return array(
'STATUS' => 'SUCCESS',
'RESULT' => $result
);
} catch (Exception $e) {
// Логируем ошибку
error_log('BP Error: ' . $e->getMessage());
return array(
'STATUS' => 'ERROR',
'MESSAGE' => 'Произошла ошибка: ' . $e->getMessage()
);
}
Отладочная информация
Для получения отладочной информации можно использовать:
// Отладочная информация
$debug = array(
'current_values' => $arCurrentValues,
'workflow_params' => $arWorkflowParameters,
'document_id' => $documentId,
'user_id' => $userId
);
// Сохраняем в переменную бизнес процесса
$arWorkflowVariables['DEBUG_INFO'] = serialize($debug);
return array('DEBUG' => 'Отладочная информация сохранена');
Лучшие практики использования PHP кода
Безопасность
- Валидация входных данных — всегда проверяйте данные перед обработкой
- Экранирование вывода — используйте htmlspecialchars() для вывода данных
- Ограничение доступа — не выполняйте потенциально опасные операции
- Использование HTTPS — для внешних API запросов
Производительность
- Минимизация запросов — объединяйте несколько операций в один запрос
- Кэширование — используйте кэширование для часто используемых данных
- Оптимизация циклов — избегайте тяжелых операций в циклах
- Таймауты — устанавливайте таймауты для внешних запросов
Пример оптимизированного кода
// Оптимизированный код с кэшированием
$cacheKey = 'deal_data_' . $documentId;
$cachedData = COption::GetOptionString('main', $cacheKey, '');
if (empty($cachedData)) {
// Выполняем тяжелые вычисления
$processedData = expensiveDataProcessing($arCurrentValues);
// Кэшируем результат на 1 час
COption::SetOptionString('main', $cacheKey, serialize($processedData));
$result = $processedData;
} else {
$result = unserialize($cachedData);
}
return array('DATA' => $result);
Интеграция с внешними сервисами
Работа с 1С через REST API
Пример интеграции с 1С для синхронизации данных:
// Параметры подключения к 1С
$baseUrl = 'http://your-1c-server/base/hs/api/';
$username = 'api_user';
$password = 'api_password';
// Подготавливаем данные для отправки
$dealData = array(
'title' => $arCurrentValues['TITLE'],
'amount' => $arCurrentValues['OPPORTUNITY'],
'client' => $arCurrentValues['CONTACT_ID']
);
// Отправляем данные в 1С
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . 'deals');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dealData));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode($username . ':' . $password)
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
return array(
'STATUS' => 'SUCCESS',
'RESPONSE' => json_decode($response, true)
);
} else {
return array(
'STATUS' => 'ERROR',
'HTTP_CODE' => $httpCode,
'RESPONSE' => $response
);
}
Работа с почтовыми сервисами
Пример отправки email через внешний SMTP сервер:
// Настройки SMTP
$smtpServer = 'smtp.gmail.com';
$smtpPort = 587;
$smtpUser = 'your-email@gmail.com';
$smtpPassword = 'your-app-password';
// Данные письма
$to = $arCurrentValues['EMAIL'][0]['VALUE'];
$subject = 'Уведомление о сделке';
$message = 'Ваша сделка "' . $arCurrentValues['TITLE'] . '" обновлена';
// Отправляем письмо
$headers = array(
'From: ' . $smtpUser,
'Reply-To: ' . $smtpUser,
'Content-Type: text/html; charset=UTF-8'
);
$mailResult = mail($to, $subject, $message, implode("\r\n", $headers));
return array(
'STATUS' => $mailResult ? 'SUCCESS' : 'ERROR',
'MESSAGE' => $mailResult ? 'Письмо отправлено' : 'Ошибка отправки'
);
Расширенные возможности
Условная логика и ветвления
Пример сложной условной логики в зависимости от типа сделки:
// Получаем тип сделки
$dealType = $arCurrentValues['UF_DEAL_TYPE'];
$dealAmount = floatval($arCurrentValues['OPPORTUNITY']);
switch ($dealType) {
case 'NEW_CLIENT':
// Логика для новых клиентов
$discount = $dealAmount > 50000 ? 0.10 : 0.05;
$priority = 'HIGH';
break;
case 'REPEAT_CLIENT':
// Логика для постоянных клиентов
$discount = $dealAmount > 100000 ? 0.15 : 0.08;
$priority = 'MEDIUM';
break;
case 'VIP_CLIENT':
// Логика для VIP клиентов
$discount = 0.20;
$priority = 'URGENT';
break;
default:
$discount = 0;
$priority = 'LOW';
}
// Рассчитываем итоговую сумму
$discountAmount = $dealAmount * $discount;
$finalAmount = $dealAmount - $discountAmount;
return array(
'DISCOUNT_PERCENT' => $discount * 100,
'DISCOUNT_AMOUNT' => $discountAmount,
'FINAL_AMOUNT' => $finalAmount,
'PRIORITY' => $priority
);
Работа с файлами и документами
Пример создания и сохранения документа:
// Создаем содержимое документа
$documentContent = "Договор по сделке: " . $arCurrentValues['TITLE'] . "\n";
$documentContent .= "Сумма: " . $arCurrentValues['OPPORTUNITY'] . " руб.\n";
$documentContent .= "Дата создания: " . date('Y-m-d H:i:s') . "\n";
// Создаем временный файл
$tempFile = tempnam(sys_get_temp_dir(), 'contract_');
file_put_contents($tempFile, $documentContent);
// Сохраняем файл в Битрикс24
$fileArray = array(
'name' => 'contract_' . $documentId . '.txt',
'type' => 'text/plain',
'tmp_name' => $tempFile,
'error' => 0,
'size' => filesize($tempFile)
);
$fileId = CFile::SaveFile($fileArray, 'deals');
// Удаляем временный файл
unlink($tempFile);
if ($fileId) {
return array(
'STATUS' => 'SUCCESS',
'FILE_ID' => $fileId,
'MESSAGE' => 'Документ создан успешно'
);
} else {
return array(
'STATUS' => 'ERROR',
'MESSAGE' => 'Ошибка создания документа'
);
}
Мониторинг и аналитика
Сбор статистики выполнения
Пример сбора статистики для последующего анализа:
// Записываем статистику выполнения
$statisticsData = array(
'workflow_id' => $rootActivity->GetWorkflowInstanceId(),
'document_id' => $documentId,
'user_id' => $userId,
'execution_time' => microtime(true),
'deal_amount' => $arCurrentValues['OPPORTUNITY'],
'deal_stage' => $arCurrentValues['STAGE_ID']
);
// Сохраняем в базу данных или отправляем в аналитическую систему
global $DB;
$DB->Insert('b_workflow_statistics', $statisticsData);
return array(
'STATUS' => 'SUCCESS',
'STATISTICS_SAVED' => true
);
Заключение
Использование PHP кода в бизнес процессах Битрикс24 открывает безграничные возможности для автоматизации и оптимизации рабочих процессов. Правильно настроенные активити с PHP кодом позволяют создавать сложные интеграции, выполнять вычисления, валидировать данные и автоматизировать рутинные задачи.
Ключевые моменты для успешного использования PHP кода в бизнес процессах:
- Тщательно планируйте логику перед реализацией
- Используйте обработку ошибок и валидацию данных
- Оптимизируйте код для производительности
- Следуйте принципам безопасности
- Документируйте сложные алгоритмы
- Тестируйте код на тестовых данных
Наша команда предоставляет профессиональные услуги по настройке и внедрению Битрикс24, включая создание сложных бизнес процессов с использованием PHP кода. Мы поможем вам автоматизировать рабочие процессы, настроить интеграции с внешними системами и оптимизировать существующие решения. Обращайтесь к нам для получения консультации и разработки индивидуальных решений для вашего бизнеса.