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 来播放音频,因为通话中没有其他人。