Lägga till en Microsoft Teams-användare i ett befintligt anrop med hjälp av Samtalsautomation

Viktigt!

Den här funktionen i Azure Communication Services är för närvarande i förhandsversion.

Förhandsversions-API:er och SDK:er tillhandahålls utan ett serviceavtal. Vi rekommenderar att du inte använder dem för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds, eller så kan de ha begränsade funktioner.

Mer information finns i Kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.

I den här snabbstarten använder vi API:erna för samtalsautomatisering i Azure Communication Services för att lägga till, ta bort och överföra samtal till en Teams-användare.

Förutsättningar

Steg 1: Auktorisering för din Azure Communication Services-resurs för att aktivera anrop till Microsoft Teams-användare

Om du vill aktivera samtal via API:er för samtalsautomatisering måste en Microsoft Teams-administratör eller global administratör uttryckligen ge Communication Services-resurserna åtkomst till klientorganisationen för att tillåta samtal.

Inställningen Set-CsTeamsAcsFederationConfiguration (MicrosoftTeamsPowerShell) klientnivå som aktiverar/inaktiverar federation mellan klientorganisationen och specifika Communication Services-resurser.

Set-CsExternalAccessPolicy (SkypeForBusiness) Användarprincip som gör det möjligt för administratören att ytterligare kontrollera vilka användare i organisationen som kan delta i federerad kommunikation med Communication Services-användare.

Steg 2: Använd Graph API för att hämta Microsoft Entra-objekt-ID för Teams-användare och eventuellt kontrollera deras närvaro

En Teams-användares Microsoft Entra-objekt-ID (OID) krävs för att lägga till dem i eller överföra dem från ett Communication Services-anrop. OID kan hämtas via 1) Office-portalen, 2) Administrationscenter för Microsoft Entra, 3) Microsoft Entra Connect; eller 4) Graph API. I följande exempel används Graph API.

En Microsoft Entra-administratör måste ge sitt stora medgivande innan Graph kan användas för att söka efter användare. Läs mer genom att följa översiktsdokumentet för Microsoft Graph API för säkerhet. OID kan hämtas med hjälp av listan användare API för att söka efter användare. I följande exempel visas en sökning efter visningsnamn, men du kan också söka efter andra egenskaper:

Visa en lista över användare som använder Microsoft Graph v1.0:

Request:
    https://graph.microsoft.com/v1.0/users?$search="displayName:Art Anderson"
Permissions:
    Application and delegated. Refer to documentation.
Response:
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
    "value": [
        {
            "displayName": "Art Anderson",
            "mail": "artanderson@contoso.com",
            "id": "fc4ccb5f-8046-4812-803f-6c344a5d1560"
        }

Du kan också hämta närvaro för en användare med hjälp av API:et hämta närvaro och användaren ObjectId. Läs mer i dokumentationen om Microsoft Graph v1.0.

Request:
https://graph.microsoft.com/v1.0/users/fc4ccb5f-8046-4812-803f-6c344a5d1560/presence
Permissions:
Delegated only. Application not supported.  Refer to documentation.
Response:
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('fc4ccb5f-8046-4812-803f-6c344a5d1560')/presence/$entity",
    "id": "fc4ccb5f-8046-4812-803f-6c344a5d1560",
    "availability": "Offline",
    "activity": "Offline"

Steg 3: Lägg till en Teams-användare i ett befintligt Communication Services-anrop som styrs av API:er för samtalsautomatisering

Du måste slutföra det nödvändiga steget och ha en webbtjänstapp för att styra ett Communication Services-anrop. Med hjälp av callConnection-objektet lägger du till en deltagare i anropet.

CallAutomationClient client = new CallAutomationClient('<Connection_String>');
AnswerCallResult answer = await client.AnswerCallAsync(incomingCallContext, new Uri('<Callback_URI>'));
await answer.Value.CallConnection.AddParticipantAsync(
    new CallInvite(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'))
    {
        SourceDisplayName = "Jack (Contoso Tech Support)"
    });
CallAutomationClient client = new CallAutomationClientBuilder().connectionString("<resource_connection_string>").buildClient();
AnswerCallResult answer = client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.getCallConnection().addParticipant(
    new CallInvite(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"))
        .setSourceDisplayName("Jack (Contoso Tech Support)"));
const client = new CallAutomationClient("<resource_connection_string>");
const answer = await client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.callConnection.addParticipant({
    targetParticipant: { microsoftTeamsUserId: "<Teams_User_Guid>" },
    sourceDisplayName: "Jack (Contoso Tech Support)"
});
call_automation_client = CallAutomationClient.from_connection_string("<resource_connection_string>")
answer = call_automation_client.answer_call(incoming_call_context = incoming_call_context, callback_url = "<Callback_URI>")
call_connection_client = call_automation_client.get_call_connection(answer.call_connection_id)
call_connection_client.add_participant(target_participant = CallInvite(
    target = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"),
    source_display_name = "Jack (Contoso Tech Support)"))

På Microsoft Teams skrivbordsklient skickas Jacks samtal till Microsoft Teams-användaren via ett meddelande om inkommande popup-samtal.

Skärmbild av Microsoft Teams skrivbordsklient, Jacks samtal skickas till Microsoft Teams-användaren via ett meddelande om inkommande popup-samtal.

När Microsoft Teams-användaren har accepterat samtalet visar anropsupplevelsen för Microsoft Teams-användaren alla deltagare i Microsoft Teams-listan. Ditt program som hanterar anropet med hjälp av Api för samtalsautomatisering förblir dolt för Teams-användare på samtalsskärmen. Skärmbild av Microsoft Teams-användare som accepterar samtalet och anger anropsupplevelsen för Microsoft Teams-användaren.

Steg 4: Ta bort en Teams-användare från ett befintligt Communication Services-anrop som styrs av API:er för samtalsautomatisering

await answer.Value.CallConnection.RemoveParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().removeParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.removeParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.remove_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"))

Valfri funktion: Överföra till en Teams-användare från ett befintligt Communication Services-anrop som styrs av API:er för samtalsautomatisering

await answer.Value.CallConnection.TransferCallToParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().transferCallToParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.transferCallToParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.transfer_call_to_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id = "<USER_ID>"))

Rensa resurser

Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser.

Nästa steg