如何在PHP中获取Dialogflow向API返回的custom payload响应
解决步骤
- 调整API请求参数
调用Dialogflow V2的detectIntent接口时,需在请求的queryParams中设置intentView为INTENT_VIEW_FULL,默认的INTENT_VIEW_UNSPECIFIED配置只会返回基础文本响应,不会携带完整的自定义payload内容。如果你的payload是指定了专属平台的(比如微信、Actions on Google等),还需要在queryParams中指定对应的平台参数,和控制台配置payload时选择的平台保持一致。 - 修正响应解析逻辑
自定义payload不会出现在顶层的fulfillmentText字段中,而是存放在fulfillmentMessages数组里。你需要遍历整个fulfillmentMessages数组,过滤出包含payload字段的项,从中提取richContent等自定义内容,不要只读取数组第一个文本类型的响应项。 - 校验意图配置规则
登录Dialogflow控制台,进入对应意图的响应配置页,确认自定义payload已经成功保存,且没有和其他上下文响应分支冲突:如果该意图设置了多个带上下文条件的响应,需要确认当前会话的上下文匹配到的是携带payload的响应分支,而不是只有文本的分支。
PHP调用示例(适配Dialogflow V2 SDK)
// 引入Dialogflow对应依赖 use Google\Cloud\Dialogflow\V2\DetectIntentRequest; use Google\Cloud\Dialogflow\V2\QueryInput; use Google\Cloud\Dialogflow\V2\QueryParameters; use Google\Cloud\Dialogflow\V2\IntentView; // 基础请求配置 $detectIntentRequest = new DetectIntentRequest(); $queryInput = new QueryInput(); // 此处省略session设置、文本输入配置等通用代码 // 配置参数返回完整意图信息 $queryParams = new QueryParameters(); $queryParams->setIntentView(IntentView::INTENT_VIEW_FULL); // 若payload绑定了特定平台,补充对应平台配置 // $queryParams->setPayload(['platform' => '对应平台名称']); $detectIntentRequest->setQueryParams($queryParams); // 发起接口请求 $response = $sessionClient->detectIntent($session, $queryInput); $queryResult = $response->getQueryResult(); // 遍历提取自定义payload $customPayload = null; $fulfillmentMessages = $queryResult->getFulfillmentMessages(); foreach ($fulfillmentMessages as $message) { if ($message->getPayload()) { $customPayload = json_decode($message->getPayload()->serializeToJsonString(), true); break; } } // 后续自行处理$customPayload即可
内容的提问来源于stack exchange,提问作者invador0007
相关产品推荐
相关产品推荐

