leshgancomp/amocrm_wrap

AmoCRM API 简化交互包装

dev-master 2018-07-31 15:45 UTC

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 类的实例,需要传递

  1. CRM 子域名
  2. 用户登录名(邮箱)
  3. 用户 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 的自定义字段。

字段类型

  1. 普通文本字段
  2. 只能输入数字的文本字段
  3. 表示属性存在与否的字段(例如:"是"/"否")
  4. 单选列表字段,可以选择一个元素
  5. 多选列表字段,可以选择多个列表元素
  6. 日期字段,格式为(年-月-日 时:分:秒)
  7. 用于 URL 地址的普通文本字段
  8. 和 9. 包含大量文本的字段
  9. 开关字段
  10. 简短地址字段
  11. 地址字段(在界面中是多个字段的组合)
  12. 日期字段,搜索时不考虑年份,例如:生日。格式为(年-月-日 时:分:秒)。返回字段 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();
}?>