如何通过API向Discord发送斜杠命令?(PHP/CURL实现求助)
解决Discord斜杠命令的PHP/CURL执行问题
你当前的代码误用了Discord Webhook——Webhook仅用于发送普通消息,无法触发斜杠命令。要执行斜杠命令,必须通过Discord API的交互端点调用,且需要使用机器人令牌而非Webhook URL。
核心前提
- 拿到目标工单机器人的
application_id(可在Discord开发者门户或服务器成员列表中查看机器人ID) - 你的机器人账号已加入目标服务器,且具备在指定频道使用该斜杠命令的权限
- 获取机器人的令牌(在Discord开发者门户的Bot页面生成)
- 明确目标服务器的
guild_id、频道的channel_id(开启Discord开发者模式后,右键服务器/频道即可复制ID)
正确的PHP/CURL实现代码
<?php // 替换为你的实际参数 $botToken = 'YOUR_BOT_TOKEN'; $applicationId = '工单机器人的APPLICATION_ID'; $guildId = '目标服务器ID'; $channelId = '目标频道ID'; // 构造斜杠命令的请求体 $payload = [ 'type' => 2, // 类型2表示应用命令交互,Discord API规定值 'application_id' => $applicationId, 'guild_id' => $guildId, 'channel_id' => $channelId, 'session_id' => uniqid(), // 生成唯一会话ID,可随意生成 'data' => [ 'name' => 'ticket', // 斜杠命令的名称 'options' => [ [ 'name' => '工单内容', // 匹配工单机器人命令的参数名称 'type' => 3, // 类型3表示字符串参数,需对应命令定义 'value' => '我的工单' // 你要提交的工单内容 ] ] ] ]; $jsonPayload = json_encode($payload); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://discord.com/api/v10/interactions'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', "Authorization: Bot $botToken" ]); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'CURL错误: ' . curl_error($ch); } else { // 输出响应用于调试 var_dump(json_decode($result, true)); } curl_close($ch); ?>
关键说明
type: 2:这是Discord API规定的应用命令交互类型,必须设置为2才能触发斜杠命令options数组:需严格匹配工单机器人斜杠命令的参数定义(包括参数名称、类型),如果命令无参数可省略该字段- 权限检查:确保机器人在目标服务器中拥有
SendMessages、UseApplicationCommands等必要权限 - API版本:示例使用v10版本,Discord API版本会定期更新,需保持与当前最新版本一致
内容的提问来源于stack exchange,提问作者Ondraasek
相关产品推荐
相关产品推荐

