Udostępnij za pośrednictwem


Zarządzanie wywołaniami użytkowników usługi Teams za pomocą zestawu SDK do obsługi wywołań w ramach Communication Services

Dowiedz się, jak zarządzać wywołaniami za pomocą zestawu SDK usług Azure Communication Services. Nauczymy się, jak wykonywać połączenia, zarządzać ich uczestnikami i właściwościami.

Wymagania wstępne

Instalacja zestawu SDK

Użyj polecenia npm install, aby zainstalować zestawy SDK zarówno do obsługi połączeń, jak i funkcji ogólnych dla języka JavaScript w usługach Azure Communication Services.

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Inicjowanie wymaganych obiektów

Utwórz wystąpienie CallClient, aby zainicjować stos wywołań. Możesz skonfigurować rejestrowanie dla wywołań SDK za pomocą AzureLogger wystąpienia i setLogLevel metody. Dostęp do deviceManager systemu operacyjnego można uzyskać za pomocą metody getDeviceManager.

Następnie użyj metody createTeamsCallAgent , aby utworzyć asynchronicznie TeamsCallAgent wystąpienie, które będzie zarządzać przychodzącymi i wychodzącymi wywołaniami użytkownika usługi Teams. Metoda przyjmuje CommunicationTokenCredential jako argument reprezentujący token dostępu dla użytkownika usługi Teams.

const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");

// Set the logger's log level
setLogLevel('verbose');

// Redirect log output to wherever desired. To console, file, buffer, REST API, etc...
AzureLogger.log = (...args) => {
    console.log(...args); // Redirect log output to console
};

const userToken = '<USER_TOKEN>';
callClient = new CallClient();
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const teamsCallAgent = await callClient.createTeamsCallAgent(tokenCredential);
const deviceManager = await callClient.getDeviceManager();

Wykonaj połączenie

Rozpocznij synchroniczne połączenie indywidualne lub grupowe za pomocą startCall API na teamsCallAgent. Możesz podać jako parametr MicrosoftTeamsUserIdentifier lub PhoneNumberIdentifier, aby zdefiniować element docelowy wywołania. Metoda zwraca instancję TeamsCall, która umożliwia subskrybowanie zdarzeń połączeń.

Uwaga

Rozpoczęcie grupowego połączenia za pomocą teamsCallAgent wymaga czatu threadId podczas korzystania z metody startCall. Utworzone TeamsCall wystąpienie ma właściwość threadId odwołującą się do tego wątku. Zestaw SDK usług komunikacyjnych do dzwonienia nie synchronizuje listy uczestników czatu i połączeń. Firma Microsoft zachęca deweloperów do utrzymywania synchronizacji tej listy w celu zapewnienia najlepszego doświadczenia użytkownikom. Dowiedz się, jak zarządzać wątkiem czatu.

Rozpocznij pojedyncze połączenie VoIP do użytkownika Teams.

const userCallee = { microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>' };
const oneToOneCall = teamsCallAgent.startCall(userCallee);

Rozpocznij połączenie telefoniczne jeden do jednego na numer telefonu E.164:

const phoneCallee = { phoneNumber: '<PHONE_NUMBER_E164_FORMAT>' }
const oneToOneCall = teamsCallAgent.startCall(phoneCallee );

Rozpocznij połączenie grupowe do użytkownika Teams za pomocą Voice-over IP (VoIP) i numeru telefonu.

const userCallee = { microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>' }
const phoneCallee = { phoneNumber: '<PHONE_NUMBER_E164_FORMAT>'};
const groupCall = teamsCallAgent.startCall([userCallee, phoneCallee], { threadId: '<THREAD_ID>' });

Dołącz do połączenia

Dołącz do spotkania w Teams

Można dołączyć do spotkań usługi Teams za pomocą metody join na wystąpieniu teamsCallAgent. Użytkownicy usługi Teams mogą dołączać do spotkania usługi Teams, podając TeamsMeetingLinkLocator, TeamsMeetingCoordinatesLocator lub TeamsMeetingIdLocator jako element.

Dołącz do spotkania Teams za pomocą adresu URL spotkania.

const meetingCall = teamsCallAgent.join({ meetingLink: '<MEETING_LINK>' });

Dołącz do spotkania usługi Teams przy użyciu kombinacji identyfikatora wątku, identyfikatora organizatora, identyfikatora dzierżawy i identyfikatora wiadomości:

const meetingCall = teamsCallAgent.join({ threadId: '<THREAD_ID>', organizerId: '<ORGANIZER_ID>', tenantId: '<TENANT_ID>', messageId: '<MESSAGE_ID>' });

Dołącz do spotkania usługi Teams przy użyciu kodu spotkania i kodu dostępu:

const meetingCall = teamsCallAgent.join({ meetingId: '<MEETING_CODE>', passcode: '<PASSCODE>'});

Dołącz do spotkania Teams przy użyciu identyfikatora i hasła.

Deweloperzy mogą łączyć uczestników ze spotkaniem w usłudze Teams na wiele sposobów. Jednym ze sposobów jest użycie identyfikatora spotkania i kodu dostępu, co umożliwia użytkownikom dołączanie do spotkania usługi Teams, do którego są zapraszani z urządzenia lub aplikacji. Aby dołączyć do spotkania, zawsze musisz podać zarówno identyfikator spotkania, jak i kod dostępu. W kodzie dostępu jest uwzględniana wielkość liter.

  • Format identyfikatora spotkania i kodu dostępu:

    • Identyfikator spotkania: 12 cyfr.
    • Kod dostępu: 6 znaków
  • Jak często trzeba odświeżyć identyfikator spotkania i kod dostępu?

    • Identyfikator spotkania i kod dostępu nie zmieniają się po utworzeniu. Deweloperzy nie muszą odświeżać ani jednego.
    • Organizator spotkania usługi Teams nie może ponownie wygenerować identyfikatora spotkania i kodu dostępu.
  • Czy istnieje różnica w doświadczeniu spotkania w Teams, jeśli osoba dołącza przez adres URL czy identyfikator spotkania i kod dostępu?

    • Nie, uczestnicy mają takie samo doświadczenie, jeśli dołączają do spotkania Teams za pomocą adresu URL lub identyfikatora spotkania i kodu dostępu.
  • Jak deweloperzy powinni przechowywać kody dostępu i zarządzać nimi?

    • Identyfikator spotkania i kod dostępu są danymi potrzebnymi do dołączenia do spotkania. Deweloperzy powinni traktować je jako wpisy tajne, które powinny być szyfrowane, a jeśli są przechowywane, upewnij się, że znajdują się w kontrolowanym środowisku dostępu.
    • Jeśli współrzędne są uwidocznione, każdy może dołączyć do spotkania i zrujnować doświadczenie dla wszystkich obecnych na spotkaniu.
  • Jak uzyskać identyfikator spotkania i kod dostępu?

    1. Interfejs API programu Graph: użyj interfejsu API programu Graph, aby pobrać informacje o onlineMeeting zasobie i sprawdzić obiekt we właściwości joinMeetingIdSettings.
    2. Teams: W aplikacji Teams przejdź do Calendar i otwórz szczegóły spotkania. Spotkania online mają identyfikator spotkania i kod dostępu w definicji spotkania.
    3. Outlook: identyfikator spotkania i kod dostępu można znaleźć w wydarzeniach kalendarza lub w zaproszeniach na spotkanie e-mail.
    4. Deweloperzy nie mogą pobrać identyfikatora spotkania i kodu dostępu za pomocą wywołań w SDK ani uzyskać go z szczegółowych dzienników konsoli.
  • Jak sprawdzić, czy identyfikator spotkania i kod dostępu są poprawne?

Odbieranie połączenia przychodzącego w Teams

Możesz subskrybować zdarzenie incomingCall na wystąpieniu teamsCallAgent, aby zarejestrować połączenia przychodzące do użytkownika Teams. Zdarzenie ma właściwość teamsIncomingCall z wystąpieniem TeamsIncomingCall, która umożliwia accept lub reject wywołania przychodzącego.

const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
    const incomingCall = args.teamsIncomingCall;
    // Get Teams incoming call ID
    const incomingCallId = incomingCall.id;
    // Get information about this Call. This API is provided as a preview for developers
    // and may change based on feedback that we receive. Do not use this API in a production environment.
    // To use this API please use 'beta' release of Azure Communication Services Calling Web SDK
    const callInfo = incomingCall.info;
    // Get information about caller
    const callerInfo = incomingCall.callerInfo
    // Accept the call
    const teamsCall = await incomingCall.accept();
    // Reject the call
    incomingCall.reject();
    // Subscribe to callEnded event and get the call end reason
    incomingCall.on('callEnded', args => {
        console.log(args.callEndReason);
    });
    // callEndReason is also a property of IncomingCall
    var callEndReason = incomingCall.callEndReason;
};
teamsCallAgent.on('incomingCall', incomingCallHandler);

Włączanie i wyłączanie wideo

Możesz uzyskać lokalną kolekcję transmisji wideo z właściwości localVideoStreams w instancji TeamsCall. Jeśli ta opcja jest włączona, kolekcja zawiera strumień udostępniania ekranu i kanały wideo z kamery. Strumienie wideo uczestników zdalnych można uzyskać, sprawdzając właściwość TeamsCall. remoteParticipants gdzie każdy uczestnik ma kolekcję strumieni wideo we właściwości videoStreams.

Wycisz i Wyłącz wyciszenie

Możesz użyć asynchronicznych interfejsów API mute i unmute w wystąpieniu TeamsCall, aby lokalnie wyciszyć lub usunąć wyciszenie użytkowników Teams. Wyciszenie lokalne uniemożliwia wysyłanie dźwięku do innych uczestników.

//mute local device
await call.mute();
//unmute local device
await call.unmute();

Wycisz innych uczestników

Aby wyciszyć wszystkich innych uczestników lub wyciszyć określonego uczestnika, możesz użyć asynchronicznych interfejsów API na połączeniu muteAllRemoteParticipants i przy zdalnym uczestniku mute.

//mute all participants except yourself
await call.muteAllRemoteParticipants();

//mute a specific participant
await call.remoteParticipants[0].mute();

Uwaga

Interfejs API jest oferowany w wersji preview dla deweloperów i może zostać zmieniony w oparciu o opinie, które otrzymamy. Nie należy używać tego interfejsu API w środowisku produkcyjnym. Aby skorzystać z tego interfejsu API, użyj wersji beta webowego SDK do wywołań w Azure Communication Services.

Zarządzanie uczestnikami zdalnymi

Inni uczestnicy połączeń są dostępni w instancji TeamsCall pod właściwością remoteParticipants. Jest to kolekcja RemoteParticipant obiektów. Możesz wyświetlić listę, dodać i usunąć innych uczestników z rozmowy.

Uwaga

Dodanie metody uczestnika wymaga czatu threadId. Zestaw SDK usług komunikacyjnych do dzwonienia nie synchronizuje listy uczestników czatu i połączeń. Firma Microsoft zachęca deweloperów do utrzymywania synchronizacji tej listy w celu zapewnienia najlepszego doświadczenia użytkownikom. Dowiedz się, jak zarządzać wątkiem czatu.

Możesz dodać nowego użytkownika lub numeru telefonu usługi Teams do połączenia usługi Teams lub spotkania usługi Teams, wywołując metodę addParticipant w obiekcie TeamsCall. Metoda akceptuje identyfikatory MicrosoftTeamsUserIdentifier lub PhoneNumberIdentifier jako dane wejściowe i zwraca synchronicznie wystąpienie RemoteParticipant i wyzwala zdarzenie remoteParticipantsUpdated w wystąpieniu TeamsCall .

Możesz usunąć uczestnika z połączenia usługi Teams lub spotkania usługi Teams, wywołując metodę removeParticipant w wystąpieniu TeamsCall asynchronicznie. Metoda akceptuje identyfikatory MicrosoftTeamsUserIdentifier lub PhoneNumberIdentifier jako dane wejściowe. Metoda jest rozwiązana, gdy RemoteParticipant zostanie usunięty z kolekcji remoteParticipants, a zdarzenie remoteParticipantsUpdated na instancji TeamsCall zostaje wyzwolone.

Wyświetl listę innych uczestników połączeń:

const participants = call.remoteParticipants; // [remoteParticipant, remoteParticipant....]

Dodaj użytkownika i numer telefonu usługi Teams do połączenia usługi Teams lub spotkania usługi Teams:

const teamsUser = { microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>' };
const phoneUser = { phoneNumber: '<PHONE_NUMBER_E164_FORMAT>' }
const remoteParticipant = call.addParticipant(teamsUser , { threadId: '<THREAD_ID>' });
const remoteParticipant2 = call.addParticipant(phoneUser , { threadId: '<THREAD_ID>' });

Usuń użytkownika Teams i numer telefonu z połączenia lub spotkania w Teams.

const teamsUser = { microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>' };
const phoneUser = { phoneNumber: '<PHONE_NUMBER_E164_FORMAT>' }
await call.removeParticipant(teamsUser);
await call.removeParticipant(phoneUser);

Uczestnicy zdalni

Uczestnicy zdalni reprezentują punkt końcowy połączony z trwającym połączeniem lub spotkaniem w aplikacji Teams. Klasa remoteParticipant ma następujący zestaw właściwości i kolekcji:

  • identifier: zwraca jeden z następujących identyfikatorów: CommunicationUserIdentifier, MicrosoftTeamsUserIdentifier, PhoneNumberIdentifierlub UnknownIdentifier.
const identifier = remoteParticipant.identifier;
  • state: zwraca wartość string reprezentującą stan uczestnika zdalnego. Stan może mieć jedną z następujących wartości:
Wartość stanu Kiedy opis
Idle Stan początkowy Jest to pierwszy stan uczestnika
Connecting Po Idle Stan przejściowy, gdy uczestnik nawiązuje połączenie.
Ringing Po Connecting Uczestnik otrzymał incomingCall powiadomienie lub dzwoni klient usługi Teams
Connected Po Ringing, Connecting, EarlyMedia lub InLobby Uczestnik zaakceptował zaproszenie do połączenia lub dołączył do połączenia. Media przepływają do uczestnika.
Hold Po Connected Uczestnik połączenia jest wstrzymany.
EarlyMedia Po Connecting Media są odtwarzane przed połączeniem się uczestnika z rozmową.
InLobby Po Ringing, Connecting lub EarlyMedia Uczestnik znajduje się w lobby spotkania Teams.
Disconnected Stan końcowy Uczestnik jest odłączony od połączenia. Jeśli uczestnik zdalny utraci łączność sieciową, jego stan zmieni się na Disconnected po dwóch minutach.

Stany uczestników zdalnych w rozmowach jeden na jeden lub grupowych: Diagram stanów rozmów uczestnika zdalnego dla rozmów jeden na jeden lub grupowych.

Stany uczestników zdalnych na spotkaniach usługi Teams: Diagram stanów połączeń uczestnika zdalnego dla spotkań usługi Teams.

const state = remoteParticipant.state;
  • callEndReason: zwraca obiekt zawierający dodatkowe informacje o przyczynie zakończenia wywołania. Właściwość code zwraca liczbę skojarzona z przyczyną i subCode zwraca liczbę skojarzona z kodem i przyczyną. Aby uzyskać więcej informacji na temat kodów błędów, zobacz Rozwiązywanie problemów z kodami odpowiedzi końca połączenia.
const callEndReason = remoteParticipant.callEndReason;
const callEndReasonCode = callEndReason.code
const callEndReasonSubCode = callEndReason.subCode
  • isMuted: zwraca Boolean wartość reprezentującą stan wyciszenia lokalnego.
const isMuted = remoteParticipant.isMuted;
  • isSpeaking: Zwraca wartość Boolean reprezentującą stan wysyłania niepustego dźwięku.
const isSpeaking = remoteParticipant.isSpeaking;
  • videoStreams: zwraca kolekcję obiektów wysyłanych RemoteVideoStream przez uczestników.
const videoStreams = remoteParticipant.videoStreams; // [RemoteVideoStream, ...]
  • displayName: zwraca obiekt string, który reprezentuje nazwę wyświetlaną. Usługa Communication Services wywołująca zestaw SDK nie ustawia tej wartości dla użytkowników usługi Teams.
const displayName = remoteParticipant.displayName;

Wywołanie

  • id: zwraca ciąg reprezentujący unikatowy identyfikator wywołania.
const callId = call.id;

• : infoZwraca informacje o wywołaniu:

Uwaga

Interfejs API jest oferowany w wersji preview dla deweloperów i może zostać zmieniony w oparciu o opinie, które otrzymamy. Nie należy używać tego interfejsu API w środowisku produkcyjnym. Aby korzystać z tego interfejsu API, użyj wersji beta internetowego zestawu SDK do wywołań usług Azure Communication Services.

info: zwraca obiekt zawierający informacje o wywołaniu. Właściwość threadId jest ciągiem reprezentującym identyfikator wątku czatu pokazany w kliencie usługi Teams.

const callInfo = call.info;
const threadId = call.info.threadId;

remoteParticipants: Zwraca kolekcję remoteParticipant obiektów reprezentujących innych uczestników połączenia Teams lub spotkania Teams.

const remoteParticipants = call.remoteParticipants;

callerInfo: Zwraca obiekt CallerInfo dla wywołań przychodzących. Właściwość identifier może być jedną z następujących obiektów CommunicationUserIdentifier, , MicrosoftTeamsUserIdentifier, PhoneNumberIdentifierlub UnknownIdentifier. Właściwość displayName jest ciągiem znaków reprezentującym nazwę do wyświetlenia, jeśli jest ustawiona.

const callerIdentity = call.callerInfo.identifier;
const callerIdentity = call.callerInfo.displayName;

• : statezwraca ciąg reprezentujący stan wywołania. Właściwość może mieć jedną z następujących wartości:

Wartość stanu Kiedy opis
None Stan początkowy Początkowy stan wywołania.
Connecting Po None Stan, gdy rozmowa lub spotkanie w usłudze Teams jest nawiązane, dołączone lub przyjęte.
Ringing Po Connecting Uczestnik zdalny otrzymał zdarzenie incomingCall lub dzwoni klient Teams.
EarlyMedia Po Ringing lub Connecting Media są odtwarzane przed nawiązaniem połączenia.
Connected Po RingingEarlyMedia, InLobbyLocalHold i RemoteHold Połączenie zostało nawiązane. Medium przepływa między lokalnymi punktami końcowymi a uczestnikami zdalnymi.
LocalHold Po Connected Połączenie zostało wstrzymane przez lokalnego uczestnika. Żadne media nie przepływają między lokalnym punktem końcowym a uczestnikami zdalnymi.
RemoteHold Po Connected Połączenie zostało wstrzymane przez uczestnika zdalnego. Żadne media nie przepływają między lokalnym punktem końcowym a uczestnikami zdalnymi.
InLobby Po Ringing lub Connecting Uczestnik zdalny znajduje się w holu spotkania Teams. Żadne media nie przepływają między lokalnym punktem końcowym a uczestnikami zdalnymi.
Disconnecting Po dowolnym stanie Stan przejściowy przed przejściem wywołania do stanu Disconnected.
Disconnected Stan końcowy Końcowy stan połączenia. Jeśli połączenie sieciowe zostanie utracone, stan zmieni się na Disconnected po dwóch minutach.

Stany dla wywołań jeden-do-jednego lub grup: Diagram ze stanami wywołań dla wywołań jeden-do-jednego lub grup.

Stany spotkań usługi Teams: Diagram ze stanami wywołań spotkań usługi Teams.

const callState = call.state;

callEndReason: Zwraca obiekt CallEndReason zawierający dodatkowe informacje o zakończonym wywołaniu. Właściwość code zwraca liczbę skojarzona z przyczyną i subCode zwraca liczbę skojarzona z kodem i przyczyną. Aby uzyskać więcej informacji na temat kodów błędów, zobacz Rozwiązywanie problemów z kodami odpowiedzi końca połączenia.

const callEndReason = call.callEndReason;
const callEndReasonCode = callEndReason.code
const callEndReasonSubCode = callEndReason.subCode

direction: Zwraca string reprezentujący kierunek wywołania. Właściwość może mieć jedną z następujących wartości: "Przychodzące" lub Outgoing.

const isIncoming = call.direction == 'Incoming';
const isOutgoing = call.direction == 'Outgoing';

• : isMutedZwraca Boolean wartość reprezentującą stan wyciszenia lokalnego.

const muted = call.isMuted;

isScreenSharingOn: Zwraca Boolean wartość true, jeśli wysyłasz strumień udostępniania ekranu do innych uczestników.

const isScreenSharingOn = call.isScreenSharingOn;

localVideoStreams: zwraca kolekcję LocalVideoStream obiektów reprezentujących strumienie wideo wysyłane do uczestników zdalnych.

const localVideoStreams = call.localVideoStreams;

Zarządzanie wątkiem czatu

Ważne

Opcjonalny identyfikator czatu jest dostępny tylko w wersji 1.31.2/1.31.2-beta.2 lub nowszej zestawu Sdk wywołującego dla języka JavaScript. Jeśli używasz starszej wersji, upewnij się, że ręcznie podaj unikatowy identyfikator wątku.

Podanie identyfikatora czatu jest opcjonalne do nawiązywania połączeń grupowych i dodawania uczestników do istniejących połączeń. Związany czat i rozmowa mają oddzielne listy uczestników. Przed dodaniem uczestników do połączenia dodaj użytkownika do czatu, aby zapewnić najlepsze środowisko użytkownika i spełnić wymagania dotyczące barier informacyjnych. Dodanie użytkownika do połączenia bez dodawania użytkownika do czatu może spowodować wyjątki, jeśli zostanie skonfigurowana bariera informacyjna.

Rozważmy następujący scenariusz, w którym Alice wywołuje Boba, a następnie Alice dodaje Charliego, a 3 minuty później Alice usuwa Charliego z połączenia.

  1. Utwórz wątek czatu między Alice, Bob i Charlie. Zachowaj czat threadId na później.
  2. Alicja wywołuje Boba i Charliego metodą startCall na instancji TeamsCallAgent.
  3. Dodaj Dana do wątku czatu threadId za pomocą API Chat Graph, aby dodać członka
  4. Alicja dodaje Dana do rozmowy przy użyciu addParticipant metody na call i określa threadId.
  5. Alice usuwa dan z wywołania przy użyciu removeParticipant metody on call i określa threadId
  6. Usuń Dana z wątku threadId czatu przy użyciu Chat Graph API do usunięcia członka

Jeśli użytkownik usługi Teams zatrzymuje nagrywanie połączeń, nagranie zostanie umieszczone w czacie skojarzonym z wątkiem. Podany identyfikator czatu ma wpływ na środowisko użytkowników usługi Teams w klientach usługi Teams.

Zalecenia dotyczące zarządzania identyfikatorem czatu:

  • Eskalacja połączenia telefonicznego 1:1 przez dodanie innego uczestnika telefonu:
    • Metoda addParticipant umożliwia podanie opcjonalnego identyfikatora czatu parametru. Jeśli parametr nie zostanie podany, zostanie utworzony nowy czat grupowy, a wszyscy uczestnicy zostaną dodani do listy uczestników rozmów i czatów. Jeśli parametr jest podany, użytkownicy usługi Teams mogą zobaczyć trwające połączenie skojarzone z tym czatem grupowym w aplikacji Teams. Nowy czat grupowy można utworzyć za pomocą interfejsu API programu Graph.
      addParticipant(participant: MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)
      
  • Rozpocznij połączenie grupowe z jednym użytkownikiem Microsoft 365 i wieloma uczestnikami telefonicznymi:
    • Interfejs API metody startCall umożliwia uruchomienie wywołania grupy z wieloma uczestnikami i opcjonalnie podanie identyfikatora czatu. Jeśli parametr nie zostanie podany, zostanie utworzony nowy czat grupowy, a wszyscy uczestnicy platformy Microsoft 365 zostaną dodani do listy uczestników rozmów i czatów. Jeśli parametr jest podany, użytkownicy usługi Teams mogą zobaczyć trwające połączenie skojarzone z tym czatem grupowym w aplikacji Teams. Nowy czat grupowy można utworzyć za pomocą interfejsu API programu Graph.
      startCall(MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[])
      
    • Użyj Graph API, aby uzyskać istniejący identyfikator czatu, w którym jedynym uczestnikiem jest użytkownik Teams, lub utwórz nowy czat grupowy z uczestnikami: identyfikator użytkownika Teams i "00000000-0000-0000-0000-000000000000".
  • Rozpocznij połączenie grupowe z ponad 2 użytkownikami platformy Microsoft 365:
    • (Opcjonalny sposób) Podczas nawiązywania połączenia grupowego z więcej niż 2 użytkownikami platformy Microsoft 365 przy użyciu ACS Calling SDK, SDK automatycznie utworzy wątek.
      startCall(MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[])
      
    • W razie potrzeby deweloper może podać unikatowy identyfikator czatu, aby rozpocząć połączenie grupowe lub dodać uczestników. W takim przypadku pakiet ACS Calling SDK użyje podanego identyfikatora czatu, aby utworzyć połączenie grupowe. Wątek czatu jest tworzony dla użytkowników usługi Teams, a ten wątek jest skojarzony z wywołaniem grupy dla użytkowników w aplikacji Teams. Dzięki temu mogą rozmawiać podczas rozmowy. Zarządzanie wątkami czatu można wykonywać za pośrednictwem interfejsu API programu Graph