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

使用Slack API Webhook发送带按钮消息的PHP实现问题

解决PHP中Slack Webhook带按钮消息的问题

我之前也踩过这个坑!你遇到的问题大概率是数组结构不对——Slack的API对attachments和actions的格式要求很严格,必须是嵌套数组的形式,而不是单个数组元素。

先给你一份能正常运行的完整代码:

<?php
// 基础消息文本
$message = "这是你的报告通知";

// 构建按钮动作:注意这里是数组的数组!
$actions = [
    [
        'type' => "button",
        'text' => "查看Report1",
        'url' => "https://url.report1"
    ]
];

// 组装完整的Slack消息数据
$data = [
    "text" => $message,
    "attachments" => [
        [
            "fallback" => "无法查看按钮?点击这里查看报告:https://url.report1",
            "actions" => $actions
        ]
    ]
];

// 发送请求到Slack Webhook
$webhookUrl = "你的Slack Webhook地址";
$curl = curl_init($webhookUrl);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 可选:获取返回结果用于调试

$response = curl_exec($curl);
if(curl_errno($curl)){
    echo "请求错误:" . curl_error($curl);
}
curl_close($curl);
?>

关键注意点:

  • actions必须是数组的数组:哪怕只有一个按钮,也要把它放在一个数组里。你之前的代码可能直接把单个动作赋值给actions,这不符合Slack的API规范。
  • attachments也是数组:每个附件都是一个独立的数组元素,所以"attachments"对应的是包含单个附件数组的数组。
  • JSON编码与请求头:一定要用json_encode()把PHP数组转成JSON格式,同时设置Content-Type: application/json请求头,否则Slack无法正确解析你的消息。
  • fallback字段不能少:这是给无法显示按钮的客户端准备的备用文本,必须设置,否则消息可能无法正常发送。

如果需要添加多个按钮,直接在$actions数组里追加新的动作即可,比如:

$actions = [
    [
        'type' => "button",
        'text' => "查看Report1",
        'url' => "https://url.report1"
    ],
    [
        'type' => "button",
        'text' => "查看Report2",
        'url' => "https://url.report2"
    ]
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:31:38