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

使用Chatwoot API发送交互式消息报错:String does not have #dig method

错误原因及排查方案

这个错误是因为Chatwoot后端(基于Ruby开发)尝试对一个字符串类型的值调用dig方法导致的——dig是Ruby中用于从嵌套哈希或数组中取值的方法,仅能作用于哈希/数组,无法作用于字符串。结合你发送交互式消息的场景,问题出在请求payload的格式不符合API要求,具体可能是以下情况:

  • content字段格式错误:类型1(选项式)交互式消息要求content是一个嵌套对象,包含interactive_type和options等字段,但你可能将content的值传成了字符串(比如错误地直接拼接字符串,而非构造数组后转JSON)。
  • options字段格式错误:options需要是一个包含多个选项对象的数组(每个选项需有label和value字段),但你可能将其传成了逗号分隔的字符串或其他非数组格式。

正确的PHP代码示例

确保构造的请求结构符合要求,示例如下:

<?php
$apiUrl = "https://your-chatwoot-instance.com/api/v1/conversations/{conversation_id}/messages";
$apiToken = "your-api-token";

// 构造交互式消息的正确结构
$messagePayload = [
    "recipient_id" => "user-recipient-id",
    "content" => [
        "interactive_type" => "option",
        "options" => [
            ["label" => "选项1", "value" => "option_value_1"],
            ["label" => "选项2", "value" => "option_value_2"]
        ]
    ],
    "message_type" => "outgoing",
    "channel" => "website" // 根据你的渠道调整
];

// 发送请求
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "Api-Key: {$apiToken}"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($messagePayload));

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

var_dump($response);
?>

排查步骤

  1. 打印你实际发送的json_encode后的payload,检查content是否是对象格式,options是否是数组。
  2. 确认没有将content或其嵌套字段(如options)错误地转换为字符串(比如用implode处理选项列表)。
  3. 对比Chatwoot官方API文档中的交互式消息结构,确保每个字段的类型完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:15:31