1

我的服务在请求后将异步响应发送回 api.ai,该响应显示在用户界面(Slack、Skype 等)上。

但是在请求的操作完成后(5秒后),我无法向界面发送响应。

const apiai = require('apiai');

module.exports = (server, config) => {
  const app = apiai('<Client access token>');
  server.post('/', (req, resp) => {

    let body = '';
    req.on('data', function(data) {
      body += data;
    });
    req.on('end', function() {
      body = JSON.parse(body);
      resp.send({
        speech: 'Please wait...',
      });

      const sessionId = body.sessionId;

      setTimeout(() => {
        const evt = app.eventRequest({
          name: 'testevent', data: { },
        }, { sessionId });

        evt.on('response', resp2 => {
          debugger;
        });
        evt.on('error', err => {
          debugger;
        });
        evt.end();

      }, 10 * 1000);
    });
  });
};

在对象resp2中,我看到了result.fulfillment.speech应该发送到界面的响应文本。但事实并非如此。

有没有办法做到这一点?

4

1 回答 1

0

您问题中的代码使用 Api.ai 的 API,该 API 旨在用于将您的 Api.ai 代理嵌入到您自己的应用程序中。这背后的目的是让您实现/使用自己的聊天/消息传递系统,然后通过此 API 将事件和文本从与用户的对话发送到 Api.ai,这将为您提供响应(如您所见)和然后您可以使用 API 中的这些响应并在您自己的聊天/消息系统中响应您的用户:https ://docs.api.ai/docs/query

听起来您有兴趣让您的 Api.ai 代理直接与 Slack 和 Skype 等聊天平台集成。如果是这种情况,您应该查看 Api.ai 的集成文档:https ://docs.api.ai/docs/integrations

于 2017-06-26T18:37:06.933 回答