使用Graph API响应Microsoft Teams中的漫游器调用

时间:2018-10-29 00:16:06

标签: node.js azure-active-directory azure-ad-graph-api microsoft-teams

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

首先,我从Graph 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的回调,然后几秒钟后我收到了语音消息。

1 个答案:

答案 0 :(得分:1)

解决方案是将acceptedModalities: ["audio"] 更改为acceptedModalities: ["Audio"]