Добавление данных о звонке в тег новой сделки

При обработке звонков модулем Itgrix могут быть созданы новый контакт и новая сделка. По умолчанию сущности получают один тег - Itgrix.

С помощью кастомизации можно добавить теги с информацией о звонке, например, направление (Входящий или Исходящий) и статус (Отвеченный или Пропущенный).

Т.к. статус звонка будет известен только в конце звонка, то и добавление тегов нужно добавить в кастомизацию параметров регистрации звонка (process_call_params).

В этой кастомизации известно:

  • Является ли сущность (контакт/сделка) новой (т.е. создана ли в процессе обработки этого звонка) - $params['entity_new']. Значение true, если новая, иначе false.

  • Какой тип у созданной сущности - $params['entity_type']. Для контакта значение 1, для сделки значение 3.

  • ID сущности - $params['entity_id'].

Исходя из этих данных реализуем такой алгоритм:

  • Теги будем устанавливать только для новых сущностей (которые созданы модулем Itgrix).

  • Нужно получить ID сделки, у которой нужно обновить теги.

    • Если в кастомизацию пришла сущность типа сделка, то возьмем её ID из параметров.

    • Если же это контакт, тогда нужно получить данные этого контакта и взять ID первой связанной с ним сделки (у нового контакта может быть только одна сделка). Для этого воспользуемся функцией Amo::getContact (поставляется вместе с модулем в файле /opt/itgrix_amo/customizer/lib/crm.php). Формат возвращаемых данных описан в документации amoCRM по работе с контактами.

  • Осталось обновить теги у найденной сделки. Для этого воспользуемся функцией Amo::updateLead (поставляется вместе с модулем в файле /opt/itgrix_amo/customizer/lib/crm.php). Формат данных описан в документации amoCRM по работе со сделками.

В результате у сделки будут теги Itgrix, Входящий и Отвеченный:

Пример кода кастомизации

Пример кода для добавления тегов в созданную сделку (файл /opt/itgrix_amo/customizer/actions/process_call_params.php):

$this->logDebug('params: '.json_encode($params));

//
// Получить созданную сделку и добавить в нее теги
//
if ($params['call_full']['entity']['is_new'] === true) {
    $this->logInfo('Get created lead and modify its tag...');

    $entityId = $params['call_full']['entity']['id'];
    $leadId = '';

    if ($params['call_full']['entity']['type'] === 'lead') { // сделка (lead)
        $leadId = $entityId;
    } else if ($params['call_full']['entity']['type'] === 'contact') { // контакт
        $entityData = Amo::getContact($entityId);

        if ($entityData === false) {
            return array(
                'state' => 'error',
                'data'  => 'failed to get contact ID '.$entityId,
            );
        }

        if (empty($entityData['_embedded']['items'])) {
            return array(
                'state' => 'error',
                'data'  => 'found no contact with ID '.$entityId,
            );
        }

        $leads = $entityData['_embedded']['items'][0]['leads'];
        if (!empty($leads)) {
            $leadId = $leads['id'][0];
        }
    }

    if ($leadId === '') {
        $this->logInfo('Lead was not created, do nothing');
    } else {
        $tags = array('Itgrix');

        if ($params['call_full']['channel']['type'] === 'incoming') {
            array_push($tags, 'Входящий');
        } else {
            array_push($tags, 'Исходящий');
        }

        if ($params['call_full']['channel']["was_answered"] === true) { // true - отвеченный
            array_push($tags, 'Отвеченный');
        } else {
            array_push($tags, 'Пропущенный');
        }

        $this->logInfo(sprintf("Set tags %s to lead ID '%s'...",
            json_encode($tags, JSON_UNESCAPED_UNICODE), $leadId));
        $updateResult = updateLead($leadId, array('tags' => $tags));
        if ($updateResult === false) {
            return array(
                'state' => 'error',
                'data'  => 'failed to update lead ID '.$leadId,
            );
        }
    }
}

$this->logDebug('return params: '.json_encode($params));
return array(
    'state' => 'success',
    'data'  => $params,
);

Last updated