Git Product home page Git Product logo

amocrm-api-php's People

Contributors

amodmax avatar bessudnov avatar bigperson avatar bmoiseenko avatar bolid1 avatar catsys avatar constantable avatar dmitryberdnikov avatar dnklbgn avatar dotroo avatar dvishnevskij avatar kitos7 avatar lmcsu avatar m4tlch avatar magnum79 avatar makeroi avatar max-kut avatar mbelostropov avatar mvsvolkov avatar ndhfs avatar noweasily avatar nzhirkovamo avatar olapsema avatar rnixik avatar sawered avatar sevaktorosyan avatar soul-rise avatar vadimkorchagin avatar wischerdson avatar zvookiejoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

amocrm-api-php's Issues

класс /src/AmoCRM/Filters/TasksFilter не наследуется от BaseEntityFilter

На данный момент класс TasksFilter не наследуется от BaseEntityFilter из-за этого при попытке получения задач с использованием фильтра $apiClient->tasks()->get({объект TasksFilter}) будет падать ошибка, что ожидался BaseEntityFilter, а пришло TasksFilter

Пример кода:

$filter = new TasksFilter();
$filter->setIds([10592381]);
$task = $apiClient->tasks()->get($filter)->first();

При выполнении кода, скрипт упадет с ошибкой:

/test.php - Uncaught TypeError: Argument 1 passed to AmoCRM\EntitiesServices\BaseEntity::get() must be an instance of AmoCRM\Filters\BaseEntityFilter or null, instance of AmoCRM\Filters\TasksFilter given, called in /home/akurnosov/Документы/testAmoCRM/test.php on line 42 and defined in /home/akurnosov/Документы/testAmoCRM/vendor/amocrm/amocrm-api-library/src/AmoCRM/EntitiesServices/BaseEntity.php:76
Stack trace:
#0 /home/akurnosov/Документы/testAmoCRM/test.php(42): AmoCRM\EntitiesServices\BaseEntity->get(Object(AmoCRM\Filters\TasksFilter))
#1 {main}
  thrown in /home/akurnosov/Документы/testAmoCRM/vendor/amocrm/amocrm-api-library/src/AmoCRM/EntitiesServices/BaseEntity.php on line 76

Исправляется путем замены в /src/AmoCRM/Filters/TasksFilter

class TasksFilter на
class TasksFilter extends BaseEntityFilter implements HasPagesInterface

Ошибка при вызове метода getCurrent() у account

Вот основной текст ошибки: 'Argument 1 passed to AmoCRM\Models\AccountModel::setCreatedAt() must be an instance of Carbon\Carbon, integer given, called in...'

Вот небольшой кусок stacktrace:

Stack trace:
#0 /Users/romanmazyrin/PhpstormProjects/mazdata/vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/AccountModel.php(280): AmoCRM\Models\AccountModel->setCreatedAt(1550501841)
#1 /Users/romanmazyrin/PhpstormProjects/mazdata/vendor/amocrm/amocrm-api-library/src/AmoCRM/EntitiesServices/Account.php(68): AmoCRM\Models\AccountModel::fromArray(Array)
#2 /Users/romanmazyrin/PhpstormProjects/mazdata/commands/HelloController.php(21): AmoCRM\EntitiesServices\Account->getCurrent(Array)

Проблема на лицо, то что передается в метод значение не того типа. Но проблема в том, что вчера работало нормально и не ругалось. Что за магия?

Ответ на запрос к серверу приходит нормальный, все ок.

Версия PHP 7.2.31, (cli)

"illuminate/support": "5.*"

Добрый день.

Из-за "устаревшей" зависимости не удается установить библиотеку в рамках Laravel 6.

"illuminate/support": "5.*"

Может имеет смысл проверить совместимость с более актуальными версиями "illuminate/support" и поправить composer.json?

illuminate/support": "^5.0 || ^6.0 или "illuminate/support": "^5.0 || ^6.0 || ^7.0"

Заранее спасибо.

Ошибка в именах параметров

В классе AccountModel (строки 344-355)

if (isset($account[AmoCRMApiRequest::EMBEDDED][self::DATETIME_SETTINGS])) {
            $dateTimeSettings = $account[AmoCRMApiRequest::EMBEDDED][self::DATETIME_SETTINGS];
            $accountModel->setDatetimeSettings(new DateTimeSettings(
                $dateTimeSettings['date_pattern'],
                $dateTimeSettings['short_date_pattern'],
                $dateTimeSettings['short_time_pattern'],
                $dateTimeSettings['date_formant'],
                $dateTimeSettings['time_format'],
                $dateTimeSettings['timezone'],
                $dateTimeSettings['timezone_offset']
            ));
        }

заменить на

if (isset($account[AmoCRMApiRequest::EMBEDDED][self::DATETIME_SETTINGS])) {
            $dateTimeSettings = $account[AmoCRMApiRequest::EMBEDDED][self::DATETIME_SETTINGS];
            $accountModel->setDatetimeSettings(new DateTimeSettings(
                $dateTimeSettings['date_pattern'],
                $dateTimeSettings['short_date_pattern'],
                $dateTimeSettings['short_time_pattern'],
                $dateTimeSettings['date_format'],
                $dateTimeSettings['time_format'],
                $dateTimeSettings['timezone'],
                $dateTimeSettings['timezone_offset']
            ));
        }

ошибка в строке $dateTimeSettings['date_formant'],

Ошибка в модели \AmoCRM\Models\Unsorted\BaseUnsortedModel

Запрос на добавление в Неразобранное формируется через метод toApi() модели \AmoCRM\Models\Unsorted\BaseUnsortedModel
В ней сущность заявки передаётся в параметре lead, хотя в документации API сказано, что сущность заявки передаётся в параметре leads.
В итоге при попытке отправить заявку через существующую модель, базирующуюся на BaseUnsortedModel заявка в Неразобранном создаётся, а вот сущность сделки - нет, из-за того, что отправляется в неверном параметре.

Если заменить в методе toApi() строку $result[AmoCRMApiRequest::EMBEDDED]['lead'] = $this->getLead()->toApi($requestId); на строку $result[AmoCRMApiRequest::EMBEDDED]['leads'][] = $this->getLead()->toApi($requestId); А так же в методе toArray() заменить $result['lead'] на $result['leads'], то всё работает и добавляется корректно

Упростить работу с доп полями

Сейчас для работы с доп полями необходимо выстраивать достаточно сложную иерархию объектов.

Необходимо придумать и реализовать, как можно упростить эту работы, вероятно спрятать часть этой иерархии под капот.

Ожидается что-то подобное, а может быть и проще

$lead->getCustomFieldsValues()->getBy('name', 'поле')->getValue();

$customFieldsValuesCollection = new CustomFieldsValuesCollection();
$cfv = new CustomFieldValue();
$cfv
    ->setId(123)
    ->setValue(123);

$customFieldsValuesCollection->add($cfv);
$lead->setCustomFieldsValues($cfv);

При заполнении нескольких дополнительных полей, не корректно добавляются значения

При заполнении дополнительных полей, в коллекцию leadCustomFieldsValues добавляется несколько сущностей дополнительных полей, но при этом все они равны последней сущности. (Значения и id одинаковы)

$textCustomFieldValueModel = new TextCustomFieldValuesModel();
$leadCustomFieldsValues = new CustomFieldsValuesCollection();

$textCustomFieldValueModel->setFieldId('56309');
$textCustomFieldValueModel->setValues(
(new TextCustomFieldValueCollection())
->add((new TextCustomFieldValueModel())->setValue('132456'))
);
$leadCustomFieldsValues->add($textCustomFieldValueModel);

$textCustomFieldValueModel->setFieldId('58767');
$textCustomFieldValueModel->setValues(
(new TextCustomFieldValueCollection())
->add((new TextCustomFieldValueModel())->setValue('756'))
);
$leadCustomFieldsValues->add($textCustomFieldValueModel);

var_dump($leadCustomFieldsValues); die();

Ниже привожу var_dump созданной коллекции CustomField

object(AmoCRM\Collections\CustomFieldsValuesCollection)#141 (1) {
["data":protected]=>
array(2) {
[0]=>
object(AmoCRM\Models\CustomFieldsValues\TextCustomFieldValuesModel)#144 (4) {
["fieldId":protected]=>
int(58767)
["fieldCode":protected]=>
NULL
["fieldName":protected]=>
NULL
["values":protected]=>
object(AmoCRM\Models\CustomFieldsValues\ValueCollections\TextCustomFieldValueCollection)#133 (1) {
["data":protected]=>
array(1) {
[0]=>
object(AmoCRM\Models\CustomFieldsValues\ValueModels\TextCustomFieldValueModel)#134 (1) {
["value":protected]=>
string(3) "756"
}
}
}
}
[1]=>
object(AmoCRM\Models\CustomFieldsValues\TextCustomFieldValuesModel)#144 (4) {
["fieldId":protected]=>
int(58767)
["fieldCode":protected]=>
NULL
["fieldName":protected]=>
NULL
["values":protected]=>
object(AmoCRM\Models\CustomFieldsValues\ValueCollections\TextCustomFieldValueCollection)#133 (1) {
["data":protected]=>
array(1) {
[0]=>
object(AmoCRM\Models\CustomFieldsValues\ValueModels\TextCustomFieldValueModel)#134 (1) {
["value":protected]=>
string(3) "756"
}
}
}
}
}
}

Помогите решить данную проблему. Возможно это баг?

Laravel Framework 7.0, problem ramsey 4.x (amocrm/amocrm-api-library 0.3.1 requires ramsey/uuid 3.*)

Проблема при установке amoCRM API Library в проект на Laravel 7.0

 Problem 1                                                                                        
   - Installation request for amocrm/amocrm-api-library ^0.3.1 -> satisfiable by amocrm/amocrm-api
   - Conclusion: remove ramsey/uuid 4.0.1                                                         
   - Conclusion: don't install ramsey/uuid 4.0.1                                                  
   - amocrm/amocrm-api-library 0.3.1 requires ramsey/uuid 3.* -> satisfiable by ramsey/uuid[3.0.0,
0, 3.4.0, 3.4.1, 3.5.0, 3.5.1, 3.5.2, 3.6.0, 3.6.1, 3.7.0, 3.7.1, 3.7.2, 3.7.3, 3.8.0, 3.9.0, 3.9.
   - Can only install one of: ramsey/uuid[3.7.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.7.1, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.7.2, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.7.3, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.8.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.9.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.9.1, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.9.2, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.9.3, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.x-dev, 4.0.1].                                        
   - Can only install one of: ramsey/uuid[3.0.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.0.0-alpha1, 4.0.1].                                   
   - Can only install one of: ramsey/uuid[3.0.0-alpha2, 4.0.1].                                   
   - Can only install one of: ramsey/uuid[3.0.0-alpha3, 4.0.1].                                   
   - Can only install one of: ramsey/uuid[3.0.0-beta1, 4.0.1].                                    
   - Can only install one of: ramsey/uuid[3.0.1, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.1.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.2.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.3.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.4.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.4.1, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.5.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.5.1, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.5.2, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.6.0, 4.0.1].                                          
   - Can only install one of: ramsey/uuid[3.6.1, 4.0.1].                                          
   - Installation request for ramsey/uuid (locked at 4.0.1) -> satisfiable by ramsey/uuid[4.0.1]. 

Ошибка при попытке вызова ContactModel->toArray()

Вот такой кусок кода:

$newContact = new ContactModel();
$newContact
    ->setName($name)
    ->setResponsibleUserId(123)
    ->setCustomFieldsValues($customFieldsCollection);
var_dump($newContact->toArray());

Возникает ошибка:

Exception 'TypeError' with message 'Return value of AmoCRM\Models\ContactModel::getCustomers() must be an instance of AmoCRM\Collections\Customers\CustomersCollection, null returned'

Вот stacktrace небольшой:

Exception 'TypeError' with message 'Return value of AmoCRM\Models\ContactModel::getCustomers() must be an instance of AmoCRM\Collections\Customers\CustomersCollection, null returned'

in /Users/romanmazyrin/PhpstormProjects/mazdata/vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/ContactModel.php:452

Stack trace:
#0 /Users/romanmazyrin/PhpstormProjects/mazdata/vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/ContactModel.php(618): AmoCRM\Models\ContactModel->getCustomers()
#1 /Users/romanmazyrin/PhpstormProjects/mazdata/models/AmocrmCustomIntegrations/DeltasalesIntegration.php(136): AmoCRM\Models\ContactModel->toArray()

Там очевидно, что интерпретатор ругается на возврат null вместо указанного типа, ведь при построении контакта поле customers я не трогаю и оно остается null.

Вот проблемный код:

Файл ContactModel.php, строка 452

/**
     * @return CustomersCollection
     */
    public function getCustomers(): CustomersCollection
    {
        return $this->customers;
    }

Users->get приводит к RightModel::setStatusRights TypeError

Expected Behavior

Вызов метода get сервиса users возвращает коллекцию пользователей аккаунта

Current Behavior

При попытке получения списка пользователей с помощью вызова метода get у экземпляра класса AmoCRM\EntitiesServices\Users происходит ошибка

TypeError: Argument 1 passed to AmoCRM\Models\Rights\RightModel::setStatusRights() must be of the type array, null given, called in /.../amocrm/amocrm-api-library/src/AmoCRM/Models/Rights/RightModel.php on line 446 and defined in /.../amocrm/amocrm-api-library/src/AmoCRM/Models/Rights/RightModel.php:294
Stack trace:
0 /.../amocrm/amocrm-api-library/src/AmoCRM/Models/Rights/RightModel.php(446): AmoCRM\Models\Rights\RightModel->setStatusRights(NULL)
1 /.../amocrm/amocrm-api-library/src/AmoCRM/Models/UserModel.php(76): AmoCRM\Models\Rights\RightModel::fromArray(Array)
2 /.../amocrm/amocrm-api-library/src/AmoCRM/Collections/BaseApiCollection.php(53): AmoCRM\Models\UserModel::fromArray(Array)
3 [internal function]: AmoCRM\Collections\BaseApiCollection::AmoCRM\Collections{closure}(Array)
4 /.../amocrm/amocrm-api-library/src/AmoCRM/Collections/BaseApiCollection.php(50): array_map(Object(Closure), Array)
5 /.../amocrm/amocrm-api-library/src/AmoCRM/EntitiesServices/BaseEntity.php(103): AmoCRM\Collections\BaseApiCollection::fromArray(Array)
6 /.../amocrm/amocrm-api-library/src/AmoCRM/EntitiesServices/BaseEntity.php(89): AmoCRM\EntitiesServices\BaseEntity->createCollection(Array)
7 /...: AmoCRM\EntitiesServices\BaseEntity->get()

Environment

PHP 7.3
amoCRM API Client 0.1.1
в аккаунте один пользователь - создатель\администратор аккаунта

Possible sollution

В RightModel::fromArray добавить проверку на !empty($rights['status_rights']) перед вызовом setStatusRights

Ошибка при вызове CustomFieldsGroupService->get();

Вот какой кусок кода, обычный самый:

$cfgService = $user->getAmocrmApiClient()->customFieldGroups(EntityTypesInterface::LEADS);
$groups = $cfgService->get();

При этом вылезает ошибка

Exception 'Error' with message 'Cannot use object of type AmoCRM\Models\CustomFieldGroupModel as array'

in /Users/romanmazyrin/PhpstormProjects/mazdata/vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/CustomFieldGroupModel.php:55

Переходим в файл CustomFieldGroupModel.php на строчку 55, и там кажется реально бага:

/**
     * @param array $customFieldGroup
     *
     * @return self
     */
    public static function fromArray(array $customFieldGroup): self
    {
        if (empty($customFieldGroup['id'])) {
            throw new InvalidArgumentException('Custom field group id is empty in ' . json_encode($customFieldGroup));
        }

        $customFieldGroupModel = new self();

        $customFieldGroupModel
            ->setId($customFieldGroup['id'])
            ->setName($customFieldGroup['name'])
            ->setSort($customFieldGroup['sort'])
            ->setIsPredefined($customFieldGroup['is_predefined'])
            ->setEntityType($customFieldGroupModel['entity_type']); // ВОТ ЭТО 55 СТРОКА.
//Тут должно быть $customFieldGroup, а не $customFieldGroupModel.
//Если поставить $customFieldGroup - ошибка исчезает.

        return $customFieldGroupModel;
    }

Method 'calls' error: "path" => "request_id", "detail" => "This value should not be null."

Thank you for making this beautiful library. I'm working on AmoCRM 'add calls' integration. Using your library as you shown in examples/calls.php got error "path" => "request_id", "detail" => "This value should not be null.". The solution I ended up looking at CallModel() and at RequestIdTrait() is to add one more method ->setRequestId('myId') when creating $call object:

...
$call
    ->setPhone('+7912312321')
    ->setCallStatus(CallInterface::CALL_STATUS_SUCCESS_CONVERSATION)
    ->setCallResult('Разговор состоялся')
    ->setDuration(148)
    ->setUniq(Uuid::uuid4())
    ->setSource('integration name')
    ->setDirection(CallInterface::CALL_DIRECTION_IN)
    ->setLink('https://example.test/test.mp3')
    ->setRequestId('myId');
...

Результат запроса при добавлении Неразобранного

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

Ошибка при добавлении/обновлении значения доп. поля контакта типа Multitext

Current Behavior

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

  1. Если в MultitextCustomFieldValueModel указано значение поля enum, при вызове метода добавления\обновления контакта апи возвращает ошибку
    {"validation-errors":[{"request_id":"0","errors":[{"code":"FieldNotExpected","path":"custom_fields_values.0.values.0.enum","detail":"This field was not expected."}]}],"title":"Bad Request","type":"https://httpstatus.es/400","status":400,"detail":"Request validation failed"}
  2. Если у MultitextCustomFieldValueModel попытаться не выставлять/обнулить значение поля enum, во время вызова Contacts->add/Contacts->update при подготовке данных для отправки к API в результате MultitextCustomFieldValueModel->toArray возникает ошибка
    TypeError: Return value of AmoCRM\Models\CustomFieldsValues\ValueModels\MultitextCustomFieldValueModel::getEnum() must be of the type string, null returned in /.../amocrm/amocrm-api-library/src/AmoCRM/Models/CustomFieldsValues/ValueModels/MultitextCustomFieldValueModel.php:22
  3. Если подправить тип поля enum со стринга на обнуляемый стринг, ошибки, описанной в пункте 2, удается избежать, однако в запросе на добавление/обновление контакта этот enum
    все равно передается со значением null, что вновь приводит к ошибке из пункта 1
  4. Если при сериализации убрать из запроса поле enum (оставить enum_id и value, как описано в документации в разделе "Редактирование контактов или компаний") - запрос выполняется без ошибки, только вот номер телефона не обновляется
  5. Если при сериализации убрать из запроса поля enum и enum_id, оставив только value, запрос выполняется без ошибок, телефон обновляется

Environment

PHP 7.3
amoCRM API Client 0.1.1

Mistake in CallModel

In the \Models\CallModel.php you forgot implement HasIdInterface what which leads to a critical error.
image

Проблема с добавлением сделки вместе с тегами

Пытаюсь добавить сделку с тегами, делаю по примеру из этого файла

Выяснилось, что сервер не хочет принимать запрос на добавление, когда видит поле request_id у тега. Текст ошибки:

Response has validation errors

Вот отрывок из getLastRequestInfo() исключения:

{"validation-errors":[{"request_id":"0","errors":[{"code":"FieldNotExpected","path":"_embedded.tags.0.request_id","detail":"This field was not expected."},{"code":"FieldNotExpected","path":"_embedded.tags.1.request_id","detail":"This field was not expected."}]}],"title":"Bad Request","type":"https://httpstatus.es/400","status":400,"detail":"Request validation failed"}

Вот пример кода на добавление:

$tags = $apiClient->tags(EntityTypesInterface::LEADS)->get((new TagsFilter())->setQuery($tagName));
if (!is_null($tags)) {
    $tagsCollection->add($tags->getBy("name", $tagName));
} else {
    $newTag = new TagModel();     
    $newTag->setName($tagName);
    $newTag = $apiClient->tags(EntityTypesInterface::LEADS)->addOne($newTag);
    $tagsCollection->add($newTag);
}

...

$newLead = new LeadModel();
$newLead->setName($leadName)->setTags($tagsCollection);
return $leadsService->addOne($newLead)->getId();

Кнопка не прорисовывается (AmoCRM\Exceptions\BadTypeException: Invalid color selected)

Пример кода для прорисовки кнопки не рабочий. Код выбрасывает исключение BadTypeException
Fatal error: Uncaught AmoCRM\Exceptions\BadTypeException: Invalid color selected in ... vendor\amocrm\amocrm-api-library\src\AmoCRM\OAuth\AmoCRMOAuth.php:231
, так как в условиях
if (isset($options['color']) && !in_array($options['color'], self::BUTTON_COLORS, true))
in_array нужно заменить на array_key_exists:
if (isset($options['color']) && !array_key_exists($options['color'], self::BUTTON_COLORS))

Проблема с использованием коллекции тегов

Пытаюсь добавить в контакт коллекцию сделок, в итоге ни один из тегов не попадает в CRM, хотя поле 'tags' модели 'ContactModel' заполнено корректно. Сущность создается, так что исключение не выбрасывается.

Вот код:

      $newContactModel = new ContactModel();
      $newContactModel->setName( 'Some name' );

      $tagModel = new TagModel();
      $tagModel->setName( '123' );

      $tagModel2 = new TagModel();
      $tagModel2->setName( '123123' );

      $tagsCollection = new TagsCollection();
      $tagsCollection->add($tagModel);
      $tagsCollection->add($tagModel2);

      $newContactModel->setTags( $tagsCollection );

      $contactsCollection = new ContactsCollection();
      $contactsCollection->add($newContactModel);
      return $apiClient->contacts()->add($contactsCollection);

$newContact:

object(AmoCRM\Collections\ContactsCollection)#33 (3) { ["data":protected]=> array(1) { [0]=> object(AmoCRM\Models\ContactModel)#29 (20) { ["id":protected]=> int(30072279) ["name":protected]=> string(9) "Some name" ["firstName":protected]=> NULL ["lastName":protected]=> NULL ["responsibleUserId":protected]=> NULL ["groupId":protected]=> NULL ["createdBy":protected]=> NULL ["updatedBy":protected]=> NULL ["createdAt":protected]=> NULL ["updatedAt":protected]=> NULL ["closestTaskAt":protected]=> NULL ["accountId":protected]=> NULL ["tags":protected]=> object(AmoCRM\Collections\TagsCollection)#32 (3) { ["data":protected]=> array(2) { [0]=> object(AmoCRM\Models\TagModel)#30 (3) { ["id":protected]=> NULL ["name":protected]=> string(3) "123" ["requestId":protected]=> NULL } [1]=> object(AmoCRM\Models\TagModel)#31 (3) { ["id":protected]=> NULL ["name":protected]=> string(6) "123123" ["requestId":protected]=> NULL } } ["nextPageLink":"AmoCRM\Collections\TagsCollection":private]=> NULL ["prevPageLink":"AmoCRM\Collections\TagsCollection":private]=> NULL } ["customFieldsValues":protected]=> NULL ["isMain":protected]=> NULL ["company":protected]=> NULL ["leads":protected]=> NULL ["customers":protected]=> NULL ["catalogElementsLinks":protected]=> NULL ["requestId":protected]=> string(1) "0" } } ["nextPageLink":"AmoCRM\Collections\ContactsCollection":private]=> NULL ["prevPageLink":"AmoCRM\Collections\ContactsCollection":private]=> NULL }

Invalid http status (500) при вызове метода "/api/v4/users"

При попытке вызова метода get сервиса Users

$apiClient->users()->get();

происходит исключение Invalid http status (500)

'last_response' => '{"title":"Internal Server Error","type":"https://httpstatus.es/500","status":500,"detail":"An unknown error occurred."}', 
'last_response_code' => 500, 
'last_request_id' => '554647960af2bdf878016309d0d3e5fc'

EntityNotes->getOne возвращает NoteModel , игнорируя note_type и params

EnitiyNotes->getOne возвращает объекта класса NoteModel независимо от принадлежности примечания тому или иному типу.

$response = $this->request->get($this->getMethodWithParent($parentId, $id), $queryParams);
$class = static::ITEM_CLASS;
/** @var BaseApiModel $entity */
$entity = new $class();
$entity = !empty($response) ? $entity->fromArray($response) : null;

Хотелось бы, чтоб EnitiyNotes->getOne работал по аналогии с CustomFields->getOne - объект создавался с помощью соотв. фабрики (NoteFactory::createForType)

$response = $this->request->get($this->getMethod() . '/' . $id, $queryParams);
$collection = !empty($response) ? $this->collectionClass::fromArray([$response]) : null;
return !empty($response) ? $collection->first() : null;

Invalid http status (405) при добавлении неразобранного

При использовании кода для добавления неразобранного

        $unsorted = new FormUnsortedModel();
        $unsorted->setSourceUid('vv_partner_reg');
        $unsorted->setSourceName('VV partner registration');
        $unsorted->setPipelineId(self::PIPELINE_ID_VV);

        $metadata = new FormsMetadata();
        $metadata->setFormId('vv_registration_form');
        $metadata->setFormName('vv registration form');
        $unsorted->setMetadata($metadata);

        /// `$contact` does not matter, data is in output
        $unsorted->setContacts(ContactsCollection::make([$contact]));

        $lead = new LeadModel();
        $lead->setPipelineId(self::PIPELINE_ID_VV);
        $lead->setName("Регистрация рекламодателя на VV №{$partner->id}");
        $unsorted->setLead($lead);

        try {
            $unsortedService = $this->apiClient->unsorted();
            $createdUnsorted = $unsortedService->addOne($unsorted);
        } catch (AmoCRMApiException $ex) {
            throw new AmoCrmException(
                $ex->getMessage() . ': ' . $ex->getCode() . ': ' . json_encode($ex->getLastRequestInfo()),
                $ex->getCode(),
                $ex
            );
        }

получаю исключение от api/v4/leads/unsorted:

Invalid http status: 405: {"last_http_method":"POST","last_method":"https://XXX.amocrm.ru/api/v4/leads/unsorted","last_body":[{"source_name":"VV partner registration","source_uid":"vv_partner_reg","pipeline_id":3388582,"metadata":{"form_id":"vv_registration_form","form_name":"vv registration form","form_page":null,"ip":null,"form_sent_at":1594357697,"referer":null,"visitor_uid":null},"_embedded":{"lead":{"name":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0434\u0430\u0442\u0435\u043b\u044f \u043d\u0430 VV \u21161","pipeline_id":3388582,"request_id":"0"},"contacts":[{"name":"XXXXX","custom_fields_values":[{"field_id":300041,"field_code":null,"values":[{"value":"XXXXXX","enum_id":428047,"enum_code":"WORK"}]},{"field_id":300039,"field_code":null,"values":[{"value":"XXXXXX","enum_id":428039,"enum_code":"MOB"}]}],"request_id":"0"}]},"request_id":"0"}],"last_query_params":[],"last_response":"","last_response_code":405,"last_request_id":"67ea12d844f921474c510308f4df0194","jquery_call":"\n$.ajax({\n url: "https://XXX.amocrm.ru/api/v4/leads/unsorted",\n data: JSON.stringify([{"source_name":"VV partner registration","source_uid":"vv_partner_reg","pipeline_id":3388582,"metadata":{"form_id":"vv_registration_form","form_name":"vv registration form","form_page":null,"ip":null,"form_sent_at":1594357697,"referer":null,"visitor_uid":null},"_embedded":{"lead":{"name":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0434\u0430\u0442\u0435\u043b\u044f \u043d\u0430 VV \u21161","pipeline_id":3388582,"request_id":"0"},"contacts":[{"name":"xxx","custom_fields_values":[{"field_id":300041,"field_code":null,"values":[{"value":"xxx","enum_id":428047,"enum_code":"WORK"}]},{"field_id":300039,"field_code":null,"values":[{"value":"xxx","enum_id":428039,"enum_code":"MOB"}]}],"request_id":"0"}]},"request_id":"0"}]),\n type: "POST",\n contentType: "application/json"\n});","curl_call":"curl "https://xxx.amocrm.ru/api/v4/leads/unsorted" -X "POST" -d"0%5Bsource_name%5D=VV+partner+registration&0%5Bsource_uid%5D=vv_partner_reg&0%5Bpipeline_id%5D=3388582&0%5Bmetadata%5D%5Bform_id%5D=vv_registration_form&0%5Bmetadata%5D%5Bform_name%5D=vv+registration+form&0%5Bmetadata%5D%5Bform_sent_at%5D=1594357697&0%5B_embedded%5D%5Blead%5D%5Bname%5D=%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%BE%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8F+%D0%BD%D0%B0+VV+%E2%84%961&0%5B_embedded%5D%5Blead%5D%5Bpipeline_id%5D=3388582&0%5B_embedded%5D%5Blead%5D%5Brequest_id%5D=0&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bname%5D=xxx&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B0%5D%5Bfield_id%5D=300041&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B0%5D%5Bvalues%5D%5B0%5D%5Bvalue%5D=xxx&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B0%5D%5Bvalues%5D%5B0%5D%5Benum_id%5D=428047&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B0%5D%5Bvalues%5D%5B0%5D%5Benum_code%5D=WORK&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B1%5D%5Bfield_id%5D=300039&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B1%5D%5Bvalues%5D%5B0%5D%5Bvalue%5D=%2Bxxx&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B1%5D%5Bvalues%5D%5B0%5D%5Benum_id%5D=428039&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Bcustom_fields_values%5D%5B1%5D%5Bvalues%5D%5B0%5D%5Benum_code%5D=MOB&0%5B_embedded%5D%5Bcontacts%5D%5B0%5D%5Brequest_id%5D=0&0%5Brequest_id%5D=0"","timestamp":1594357698}

Контактные данные и домен заменены на xxx.

Неразобранное не создается.
При этом усешно удается отдельно создавать контакты и лиды.
В документации для двух других ресурсов 405 описано как неправильный метод.
Почему здесь получаю такой ответ?

PHP 7.3 LeadsFilter::setLimit TypeError

Expected Behavior

Вызов setLimit устанавливает значение для свойства limit, возвращает текущий объект

Current Behavior

При попытке вызова метода setLimit у экземпляра класса LeadsFilter происходит ошибка

TypeError: Return value of AmoCRM\Filters\LeadsFilter::setLimit() must be an instance of AmoCRM\Filters\Traits\PagesFilterTrait, instance of AmoCRM\Filters\LeadsFilter returned in /.../amocrm/amocrm-api-library/src/AmoCRM/Filters/Traits/PagesFilterTrait.php:44

Environment

PHP 7.3

Method 'calls' error: "Entity not found"

Thank you for this nice AmoCRM library. I'm trying to use 'calls' following the example/calls.php method with request:

...
$call
    ->setPhone('+37067052156')
    ->setCallStatus(CallInterface::CALL_STATUS_SUCCESS_CONVERSATION)
    ->setCallResult('Разговор состоялся')
    ->setDuration(148)
    ->setUniq(Uuid::uuid4())
    ->setSource('integrationName')
    ->setDirection(CallInterface::CALL_DIRECTION_IN)
    ->setLink('https://example.test/test.mp3')
    ->setRequestId(0);
...

Got exception:

AmoCRM\Exceptions\AmoCRMApiException^
    #errorCode: 400
  #errorCode: 400
  #description: ""
  #title: "Invalid http status"
  #lastRequestInfo: array:10 [
    "last_http_method" => "POST"
    "last_method" => "https://testuojutelia.amocrm.ru/api/v4/calls"
    "last_body" => array:1 [
      0 => array:9 [
        "uniq" => "b3429754-faf8-4ff1-b797-4c92687861b4"
        "duration" => 148
        "source" => "integrationName"
        "link" => "https://example.test/test.mp3"
        "phone" => "+37067052156"
        "call_result" => "Разговор состоялся"
        "call_status" => 4
        "direction" => "inbound"
        "request_id" => "0"
      ]
    ]
    "last_query_params" => []
    "last_response" => """
      {\n
          "_total_items": 0,\n
          "errors": [\n
              {\n
                  "title": "Entity not found",\n
                  "status": 263,\n
                  "detail": "Entity not found",\n
                  "request_id": "0"\n
              }\n
...

$apiClient-users()->get() возвращает не все поля

При получении пользователей возвращаются юзеры без полей:
is_free, is_admin, is_active, group_id, role_id

Решение:
В классе RightModel:

    /**
     * @var bool|null
     */
    protected $isAdmin;

    /**
     * @var bool|null
     */
    protected $isActive;


    /**
     * @return bool|null
     */
    public function getIsAdmin(): ?bool
    {
        return $this->isAdmin;
    }

    /**
     * @param bool|null $isAdmin
     *
     * @return RightModel
     */
    public function setIsAdmin(?bool $isAdmin): RightModel
    {
        $this->isAdmin = $isAdmin;

        return $this;
    }

    /**
     * @return bool|null
     */
    public function getIsActive(): ?bool
    {
        return $this->isActive;
    }

    /**
     * @param bool|null $isActive
     *
     * @return RightModel
     */
    public function setIsActive(?bool $isActive): RightModel
    {
        $this->isActive = $isActive;

        return $this;
    }


    /**
     * @param array $rights
     *
     * @return self
     */
    public static function fromArray(array $rights): self
    {
        $model = new self();

        $model
            ->setCatalogAccess($rights['catalog_access'])
            ->setMailAccess($rights['mail_access'])
            ->setLeadsRights($rights['leads'])
            ->setContactsRights($rights['contacts'])
            ->setCompaniesRights($rights['companies'])
            ->setTasksRights($rights['tasks'])
            ->setIsAdmin($rights['is_admin'])
            ->setIsFree($rights['is_free'])
            ->setIsActive($rights['is_active'])
            ->setGroupId($rights['group_id'])
            ->setRoleId($rights['role_id']);

        if (!empty($rights['status_rights'])) {
            $model->setStatusRights($rights['status_rights']);
        }

        return $model;
    }


    /**
     * @inheritDoc
     */
    public function toArray(): array
    {
        $result = [
            'leads' => $this->getLeadsRights(),
            'contacts' => $this->getContactsRights(),
            'companies' => $this->getCompaniesRights(),
            'tasks' => $this->getTasksRights(),
            'status_rights' => $this->getStatusRights(),
            'mail_access' => $this->getMailAccess(),
            'catalog_access' => $this->getCatalogAccess(),
        ];

        if (!is_null($this->getRoleId())) {
            $result['role_id'] = $this->getRoleId();
        }

        if (!is_null($this->getIsFree())) {
            $result['is_free'] = $this->getIsFree();
        }

        if (!is_null($this->getIsAdmin())) {
            $result['is_admin'] = $this->getIsAdmin();
        }

        if (!is_null($this->getIsActive())) {
            $result['is_active'] = $this->getIsActive();
        }

        if (!is_null($this->getGroupId())) {
            $result['group_id'] = $this->getGroupId();
        }


        return $result;
    }


    public function toUsersApi(?string $requestId = null): array
    {
        $result = $this->toApi($requestId);

        if (!is_null($this->getRoleId())) {
            $result = [
                'role_id' => $this->getRoleId(),
            ];
        }

        if (!is_null($this->getGroupId())) {
            $result['group_id'] = $this->getGroupId();
        }

        if (!is_null($this->getIsFree())) {
            $result = [
                'is_free' => $this->getIsFree(),
            ];
        }

        if (!is_null($this->getIsAdmin())) {
            $result = [
                'is_admin' => $this->getIsAdmin(),
            ];
        }

        if (!is_null($this->getIsActive())) {
            $result = [
                'is_active' => $this->getIsActive(),
            ];
        }

        return $result;
    }

Как получить кастомные поля сущности по ID группы полей?

Пытаюсь получить список полей из группы (Основное) по ID группы, но поля как вижу не привязаны к группе (Основное, "default"). Вопрос как их получить через библиотеку?

Вот пример полученного поля, но "group_id" у него пустое, хоть amoCRM отображает его в группе "Основное"

[0]=>
    object(AmoCRM\Models\CustomFields\TextCustomFieldModel)#126 (15) {
      ["id":protected]=>
      int(40335)
      ["name":protected]=>
      string(18) "Должность"
      ["groupId":protected]=>
      NULL
      ["sort":protected]=>
      int(504)
      ["isApiOnly":protected]=>
      bool(false)
      ["isDeletable":protected]=>
      bool(false)
      ["isVisible":protected]=>
      NULL
      ["isRequired":protected]=>
      NULL
      ["catalogId":protected]=>
      NULL

Как добавить дополнительное поле для неразобранного?

Доброго времени суток, подскажите, как добавить дополнительное поле в Lead для неразобранного?
Есть метод setLead() но он для модели LeadModel, а вот для контакта это возможно setContacts() с ContactsCollection

$unsortedLead = new LeadModel();
$leadCustomFields = new CustomFieldsValuesCollection();
$cidFieldValueModel = new TextCustomFieldValuesModel();
$cidFieldValueModel->setFieldId('453259');
$cidFieldValueModel->setValues(
     (new TextCustomFieldValueCollection())
          ->add((new TextCustomFieldValueModel())->setValue('test'))
 );
$leadCustomFields->add($cidFieldValueModel);
$unsortedLead->setName('Новая заявка от '.$name);
$unsortedLead->setCustomFieldsValues($leadCustomFields);

$formUnsorted = new FormUnsortedModel();
$formUnsorted
        ->setLead($unsortedLead)

Вариант выше не передает доп поле в сделку

Ошибка в webhooks()->get()

`public static function fromArray(array $webhook): self
{
$model = new self();

    $model->setId($webhook['id'])
        ->setDestination($webhook['name'])
        ->setAccountId($webhook['account_id'])
        ->setSettings($webhook['settings'])
        ->setCreatedBy($webhook['created_by'])
        ->setCreatedAt($webhook['created_at'])
        ->setUpdatedAt($webhook['updated_at'])
        ->setSort($webhook['sort'])
        ->setDisabled($webhook['disabled']);

    return $model;
}`

изменить на
`public static function fromArray(array $webhook): self
{
$model = new self();

    $model->setId($webhook['id'])
        ->setDestination($webhook['destination'])
        ->setAccountId($webhook['account_id'])
        ->setSettings($webhook['settings'])
        ->setCreatedBy($webhook['created_by'])
        ->setCreatedAt($webhook['created_at'])
        ->setUpdatedAt($webhook['updated_at'])
        ->setSort($webhook['sort'])
        ->setDisabled($webhook['disabled']);

    return $model;
}`

(Строка 66)

Проблема с фильтрами "Некорректный запрос: ..."

В чем проблема?

Исключение:
AmoCRM\OAuth2\Client\Provider\AmoCRMException: Некорректный запрос: В запросе отсутствует ряд параметров или параметры невалидны

Проблемный код:


$contactsFilterModel = new ContactsFilter();

$testFilterCustomFieldsValues = [
  40335 => 'Some Position'
];

$contactsFilterModel->setCustomFieldsValues($testFilterCustomFieldsValues);

try {
  $apiClient->contacts()->get($contactsFilterModel);
} catch ( AmoCRMApiException $e ) {
  var_dump($e);
}

install laravel/framework v7.16.1

Здравствуйте.

Возникает ошибка при установке на с laravel выше версии 7.*, в composer.json "laravel/framework": "^7.0"
Сам текст ошибки
- don't install illuminate/support 5.5.x-dev|don't install laravel/framework v7.16.1

Заранее спасибо

В методах fromArray классов, унаследованных от NoteModel, игнорируется поле params

public function fromArray(array $note): NoteModel
{
$model = parent::fromArray($note);
if (isset($note['params']['uniq'])) {
$this->setUniq($note['params']['uniq']);
}
if (isset($note['params']['duration'])) {
$this->setDuration($note['params']['duration']);
}
if (isset($note['params']['source'])) {
$this->setSource($note['params']['source']);
}
if (isset($note['params']['link'])) {
$this->setLink($note['params']['link']);
}
if (isset($note['params']['phone'])) {
$this->setPhone($note['params']['phone']);
}
if (isset($note['params']['call_result'])) {
$this->setCallResult($note['params']['call_result']);
}
if (isset($note['params']['call_status'])) {
$this->setCallStatus($note['params']['call_status']);
}
return $model;
}

При вызове метода fromArray объекта класса CallNote (и прочих, унаследованных от NoteModel) создается новый экземпляр этого класса, который возвращается без каких либо изменений, поскольку в методе осуществляется обновление полей текущего объекта, а не вновь созданного. Это приводит к тому, что при вызове EntityNotes->get() поля элементов коллекции, отвечающие за хранение "дополнительной информации" примечаний, передаваемой в поле params, оказываются выставленными в null.

Ошибка при добавлении DateCustomField

Если в АМО тип кастомного поля - дата, то при добавлении занчения таким образом

$dateCustomFieldValuesModel = new DateCustomFieldValuesModel();
        $dateCustomFieldValuesModel->setFieldId($fieldId);
        $dateCustomFieldValuesModel->setValues(
            (new DateCustomFieldValueCollection())
                ->add((new DateCustomFieldValueModel())->setValue('2020-06-17'))
        );
        $customFieldsValuesCollection->add($dateCustomFieldValuesModel);

возвращается ошибка
This value should be of type int
Приходится добавлять через NumericCustomField, передавая timestamp

Invalid http status (500) при вызове метода "/api/v4/leads/unsorted"

Неработающий код

try {
  $request = $apiClient->getRequest();
  $queryResult = $request->get('/api/v4/leads/unsorted');
} catch( AmoCRMApiException $e ) {
   var_dump($request->getLastRequestInfo()); die;
}

Ответ:

array(10) { ["last_http_method"]=> string(3) "GET" ["last_method"]=> string(58) "https://asdasdasdasd.amocrm.ru//api/v4/leads/unsorted" ["last_body"]=> array(0) { } ["last_query_params"]=> array(0) { } ["last_response"]=> string(119) "{"title":"Internal Server Error","type":"https://httpstatus.es/500","status":500,"detail":"An unknown error occurred."}" ["last_response_code"]=> int(500) ["last_request_id"]=> string(32) "79c6ee4a79179bab5d275f0ce848b57b" ["jquery_call"]=> string(167) " $.ajax({ url: "https://asdasdasdasd.amocrm.ru//api/v4/leads/unsorted", data: JSON.stringify([]), type: "GET", contentType: "application/json" });" ["curl_call"]=> string(79) "curl "https://asdasdasdasd.amocrm.ru//api/v4/leads/unsorted" -X "GET" -d""" ["timestamp"]=> int(1591914903) }

Метод работает только с API ключом.

Argument 1 passed to MailMetadata::setMessageId() must be of the type array or null

При наличии у неразобранного метаданных в категории mail (почта), вызов метода MailMetadata::fromArray() приводит к ошибке, поскольку сеттеры у свойств messageId и contentSummary принимают в качестве аргумента ?array, а в ответе от API возвращаются int и string соответственно.

TypeError:
Argument 1 passed to AmoCRM\Models\Unsorted\MailMetadata::setMessageId() must be of the type array or null, int given, called in vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/Unsorted/MailMetadata.php on line 54

"Response has validation errors" при установке "ответственного"

Пытаюсь создать контакт, возникла проблема с добавлением ответственного
Result: "Response has validation errors"

    try {

      $test = [
        'name' => 'New Contact',
        'responsible_user_id' => 25458031,
      ];

      $newContactModel = new ContactModel();
      $newContactModel->setName( $test['name'] );
      $newContactModel->setResponsibleUserId( $test['responsible_user_id'] );

      return $apiClient->contacts()->addOne($newContactModel);


    } catch( AmoCRMApiException $e ) {
      print( $e->getMessage() );
    }

Проблема с получением покупателей в режиме "Сегментация"

Текст ошибки:

PHP Notice 'yii\base\ErrorException' with message 'Undefined index: name'

in /a/vendor/amocrm/amocrm-api-library/src/AmoCRM/Models/Customers/Segments/SegmentModel.php:118

Как воспроизвести ошибку:

  1. В аккаунте надо поставить режим покупателей в "Динамическое сегментирование".
  2. Создать сегмент с любым названием (например test).
  3. Создать покупателя.
  4. Привязать сегмент к покупателю.
  5. После этого выполнить следующий код:
$customerId = ""; // Put target customer id here
$apiClient->customers()->getOne($customerId);

Дополнительная информация:

Вот что выводит var_dump параметра $segment в методе fromArray класса SegmentModel:

Код:

/**
     * @param array $segment
     *
     * @return self
     */
    public static function fromArray(array $segment): self  // ЭТО СТРОКА 108
    {
        
        var_dump($segment); die();
        
        if (empty($segment['id'])) {
            throw new InvalidArgumentException('Segment id is empty in ' . json_encode($segment));
        }

        $segmentModel = new self();

Результат вывода:

array(2) {
  ["id"]=>
  int(81)
  ["_links"]=>
  array(1) {
    ["self"]=>
    array(1) {
      ["href"]=>
      string(61) "https://testdeltasales.amocrm.ru/api/v4/customers/segments/81"
    }
  }
}

Bad Request (400) код 244 при совершении POST запроса на "/api/v4/leads"

Начиная с 22.06.2020, при попытке добавить сделку получаю в качестве ответа ошибку Bad Request (400) с кодом 244. При работе с другими методами API или совершении GET запроса на "/api/v4/leads" проблем не наблюдается

'last_response' => '{"title":"Bad Request","type":"https://httpstatus.es/400","status":400,"detail":"Код ошибки 244. В случае повторного возникновения ошибки, обращайтесь в нашу техническую поддержку - [email protected]"}',
'last_response_code' => 400,
'last_request_id' => '8522c111dfbcacb99b9a2bc22ee07820'

Не работает DateCustomFieldValueModel помогите разобраться

$dateTo = '2020-08-23';
    if(!empty($dateTo)){
            $dateToFieldValueModel = new DateCustomFieldValuesModel();
            $dateToFieldValueModel->setFieldId(66213);
            $dateToFieldValueModel->setValues(
                (new DateCustomFieldValueCollection())
                    ->add((new DateCustomFieldValueModel())
                        ->setValue($dateTo)
                )
            );
            $leadCustomFields->add($dateToFieldValueModel);
        }
        if($leadCustomFields->count() > 0){
            $lead->setCustomFieldsValues($leadCustomFields);
        }
        
        try {
            $lead = $leadsService->addOne($lead);
...

падает и ввыдает ошибку:
Response has validation errors. Request validation failed

Попытался связать контакт с новой сделкой. Где ошибся?

Текст ошибки:
Uncaught AmoCRM\Exceptions\AmoCRMApiErrorResponseException: Response has validation errors

Проблемный код:

$leadModel = $leadsAdapter->makeModel($testLead); // : LeadModel

$baseMainContactModel = $apiClient->contacts()->getOne(30246607);
$linksCollection = new LinksCollection();
$linksCollection->add($leadModel);

$apiClient->contacts()->link(
  $baseMainContactModel,
  $linksCollection
);

try {
  $apiClient->leads()->addOne($leadModel);
} catch( AmoCRMApiException $e ) {
  echo '<pre>';
  var_dump($e);
  echo '</pre>';
}

Упростить работу с получением связей для конкретной сущности

Пример в продолжение #63

Если нужно получить все контакты, связанные со сделкой, приходится использовать getLinks и перебирать результаты, чтобы отобрать связи нужного типа. Для LinksFilter нет возможности указать только EntityType. Было бы неплохо добавить такую возможность.

Если же использовать getContacts для LeadModel, то не удается получить контакты (из-за направления связи?).

Получить контакт по кастом полю

Привет!

$FIELD_ID = 12345; // int ID, не name
$FIELD_VAL = 67890;
$filter = (new ContactsFilter())->setCustomFieldsValues([ $FIELD_ID => $FIELD_VAL ]);
$apiClient->contacts()->get($filter); // возвращаются неотфильтрованные контакты

Подскажите плз, что я делаю не так?
В примерах не нашел фильтра по кастом полям.

Также в ридми написано "ContactsFilter — Доступен только на аккаунтах, которые подключены к тестированию функционала фильтрации по API" — это актуально? (В техническую поддержку также написал)

Upd: поддержка ответила, что фильтрация включается по запросу, запросил включение. Вопрос с тем, как правильно фильтровать по кастом полям, актуален.

возможность добавлять вложенные категории одним запросом

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.