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

PHP使用CURL发送带按钮的Discord消息报50035错误如何解决

错误原因

返回MODEL_TYPE_CONVERT报错是因为提交的components字段结构不符合Discord API的规范,具体问题有两个:

  1. 消息体顶层的components字段要求是动作行(Action Row)对象的数组,你的代码直接将单个动作行的关联数组赋值给了components,没有外层索引数组包裹。json_encode处理关联数组时会输出JSON对象,API解析时会把这个对象下的type、components两个键识别为两个独立的组件项,这两项都不是合法的组件对象格式,因此触发报错。
  2. 动作行对象内部的components字段要求是按钮等交互组件对象的数组,你的代码直接将单个按钮的关联数组写在该字段下,同样缺少索引数组包裹,结构不合法。

额外注意:所有组件的type字段建议传整数类型,不要传字符串格式的数字,避免隐式类型转换引发兼容问题。

修复代码

调整components的数组层级,严格按照「消息体 → components数组 → 动作行对象 → components数组 → 按钮对象」的结构嵌套即可,修复后的完整代码如下:

<?php
$channelID = "IDHERE";
$webhookurl = "https://discord.com/api/v10/channels/" . $channelID . "/messages";

$json_data = json_encode([
    // 消息内容
    "content" => "test",
    // 关闭语音播报
    "tts" => false,
    // 消息组件
    "components" => [
        [
            "type" => 1, // 动作行类型,固定值为1
            "components" => [
                [
                    "type" => 2, // 按钮类型,固定值为2
                    "label" => "test",
                    "custom_id" => "help_me",
                    "style" => 1 // 按钮样式,1为主色按钮
                ]
            ]
        ]
    ],
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);


$ch = curl_init($webhookurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-type: application/json',
    'Authorization: Bot 替换为你的机器人实际Token' // 注意此处替换为真实Bot Token
));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

如果需要在同一个动作行放多个按钮,直接往内层的components数组里追加按钮关联数组即可;如果需要放多行按钮,就往顶层的components数组里追加新的动作行对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:48:15