Teams Graph API,如何将拨出电话置于保持状态
Teams Graph API, how to place an outgoing call on Hold
我正在使用图表 API 从 BOT 向 Teams 用户拨出电话,API :
ret = await graphServiceClient.Communications.Calls
.Request()
.AddAsync(call);
这工作正常,我收到回调说呼叫是 a) 建立然后 b) 建立。
但是,如果我希望使用“Participant.StartHoldMusic”呼叫从 BOT 将此呼叫置于保留状态,(参见 https://docs.microsoft.com/en-us/graph/api/participant-startholdmusic?view=graph-rest-1.0&tabs=csharp#request)
这似乎不可能,因为参与者 ID 是必需的,并且没有通过提到的两个回调中的任何一个传递它:
Establishing
{
"@odata.type": "#microsoft.graph.commsNotifications",
"value": [
{
"@odata.type": "#microsoft.graph.commsNotification",
"changeType": "updated",
"resource": "/app/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceUrl": "/communications/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceData": {
"@odata.type": "#microsoft.graph.call",
"state": "establishing",
"callChainId": "fe6f4ad4-2187-45d0-967a-af93b0d9bca6"
}
}
]
}
Established:
{
"@odata.type": "#microsoft.graph.commsNotifications",
"value": [
{
"@odata.type": "#microsoft.graph.commsNotification",
"changeType": "updated",
"resource": "/app/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceUrl": "/communications/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceData": {
"@odata.type": "#microsoft.graph.call",
"state": "established",
"mediaState": {
"@odata.type": "#microsoft.graph.callMediaState",
"audio": "active"
},
"callChainId": "fe6f4ad4-2187-45d0-967a-af93b0d9bca6"
}
}
]
}
此外,如果我查看从 API 返回的对象以创建调用 (ret),它会显示:
即目标参与者 ID 为空。
此外,如果我尝试使用 API
轮询调用对象以获取参与者
graphServiceClient.Communications.Calls[callid].Participants
.Request()
.GetAsync();
参与者集合返回为空。
如果我没有参与者 ID,如何使用图表 API 保持通话?
更新:
有人建议我将“MyParticipantId”视为外部方的参与者。在与用户建立通话后,我尝试使用通话的 MyParticipantId 字段保持通话,
这会导致异常,代码 8522“未找到参与者”
本startHoldMusicAPI只支持群呼
不支持 P2P 调用(机器人调用 Teams 用户)。
对于群组通话,名册更新将始终发生,以便机器人能够获得通话中任何参与者的参与者 ID。
此等待音乐功能不会让用户的 Teams 客户端处于等待状态。目标 Teams 用户在通话中仍将处于“活跃”状态,但开始听到音乐而不是其他人的谈话。
为了使 P2P 以这种方式工作,bot 可以调用 PlayPrompt API 来播放音频,因为通话中没有其他人。
我正在使用图表 API 从 BOT 向 Teams 用户拨出电话,API :
ret = await graphServiceClient.Communications.Calls
.Request()
.AddAsync(call);
这工作正常,我收到回调说呼叫是 a) 建立然后 b) 建立。
但是,如果我希望使用“Participant.StartHoldMusic”呼叫从 BOT 将此呼叫置于保留状态,(参见 https://docs.microsoft.com/en-us/graph/api/participant-startholdmusic?view=graph-rest-1.0&tabs=csharp#request)
这似乎不可能,因为参与者 ID 是必需的,并且没有通过提到的两个回调中的任何一个传递它:
Establishing
{
"@odata.type": "#microsoft.graph.commsNotifications",
"value": [
{
"@odata.type": "#microsoft.graph.commsNotification",
"changeType": "updated",
"resource": "/app/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceUrl": "/communications/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceData": {
"@odata.type": "#microsoft.graph.call",
"state": "establishing",
"callChainId": "fe6f4ad4-2187-45d0-967a-af93b0d9bca6"
}
}
]
}
Established:
{
"@odata.type": "#microsoft.graph.commsNotifications",
"value": [
{
"@odata.type": "#microsoft.graph.commsNotification",
"changeType": "updated",
"resource": "/app/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceUrl": "/communications/calls/a41f5d00-0825-4221-9fd2-2924e62e55a3",
"resourceData": {
"@odata.type": "#microsoft.graph.call",
"state": "established",
"mediaState": {
"@odata.type": "#microsoft.graph.callMediaState",
"audio": "active"
},
"callChainId": "fe6f4ad4-2187-45d0-967a-af93b0d9bca6"
}
}
]
}
此外,如果我查看从 API 返回的对象以创建调用 (ret),它会显示:
即目标参与者 ID 为空。
此外,如果我尝试使用 API
轮询调用对象以获取参与者graphServiceClient.Communications.Calls[callid].Participants
.Request()
.GetAsync();
参与者集合返回为空。
如果我没有参与者 ID,如何使用图表 API 保持通话?
更新:
有人建议我将“MyParticipantId”视为外部方的参与者。在与用户建立通话后,我尝试使用通话的 MyParticipantId 字段保持通话,
这会导致异常,代码 8522“未找到参与者”
本startHoldMusicAPI只支持群呼
不支持 P2P 调用(机器人调用 Teams 用户)。
对于群组通话,名册更新将始终发生,以便机器人能够获得通话中任何参与者的参与者 ID。
此等待音乐功能不会让用户的 Teams 客户端处于等待状态。目标 Teams 用户在通话中仍将处于“活跃”状态,但开始听到音乐而不是其他人的谈话。
为了使 P2P 以这种方式工作,bot 可以调用 PlayPrompt API 来播放音频,因为通话中没有其他人。