Dialogflow V2 Android Java SDK:如何将QueryParameters添加至QueryInput
在Dialogflow V2 Java SDK中为查询添加自定义Payload参数
嘿,我知道你卡在哪了!你已经搞定了QueryInput和QueryParameters的创建,但没找到把两者结合起来的方式——其实问题出在detectIntent的调用方式上,你用的是简化版的重载方法,没法直接传入参数。咱们得换个方式,构建完整的DetectIntentRequest对象来把所有信息打包进去。
下面是修改后的完整代码,关键步骤我标出来了:
SessionsClient.create().use { sessionsClient -> // 设置会话名称 val session = SessionName.of(PROJECT_ID, UUID) System.out.println("Session Path: $session") // 创建文本输入 val textInput = TextInput.newBuilder() .setText(text) .setLanguageCode(LANGUAGE_CODE) .build() // 别忘了调用build完成构建 val queryInput = QueryInput.newBuilder() .setText(textInput) .build() // 注意:JSON字符串要符合规范,键和值都得用双引号包裹 val payload = "{\"someid\": \"$someid\"}" val queryParameters = QueryParameters.newBuilder() .setPayload(Struct.parseFrom(payload.toByteArray())) .build() // 关键一步:构建完整的请求对象,把参数添加进去 val detectIntentRequest = DetectIntentRequest.newBuilder() .setSession(session.toString()) // 这里需要传入会话的字符串形式 .setQueryInput(queryInput) .setQueryParameters(queryParameters) // 就是这里把自定义参数关联到请求中 .build() // 发送完整的检测意图请求 val response = sessionsClient.detectIntent(detectIntentRequest) return response.queryResult }
几个要注意的小细节:
- 你之前的
TextInput.newBuilder()没调用build(),我帮你补上了,不然会导致输入对象不完整 - Payload的JSON字符串必须严格符合语法规范,键和字符串值都要用双引号,否则
Struct.parseFrom会解析失败 - 创建
DetectIntentRequest时,setSession需要传入会话的字符串形式,不能直接传SessionName对象
这样修改后,你的自定义Payload就会随着查询一起发送给Dialogflow啦!
内容的提问来源于stack exchange,提问作者BLDD
相关产品推荐
相关产品推荐

