Получение активностей, связанных с контактом

Этот 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 переменной, если это необходимо для БП
}

Полезные ресурсы: