使用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
相关产品推荐
相关产品推荐

