Delen via


Oproepen voor Teams-gebruikers beheren met Communication Services-aanroep-SDK

Meer informatie over het beheren van aanroepen met de Azure Communication Services SDKS. We leren hoe u gesprekken plaatst, hun deelnemers en eigenschappen beheert.

Vereisten

Installeer de SDK

Gebruik de npm install opdracht om de aanroepen van Azure Communication Services en algemene SDK's voor JavaScript te installeren.

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

Vereiste objecten initialiseren

Maak een CallClient exemplaar om de aanroepende stack te initiëren. U kunt logboekregistratie van de aanroepende SDK configureren met het exemplaar en setLogLevel de AzureLogger methode. U kunt toegang krijgen tot deviceManager het besturingssysteem met de methode getDeviceManager.

Gebruik vervolgens de methode createTeamsCallAgent om asynchroon een TeamsCallAgent exemplaar te maken waarmee binnenkomende en uitgaande oproepen voor een Teams-gebruiker worden beheerd. De methode wordt CommunicationTokenCredential gebruikt als een argument dat het toegangstoken vertegenwoordigt voor teams-gebruikers.

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();

Een oproep doen

Start een synchrone een-op-een- of groepsaanroep met startCall API op teamsCallAgent. U kunt het doel van de aanroep opgeven MicrosoftTeamsUserIdentifier of PhoneNumberIdentifier als parameter definiëren. De methode retourneert het TeamsCall exemplaar waarmee u zich kunt abonneren op oproepevenementen.

Notitie

Voor het starten van een groepsgesprek met teamsCallAgent is chat threadId vereist bij het aanroepen startCall van de methode. Het gemaakte TeamsCall exemplaar heeft eigenschap threadId die deze thread vastlegt. Communication Services Calling SDK houdt deelnemers niet gesynchroniseerd met chatten en bellen. Microsft moedigt ontwikkelaars aan om het rooster gesynchroniseerd te houden voor de beste gebruikerservaring. Meer informatie over het beheren van chatthreads.

Start een voIP-aanroep (one-to-one Voice-over IP) voor teams-gebruikers:

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

Start een een-op-een-telefoongesprek naar E.164-telefoonnummer:

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

Start een groepsgesprek met teams-gebruikers met VoIP (Voice-over IP) en telefoonnummer:

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

Deelnemen aan een gesprek

Deelnemen aan een Teams-vergadering

U kunt deelnemen aan Teams-vergaderingen met de methode join op het teamsCallAgent exemplaar. Teams-gebruikers kunnen deelnemen aan teams-vergaderingen door een TeamsMeetingLinkLocator, TeamsMeetingCoordinatesLocatorof TeamsMeetingIdLocator.

Neem deel aan een Teams-vergadering met de URL van de vergadering:

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

Neem deel aan de Teams-vergadering met een combinatie van thread-id, organisator-id, tenant-id en bericht-id:

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

Neem deel aan de Teams-vergadering met vergaderingscode en wachtwoordcode:

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

Neem deel aan de Teams-vergadering met vergaderings-id en wachtwoordcode:

Ontwikkelaars kunnen deelnemers op meerdere manieren verbinden met een Teams-vergadering. Een manier is door een vergaderings-id en wachtwoordcode te gebruiken, zodat mensen kunnen deelnemen aan de Teams-vergadering waarvoor ze zijn uitgenodigd vanaf een apparaat of toepassing. U moet altijd zowel de vergaderings-id als de wachtwoordcode opgeven om deel te nemen aan de vergadering. Wachtwoordcode is hoofdlettergevoelig.

  • Indeling van de vergaderings-id en wachtwoordcode:

    • Vergaderings-id: 12 cijfers.
    • Wachtwoordcode: 6 tekens
  • Hoe vaak moet u de vergaderings-id en wachtwoordcode vernieuwen?

    • De vergaderings-id en wachtwoordcode worden niet gewijzigd nadat deze zijn gemaakt. Ontwikkelaars hoeven er geen te vernieuwen.
    • Een organisator van een Teams-vergadering kan de vergaderings-id en wachtwoordcode niet opnieuw genereren.
  • Is er een verschil in een Teams-vergadering als een persoon deelneemt via de URL of vergaderings-id en wachtwoordcode?

    • Nee, deelnemers hebben dezelfde ervaring als ze deelnemen aan een Teams-vergadering met behulp van de URL van de Teams-vergadering of de vergaderings-id en wachtwoordcode.
  • Hoe moeten ontwikkelaars wachtwoordcodes opslaan en beheren?

    • Vergaderings-id en wachtwoordcode zijn coördinaten om deel te nemen aan de vergadering. Ontwikkelaars moeten ze behandelen als geheimen, die moeten worden versleuteld en als ze zijn opgeslagen, ervoor zorgen dat ze zich in een door toegang beheerde omgeving bevinden.
    • Als de coördinaten zichtbaar zijn, kan iedereen deelnemen aan de vergadering en de ervaring voor iedereen in de vergadering verpesten.
  • Hoe haal ik de vergaderings-id en wachtwoordcode op?

    1. Graph API: Graph API gebruiken om informatie over onlineMeeting de resource op te halen en het object in de eigenschap joinMeetingIdSettingste controleren.
    2. Teams: Ga in uw Teams-toepassing naar Calendar de app en open details van een vergadering. Onlinevergaderingen hebben vergaderings-id en wachtwoordcode in de definitie van de vergadering.
    3. Outlook: U kunt de vergaderings-id en wachtwoordcode vinden in agendagebeurtenissen of in uitnodigingen voor een e-mailvergadering.
    4. Ontwikkelaars kunnen de vergaderings-id en wachtwoordcode niet ophalen via de SDK voor aanroepen of ophalen uit uitgebreide consolelogboeken.
  • Hoe kan ik controleren of de vergaderings-id en wachtwoordcode juist zijn?

Een inkomende teams-oproep ontvangen

U kunt zich abonneren op incomingCall een gebeurtenis op teamsCallAgent het exemplaar om binnenkomende oproepen te registreren bij de Teams-gebruiker. De gebeurtenis heeft een teamsIncomingCall eigenschap met TeamsIncomingCall een exemplaar waarmee u accept of reject de binnenkomende oproep kunt uitvoeren.

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);

Video in- en uitschakelen

U kunt uw lokale videostreamverzameling ophalen uit de eigenschap localVideoStreams in het TeamsCall exemplaar. Als deze optie is ingeschakeld, bevat de verzameling een stream voor het delen van schermen en videofeeds voor camera's. U kunt videostreams van externe deelnemers krijgen door de eigenschap TeamsCallte inspecteren.remoteParticipants waarbij elke deelnemer een verzameling videostreams in eigenschap videoStreamsheeft.

Dempen en dempen opheffen

U kunt api's en unmute asynchrone API's op het TeamsCall exemplaar gebruiken mute om Teams-gebruikers lokaal te dempen of het dempen ervan op te heffen. Lokale demping voorkomt dat audio naar andere deelnemers wordt verzonden.

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

Andere deelnemers dempen

Als u alle andere deelnemers wilt dempen of een specifieke deelnemer wilt dempen, kunt u de asynchrone API's muteAllRemoteParticipants voor het gesprek en mute de externe deelnemer gebruiken:

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

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

Notitie

Deze API is beschikbaar als preview-versie voor ontwikkelaars en wordt mogelijk gewijzigd op basis van de feedback die we ontvangen. Gebruik deze API niet in een productie-omgeving. Als u deze API wilt gebruiken, gebruikt u de bètaversie van de Web-SDK voor aanroepen van Azure Communication Services

Externe deelnemers beheren

Andere gespreksdeelnemers zijn beschikbaar in het TeamsCall exemplaar onder de eigenschap remoteParticipants. Het is een verzameling RemoteParticipant objecten. U kunt andere deelnemers aan het gesprek weergeven, toevoegen en verwijderen.

Notitie

Voor het toevoegen van een deelnemermethode is chat threadIdvereist. Communication Services Calling SDK houdt deelnemers niet gesynchroniseerd met chatten en bellen. Microsft moedigt ontwikkelaars aan om het rooster gesynchroniseerd te houden voor de beste gebruikerservaring. Meer informatie over het beheren van chatthreads.

U kunt nieuwe Teams-gebruikers of -telefoonnummers toevoegen aan de Teams-oproep of Teams-vergadering door de methode addParticipant op het object TeamsCallaan te roepen. De methode accepteert id's MicrosoftTeamsUserIdentifier of PhoneNumberIdentifier als invoer en retourneert synchroon het exemplaar van RemoteParticipant en activeert de gebeurtenis remoteParticipantsUpdated op het TeamsCall exemplaar.

U kunt een deelnemer uit de Teams-oproep of Teams-vergadering verwijderen door de removeParticipant methode asynchroon aan te roepen op het TeamsCall exemplaar. De methode accepteert id's MicrosoftTeamsUserIdentifier of PhoneNumberIdentifier als invoer. De methode wordt opgelost wanneer RemoteParticipant deze uit de remoteParticipants verzameling wordt verwijderd en de gebeurtenis remoteParticipantsUpdated op het TeamsCall exemplaar wordt geactiveerd.

Andere oproepdeelnemers weergeven:

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

Voeg teams-gebruikers en -telefoonnummers toe aan de Teams-oproep of Teams-vergadering:

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>' });

Verwijder Teams-gebruikers en -telefoonnummers uit Teams-oproep of Teams-vergadering:

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

Externe deelnemers

Externe deelnemers vertegenwoordigen een eindpunt dat is verbonden met de lopende Teams-oproep of Teams-vergadering. De klasse remoteParticipant heeft de volgende set eigenschappen en verzamelingen:

  • identifier: retourneert een van de volgende id's: CommunicationUserIdentifier, MicrosoftTeamsUserIdentifier, PhoneNumberIdentifierof UnknownIdentifier.
const identifier = remoteParticipant.identifier;
  • state: retourneert een string status van een externe deelnemer. De status kan een van de volgende waarden hebben:
Statuswaarde Wanneer Beschrijving
Idle Begintoestand Dit is de eerste status van de deelnemer
Connecting Na Idle Overgangsstatus terwijl een deelnemer verbinding maakt met de oproep.
Ringing Na Connecting De deelnemer heeft een incomingCall melding ontvangen of de Teams-client gaat over
Connected NaRinging, Connecting, of EarlyMediaInLobby De deelnemer heeft de oproepuitnodiging geaccepteerd of toegevoegd aan het gesprek. De media stromen naar de deelnemer.
Hold Na Connected De deelnemer aan het gesprek staat in de wachtstand.
EarlyMedia Na Connecting De media worden afgespeeld voordat een deelnemer verbinding maakt met het gesprek
InLobby Na Ringing, Connecting of EarlyMedia De deelnemer bevindt zich in de lobby van de Teams-vergadering.
Disconnected Uiteindelijke status De deelnemer wordt losgekoppeld van het gesprek. Als de externe deelnemer de netwerkverbinding verliest, wordt de status na twee minuten gewijzigd Disconnected .

Statussen van externe deelnemers aan een-op-een- of groepsgesprekken: Diagram van oproepstatussen van externe deelnemers voor een-op-een- of groepsgesprekken.

Statussen van externe deelnemers aan Teams-vergaderingen: Diagram van oproepstatussen van externe deelnemers voor Teams-vergaderingen.

const state = remoteParticipant.state;
  • callEndReason: retourneert een object met aanvullende informatie over de reden waarom de aanroep is beëindigd. Eigenschap code retourneert een getal dat is gekoppeld aan de reden en subCode retourneert een getal dat is gekoppeld aan de code en de reden. Zie Problemen met antwoordcodes voor aanroepen oplossen voor meer informatie over foutcodes.
const callEndReason = remoteParticipant.callEndReason;
const callEndReasonCode = callEndReason.code
const callEndReasonSubCode = callEndReason.subCode
  • isMuted: retourneert een waarde die een status van lokale mute vertegenwoordigt Boolean .
const isMuted = remoteParticipant.isMuted;
  • isSpeaking: Retourneert Boolean de waarde die de status aangeeft van geenmpty-audio die wordt verzonden.
const isSpeaking = remoteParticipant.isSpeaking;
  • videoStreams: retourneert een verzameling objecten die RemoteVideoStream door deelnemers zijn verzonden.
const videoStreams = remoteParticipant.videoStreams; // [RemoteVideoStream, ...]
  • displayName: retourneert een string weergavenaam die de weergavenaam vertegenwoordigt. Communication Services die SDK aanroept, stelt deze waarde niet in voor Teams-gebruikers.
const displayName = remoteParticipant.displayName;

Bellen

  • id: retourneert een tekenreeks die een unieke aanroep-id vertegenwoordigt.
const callId = call.id;

info: retourneert informatie over de oproep:

Notitie

Deze API is beschikbaar als preview-versie voor ontwikkelaars en wordt mogelijk gewijzigd op basis van de feedback die we ontvangen. Gebruik deze API niet in een productie-omgeving. Als u deze API wilt gebruiken, gebruikt u de bètaversie van de Web-SDK voor aanroepen van Azure Communication Services

info: retourneert een object met informatie over de aanroep. De eigenschap threadId is een tekenreeks die de thread-id van de chat vertegenwoordigt die wordt weergegeven in de Teams-client.

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

remoteParticipants: retourneert een verzameling remoteParticipant objecten die andere deelnemers vertegenwoordigen in de Teams-oproep of Teams-vergadering.

const remoteParticipants = call.remoteParticipants;

callerInfo: retourneert het CallerInfo object voor binnenkomende oproepen. De eigenschap identifier kan een van de volgende objecten CommunicationUserIdentifier, MicrosoftTeamsUserIdentifier, PhoneNumberIdentifierof UnknownIdentifier. De eigenschap displayName is een tekenreeks die de naam vertegenwoordigt die moet worden weergegeven als deze is ingesteld.

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

state: retourneert een tekenreeks die de status van de aanroep aangeeft. De eigenschap kan een van de volgende waarden hebben:

Statuswaarde Wanneer Beschrijving
None Begintoestand De initiële status van de aanroep.
Connecting Na None De status wanneer een Teams-oproep of Teams-vergadering wordt geplaatst, toegevoegd of geaccepteerd.
Ringing Na Connecting De externe deelnemer heeft de incomingCall gebeurtenis ontvangen of de Teams-client gaat over.
EarlyMedia Na Ringing of Connecting De media worden afgespeeld voordat de oproep is verbonden.
Connected Na Ringing, EarlyMedia, InLobby, , en LocalHoldRemoteHold De oproep is verbonden. Media stromen tussen lokale eindpunten en externe deelnemers.
LocalHold Na Connected Het gesprek werd in de wacht gezet door een lokale deelnemer. Er stromen geen media tussen het lokale eindpunt en externe deelnemers.
RemoteHold Na Connected Het gesprek werd in de wacht gezet door een externe deelnemer. Er stromen geen media tussen het lokale eindpunt en externe deelnemers.
InLobby Na Ringing of Connecting De externe deelnemer bevindt zich in de Teams-vergaderingslobby. Er stromen geen media tussen het lokale eindpunt en externe deelnemers.
Disconnecting Na elke status De overgangsstatus voordat de aanroep naar een Disconnected status gaat.
Disconnected Uiteindelijke status De laatste status van het gesprek. Als de netwerkverbinding is verbroken, wordt de status na twee minuten gewijzigd Disconnected .

Statussen voor een-op-een- of groepsgesprekken: Diagram met oproepstatussen voor een-op-een- of groepsoproepen.

Statussen voor Teams-vergaderingen: Diagram met oproepstatussen voor Teams-vergaderingen.

const callState = call.state;

callEndReason: Retourneert een object CallEndReason met aanvullende informatie over het beëindigen van de oproep. De eigenschap code retourneert een getal dat is gekoppeld aan de reden en subCode retourneert een getal dat is gekoppeld aan de code en de reden. Zie Problemen met antwoordcodes voor aanroepen oplossen voor meer informatie over foutcodes.

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

direction: retourneert een string weergave van de richting van het gesprek. De eigenschap kan een van de volgende waarden hebben: 'Inkomend' of Outgoing.

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

isMuted: retourneert de waarde die een status van de lokale mute vertegenwoordigt Boolean .

const muted = call.isMuted;

isScreenSharingOnRetourneert Boolean de waarde waar als u een stream voor het delen van het scherm naar andere deelnemers verzendt.

const isScreenSharingOn = call.isScreenSharingOn;

localVideoStreams: retourneert een verzameling LocalVideoStream objecten die videostreams vertegenwoordigen die naar externe deelnemers worden verzonden.

const localVideoStreams = call.localVideoStreams;

Chatthread beheren

Belangrijk

De optionele chat-id is alleen beschikbaar in 1.29.1 of hoger van de Calling SDK voor JavaScript. Als u een eerdere versie gebruikt, moet u handmatig een unieke chat-id opgeven.

Het opgegeven van een chat-id is optioneel voor het plaatsen van groepsgesprekken en het toevoegen van deelnemers aan bestaande oproepen. Gekoppelde chat en oproep hebben een aparte lijst met deelnemers. Voordat u deelnemers aan het gesprek toevoegt, voegt u de gebruiker toe aan de chat om de beste gebruikerservaring te bieden en te voldoen aan de vereisten voor informatiebarrières. Als u een gebruiker aan het gesprek toevoegt zonder de gebruiker toe te voegen aan de chat, kan dit leiden tot uitzonderingen als er een informatiebarrière is ingesteld.

Houd rekening met het volgende scenario, waarbij Alice bob belt, waarna Alice Charlie toevoegt en 3 minuten later Charlie uit de oproep verwijdert.

  1. Maak een chatgesprek tussen Alice, Bob en Charlie. Houd de chat threadId voor later.
  2. Alice roept Bob en Charlie aan met behulp van de startCall methode op TeamsCallAgent exemplaar.
  3. Dan toevoegen aan chatthread met threadId behulp van Chat Graph API om lid toe te voegen
  4. Alice voegt Dan toe aan de aanroep met behulp van addParticipant de methode aan call en geeft de threadId
  5. Alice verwijdert Dan uit de aanroep met behulp van removeParticipant de methode on call en geeft de threadId
  6. Dan verwijderen uit chatthread met threadId chat graph API om lid te verwijderen

Als teams-gebruikers het opnemen van gesprekken stoppen, wordt de opname in de chat geplaatst die is gekoppeld aan de thread. De opgegeven chat-id heeft invloed op de ervaring van Teams-gebruikers in Teams-clients.

Aanbevelingen voor het beheer van chat-id:

  • Escalatie van het telefoongesprek van 1:1 door een andere telefoondeelnemer toe te voegen:
    • Met de methode addParticipant kunt u optionele parameterchat-id opgeven. Als de parameter niet is opgegeven, wordt er een nieuwe groepschat gemaakt en worden alle deelnemers toegevoegd aan de lijst met gespreks- en chatdeelnemers. Als de parameter is opgegeven, kunnen Teams-gebruikers een doorlopend gesprek zien dat is gekoppeld aan deze groepschat in de Teams-app. U kunt een nieuwe groepschat maken via Graph API.
      addParticipant(participant: MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)
      
  • Groepsgesprek starten met één Microsoft 365-gebruiker en meerdere telefoondeelnemers:
    • Met de methode-API startCall kunt u een groepsgesprek starten met meerdere deelnemers en eventueel een chat-id opgeven. Als de parameter niet is opgegeven, wordt er een nieuwe groepschat gemaakt en worden alle Microsoft 365-deelnemers toegevoegd aan de lijst met gespreks- en chatdeelnemers. Als de parameter is opgegeven, kunnen Teams-gebruikers een doorlopend gesprek zien dat is gekoppeld aan deze groepschat in de Teams-app. U kunt een nieuwe groepschat maken via Graph API.
      startCall(MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[])
      
    • Gebruik Graph API om bestaande chat-id op te halen met alleen Teams-gebruikers als deelnemer of maak een nieuwe groepschat met deelnemers: Gebruikers-id van Teams en '0000000-0000-0000-00000000000000000'.
  • Groepsgesprek starten met meer dan 2 Microsoft 365-gebruikers:
    • (Optionele manier) Wanneer u een groepsoproep maakt met meer dan 2 Microsoft 365-gebruikers met behulp van de ACS Calling SDK, wordt de thread automatisch door de SDK gemaakt.
      startCall(MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[])
      
    • Indien gewenst kan de ontwikkelaar een unieke chat-id opgeven om het groepsgesprek te starten of deelnemers toe te voegen. In dit geval gebruikt de ACS Calling SDK de opgegeven chat-id om de groepsoproep te maken. Er wordt een chatgesprek gemaakt voor de Teams-gebruikers en deze thread is gekoppeld aan de groepsoproep voor gebruikers in de Teams-app. Hierdoor kunnen ze tijdens het gesprek chatten. Beheer van chatthreads kan worden uitgevoerd via Graph API