去年帮朋友开发了一个简单的 WordPress CRM 应用,朋友一直在使用,效果不错,到现在已经积累了不少客户了。现在朋友遇到一个问题:老是忘记定期回访客户,并且回访客户缺乏规律,回访管理不方便,想在这个 CRM 应用里面添加一个定期回访的提醒。
具体需求是这样的:
添加了一个客户后,每隔 1周、3周、一个半月提醒客服回访一次客户一个半月之后,每隔三个月提醒客服回访一次客户在 WordPress CRM 中添加定期回访提醒的解决思路
需求很简单,解决方案也很明确,直接用 WordPress 的任务系统来实现就可以了,添加客户的时候,添加若干个只执行一次的计划任务,用于发送需求 1 中的单次提醒,同时添加一个每 3 个月循环执行的计划任务,每 3 个月发送一次提醒。下文代码中用到的 WEEK_IN_SECONDS 和 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 应用后台检查一下回访消息提醒,如果有新的提醒,回访客户并添加回访记录就可以了。