1

我正在尝试使用 MS Graph Communications API 将呼叫重定向到呼叫队列。我目前正在使用 C# SDk 与 Graph API 进行通信。

我知道呼叫队列只是 MS 创建的另一个应用程序,该应用程序的 id 是11cd3e2e-fccb-42ad-ad00-878b93575e07. 因此,以下代码片段应该可以调用此应用程序:


GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var targets = new List<InvitationParticipantInfo>()
{
    new InvitationParticipantInfo
    {
        Identity = new IdentitySet
        {
            Application = new Identity
            {
                DisplayName = "Call Queue",
                Id = "11cd3e2e-fccb-42ad-ad00-878b93575e07"
            }
        }
    }
};

var callbackUri = "https://bot.contoso.com/api/calls/24701998-1a73-4d42-8085-bf46ed0ae039";

await graphClient.Communications.Calls["491f0b00-ffff-4bc9-a43e-b226498ec22a"]
    .Redirect(targets,null,callbackUri)
    .Request()
    .PostAsync();

但是它不允许我传递我想调用的呼叫队列的 ID。在 de MS Graph API 中,Identity该类有一个额外的选项AdditionalData,它具有以下属性定义:


public IDictionary<string, object> AdditionalData { get; set; }

我最好的猜测是我们应该在这里传递一些参数,但是官方文档@ https://docs.microsoft.com/en-us/graph/api/call-redirect?view=graph-rest-1.0&tabs=csharp不是'没有提到任何关于这种可能性的事情。

有人知道这个参数可能是什么,或者,如果这不是实现这个目标的正确方法,如何调用 API 以转移到调用队列?

4

2 回答 2

0

您可以使用此方法:

    private async Task RedirectAsync(string callId)
    {
        try
        {
            var targets = new List<InvitationParticipantInfo>()
        {
            new InvitationParticipantInfo
            {
                Identity = new IdentitySet
                {

                }
            }
        };
            targets[0].Identity.SetApplicationInstance(new Identity { Id = "GuidApplicationInstanceOfCallQueue", ODataType = "microsoft.graph.identity" });              
            var callbackUri = "https://fakefake.ngrok.io/callback";
            await graphServiceClient.Communications.Calls[callId]
                .Redirect(targets, null, callbackUri)
                .Request()
                .PostAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }
于 2021-07-02T10:38:45.583 回答
0

“队列”应用程序是您自己托管的吗?或者这是一个 MSFT 托管应用程序?通常队列是全局应用程序的租户化实例,并且需要指定 applicationInstance 身份。

您使用的是哪个 SDK?Microsoft.Graph.Communications.Core SDK 提供IdentitySet允许您获取/设置不同身份类型的扩展方法。

var identitySet = new IdentitySet();

identitySet.SetPhone(new Identity { ... });
var phoneIdentity = identitySet.GetPhone();

identitySet.SetApplicationInstance(new Identity { ... });
var appInstanceIndetity = identitySet.GetApplicationInstance();

话虽如此,今天的通信 API 不支持机器人对机器人的调用/转移/邀请。这也适用于应用程序实例。

问候, 卡米尔

于 2020-01-28T16:49:22.730 回答