使用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); ?>
排查步骤
- 打印你实际发送的
json_encode后的payload,检查content是否是对象格式,options是否是数组。 - 确认没有将
content或其嵌套字段(如options)错误地转换为字符串(比如用implode处理选项列表)。 - 对比Chatwoot官方API文档中的交互式消息结构,确保每个字段的类型完全匹配。
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

