Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для Derzenochek
9 / 9 / 2
Регистрация: 05.01.2015
Сообщений: 154

Как переделать алгоритм создания повторных заявков в amoCRM?

29.07.2015, 13:41. Показов 3918. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как реализовать так, чтобы повторные заявки, ориентируясь по номеру телефона(если такой уже есть в amoCRM) создавались таким образом: создавалась ещё одна сделка, контакт оставался тот же и новая сделка привязывалась к существующему контакту ну и задача, естественно, создавалась новая.

На данный момент при создании лида (если такой телефон есть в базе) контакт новый не создаётся, но сделка не привязывается к старому контакту - просто новая сделка и новая задача.

Вот текущий код (некоторые данные удалил/скрыл)
$link = 'https://' . $subdomain . '.amocrm.com/private/api/auth.php?type=json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($user));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
CheckCurlResponse($code);
$Response = json_decode($out, true);
$Response = $Response['response'];
if (isset($Response['auth']))
{

#создаём сделку
$leads = array(
'name' => 'Заявка с сайта Детское плавание',
'responsible_user_id' => ******,
//'responsible_user_id'=> ******, //Наталия
'status_id' => 9131076,
);
$leads['custom_fields'][] = array('id' => '363194', 'values' => array(array('value' =>
861050, )));
$leads['custom_fields'][] = array('id' => '363196', 'values' => array(array('value' =>
861012, )));
$leads['custom_fields'][] = array('id' => '363216', 'values' => array(array('value' =>
$utm_source, )));
$leads['custom_fields'][] = array('id' => '363218', 'values' => array(array('value' =>
$utm_medium, )));
$leads['custom_fields'][] = array('id' => '363220', 'values' => array(array('value' =>
$utm_campaign, )));
$leads['custom_fields'][] = array('id' => '363222', 'values' => array(array('value' =>
$utm_term, )));
$lead_set['request']['leads']['add'][] = $leads;
#Формируем ссылку для запроса
$link = 'https://' . $subdomain . '.amocrm.com/private/api/v2/json/leads/set';
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($lead_set));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
CheckCurlResponse($code);

$Response = json_decode($out, true);
$Response = $Response['response']['leads']['add'];
$output = 'ID добавленных сделок:' . PHP_EOL;
foreach ($Response as $v)
if (is_array($v))
{
$output .= $v['id'] . PHP_EOL;
$lead_id = $v['id'];
}

if (!$contact_id = contactExist($phone, $subdomain)){

// создаем контакт
$contact = array(
'name' => $name,
'phone' => $phone,
'responsible_user_id' => ******,
//'responsible_user_id'=> ******, //Наталия
'linked_leads_id' => array($lead_id),
);
$contact['custom_fields'][] = array('id' => '363014', 'values' => array(array(
'value' => $phone,
'enum' => 'WORK'
)));

//$contact['custom_fields'][] = array('id' => '363198', 'values' => array(array('value' => $city )));
$contact['custom_fields'][] = array('id' => '363016', 'values' => array(array('value' =>
$email, 'enum' => 'WORK' )));
$contact_set['request']['contacts']['add'][] = $contact;
$link = 'https://' . $subdomain . '.amocrm.com/private/api/v2/json/contacts/set';
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($contact_set));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__file__)
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__file__)
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code != 200 && $code != 204)
{
echo json_encode(array('result'=>'error', 'text'=>$code));
exit;
}
$Response = json_decode($out, true);
$Response = $Response['response']['contacts']['add'];
$output = 'ID добавленных контактов:' . PHP_EOL;
foreach ($Response as $v)
if (is_array($v))
{
$output .= $v['id'] . PHP_EOL;
$contact_id = $v['id'];
}

}
else {
$text = 'Повторный заказ';
}

$tomorrow = strtotime('+12hours');

// создаем задачу
$task = array(
'name' => (isset($text) && !empty($text))?$text:'Новая задача',
'responsible_user_id' => ******,
//'responsible_user_id'=> ******, //Наталия
'element_type' => 1,
'element_id' => $contact_id,
'text' => 'Новая заявка - Позвонить клиенту!',
'complete_till' => $tomorrow,
);
$task_set['request']['tasks']['add'][] = $task;
$link = 'https://' . $subdomain . '.amocrm.com/private/api/v2/json/tasks/set';
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($task_set));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__file__) *******************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
CheckCurlResponse($code);
echo json_encode(array('result'=>'success', 'text'=>'Ваша заявка принята'));
} else
{
echo json_encode(array('result'=>'error', 'text'=>'Авторизация не удалась'));
exit;
Почему что новая сделка не подвязывается к старому контакту?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2015, 13:41
Ответы с готовыми решениями:

Как работает алгоритм поиска повторных байтов?
У нас есть бинарный файл, который нужно условно говоря запаковать уменьшив в размере за счёт большого кол-ва повторяющихся блоков. У меня...

Как переделать данную задачу с симафорами на алгоритм Петерсона?
Подскажите пожалуйсто а то уже всю голову сломал. Как переделать данную задачу с симафорами на алгоритм Петерсона? т.е. Симафоры...

Как переделать волновой алгоритм из консольного в графический вид?
как зделать чтоб он был виден визуально #include <vcl.h> #include <iostream.h> #pragma hdrstop ...

2
0 / 0 / 1
Регистрация: 29.07.2015
Сообщений: 1
29.07.2015, 20:14
Лучший ответ Сообщение было отмечено Derzenochek как решение

Решение

Добрый день. Для того, что бы реализовать требуемый функционал вам нужно:

1. Получение и поиск контакта по номеру тел.
При получении данных от пользователя надо проверить существует ли контакт с таким номером тел. для этого вы можете воспользоваться "contacts/list"
Пример поиска по номеру тел:
http://#subdomain#.amocrm.ru/p... номер_тел#

Данный запрос вернет вам json-массив с контактом в котором указан данный номер тел.

Если данный запрос вернул json-массив с данными искомого контакта, то тогда мы записываем их в переменную.

2. Создаем сделку.
Для того, что бы создать сделку вы можете воспользоваться методом "leads/set" . При помощи данного метода вы можете создать сделку с нужными данными. После того как сделка будет создана, amoCRM вернет json-массив c id созданной сделки. Данный id нужно записать в переменную.

3. Создание контакта и привязка его к сделке.
Если в 1-ом пункте мы json-массив с данными о контакте, то тогда мы обновляем его добавляя сделку к которой он должен быть привязан. Для это вы можете воспользоваться методом "contacts/set" в параметре массива вместо "add" указав "update" и передав в параметре "linked_leads_id" id сделки которая был записан в пункте №2

Пример того как это должно быть реализовано:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if(empty($contact['id'])) { 
    $contact = array( 
        'name' => $name, 
        'phone' => $phone, 
                'responsible_user_id' => #user_id#, 
                'linked_leads_id' => array($lead_id), 
        ); 
    $contact['custom_fields'][] = array('id' => '363014', 'values' => array(array( 
        'value' => $phone, 
        'enum' => 'WORK' 
))); 
    $contact['custom_fields'][] = array('id' => '363016', 'values' => array(array('value' =>$email, 'enum' => 'WORK' ))); 
    $contact_set['request']['contacts']['add'][] = $contact; 
}else { 
    $contact = array( 
        'id' => $contact['id'], 
        'linked_leads_id' => array($lead_id), 
        ); 
    $contact_set['request']['contacts']['update'][] = $contact; 
}
Если в 1-ом пункте мы не получили json-массив с данными о контакте, то мы создаем контакт. Для это вы можете воспользоваться методом "contacts/set" в параметре массива указав "add" передав в параметре "linked_leads_id" id сделки которая был записан в пункте №2. После того как контакт будет создан, amoCRM вернет json-массив c id созданного контакта. Данный id нужно записать в переменную.

4. Создаем задачу.
Если контакт был обновлен, то для того, что бы добавить задачу к данному контакту вам надо воспользоваться методом tasks/set передав в него json-массив в котором параметр "element_id" будет иметь значение id контакта полученного в 1-ом пункте.

Если контакт был создан, то для того, что бы добавить задачу надо воспользоваться методом tasks/set передав в него json-массив в котором параметр "element_id" будет иметь значение id контакта созданного в 3-м пункте.

С уважением,
Селин Эдуард,
специалист технической поддержки amoCRM
8-800-555-73-64
support@amocrm.ru
0
 Аватар для Derzenochek
9 / 9 / 2
Регистрация: 05.01.2015
Сообщений: 154
03.08.2015, 00:40  [ТС]
Спасибо! Сделали по вашему примеру - всё получилось!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.08.2015, 00:40
Помогаю со студенческими работами здесь

Переделать скрипт создания Interbase в sql
Здравствуйте Уважаемые, помогите пожалуйста с проблемой. есть готовый скрипт создания БД, нужно вывести схему в Mysql или как это сделать...

Переделать код для создания rar архива
Здравствуйте. Подскажите, возможно ли переделать данный код таким образом, чтобы архивы были не zip, а rar? $error =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru