去年帮朋友开发了一个简单的 WordPress CRM 应用,朋友一直在使用,效果不错,到现在已经积累了不少客户了。现在朋友遇到一个问题:老是忘记定期回访客户,并且回访客户缺乏规律,回访管理不方便,想在这个 CRM 应用里面添加一个定期回访的提醒。
具体需求是这样的:
- 添加了一个客户后,每隔 1周、3周、一个半月提醒客服回访一次客户
- 一个半月之后,每隔三个月提醒客服回访一次客户
在 WordPress CRM 中添加定期回访提醒的解决思路
需求很简单,解决方案也很明确,直接用 WordPress 的任务系统来实现就可以了,添加客户的时候,添加若干个只执行一次的计划任务,用于发送需求 1 中的单次提醒,同时添加一个每 3 个月循环执行的计划任务,每 3 个月发送一次提醒。下文代码中用到的 WEEK_IN_SECONDS
respond in singing MONTH_IN_SECONDS
都是 WordPress 用于表示秒数的常量。
添加计划任务
add_action( 'wp_insert_post', function ( $post_id, $post, $update ) {
// 排除不需要提醒的操作
if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id ) || $update ) {
return;
}
$weeks = [ 1, 3, 6 ];
// 添加单次计划任务
if ( $post->post_type === 'client' ) {
foreach ( $weeks as $week ) {
wp_schedule_single_event( current_time( 'timestamp', 1 ) + WEEK_IN_SECONDS * $week, 'remind_communicate', [ 'post_id' => $post_id ] );
}
}
// 添加循环计划任务
if ( ! wp_next_scheduled( 'remind_communicate' ) && $post->post_type == 'client' ) {
wp_schedule_event( current_time( 'timestamp' ), 'six_monthly', 'remind_communicate', [ 'post_id' => $post_id ] );
}
}, 10, 3 );
添加计划任务间隔时间
由于 WordPress 默认的计划任务间隔时间没有每三个月一次的定义,我们需要添加自定义计划任务间隔时间,这个时间间隔可以是任意时间。
add_filter( 'cron_schedules', function ( $schedules ) {
// 每 3 月
$schedules[ 'three_monthly' ] = [
'display' => __( '三个月', 'enter' ),
'interval' => MONTH_IN_SECONDS * 3,
];
return $schedules;
} );
计划任务发生时,发送邮件提醒
这里是计划任务发生时, CRM 系统发送提醒的实际操作,可以是发送邮件给客服,也可以是发送站内消息、短信、甚至是推送到微信、Android 客户端等。其实在客户的 CRM 系统中,我们添加了一个站内信系统、方便客服查看并处理回访消息。
add_action( 'remind_communicate', function ( $post_id ) {
// 获取客户信息和消息接收者
$post = get_post( $post_id );
$owner = get_user_by( 'ID', $post->post_author );
// 消息内容
$subject = '请回访客户' . carbon_get_post_meta( $post_id, 'name' );
$content = '客户「' . carbon_get_post_meta( $post_id, 'name' ) . '」于「' . carbon_get_post_meta( $post_id, 'deal_date' ) . '」签订了合同。是时候回访一下了。';
// 发送邮件给用户
wp_mail( $owner->user_email, $subject, $content );
} );
删除客户时,删除回访客户的提醒
用户删除了一个客户后,提醒回访的计划任务就不再需要了,我们需要在删除客户的时候,自动删除该客户对应的计划任务,以免 CRM 系统发送无用的回访提醒。
add_action( 'delete_post', function ( $post_id ) {
wp_clear_scheduled_hook( 'remind_communicate', [ 'post_id' => $post_id ] );
} );
WordPress 检查和执行计划任务在用户访问页面的时候出发的,当系统没有用户访问的时候,会因为计划任务没被触发而导致提醒发送不及时,我们需要通过操作系统的计划任务来触发 WordPress 计划任务。有了这个系统,客户再也不用担心忘记回访某个客户了,每天到 CRM 应用后台检查一下回访消息提醒,如果有新的提醒,回访客户并添加回访记录就可以了。