【问题标题】:Actions on google dialogflow - webhook using Javagoogle dialogflow 上的操作 - 使用 Java 的 webhook
【发布时间】: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


【解决方案1】:

我对您的运行时环境(Azure 上的 Java?使用 Microsoft 的 Azure 包 com.microsoft.azure.functions?)不够熟悉,无法弄清楚到底发生了什么,但看起来您的 HttpResponseMessage.Builder 实例没有编码正文正确,或者在设置响应时不清楚编码。

具体来说,我怀疑 charset 最终会变成 UTF-16 或类似的东西。我会确保您将其强制为 UTF-8。

【讨论】:

  • (是的,使用天蓝色函数)好吧,所以你认为缺少的可能是 json 的内容类型?我想我可以试着把它包起来。
  • 不一定是内容类型,更多的是字符集编码。我已经更新了回复以澄清一点。
  • 是问题之一,使用 byte [] 发送也是另一个问题。
  • 你解决了吗?如果是这样,请使用详细信息编辑答案,以便将来遇到问题的任何其他人都可以获得解决方案。 (然后接受和/或支持答案总是值得赞赏的。)
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2019-11-19
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多