GoogleDialogflow上的操作-使用Java的Webhook

时间:2018-12-03 21:51:55

标签: java http dialogflow actions-on-google

我已经使用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操作中显示的实际结果) 和这是行不通的(尽管确切的json是由我的c#webhook返回的,并且工作正常) 是否有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 \操作更加了解我:/

EDIT 2.0

在dialogflow上运行时,我得到答复: enter image description here 但是,使用具有相同URL和参数的Postman来调用它: 这是dialogflow得到的响应,由于某种原因,他似乎不理解(在VS代码中对齐)

EDIT 3.0

声明:

public HttpResponseMessage run(
    @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> s,
    final ExecutionContext c) {

1 个答案:

答案 0 :(得分:0)

我对您的运行时环境(对Azure上的Java?使用Microsoft的Azure软件包com.microsoft.azure.functions?)的熟悉程度还不够熟悉,但是看起来像您的HttpResponseMessage.Builder实例无法正确编码主体,或者在设置响应时不清楚编码。

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