Ответить на вызов бота в 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"]