我正在尝试从Webhook发送回响应,其内容的格式设置为可读取,而内容的格式设置为可语音。要在屏幕上阅读的文本将在displaytext字段中,而要说出的文本将在语音字段中。使用github.com/api-ai中的天气webhook示例,我尝试将第二个对象添加到resolve方法:

resolve(speech_output, displayText_output);


但是当用于发送响应时,不使用displayText_output:

callWeatherApi(city, date).then((speech_output, displayText_output) => {
            // Return the results of the weather API to API.AI
            res.setHeader('Content-Type', 'application/json');
            res.send(JSON.stringify({'speech': speech_output, 'displayText': displayText_output}));


displayText不包含在响应的JSON对象中。我认为Promise.resolve仅需要处理一个参数,而一个参数则返回Promise(resolve,reject)之类的错误。但是,当speech_output的值用于两个字段时,displayText将包含在JSON响应中。

我想知道是否有一种方法可以用相同的答案发送具有不同信息的这两个字段。

谢谢。

最佳答案

最简单的方法是为变量output创建一个新的Javascript对象,以同时包含displayTextspeech属性。例如:

output = { 'displayText': 'YOUR DISPLAY TEXT STRING HERE',
           'speech': 'YOUR SPEECH STRING HERE' };
resolve(output);


然后在您的then块中:

callWeatherApi(city, date).then((output) => {
            // Return the results of the weather API to API.AI
            res.setHeader('Content-Type', 'application/json');
            res.send(JSON.stringify(output));

10-08 03:12