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

PHP集成Google Chat:消息回复回调与按钮状态控制问题

解决Google Chat Webhook集成的两个问题

一、接收用户回复消息的实现步骤

普通Google Chat Webhook仅支持单向发送消息,若要接收用户回复,必须通过Google Chat机器人实现双向交互:

  1. 在Google Workspace开发者控制台创建Chat机器人,将你的PHP服务器HTTPS地址配置为回调URL。
  2. 当用户在Chat空间回复消息时,Google会向该回调URL发送POST请求,请求体包含完整消息数据(含chat ID、回复内容、用户信息等)。
  3. PHP端处理逻辑:
    • 先验证请求合法性:提取请求头X-Goog-Signature,用机器人密钥(控制台获取)对请求体做HMAC-SHA256签名验证,确保请求来自Google。
    • 解析JSON格式的POST请求体,提取所需字段(如message.text为回复内容、space.name为chat ID),保存到服务器数据库或文件中。
      示例PHP代码片段:
    <?php
    // 替换为你的机器人密钥
    $secret = "YOUR_CHAT_BOT_SECRET";
    $requestBody = file_get_contents('php://input');
    $signature = $_SERVER['HTTP_X_GOOG_SIGNATURE'] ?? '';
    
    // 签名验证
    $expectedSignature = 'sha256=' . hash_hmac('sha256', $requestBody, $secret, false);
    if (!hash_equals($expectedSignature, $signature)) {
        http_response_code(403);
        exit('Invalid request');
    }
    
    // 解析并保存回复数据
    $data = json_decode($requestBody, true);
    $chatId = $data['space']['name'];
    $replyText = $data['message']['text'];
    $userId = $data['user']['name'];
    
    file_put_contents('chat_replies.log', date('Y-m-d H:i:s') . " | Chat ID: $chatId | User: $userId | Reply: $replyText\n", FILE_APPEND);
    
    http_response_code(200);
    ?>
    

二、操作按钮失效/变色的实现方法

当用户点击按钮后,通过Google Chat的更新消息API修改按钮状态:

  1. 发送初始消息时,给操作按钮指定唯一action_name,示例卡片按钮配置:
    {
        "cardsV2": [
            {
                "cardId": "task-card",
                "card": {
                    "actions": [
                        {
                            "actionLabel": "标记已处理",
                            "actionType": "ACTION_TYPE_CUSTOM",
                            "actionName": "mark_handled",
                            "disabled": false,
                            "button": {
                                "color": "#4285F4"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. 用户点击按钮后,回调URL会收到含action_name的请求,此时调用消息更新接口修改按钮状态:
    • 接口地址:https://chat.googleapis.com/v1/{MESSAGE_NAME}(MESSAGE_NAME为初始消息返回的name字段,格式如spaces/AAAAxxx/messages/123456)
    • 请求方法:PUT
    • 修改按钮的disabled为true,同时将color改为灰色(如#9E9E9E)
      示例PHP代码片段:
    <?php
    // 替换为初始消息的name和你的API密钥/服务账号认证信息
    $messageName = "YOUR_MESSAGE_NAME";
    $apiKey = "YOUR_GOOGLE_CHAT_API_KEY";
    
    $updatedCard = [
        "cardsV2" => [
            [
                "cardId" => "task-card",
                "card" => [
                    "actions" => [
                        [
                            "actionLabel" => "已处理",
                            "actionType" => "ACTION_TYPE_CUSTOM",
                            "actionName" => "mark_handled",
                            "disabled" => true,
                            "button" => [
                                "color" => "#9E9E9E"
                            ]
                        }
                    ]
                ]
            ]
        ]
    ];
    
    $ch = curl_init("https://chat.googleapis.com/v1/$messageName?key=$apiKey");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updatedCard));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    ?>
    
    注:认证可选用API密钥或服务账号,服务账号需提前配置Chat空间的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:40:09