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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:04