remp/crm-scenarios-module


README

Translation status @ Weblate

场景模块的主要功能是场景构建器,这是一个用于在 CRM 系统中通过拖放 UI 工具包建模场景的工具。每个场景都通过一个图来直观表示,将各种事件(例如用户注册、订阅)与条件(例如用户细分检查)和操作(例如发送电子邮件、显示横幅)相连接。

场景示例

Scenario goals overview

场景构建器元素

场景构建器提供几种节点类型以构建图表。用户可以以任意方式连接节点,将一个节点的输出连接到另一个节点的输入。保存(并启用)场景后,每次触发场景触发器时都会执行该场景。

触发器

每个场景都必须从触发节点开始。目前有两种触发类型 - “事件”节点和“事件之前”。

事件

事件提供了与用户相关的更改的几个钩子。目前它支持以下事件类型

  • 用户创建
  • 新订阅
  • 订阅结束
  • 周期性付款续订
  • 测试事件(由控制台命令 scenarios:test_user 触发)

每次用户触发指定的事件时,所有具有此事件的场景都将执行,将触发场景的用户(沿图向下传递)传递下去。

事件之前

“事件之前”需要两个参数 - 一个事件和一个时间间隔。时间间隔指定触发器启动场景之前实际事件发生的时间长度。目前它支持以下事件类型

  • 订阅结束
  • 周期性付款收费
  • 周期性付款过期

条件

条件块允许根据指定的标准编辑图表的流程。一个条件块可以组合单个类型的多个标准。所有定义的标准都会一起评估,并根据结果,图表流程将遵循正方向或负方向。目前支持的标准类型

  • 用户 - 用户标准是根据触发场景的用户参数评估的。标准类必须实现 ScenariosCriteriaInterface
  • 支付 - 支付标准是根据场景触发器的支付参数评估的。此类标准只能在以与支付相关的触发器开始的场景中使用。某些触发器可能附有支付参数,也可能没有,例如“新订阅”触发器。在这种情况下,首先使用“触发器”标准(例如“有支付”)检查以确保支付参数存在,然后再使用支付标准。标准类必须实现 ScenariosCriteriaInterface
  • 订阅 - 订阅标准是根据场景触发器的订阅参数评估的。此类标准只能在以与订阅相关的触发器开始的场景中使用。标准类必须实现 ScenariosCriteriaInterface
  • 触发器 - 触发器标准是根据事件触发期间提供的参数评估的。标准类必须实现 ScenariosTriggerCriteriaInterfaceScenariosCriteriaInterface 两个接口。

操作

发送电子邮件

此节点向触发场景并达到此节点的用户发送电子邮件。电子邮件列表从 CRM 中加载。

显示横幅

警告:仅当安装并集成 REMP-Campaign 模块时才启用。

此节点向触发节点的用户显示一次性横幅。可用的横幅从 Campaign 工具中加载。

运行通用操作

此节点在通用操作定义中的 createEvent 方法中发出指定的联盟事件。您可以指定自定义参数,这些参数将在 UI 中显示,并将作为选项传递给 createEvent 方法。

您可以通过在您的配置中注册 TestGenericEvent 来尝试此功能的工作方式。

services:
	scenariosGenericEventsManager:	
		setup:
			- register('test_gen_event', Crm\ScenariosModule\Scenarios\TestGenericEvent())

操作

通常,场景动作只能通过触发初始场景触发的用户子集来访问。因此,构建器提供了几个元素来过滤用户或在图中延迟后续动作的执行。

段节点检查达到该节点的用户是否存在于指定的段中。根据结果,节点将执行流程重定向到正路径(用户在段中)或负路径(用户不在段中)。

段节点详细信息

Scenario goals overview

等待

此节点简单地通过指定的时间间隔延迟图中下一个元素的执行。

目标

目标元素检查触发节点的用户是否已完成所选的入职目标。有关更多详细信息,请参阅“入职模块”文档。

A/B 测试

A/B 测试元素根据百分比分布从两个或更多变体中选择一个流程。

安装模块

我们建议使用 Composer 进行安装和更新管理。

composer require remp/crm-scenarios-module

启用模块

将已安装的扩展添加到您的 app/config/config.neon 文件中。

extensions:
    - Crm\ScenariosModule\DI\ScenariosModuleExtension

添加后,为新生成的模块生成 ACL。

php bin/command.php user:generate_access
php bin/command.php api:generate_access
php bin/command.php application:seed

构建资产

在模块文件夹内安装依赖项 yarn install 确保全局范围内已填充场景配置。它应该看起来像这样

window.Scenario = {
  config: {
    AUTH_TOKEN: '',
    CRM_HOST: '',
    CANCEL_PATH: '',
    SEGMENT_ID: null
  }
};

如果您想为部署构建整个应用程序,请运行 yarn build-prod。然后,在项目根目录中,使用以下命令复制资产

php bin/command.php application:install_assets

引擎

场景模块需要场景引擎工作器在后台单独运行以处理图执行流程。此外,它还需要 Hermes 工作器来处理异步任务。执行

php bin/command.php application:hermes_worker
php bin/command.php scenarios:worker

确保在终止(例如,通过运行服务或监视器)后再次启动两个工作器。

引擎处理速度是可配置的。您可以在配置中指定处理轮次之间睡眠延迟的下限和上限(在每个轮次中,处理队列中的所有作业)

scenariosEngine:
    setup:
        # time in microseconds
        - setMinSleepTime(10000) #0.01s
        - setMaxSleepTime(10000000) # 10s 

实际睡眠时间使用指数退避算法计算。默认值是 0.05 和 1 秒,用于最小/最大延迟。

计划命令

使用 from 选项聚合超过 5 天或特定日期的旧统计数据。设置 cron 每小时运行命令。

# Aggregate scenarios statistics 
php bin/command.php scenarios:aggregate_stats

删除超过 31 天的旧统计数据。要指定确切日期,请使用 date-to 选项。每天运行命令的 cron。

# Remove old statistic data
php bin/command.php scenarios:remove_stats

事件前

为了生成“事件前”触发器,将以下命令添加到您的 crontab 中。可选地将其设置为每 10 分钟运行一次。

php bin/command.php scenarios:event_generator

优雅关闭工作器

要优雅地关闭两个工作器(application:hermes_workerscenarios:worker),请使用来自 ApplicationModule 的命令。

php bin/command.php application:hermes_shutdown

在 CRM 模块更新且需要重新加载工作器的情况下使用此方法。更多详细信息请参阅 ApplicationModule 的 README。