java - google dialogflow 上的操作 - 使用 Java 的 webhook
问题描述
我使用 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
在对话框流上运行时,我得到了响应: 但是,使用具有相同 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) {
解决方案
我对您的运行时环境(Azure 上的 Java?使用 Microsoft 的 Azure 包com.microsoft.azure.functions
?)不够熟悉,无法弄清楚到底发生了什么,但看起来您的HttpResponseMessage.Builder
实例没有正确编码主体,或者没有设置响应时清除编码。
具体来说,我怀疑charset
最终会变成 UTF-16 或类似的东西。我会确保您将其强制为 UTF-8。
推荐阅读
- javascript - JavaScript 从第一个事件创建第二个事件
- php - 使用 PHPUnit 进行流明测试,仅 2 次测试就显示了过多的断言
- gradle - Spring Boot + Gradle:如何构建 rpm
- r - 如何在不同的数据集中为 geom_bar() 保持相同的颜色?
- spring - 每次在spring boot应用程序中加载任何jsp页面时都会加载页眉和页脚
- java - 如果响应是二进制文件,如何在java中处理多部分请求的API响应?
- java - Java 语义 - 有没有办法写得更好?
- c# - 如何在 blazor 服务器端本地化验证消息 (DataAnnotationsValidator)
- c# - 有没有办法让 SQL 启动 C# 应用程序
- php - 如何将 Array 中的数组与 foreach 循环合并?