You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于现有表构建Issue Tracker:多客户问题工单分配需求

嘿,针对你这个用Gravity套件搭建的多客户问题管理需求,我给你梳理了一套实操性强的方案,分两大核心模块来解决:

一、客户与独立Issues DB表的关联实现

要实现每个客户的问题自动流入专属表,核心是给每个提交的问题打上唯一的客户标识,再通过代码或Gravity Flow的逻辑路由到对应表:

  • 第一步:在提交检测请求的Gravity Form里添加一个隐藏字段(或仅管理员可见的选择字段),命名为customer_id,值设为对应客户的唯一标识(比如公司ID/缩写,比如client_a、client_b)。这样每一条问题提交都会带上这个标识。
  • 第二步:用Gravity Flow的钩子或自定义PHP函数,在问题创建完成后,根据customer_id写入对应的数据表。示例代码如下(可以放到主题的functions.php或自定义插件里):
add_action( 'gravityflow_after_entry_save', 'route_issue_to_client_table', 10, 2 );
function route_issue_to_client_table( $entry, $form ) {
    // 确认是问题提交表单(替换成你的表单ID)
    if ( $form['id'] != 123 ) return;
    
    global $wpdb;
    $customer_id = rgar( $entry, 'customer_id' ); // 替换成你的字段ID
    $issue_type = rgar( $entry, 'issue_type' ); // 问题类型字段ID
    $notes = rgar( $entry, 'notes' ); // 备注字段ID
    $image_url = rgar( $entry, 'image' ); // 图片字段ID(Gravity Forms会存储附件URL)
    
    // 定义客户与表名的映射
    $client_tables = [
        'client_a' => 'wp_issues_db_client_a',
        'client_b' => 'wp_issues_db_client_b',
        // 剩下3个客户的表映射
    ];
    
    if ( isset( $client_tables[$customer_id] ) ) {
        $table_name = $client_tables[$customer_id];
        // 插入数据到对应表
        $wpdb->insert(
            $table_name,
            [
                'issue_type' => $issue_type,
                'notes' => $notes,
                'image_url' => $image_url,
                'created_at' => current_time( 'mysql' )
            ],
            [ '%s', '%s', '%s', '%s' ]
        );
    }
}
  • 第三步:用Gravity View创建客户专属的问题列表时,通过customer_id字段做过滤,确保每个客户只能看到自己的问题。
二、基于规则的问题邮箱分配方案

可以结合客户维度或问题类型维度来配置分配规则,两种方式都能通过Gravity Flow或自定义代码实现:

方式1:固定客户对应固定邮箱(简单直接)

  • 在Gravity Flow里为问题表单创建工作流,添加「发送通知」步骤;
  • 在通知的收件人设置里,使用动态字段或自定义短代码来拉取客户对应的邮箱。比如先把客户邮箱存在customer_id的字段选项值里(比如client_a|a@company.com),然后用{custom_field:customer_id:value}来获取邮箱;
  • 也可以在代码里直接定义映射,在问题插入表后触发邮件:
// 接上面的函数,在插入表后添加邮件发送逻辑
$client_emails = [
    'client_a' => 'a@company.com',
    'client_b' => 'b@company.com',
    // 其他客户邮箱
];
if ( isset( $client_emails[$customer_id] ) ) {
    $to = $client_emails[$customer_id];
    $subject = "新问题通知:{$issue_type}";
    $message = "发现新问题:\n类型:{$issue_type}\n备注:{$notes}\n图片:{$image_url}";
    wp_mail( $to, $subject, $message );
}

方式2:按问题类型分配到不同邮箱(灵活适配场景)

  • 如果需要把特定类型的问题发送给对应负责人,比如安全问题发运维邮箱,功能问题发开发邮箱,可以在表单里添加issue_type字段,然后在Gravity Flow的工作流里设置「条件分支」:
    • 当issue_type等于「安全问题」时,发送通知到security@company.com;
    • 当issue_type等于「功能异常」时,发送通知到dev@company.com;
  • 也可以用代码实现更复杂的规则,比如同时结合客户和问题类型来分配。
实操小贴士
  • 把客户与表、邮箱的映射关系统一维护在一个数组里,后续新增客户或修改配置只需要更新这个数组,不用改核心逻辑;
  • 开启Gravity Forms的日志功能,方便排查问题提交和数据写入的异常;
  • 给每个客户的Issues表添加索引(比如customer_id、created_at),提升查询效率。

内容的提问来源于stack exchange,提问作者web5498

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:37:22