使用 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"]
我试图在 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"]