Comment on page
Добавление данных о звонке в тег новой сделки
При обработке звонков модулем 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,
);