On this page
event
Работа с активностями (делами) контактов в Битрикс24
Примеры PHP-кода для получения и создания активностей (дел) в Битрикс24, связанных с контактами.
Получение активностей, связанных с контактом
Этот PHP-код позволяет получить список активностей (дел), связанных с определенным контактом в Битрикс24. Вы можете использовать его для анализа истории взаимодействий.
use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;
// ID контакта, для которого ищем активности
// Предполагается, что эта переменная получена из бизнес-процесса
$entityTypeId = \CCrmOwnerType::Contact;
$entityId = $this->GetRootActivity()->GetVariable("contactId"); // Например, ID контакта
$arFilter = [
'OWNER_TYPE_ID' => $entityTypeId,
'OWNER_ID' => $entityId,
// Дополнительные фильтры, например, по типу активности или дате
// 'PROVIDER_ID' => Call::ACTIVITY_PROVIDER_ID, // Только звонки
// 'COMPLETED' => 'N', // Только незавершенные активности
];
$arSelect = [
'ID', 'SUBJECT', 'TYPE_ID', 'COMPLETED', 'DEADLINE',
'OWNER_TYPE_ID', 'OWNER_ID', 'DESCRIPTION', 'PROVIDER_ID'
];
$arActivities = ActivityTable::getList([
'order' => ['DEADLINE' => 'DESC'],
'filter' => $arFilter,
'select' => $arSelect,
'cache' => ['ttl' => 3600]
])->fetchAll();
$activityList = [];
foreach ($arActivities as $activity) {
$activityList[] = [
'ID' => $activity['ID'],
'SUBJECT' => $activity['SUBJECT'],
'TYPE' => \CCrmActivityType::ResolveName($activity['TYPE_ID']),
'COMPLETED' => $activity['COMPLETED'] === 'Y' ? 'Да' : 'Нет',
'DEADLINE' => $activity['DEADLINE'],
'DESCRIPTION' => $activity['DESCRIPTION'],
'PROVIDER' => $activity['PROVIDER_ID']
];
}
// Присваиваем результат переменной бизнес-процесса
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("ActivityList", $activityList);
Создание новой активности (звонка или встречи) для контакта
Данный скрипт демонстрирует, как создать новую активность (например, звонок или встречу) и связать ее с контактом.
use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;
use Bitrix\Main\Type\DateTime;
// ID контакта, к которому будет привязана активность
// Предполагается, что эта переменная получена из бизнес-процесса
$ownerTypeId = \CCrmOwnerType::Contact;
$ownerId = $this->GetRootActivity()->GetVariable("contactId"); // Например, ID контакта
// Параметры новой активности
$activitySubject = "Плановый звонок контакту";
$activityDescription = "Обсуждение нового предложения по автоматизации Битрикс24 с контактом.";
$activityDeadline = (new DateTime())->add("+1 day"); // Активность на завтра
$activityResponsibleId = $this->GetRootActivity()->GetVariable("ResponsibleUserID"); // ID ответственного пользователя
$fields = [
'OWNER_TYPE_ID' => $ownerTypeId,
'OWNER_ID' => $ownerId,
'TYPE_ID' => \CCrmActivityType::Call, // Или \CCrmActivityType::Meeting
'SUBJECT' => $activitySubject,
'DESCRIPTION' => $activityDescription,
'DEADLINE' => $activityDeadline,
'COMPLETED' => 'N', // Активность не завершена
'PRIORITY' => \CCrmActivityPriority::Medium,
'RESPONSIBLE_ID' => $activityResponsibleId,
'AUTHOR_ID' => $activityResponsibleId, // Автор активности
'PROVIDER_ID' => Call::ACTIVITY_PROVIDER_ID, // Для звонка
// 'PROVIDER_ID' => Meeting::ACTIVITY_PROVIDER_ID, // Для встречи
'PROVIDER_TYPE_ID' => Call::PROVIDER_TYPE_CALL, // Для звонка
// 'PROVIDER_TYPE_ID' => Meeting::PROVIDER_TYPE_MEETING, // Для встречи
'DIRECTION' => \Bitrix\Crm\ActivityDirection::Outgoing, // Исходящий звонок
];
$result = ActivityTable::add($fields);
if ($result->isSuccess()) {
$newActivityId = $result->getId();
// Присваиваем ID новой активности переменной бизнес-процесса
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("NewActivityID", $newActivityId);
} else {
// В случае ошибки, можно присвоить null или false переменной, если это необходимо для БП
}
Полезные ресурсы: