@Necesse

AMOCRM, как сделать, чтобы если оставлял заявку на сайте уже существующий контакт, то его данные в амосрм обновлялись, а не писало — контакт уже есть?

Нужно сделать, чтобы когда я оставлял на сайте заявку, в форме которая написана руками, но подключена к СРМ, не только создавался новый контакт, но и обновлялся в случае, если с сайте уже пишет пользователь, который обращался раньше.

Теперь детально: Прям кровь из носа нужно сделать, чтобы при повторном оставлении заявки на сайте пользователем, он не создавался как новый контакт, а на него просто ставилась задача " Связаться", если он уже есть. ( Главное, чтобы не было дублей )

Вот есть код, на всякий:
<?php

$site_name = $_SERVER["HTTP_REFERER"];

//Путь сайта для создание разных меток для amoCRM
$site_path  = str_replace($_SERVER['HTTP_HOST'] , '', $_SERVER['HTTP_REFERER']);
$site_path  = str_replace('http://' , '', $site_path);
$site_path  = str_replace('/' , '', $site_path);

//Формируем из Город по IP
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
$details1 = $details->region;
$details2 = $details->city;
$geo= ''.$details1.', '.$details2.'';

//Формируем данные для добавления их в amoCRM
$contact = array(
			'name'=>$data['name'],
			'tags' => 'Заявка с сайта, '. $site_path,
			'responsible_user_id'=>$manager,
      'text'=>12488185,
      'custom_fields'=>array(
				array(
					'id'=>$custom_fields['EMAIL'],
					'values'=>array(
						array(
							'value'=>$data['email'],
							'enum'=>'WORK'
						)
					)
				),
				array(
					'id'=>1755674,
					'values'=>array(
						array(
							'value'=> $geo
						)
					)
				)

			)
		);

//Сбор данных с полей
if(!empty($data['phone']))
	$contact['custom_fields'][]=array(
		'id'=>$custom_fields['PHONE'],
		'values'=>array(
			array(
				'value'=>$data['phone'],
				'enum'=>'OTHER'
			)
		)
);

if(!empty($data['web']))
	$contact['custom_fields'][]=array(
		'id'=>$custom_fields['Сайт'],
		'values'=>array(
			array(
				'value'=>$data['web']
			)
		)
	);

$set['request']['contacts']['add'][]=$contact;

#Формируем ссылку для запроса
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';
$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
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($set));
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
CheckCurlResponse($code);

/**
 * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
 * нам придётся перевести ответ в формат, понятный PHP
 */
$Response=json_decode($out,true);
$contact_id=$Response['response']['contacts']['add'][0]['id'];

$contacts['request']['contacts']['update']=array(
  array(
  'id'=>$contact_id,
	'last_modified' => time(),
    'custom_fields'=>array(
      #Проект
      array(
					'id'=>$custom_fields['EMAIL'],
					'values'=>array(
						array(
							'value'=>$data['email'],
							'enum'=>'WORK'
						)
					)
				)
     )
  ) //возможно лишняя запятая
);

#Формируем ссылку для запроса
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';

$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
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($contacts));
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную

// Ставим задачу
$tasks['request']['tasks']['add']=array(
  array(
    'element_id'=>$contact_id,// ID созданной сделки ($lead_id) или контакта ($contact_id)
    'element_type'=>1, // Type: 1 - контакт, 2 - сделка
    'task_type'=>52426, #Встреча
    // 'text'=>'Заявка с '. $site_name . ' ' . $data['massage'] . ' ' . $data['action'] ,
    'text'=>'Заявка с ' . $site_name . ' ' . $data['action'] . ' ' . $data['massage'],
	  'responsible_user_id'=>$manager,
    // пользователь Дима
    'complete_till'=>time()+600,// 10 минут на выполнение

  )
);

#Формируем ссылку для запроса
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/tasks/set';

$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
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($tasks)); // Encode array in JSON format
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
//curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
curl_close($curl);

//
// const VERSION = '0.0.1';
//
// private static $api_key = 'БЛА БЛА БЛА';
// private static $list_id = 'b36623ad35';
// private static $test_list_id = 'fdbb5d7d9f';
// private static $email;
// private static $is_test_subscribe = false;
//
//
// static function initialize($config=array())
// {
//   CMS::add_component('MailChimpSync', new CMS_Mapper());
// }
//
//
// private static function get_datacenter_code()
// {
//   return preg_match('{-(.*)$}', self::$api_key, $m) ? $m[1] : false;
// }
//
// private static function get_api_url($section, $method)
// {
//   if ($datacenter_code = self::get_datacenter_code()) {
//       $base_api_url = 'https://'.$datacenter_code.'.api.mailchimp.com/2.0/';
//       return $base_api_url.$section.'/'.$method;
//   }
//   return false;
// }
//
//
// public static function build_mailchimp_object()
// {
//   $result = new stdClass();
//   $result->apikey = self::$api_key;
//   $result->id = self::$is_test_subscribe ? self::$test_list_id : self::$list_id;
//   $result->email = self::build_mailchimp_email_object();
//
//   $result_merge_vars = new stdClass();
//   $result_merge_vars->mc_language = 'ru';
//
//   $result->merge_vars = $result_merge_vars;
//   return $result;
// }
//
//
// public static function build_mailchimp_email_object()
// {
//   $email_obj = new stdClass();
//   $email_obj->email = self::$email;
//   $email_obj->euid = md5(self::$email);
//   $email_obj->leid = self::$list_id;
//   return $email_obj;
// }

//unisender cUrl subscrible - подписка

// Ваш ключ доступа к API (из Личного Кабинета)
$api_key = "БЛА БЛА БЛА";

// Данные о новом подписчике
$user_email = $_POST['email'];
$user_name = $_POST['name'];

$user_lists = "482917";
$user_tag = "noread";
$str= $_POST['phone'];
$phone= preg_replace('/[^0-9]/', '', $str);

// Создаём POST-запрос
$POST = array (
  'api_key' => $api_key,
  'list_ids' => $user_lists,
  'fields[email]' => $user_email,
  'fields[Name]' => $user_name,
  'fields[phone]' => $phone,
  'tags' => $user_tag,
  'double_optin' => '3',
  'overwrite' => '1'
);

// Устанавливаем соединение
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $POST);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_URL,
            'https://us1.api.mailchimp.com/3.0/lists');
$result = curl_exec($ch);

if ($result) {
  // Раскодируем ответ API-сервера
  $jsonObj = json_decode($result);

  if(null===$jsonObj) {
    // Ошибка в полученном ответе
    //echo "Invalid JSON";

  }
  elseif(!empty($jsonObj->error)) {
    // Ошибка добавления пользователя
   // echo "An error occured: " . $jsonObj->error . "(code: " . $jsonObj->code . ")";

  } else {
    // Новый пользователь успешно добавлен
    //echo "Added. ID is " . $jsonObj->result->person_id;

  }
} else {
  // Ошибка соединения с API-сервером
  //echo "API access error";
}

?>
  • Вопрос задан
  • 3616 просмотров
Пригласить эксперта
Ответы на вопрос 1
@neon51r
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/list?query=test@mail.com';

сначала проверяем его по почте, или номеру телефону. если в ответе придет 204 - создаем контакты.
Если их много - обрабатываем дальше, и уже к нужному - добавляем задачу и так далее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы