【发布时间】:2018-12-03 21:51:55
【问题描述】:
我使用 Http 请求-响应消息在 C# 中创建了一个 webhook。现在我正在尝试创建一个Java。 这就是我返回响应的方式:(基于示例响应模板)
return s.createResponseBuilder(HttpStatus.OK)
.body(new JSONObject().put("fulfillmentText", resultText)
.put("fulfillmentMessages",
new JSONArray().put(new JSONObject().put("simpleResponses",
new JSONObject().put("simpleResponses",
new JSONArray().put(new JSONObject().put("displayText", "display text")
.put("textToSpeech", "display text")))))
.put("payload",
new JSONObject().put("google", new JSONObject().put("expectUserResponse", Boolean.TRUE)))
.toString())
.build();
(结果文本是google操作中显示的实际结果) 这不起作用(尽管我的 c# webhook 返回了确切的 json 并且它工作正常) 有没有它会喜欢的 Java 中的 HttpResponse 模板?
编辑
我尝试过使用 Java SDK 提供的类:
// create simple response
GoogleCloudDialogflowV2IntentMessageSimpleResponse sr = new GoogleCloudDialogflowV2IntentMessageSimpleResponse();
sr.setDisplayText("display text");
sr.setTextToSpeech("text to speech");
// create list of simple response
List<GoogleCloudDialogflowV2IntentMessageSimpleResponse> sr_list = new ArrayList<>();
sr_list.add(sr);
// set simple_responses
GoogleCloudDialogflowV2IntentMessageSimpleResponses sr1 = new GoogleCloudDialogflowV2IntentMessageSimpleResponses();
sr1.setSimpleResponses(sr_list);
// set intent msg
GoogleCloudDialogflowV2IntentMessage intentmsg = new GoogleCloudDialogflowV2IntentMessage();
intentmsg.setSimpleResponses(sr1);
// set list of intent msgs
List<GoogleCloudDialogflowV2IntentMessage> intent_list = new ArrayList<>();
intent_list.add(intentmsg);
// set up the response
GoogleCloudDialogflowV2WebhookResponse response = new GoogleCloudDialogflowV2WebhookResponse();
response.setFulfillmentMessages(intent_list);
response.setFulfillmentText(resultText);
Map<String,Object> my_map = new HashMap<String, Object>();
my_map.put("expectUserResponse", Boolean.TRUE);
response.setPayload(my_map);
并将该 response.toString 作为 HTTP 响应的正文发送,但这并没有使 Google 上的 dialogflow \ 操作更了解我:/
编辑 2.0
在 dialogflow 上运行时,我得到了响应: 但是,使用具有相同 URL 和参数的 Postman 调用它: 这是对话流得到的响应,由于某种原因他似乎不理解它(在 VS 代码中对齐)
编辑 3.0
声明:
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> s,
final ExecutionContext c) {
【问题讨论】:
-
您能否更新您的问题以澄清您所说的“不工作”是什么意思?你有错误吗?错误在哪里?如果出现在模拟器中,能否贴出“请求”、“回复”和“调试”选项卡的内容?您的 Java 服务器上是否有任何日志表明可能发生了什么?
-
已编辑。如果这对您有任何帮助,请分享您的想法:)
-
帮助很大。您能否再次更新以说明您的示例代码中的
s是什么类型? -
再次编辑,如果有帮助的话,我也在使用 dialogflow 的 V2 进行模拟(或谷歌上的操作)
标签: java http dialogflow-es actions-on-google