使用 Graph 响应 Microsoft Teams 中的机器人呼叫 API

Respond to a bot call in Microsoft Teams with Graph API

我试图在 Teams 中响应呼叫,但实际上我没有收到机器人的响应。

首先我从图表 API 得到 access_token。

然后我有一个拦截机器人调用的路由。

app.post("/api/call", function(req, res) {
  if (j === 1) {
    j = j + 1;
    res.status(204).send();
  } else {
    var answerbody = {
      callbackUri: "https://8a73b7ad.ngrok.io/api/call",
      acceptedModalities: ["audio"],
      mediaConfig: {
        "@odata.type": "#microsoft.graph.serviceHostedMediaConfig",
        preFetchMedia: [
          {
            uri: "https://cdn.contoso.com/beep.wav",
            resourceId: "1D6DE2D4-CD51-4309-8DAA-70768651088E"
          },
          {
            uri: "https://cdn.contoso.com/cool.wav",
            resourceId: "1D6DE2D4-CD51-4309-8DAA-70768651088F"
          }
        ]
      }
    };
    POST(
      "https://graph.microsoft.com/beta/" + req.body.resource + "/answer",
      answerbody
    )
      .then(
        data => console.log(data) // I get undefined
      )
      .catch(function(err) {
        console.log("err   " + err);
        res.status(200).send();
      });
  }
});

这里是 POST 函数

function POST(url, BB) {
  return new Promise(function(resolve, reject) {
    var options = {
      url: url,
      method: "POST",
      headers: {
        Accept: "application/json",
        Authorization: "Bearer " + token
      },
      body: BB,
      json: true
    };
    request(options)
      .then(function(body) {
        resolve(body);
      })
      .catch(function(err) {
        reject(err);
      });
  });
}

documentation 中所述,服务器应首先回复 204 以便在 Graph API 协议中获得响应。

实际上我没有收到回复。 Bot 仍在响铃,直到它收到语音消息:“您现在还不能与 bot 交谈,我们正在努力”。

Teams API documentation 中所述,我应该收到带有资源 ID 和其他信息的回调才能接听电话。

所以我用我的 POST 功能来回答。但在这里我没有收到文档中指示的任何 202 Accepted 响应,而是我收到了多个具有不同资源 ID 的回调,然后几秒钟后我收到了语音消息。

解决办法是把acceptedModalities: ["audio"] 改成acceptedModalities: ["Audio"]