小编Fit*_*itz的帖子

如何处理对外部REST服务的请求并将响应返回给Google Assistant?

我正在使用Java为Google助手创建一个应用程序,该应用程序将调用外部REST API并根据触发短语返回某些响应。我目前可以使用默认的欢迎意图通过Google模拟器上的操作返回简单的文本回复。但是,当我尝试调用外部REST API并发送回响应时,模拟器返回一条消息,内容为:

“ MalformedResponse:由于语音响应为空,无法将Dialogflow响应解析为AppResponse。”

我正在使用org.springframework.web.client.RestTemplate来自Spring框架的REST服务(https://fitzroi-rest-api-0525.appspot.com/rest/Fitz)进行以下调用来处理结果:( greeting = restTemplate.getForObject("https://fitzroi-rest-api-0525.appspot.com/rest/{name}", Greeting.class, givenName);这在常规Spring中效果很好专案,但不在Google Intent行动中)

我的测试应用程序的一个训练短语示例是“ Tony正在发送问候语”。从这里,我将“ Tony”提取为@sys.given-nameDialogflow中的一个实体。然后将该名称传递给REST服务进行处理。REST服务是一个MVC应用程序,它在与Google Assistant应用程序不同的Google Cloud项目中运行。

请让我知道这是否是使用Dialogflow fullfillment webhook消费REST服务的好方法。

以下是我的Webhook尝试使用REST服务的示例代码。

@ForIntent("process-greeting")
  public ActionResponse greetingProcessor(ActionRequest request) {
    LOGGER.info("Trying to process greeting intent");
    ResponseBuilder responseBuilder = getResponseBuilder(request);

    String givenName = (String) request.getParameter("given-name");


    if (givenName != null && !givenName.isEmpty()) {
      RestTemplate restTemplate = new RestTemplate();
      Greeting greeting = null;
      greeting = restTemplate.getForObject("https://fitzroi-rest-api-0525.appspot.com/rest/{name}", Greeting.class, givenName);

//    LOGGER.info("Attempting to send back " + greeting.getContent() + " to …
Run Code Online (Sandbox Code Playgroud)

java rest spring-mvc google-assist-api actions-on-google

5
推荐指数
1
解决办法
104
查看次数