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

Этот PHP-код позволяет получить список активностей (дел), связанных с определенным лидом в Битрикс24.

use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;

// ID лида, для которого ищем активности
$leadId = $this->GetRootActivity()->GetVariable("LeadID");

$foundActivitiesCount = 0;
$activityList = [];
$errorMessage = '';

if (!$leadId) {
    $errorMessage = "КРИТИЧНО: Не указан ID лида для поиска активностей.";
    $this->WriteToTrackingService($errorMessage);
} else {
    $arFilter = [
        'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
        'OWNER_ID' => $leadId,
    ];

    $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();

    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']
        ];
    }
    $foundActivitiesCount = count($activityList);
}

$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("FoundActivitiesCount", $foundActivitiesCount);
$rootActivity->SetVariable("ActivityList", $activityList);
$rootActivity->SetVariable("ActivitySearchErrorMessage", $errorMessage);

Параметры

  • LeadID (int): ID лида, для которого необходимо получить активности.

Возвращаемые значения

  • FoundActivitiesCount (int): Количество найденных активностей.
  • ActivityList (array): Массив найденных активностей, каждая из которых содержит ID, SUBJECT, TYPE, COMPLETED, DEADLINE, DESCRIPTION, PROVIDER.
  • ActivitySearchErrorMessage (string): Сообщение об ошибке, если поиск не удался.

Рекомендации по использованию

  • Используйте этот скрипт для получения списка всех активностей, связанных с конкретным лидом.
  • Результат ActivityList может быть использован для дальнейшего анализа или отображения.

Создание новой активности (звонка или встречи) для лида

Данный скрипт демонстрирует, как создать новую активность (например, звонок или встречу) и связать ее с лидом.

use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;
use Bitrix\Main\Type\DateTime;

// ID лида, к которому будет привязана активность
$ownerId = $this->GetRootActivity()->GetVariable("OwnerID"); // ID лида

// Параметры новой активности
$activitySubject = $this->GetRootActivity()->GetVariable("ActivitySubject");
$activityDescription = $this->GetRootActivity()->GetVariable("ActivityDescription");
$activityDeadline = new DateTime($this->GetRootActivity()->GetVariable("ActivityDeadline"));
$activityResponsibleId = $this->GetRootActivity()->GetVariable("ResponsibleUserID");
$activityTypeId = $this->GetRootActivity()->GetVariable("ActivityType"); // Например, \CCrmActivityType::Call или \CCrmActivityType::Meeting
$activityProviderId = $this->GetRootActivity()->GetVariable("ActivityProvider"); // Например, Call::ACTIVITY_PROVIDER_ID или Meeting::ACTIVITY_PROVIDER_ID
$activityProviderTypeId = $this->GetRootActivity()->GetVariable("ActivityProviderType"); // Например, Call::PROVIDER_TYPE_CALL или Meeting::PROVIDER_TYPE_MEETING

$newActivityId = null;
$activityCreationStatus = false;
$errorMessage = '';

if (!$ownerId || !$activityResponsibleId || !$activitySubject || !$activityDeadline || !$activityTypeId || !$activityProviderId || !$activityProviderTypeId) {
    $errorMessage = "КРИТИЧНО: Не все обязательные параметры для создания активности указаны.";
    $this->WriteToTrackingService($errorMessage);
} else {
    $fields = [
        'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
        'OWNER_ID' => $ownerId,
        'TYPE_ID' => $activityTypeId,
        'SUBJECT' => $activitySubject,
        'DESCRIPTION' => $activityDescription,
        'DEADLINE' => $activityDeadline,
        'COMPLETED' => 'N',
        'PRIORITY' => \CCrmActivityPriority::Medium,
        'RESPONSIBLE_ID' => $activityResponsibleId,
        'AUTHOR_ID' => $activityResponsibleId,
        'PROVIDER_ID' => $activityProviderId,
        'PROVIDER_TYPE_ID' => $activityProviderTypeId,
        'DIRECTION' => \Bitrix\Crm\ActivityDirection::Outgoing,
    ];

    $result = ActivityTable::add($fields);

    if ($result->isSuccess()) {
        $newActivityId = $result->getId();
        $activityCreationStatus = true;
    } else {
        $errorMessage = "ОШИБКА: Не удалось создать активность. " . implode(', ', $result->getErrorMessages());
        $this->WriteToTrackingService($errorMessage);
    }
}

$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("NewActivityID", $newActivityId);
$rootActivity->SetVariable("ActivityCreationStatus", $activityCreationStatus);
$rootActivity->SetVariable("ActivityCreationErrorMessage", $errorMessage);

Параметры

  • OwnerID (int): ID лида, к которому будет привязана активность.
  • ActivitySubject (string): Тема активности.
  • ActivityDescription (string): Описание активности.
  • ActivityDeadline (string): Дата и время завершения активности (в формате ‘YYYY-MM-DD HH:MM:SS’).
  • ResponsibleUserID (int): ID ответственного пользователя.
  • ActivityType (int): Тип активности (например, \CCrmActivityType::Call для звонка, \CCrmActivityType::Meeting для встречи).
  • ActivityProvider (string): Провайдер активности (например, Call::ACTIVITY_PROVIDER_ID для звонка, Meeting::ACTIVITY_PROVIDER_ID для встречи).
  • ActivityProviderType (string): Тип провайдера активности (например, Call::PROVIDER_TYPE_CALL для звонка, Meeting::PROVIDER_TYPE_MEETING для встречи).

Возвращаемые значения

  • NewActivityID (int): ID созданной активности.
  • ActivityCreationStatus (bool): Статус операции создания (true - успешно, false - ошибка).
  • ActivityCreationErrorMessage (string): Сообщение об ошибке, если операция не удалась.

Рекомендации по использованию

  • Используйте этот скрипт для автоматического создания звонков, встреч или других активностей, связанных с лидами.
  • Убедитесь, что все обязательные параметры переданы для успешного создания активности.