我已经使用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上运行时,我得到答复: 但是,使用具有相同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) {
答案 0 :(得分:0)
我对您的运行时环境(对Azure上的Java?使用Microsoft的Azure软件包com.microsoft.azure.functions
?)的熟悉程度还不够熟悉,但是看起来像您的HttpResponseMessage.Builder
实例无法正确编码主体,或者在设置响应时不清楚编码。
具体来说,我怀疑charset
最终会变成UTF-16或类似的名称。我会确保您将其强制为UTF-8。