Ответить на вызов бота в Microsoft Teams с Graph API

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

Сначала я получаю 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 ответ

Решение

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

Другие вопросы по тегам