我正在使用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)