Ответить на вызов бота в Microsoft Teams с Graph API - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь ответить на вызов в командах, но на самом деле я не получаю ответ от бота.

Сначала я получаю access_token от Graph API.

Затем у меня есть маршруткоторый перехватывает вызовы ботов.

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);
      });
  });
}

Как упомянуто в документации , сервер должен сначала ответить 204, чтобы получить ответ в Graph APIпротокол.

На самом деле я не получаю ответ.Бот продолжает звонить до тех пор, пока не получит голосовое сообщение: «Вы еще не можете поговорить с ботом, мы работаем над ним».

Как уже упоминалось в Документация API команд , я должен получитьобратный вызов с идентификатором ресурса и другой информацией, позволяющей ответить на вызов.

Поэтому я использую функцию POST для ответа.но здесь я не получаю никакого ответа 202 Accepted, как указано в документации, вместо этого я получаю более одного обратного вызова с разными идентификаторами ресурсов, а затем через несколько секунд я получаю голосовое сообщение.

1 Ответ

0 голосов
/ 29 октября 2018

Решение состоит в том, чтобы изменить acceptedModalities: ["audio"] на acceptedModalities: ["Audio"]

...