leshgancomp / amocrm_wrap
AmoCRM API 简化交互包装
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-29 05:21:13 UTC
README
代码无法运行!!!甚至不值得检查!!!!
当前版本:1.0.0
连接
在开始使用包装之前,需要连接文件自动加载类'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 \leshgancomp\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); // work with Аmo api } catch (\leshgancomp\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); } ?>
功能
- 即使在不提供此类选项的套餐中,也能创建 CRM 的完整备份
- 通过电话或电子邮件搜索联系人。此方法可用于查找重复项。
- 在联系人、公司和交易中搜索任意查询
- 通过不同过滤条件获取任何实体的列表
- 创建、修改和删除联系人、交易、公司和任务
- 将文件、笔记和任务附加到联系人、交易和公司
- 方便地处理附加字段,无需了解它们的 ID
- 通过姓名或用户名的一部分(在 CRM 中)分配责任,而不使用 ID
- 对于所有请求,返回的不是包含数据的巨大数组,而是便于工作的对象(Contact、Lead 等)
近期计划
- 部署备份的能力
- 添加对新实体(如买家等)的工作能力
感谢
- Владислав Алаторцев — 为提供独特的无文件存储 cookie、附件文件和删除实体的方法表示感谢
主要类方法描述
AmoCRM 类
- AmoCRM::VERSION — 包装的当前版本
- AmoCRM::clearPhone($phone) — 清除电话号码中的多余符号的静态方法
- new AmoCRM($domain, $userLogin, $userHash) — 创建 AmoCRM 类的主要对象。尝试进行授权。
- isAuthorization() — 检查当前授权
- searchContact($phone, $email) — 在联系人中进行搜索。在此过程中不考虑电话格式(以 7 或 8 开头的电话被视为不同的电话)。返回一个以联系人 ID 为键的对象 Contact 类的编号数组
- searchCompany($query) — 根据任意字符串搜索公司。返回一个以公司 ID 为键的对象 Company 类的编号数组
- searchLead($query) — 根据任意字符串搜索交易。返回一个以交易 ID 为键的对象 Lead 类的编号数组
重要!!!所有列表按最近修改的时间排序。无法更改排序顺序 = ( $limit = 0 — 没有限制。
参数:$query - 任意字符串,$limit - 结果中对象数量的限制,$offset - 从列表开始的偏移量,$responsibleUsersIdOrName - 一个元素或数组责任方(接受 id、姓名或姓名的一部分),$modifiedSince - 自此日期和时间以来联系人被修改,$isRaw - 如果为 true,则返回原始数据数组,而不是对象数组
- contactsList($query = null, $limit = 0, $offset = 0, $responsibleUsersIdOrName = array(), \DateTime $modifiedSince = null, $isRaw = false) — 根据查询条件搜索联系人并返回Contact类对象的数组
- leadsList(--/同样/--) — 根据查询条件搜索商机并返回Lead类对象的数组
- companyList(--/同样/--) — 根据查询条件搜索公司并返回Company类对象的数组
- tasksList(--/同样/--) — 根据查询条件搜索任务并返回Task类对象的数组
- notesContactList(--/同样/--) — 搜索联系人的备注并返回Note类对象的数组
- notesLeadList(--/同样/--) — 搜索商机的备注并返回Note类对象的数组
- notesCompanyList(--/同样/--) — 搜索公司的备注并返回Note类对象的数组
- notesTaskList(--/同样/--) — 搜索任务的备注(任务结果)并返回Note类对象的数组
抽象类Base
所有其他主要类都基于此类。它包含的所有方法都可以在其他类中使用。
- __construct($id = null) — 创建类实例时调用的方法。可以传递id以加载相关实体数据,否则将创建一个空对象
- 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的数组
- addLead($lead) — 将商机附加到实体
- delLead($lead) — 从实体中移除商机
- getContactsId() — 返回关联的联系人id的数组
- addContactId($contact) — 将联系人附加到实体
- delContactId($contact) — 从实体中移除联系人
- getCompanyId() — 返回关联的公司的id
- setCompany($company = null) — 设置与实体关联的公司
- getTags() — 返回id => name的关联数组标签
- addTag($tag) — 向实体添加标签
- delTag($tag) — 从实体中删除标签
- getPhones() — 返回电话号码的编号数组
- addPhone($phone, $enum = 'OTHER') — 向实体添加电话号码,不强制提供电话类型参数,默认为"其他"。检查实体中是否已存在该电话号码,并避免添加重复项
可能的选项:WORK - 工作,WORKDD - 直接,MOB - 手机,FAX - 传真,HOME - 家庭,OTHER - 其他
- delPhone($phone) — 从实体中删除电话号码。不考虑电话格式。考虑电话号码是否以7或8开头
- getEmails() — 返回电子邮件地址的编号数组
- addEmails($email, $enum = 'OTHER') — 向实体添加电子邮件地址,不强制提供电子邮件类型参数,默认为"其他"。检查联系人中是否已存在该电子邮件地址,并避免添加重复项
可能的选项:WORK - 工作电子邮件,PRIV - 个人电子邮件,OTHER - 其他
- delEmail($email) — 从实体中删除电子邮件
- addCustomField($name, $type) — 在当前实体中创建名为 $name、类型为 $type 的自定义字段。
字段类型
- 普通文本字段
- 只能输入数字的文本字段
- 表示属性存在与否的字段(例如:"是"/"否")
- 单选列表字段,可以选择一个元素
- 多选列表字段,可以选择多个列表元素
- 日期字段,格式为(年-月-日 时:分:秒)
- 用于 URL 地址的普通文本字段
- 和 9. 包含大量文本的字段
- 开关字段
- 简短地址字段
- 地址字段(在界面中是多个字段的组合)
- 日期字段,搜索时不考虑年份,例如:生日。格式为(年-月-日 时:分:秒)。返回字段 id
- delCustomField($nameOrId) — 从当前实体中删除自定义字段,接受字段 id 或名称
- getCustomFieldValue($nameOrId) — 以字符串形式返回自定义字段的值。接受字段名称或 id。如果存在多个值,则应通过分号(;)进行列举
- getCustomFieldsValue() — 以关联数组的形式返回所有自定义字段的值(字段名称 => 其值)。如果字段有多个值,则应通过分号(;)进行列举
- setCustomField($customFieldNameOrId, $value = null) — 设置自定义字段的值。第一个参数可以是字段 id 或其在 CRM 中的名称。如果不传递 $value 或将其设为空,则在保存到 CRM 时字段也将被清空。多选列表字段中的值以分号(;)作为分隔符,例如:"第一项;第二项;第三项"
- addNote($text) — 为当前实体添加备注
- addSystemNote($text, $serviceName) — 为当前实体添加不可删除的系统备注
- addTask($text, $responsibleUserIdOrName = null, $completeTill, $typeId = 3) — 为当前实体添加任务。$text - 任务文本。$responsibleUserIdOrName(可选)- 负责人,可以传入 id 或名称,如果未设置,则与当前实体相同。$completeTill(可选)- 完成任务的日期和时间,以 DateTime 类的对象形式表示,如果未指定,则使用当前时间。$typeId(可选)- 任务类型,参见 CRM 中的选项,接受类型名称,如果未设置,则默认为 3 - 信件。
- addFile($pathToFile) — 将文件附加到实体(交易、联系人或公司)。$pathToFile - 文件路径
- backup($directory) — 在 $directory 目录中创建整个 CRM 的完整备份。可能存在内存限制问题
联系人(Contact)和公司(Company)类
所有基本方法
潜在客户(Lead)类
- getSale() — 返回预算
- setSale($sale) — 设置预算
- getPipelineId() — 返回管道 id
- getPipelineName() — 返回管道名称
- getStatusId() — 返回状态 id
- getStatusName() — 返回状态名称
- setPipelineAndStatus($idOrNamePipeline, $idOrNameStatus) — 设置管道和状态。接受 id 或名称,既包括管道也包括状态
- getMainContactId() — 返回主要联系人的 id
- setMainContact($contact) — 设置主要联系人
- isClosed() — 如果交易已关闭则返回 true,否则返回 false
备注(Note)和任务(Task)类
- 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、Info、CustomField、Value、Note 和 Task
作为辅助类创建,因此将不对其做详细描述)
示例
在 CRM 中搜索、更改和保存联系人
<?php try { $amo = new \leshgancomp\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); $contacts = $amo->searchContact('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 (\leshgancomp\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); //Прерывем работу скрипта и выводим текст ошибки } ?>
在“未排序”的“第二销售”管道中创建带备注和两个相关联系人的商机
<?php try { $amo = new \leshgancomp\AmoCRM_Wrap\AmoCRM('test', 'test@test.ru', '011c2d7f862c688286b43ef552fb17f4'); $contact = new \leshgancomp\AmoCRM_Wrap\Contact(); $contact->setName('Петя') ->addPhone(79998887766); //Создаём контакт, который будет создан в црм после принятия заявки в неразобранном $contact2 = new \leshgancomp\AmoCRM_Wrap\Contact(); $contact2->setName('Ваня') ->addPhone(79998887755); //Создаём второй контакт $lead = new \leshgancomp\AmoCRM_Wrap\Lead(); $lead->setName('Тестовая сделка') ->setSale(2500); //Создаём сделку, которая будет создана в црм после принятия заявки в неразобранном $unsorted = new \leshgancomp\AmoCRM_Wrap\Unsorted('Супер-Форма', $lead, array($contact, $contact2), 'Вторые продажи'); $unsorted->addNote('Клиент сложный') ->save(); // Сохраняем всё в неразобранное в црм } catch (\leshgancomp\AmoCRM_Wrap\AmoWrapException $e) { die($e->getMessage()); //Прерывем работу скрипта и выводим текст ошибки } ?>
实现 RoyStat 和 AmoCRM 标准集成逻辑
另外还有一个小的功能,可以补充联系人数据
<?php //Тестовые данные $form = 'Заказать звонок'; $name = 'Тест'; $phone = '+7(999)888-77-66'; $email = 'testik@test.ru'; $responsibleUserId = 'Александр'; $comment = 'Срочно перезвонить!'; try { $amo = new \leshgancomp\AmoCRM_Wrap\AmoCRM('test', 'test@test.com', '8a66666666b3494179da07abc74bfd49'); $lead = new \leshgancomp\AmoCRM_Wrap\Lead(); $lead->setName("Заявка с формы '$form'") ->setCustomField('roistat', isset($_COOKIE['roistat_visit']) ? $_COOKIE['roistat_visit'] : null) ->setCustomField('roistat-marker', isset($_COOKIE['roistat_marker']) ? $_COOKIE['roistat_marker'] : 'Прямой визит') ->setCustomField('Форма захвата', $form) ->setCustomField('utm_source', $_COOKIE['utm_source']) ->setCustomField('utm_medium', $_COOKIE['utm_medium']) ->setCustomField('utm_campaign', $_COOKIE['utm_campaign']) ->setCustomField('utm_term', $_COOKIE['utm_term']) ->setCustomField('utm_content', $_COOKIE['utm_content']) ->setResponsibleUser($responsibleUserId) ->save() ->addNote($comment); $contacts = $amo->searchContact($phone, $email); if (!empty($contacts)) { $contact = current($contacts); } else { $contact = new \leshgancomp\AmoCRM_Wrap\Contact(); $contact->setName($name); } $contact->addPhone($phone) ->addEmail($email) ->addLead($lead) ->save(); } catch (\leshgancomp\AmoCRM_Wrap\AmoWrapException $e) { echo $e->getMessage(); }?>