drillcoder / amocrm_wrap
AmoCRM API 简单交互包装
7.0.5
2019-03-03 16:31 UTC
Requires
- php: >=5.3
- ext-curl: *
- ext-json: *
- ext-mbstring: *
README
连接
在使用包装器之前,需要连接 'autoload.php' 自动加载类文件。文件的路径可能与下面的示例不同。或者,您可以将此组件包含在自己的自动加载器中。
<?php require_once 'AmoCRM_Wrap/autoload.php'; ?>
使用
首先需要授权。为此,需要创建一个 AmoCRM 类的实例,并将以下内容传递给构造函数
- CRM 子域名
- 用户名(邮箱)
- 用户 API 密钥。您可以在 CRM 界面中找到它 https://test.amocrm.ru/settings/profile/
- 'test' 需要替换为您自己的子域名
由于包装器中预定义了异常(Exception),它们在发生各种错误时会被触发,因此需要捕获它们,即应将包装器的工作代码放在 try catch 块中。
授权示例
<?php try { $amo = new \DrillCoder\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); // ... } catch (\DrillCoder\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); } ?>
功能
- 创建完整的 CRM 备份,即使套餐中不提供此选项
- 按电话或电子邮件搜索联系人。该方法可用于查找重复项
- 在联系人、公司、交易、备注和任务中按任意查询搜索
- 以不同的筛选条件获取任何实体的列表
- 创建、修改和删除联系人、交易、公司、备注和任务
- 将文件、备注和任务附加到联系人、交易和公司
- 方便地处理附加字段,无需了解其 ID
- 按名称或名称的一部分指定 CRM 中的负责人 ID
- 对于所有请求,返回的不是包含大量数据的巨大数组,而是便于操作的对象(Contact、Lead 等)
未来计划
- 部署备份的能力
- 添加对新实体(如买家等)的支持
- 向用户字段值添加验证
感谢
- Владислав Алаторцев — 因其在附件文件和删除实体方面的独特方法以及在没有存储 cookie 文件的能力下进行工作
- Роман Маслеников — 因其查找和修复错误
主要类方法描述
AmoCRM 类
- AmoCRM::VERSION — 包装器的当前版本
- AmoCRM::getPhoneFieldId() — 返回实体“联系人”的电话字段 ID
- AmoCRM::getEmailFieldId() — 返回实体“联系人”的电子邮件字段 ID
- AmoCRM::getUsers() — 返回 CRM 中的用户数组
- AmoCRM::getTaskTypes() — 返回任务类型的数组
- AmoCRM::getPipelinesName() — 返回 CRM 中的漏斗数组
- AmoCRM::getStatusesName($pipelineId) — 返回指定漏斗中的状态数组(需要漏斗 ID)
- AmoCRM::getCustomFields($type) — 返回指定实体类型的用户字段数组。可能的类型:contact、lead、company
- AmoCRM::getCustomFieldsEnums($type) — 返回指定实体类型的用户字段枚举数组
- searchContactsByPhoneAndEmail($phone, $email) — 按电话和电子邮件搜索联系人。电话以 7 或 8 开头被视为不同的电话。返回包含联系人 ID 的对象 Contact 数组
分别按联系人、公司、交易、任务和备注搜索所有实体
- searchContacts/searchCompanies/searchLeads/searchTasks
- getContactNotes/getCompanyNotes/getLeadNotes/getTaskNotes ($query = null, $limit = 0,$offset = 0, $responsibleUsersIdOrName = array(), DateTime $modifiedSince = null, $isRaw = false) — 根据指定的实体进行搜索。所有字段都不必填写。如果没有填写任何内容,将返回所有实体的完整列表。$query - 查询文本。$limit - 响应中的实体数量。0 = 无限制 $offset - 从开始处跳过的实体数量 $responsibleUsersIdOrName - 负责用户(名称或ID)。如果有多个,则在数组中 $modifiedSince - 修改后的日期和时间,由DateTime对象指定 $isRaw - 标志以“原始”数据形式获取。与常规API查询相同的方式作为数组
注意!!!所有列表都按最早更改顺序排序。无法更改排序顺序 = (=
- backup($directory) — 在$directory目录中创建整个CRM的完整备份。可能存在内存限制问题
抽象类BaseEntity
所有其他主要类都基于此类。可以将其中的所有方法用于其他类。
- __construct($id = null) — 创建类实例时调用的方法。可以传递所需实体的ID,然后将从CRM加载数据。如果不传递ID,则将创建一个空对象
- getRaw() — 根据实体获取原始数据
- save() — 将当前实体保存到CRM
- delete() — 在CRM中删除当前实体
- getId() — 返回实体ID
- getName() — 返回实体名称
- setName($name) — 将名称更改为$name
- getResponsibleUserId() — 返回负责实体的ID
- getResponsibleUserName() — 返回负责实体的名称
- setResponsibleUser($responsibleUserIdOrName) — 设置负责实体。接受负责人的ID或其名称(在所有CRM经理的名称中搜索此字符串)
- getDateCreate() — 返回包含创建实体日期和时间的DateTime对象
- getDateUpdate() — 返回包含上次更改实体日期和时间的DateTime对象
- getUserIdUpdate() — 返回最后更改实体的用户的ID
- getUserNameUpdate() — 返回最后更改实体的用户的名称
- getCreatedUserId() — 返回创建实体的用户的ID
- getCreatedUserName() — 返回创建实体的用户的名称
- getLeadsId() — 返回附加交易的ID数组
- getLeads() — 返回附加交易的Lead对象数组
- addLead($lead) — 将交易附加到实体
- delLead($lead) — 从实体中移除交易
- getContactsId() — 返回附加联系人ID的数组
- getContacts() — 返回附加联系人的Contact对象数组
- addContactId($contact) — 将联系人附加到实体
- delContactId($contact) — 从实体中移除联系人
- getCompanyId() — 返回与实体关联的公司ID
- getCompany() — 返回与实体关联的Company对象
- setCompany($company) — 设置与实体关联的公司
- getTags() — 返回关联数组标签id => name
- addTag($tag) — 向实体添加标签
- delTag($tag) — 从实体中删除标签
- getPhones() — 返回编号电话数组
- addPhone($phone, $enum = CustomField::PHONE_OTHER) — 向实体添加电话,不必要参数电话类型,默认为“其他”。检查实体中是否已存在此类电话,并避免添加重复项。可能的电话类型选项位于常量CustomField::PHONE__中
- delPhone($phone) — 从实体中删除电话。不考虑电话格式。考虑电话是否以7或8开头
- getEmails() — 返回有序的电子邮件数组
- addEmails($email, $enum = CustomField::EMAIL_OTHER) — 将电子邮件添加到实体中,不必要指定电子邮件类型,默认为“其他”。检查是否存在相同的电子邮件地址,如果不添加重复项。可能的电子邮件类型选项位于常量CustomField::Email_中。
- delEmail($email) — 从实体中删除电子邮件
- addCustomField($name, $type = CustomField::TYPE_TEXT, $enums = array()) — 在当前实体类型中创建自定义字段,名称为$name,类型为$type,如果需要,则选项为$enums。返回创建的字段id。字段类型存储在CustomField::TYPE_中。
- delCustomField($nameOrId) — 从当前实体类型中删除自定义字段,接受字段id或名称
- getCustomFieldValueInStr($nameOrId) — 以字符串形式返回自定义字段的值。接受其名称或id。值分隔符为分号(;)
- getCustomFieldValueInArray($nameOrId) — 以数组形式返回自定义字段的值。接受其名称或id
- setCustomFieldValue($customFieldNameOrId, $value, $subtype = null) — 设置自定义字段的值。第一个参数可以是字段id,也可以是CRM中的字段名称。如果不传递值($value)或将其设置为空,则在保存到CRM时,该字段也将被清除。多选字段类型的值以数组形式输入。对于地址类型,还需要$subtype,这些类型存储在Value::SUBTYPE_中。
- addNote($text) — 为当前实体添加备注
- addNoteSystem($text, $serviceName) — 为当前实体添加系统(不可删除)备注
- addNoteSmsOut($text, $phone) — 为当前实体添加类型为“已发出短信”的备注(电话号码为$phone)
- addNoteSmsIn($text, $phone) — 为当前实体添加类型为“接收短信”的备注(来自电话号码$phone)
- addTask($text, $responsibleUserIdOrName = null, DateTime $completeTill = null, $typeId = 3) — 为当前实体添加任务。$text - 任务文本。$responsibleUserIdOrName(可选)- 负责人,接受id或名称,如果没有设置,则负责人与当前实体相同。$completeTill(可选)- 日期和时间,以DateTime对象的形式,表示完成任务的时间,如果没有指定,则时间设置为当前时间。$typeId(可选)- 任务类型,请参阅CRM中的选项,如果未设置,则默认为3 - 信件。
- addFile($pathToFile) — 将文件附加到实体(交易、联系人或公司)。$pathToFile - 文件路径
联系人类和公司类
所有基本方法
Lead类
- getSale() — 返回预算
- setSale($sale) — 设置预算
- getPipelineId() — 返回管道id
- getPipelineName() — 返回管道名称
- getStatusId() — 返回状态id
- getStatusName() — 返回状态名称
- setPipeline($idOrNamePipeline) — 设置管道。接受id或名称
- setStatus($idOrNameStatus, $idOrNamePipeline = null) — 在管道$idOrNamePipeline中设置状态,如果未指定,则使用当前管道。接受CRM中的id或名称,包括管道和状态
- getMainContactId() — 返回主要联系人的id
- getMainContact() — 返回主要联系人的Contact对象
- setMainContact($contact) — 设置主要联系人
- isClosed() — 如果交易已关闭则返回true,否则返回false
备注和任务类
- getElementId() — 返回将要关联的实体id
- setElementId($elementId) — 设置将要关联的实体id
- getElementType() — 返回将要关联的实体类型
可能的值:1 - 联系人,2 - 交易,3 - 公司,4 - 任务结果
- setElementType($elementType) — 设置将要关联的实体类型。选项与上面相同
- getType() — 返回任务或备注的类型
- setType($type) — 设置任务或笔记的类型。选项请参考CRM。
- getText() — 返回任务或笔记的文本。
- setText($text) — 设置任务或笔记的文本。
未排序类
- new Unsorted($formName, $lead, $contacts, $pipelineIdOrName = null, $companies = array()) — 创建对象 $formName - 在CRM界面中显示的表单名称。$lead - 创建并绑定到“未处理”状态下的交易。$contacts - 在“未处理”状态下创建并绑定到交易的对象 Contact 数组。$pipelineIdOrName - 创建申请的漏斗,可选参数。$companies - 可选参数,创建并绑定到交易的对象 Company 数组。
- addNote($text) — 为交易添加文本注释。需要在保存前使用。
- save() — 在CRM中保存“未处理”。
辅助类 Config、CustomField、Value、Note 和 Task
作为辅助类创建,因此不会对其进行详细描述。
示例
在CRM中搜索、修改和保存联系人。
<?php try { $amo = new \DrillCoder\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); $contacts = $amo->searchContactsByPhoneAndEmail('79998887766', 'test@test.ru'); //Ищем контакт по телефону и почте $contact = current($contacts); //Берём первый найденый контакт $contact->setName("{$contact->getName()} лучший") //Меняем имя дописывая в текущее строчку ->addPhone('78889998887766', 'MOB') //Добавляем мобильный телефон ->addEmail('test2@test.ru', 'WORK') //Добавляем рабочую почту ->delEmail('test@test.ru') //Удаляем почту ->setResponsibleUser('Пётр Иванович') //Меняем ответственного ->save() //Сохраняем все изменение на сервере црм ->addTask('Позвонить клиенту', 'Саша'); //Прикрепляем задачку, и назначаем ответственным за неё Сашу } catch (\DrillCoder\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); //Прерывем работу скрипта и выводим текст ошибки } ?>
在“未处理”状态下创建带有注释和两个关联联系人的交易,在“第二次销售”漏斗中。
<?php try { $amo = new \DrillCoder\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); $contact = new \DrillCoder\AmoCRM_Wrap\Contact(); $contact->setName('Петя') ->addPhone(79998887766); //Создаём контакт, который будет создан в црм после принятия заявки в неразобранном $contact2 = new \DrillCoder\AmoCRM_Wrap\Contact(); $contact2->setName('Ваня') ->addPhone(79998887755); //Создаём второй контакт $lead = new \DrillCoder\AmoCRM_Wrap\Lead(); $lead->setName('Тестовая сделка') ->setSale(2500); //Создаём сделку, которая будет создана в црм после принятия заявки в неразобранном $unsorted = new \DrillCoder\AmoCRM_Wrap\Unsorted('Супер-Форма', $lead, array($contact, $contact2), 'Вторые продажи'); $unsorted->addNote('Клиент сложный') ->save(); // Сохраняем всё в неразобранное в црм } catch (\DrillCoder\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); //Прерывем работу скрипта и выводим текст ошибки } ?>
实现 Rostat 和 AmoCRM 集成的标准逻辑。
此外,还有一个小的功能,用于补充联系人数据。
<?php //Тестовые данные $form = 'Заказать звонок'; $name = 'Тест'; $phone = '+7(999)888-77-66'; $email = 'testik@test.ru'; $responsibleUserId = 'Александр'; $comment = 'Срочно перезвонить!'; try { $amo = new \DrillCoder\AmoCRM_Wrap\AmoCRM('test', 'test@test.com', '8a66666666b3494179da07abc74bfd49'); $lead = new \DrillCoder\AmoCRM_Wrap\Lead(); $lead->setName("Заявка с формы '$form'") ->setCustomFieldValue('roistat', isset($_COOKIE['roistat_visit']) ? $_COOKIE['roistat_visit'] : null) ->setCustomFieldValue('roistat-marker', isset($_COOKIE['roistat_marker']) ? $_COOKIE['roistat_marker'] : 'Прямой визит') ->setCustomFieldValue('Форма захвата', $form) ->setCustomFieldValue('utm_source', $_COOKIE['utm_source']) ->setCustomFieldValue('utm_medium', $_COOKIE['utm_medium']) ->setCustomFieldValue('utm_campaign', $_COOKIE['utm_campaign']) ->setCustomFieldValue('utm_term', $_COOKIE['utm_term']) ->setCustomFieldValue('utm_content', $_COOKIE['utm_content']) ->setResponsibleUser($responsibleUserId) ->save() ->addNote($comment); $contacts = $amo->searchContactsByPhoneAndEmail($phone, $email); if (!empty($contacts)) { $contact = current($contacts); } else { $contact = new \DrillCoder\AmoCRM_Wrap\Contact(); $contact->setName($name); } $contact->addPhone($phone) ->addEmail($email) ->addLead($lead) ->save(); } catch (\DrillCoder\AmoCRM_Wrap\AmoWrapException $e) { echo $e->getMessage(); }?>