Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Übung automatisieren Sie den Prozess des Erstellens eines Microsoft Teams-Besprechungslinks und übergeben diesen mit Hilfe von Azure Functions und Microsoft Graph an den ACS.
Sie müssen eine Microsoft Entra-ID-App für die Daemon-App-Authentifizierung erstellen. In diesem Schritt wird die Authentifizierung im Hintergrund mit App-Anmeldeinformationen behandelt, und eine Microsoft Entra-ID-App verwendet Anwendungsberechtigungen, um Microsoft Graph-API-Aufrufe auszuführen. Microsoft Graph wird verwendet, um dynamisch eine Microsoft Teams-Besprechung zu erstellen und die Teams-Besprechungs-URL zurückzugeben.
Führen Sie die folgenden Schritte aus, um eine Microsoft Entra ID-App zu erstellen:
- Wechseln Sie zum Azure-Portal , und wählen Sie "Microsoft Entra-ID" aus.
- Wählen Sie die Registerkarte "App-Registrierung " gefolgt von +Neue Registrierung aus.
- Füllen Sie die Details des neuen App-Registrierungsformulars aus, wie unten dargestellt, und wählen Sie "Registrieren" aus:
- Name: ACS Teams Interop-App
- Unterstützte Kontotypen: Konten in jedem Organisationsverzeichnis (beliebiges Microsoft Entra ID-Verzeichnis – Multitenant) und persönliche Microsoft-Konten (z. B. Skype, Xbox)
- Umleitungs-URI: Lassen Sie diesen Wert leer.
- Wechseln Sie nach der Registrierung der App zu API-Berechtigungen und wählen Sie + Berechtigung hinzufügen aus.
- Wählen Sie Microsoft Graph gefolgt von Anwendungsberechtigungen aus.
- Wählen Sie die
Calendars.ReadWriteBerechtigung und dann "Hinzufügen" aus. - Nachdem Sie die Berechtigungen hinzugefügt haben, wählen Sie "Administratorzustimmung für <YOUR_ORGANIZATION_NAME> erteilen" aus.
- Wechseln Sie zur Registerkarte "Zertifikate und geheime Schlüssel ", wählen Sie "+Neuer geheimer Clientschlüssel" und dann "Hinzufügen" aus.
- Kopieren Sie den Wert des geheimen Schlüssels in eine lokale Datei. Sie verwenden den Wert später in dieser Übung.
- Wechseln Sie zur Registerkarte „Übersicht“ und kopieren Sie
Application (client) IDundDirectory (tenant) IDin dieselbe lokale Datei, die Sie im vorherigen Schritt verwendet haben.
Erstellen einer local.settings.json Datei
Öffnen Sie das
samples/acs-to-teams-meeting/server/csharp/GraphACSFunctions.slnin Visual Studio oder den Ordner GraphACSFunctions in Visual Studio Code.Wechseln Sie zum
GraphACSFunctionsProjekt, und erstellen Sie einelocal.settings.jsonDatei mit den folgenden Werten:{ "IsEncrypted": false, "Values": { "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "TENANT_ID": "", "CLIENT_ID": "", "CLIENT_SECRET": "", "USER_ID": "", "ACS_CONNECTION_STRING": "" }, "Host": { "LocalHttpPort": 7071, "CORS": "*", "CORSCredentials": false }, "watchDirectories": [ "Shared" ] }- Verwenden Sie die Werte, die Sie in einer früheren Übung in die lokale Datei kopiert haben, um die Werte
TENANT_ID,CLIENT_IDundCLIENT_SECRETzu aktualisieren. - Definieren Sie
USER_IDmit der Benutzer-ID, mit der Sie eine Microsoft Teams-Besprechung erstellen möchten.
Sie können die Benutzer-ID aus dem Azure-Portal abrufen.
- Melden Sie sich mit Ihrem Microsoft 365-Entwicklermandantenadministratorkonto an.
- Wählen Sie Microsoft Entra ID aus.
- Navigieren Sie zur Registerkarte "Benutzer " auf der Seitenleiste.
- Suchen Sie nach Ihrem Benutzernamen, und wählen Sie ihn aus, um die Benutzerdetails anzuzeigen.
-
Object IDstelltUser IDinnerhalb der Benutzerdetails dar. Kopieren Sie denObject IDWert, und verwenden Sie ihn für denUSER_IDWert in local.settings.json.
Hinweis
ACS_CONNECTION_STRINGwird in der nächsten Übung verwendet, damit Sie sie noch nicht aktualisieren müssen.- Verwenden Sie die Werte, die Sie in einer früheren Übung in die lokale Datei kopiert haben, um die Werte
Öffnen Sie
GraphACSFunctions.slnim acs-to-teams-meeting/server/csharp-Ordner, und beachten Sie, dass sie die folgenden Microsoft Graph- und Identitätspakete enthält:<PackageReference Include="Azure.Communication.Identity" Version="1.3.1" /> <PackageReference Include="Azure.Identity" Version="1.11.2" /> <PackageReference Include="Microsoft.Graph" Version="5.51.0" />Wechseln Sie zu Program.cs , und notieren Sie sich den folgenden Code in der
ConfigureServicesMethode:var host = new HostBuilder() .ConfigureFunctionsWebApplication() .ConfigureServices(services => { services.AddApplicationInsightsTelemetryWorkerService(); services.ConfigureFunctionsApplicationInsights(); services.AddSingleton(static p => { var config = p.GetRequiredService<IConfiguration>(); var clientSecretCredential = new ClientSecretCredential( config.GetValue<string>("TENANT_ID"), config.GetValue<string>("CLIENT_ID"), config.GetValue<string>("CLIENT_SECRET") ); return new GraphServiceClient( clientSecretCredential, ["https://graph.microsoft.com/.default"] ); }); ... services.AddSingleton<IGraphService, GraphService>(); }) .Build(); }- Dieser Code erstellt ein
GraphServiceClientObjekt, das zum Aufrufen von Microsoft Graph aus Azure Functions verwendet werden kann. Es ist ein Singleton und kann in andere Klassen eingefügt werden. - Sie können Microsoft Graph-API-Aufrufe mit Nur-App-Berechtigungen (z. B. Calendars.ReadWrite) ausführen, indem Sie einen
ClientSecretCredentialWert an denGraphServiceClientKonstruktor übergeben. DasClientSecretCredentialverwendet die WerteTenant Id,Client IdundClient Secretaus der Microsoft Entra ID-App.
- Dieser Code erstellt ein
Öffnen Sie Dienste/GraphService.cs.
Nehmen Sie sich einen Moment Zeit, um die
CreateMeetingEventAsyncMethode zu erkunden:using System; using System.Threading.Tasks; using Microsoft.Graph; using Microsoft.Extensions.Configuration; namespace GraphACSFunctions.Services; public class GraphService : IGraphService { private readonly GraphServiceClient _graphServiceClient; private readonly IConfiguration _configuration; public GraphService(GraphServiceClient graphServiceClient, IConfiguration configuration) { _graphServiceClient = graphServiceClient; _configuration = configuration; } public async Task<string> CreateMeetingAsync() { var userId = _configuration.GetValue<string>("USER_ID"); var newMeeting = await _graphServiceClient .Users[userId] .Calendar .Events .PostAsync(new() { Subject = "Customer Service Meeting", Start = new() { DateTime = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss"), TimeZone = "UTC" }, End = new() { DateTime = DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-ddTHH:mm:ss"), TimeZone = "UTC" }, IsOnlineMeeting = true }); return newMeeting.OnlineMeeting.JoinUrl; } }-
GraphServiceClientundIConfigurationObjekte werden in den Konstruktor eingefügt und Feldern zugewiesen. - Die
CreateMeetingAsync()Funktion sendet Daten an die Microsoft Graph-Kalenderereignisse-API, die dynamisch ein Ereignis im Kalender eines Benutzers erstellt und die Verknüpfungs-URL zurückgibt.
-
Öffnen Sie TeamsMeetingFunctions.cs , und nehmen Sie sich einen Moment Zeit, um den Konstruktor zu untersuchen. Die zuvor angesehene
GraphServiceClientwird injiziert und dem_graphService-Feld zugewiesen.private readonly IGraphService _graphService; public TeamsMeetingFunction(IGraphService graphService) => _graphService = graphService;Suchen Sie die
RunMethode:[Function("HttpTriggerTeamsUrl")] public async Task<HttpResponseData> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequestData req, ILogger log) { var response = req.CreateResponse(HttpStatusCode.OK); await response.WriteStringAsync(await _graphService.CreateMeetingAsync()); return response; }- Er definiert den Funktionsnamen
HttpTriggerTeamsUrl, der mit einer HTTP-GET-Anforderung aufgerufen werden kann. - Es ruft
_graphService.CreateMeetingAsync()auf, wodurch ein neues Ereignis erstellt wird und die Teilnahme-URL zurückgegeben wird.
- Er definiert den Funktionsnamen
Führen Sie das Programm aus, indem Sie in Visual Studio F5 drücken oder "Debuggen" auswählen .> Starten Sie das Debuggen über das Menü. Diese Aktion startet das Azure Functions-Projekt und stellt den
ACSTokenFunctionAufruf zur Verfügung.
Hinweis
Wenn Sie VS Code verwenden, können Sie ein Terminalfenster im Ordner "GraphACSFunctions" öffnen und ausführen func start. Dabei wird davon ausgegangen, dass die Azure Functions Core Tools auf Ihrem Computer installiert sind.
Aufrufen der Azure-Funktion aus React
Nachdem die
httpTriggerTeamsUrlFunktion nun einsatzbereit ist, rufen wir sie aus der React-App auf.Erweitern Sie den Client-/React-Ordner .
Fügen Sie dem Ordner eine env-Datei mit den folgenden Werten hinzu:
REACT_APP_TEAMS_MEETING_FUNCTION=http://localhost:7071/api/httpTriggerTeamsUrl REACT_APP_ACS_USER_FUNCTION=http://localhost:7071/api/httpTriggerAcsTokenDiese Werte werden während der Erstellung an React übergeben, sodass Sie sie während des Erstellungsprozesses ganz einfach ändern können.
Öffnen Sie die Datei "client/react/App.tsx " in VS Code.
Suchen Sie die
teamsMeetingLinkStatusvariable in der Komponente. Entfernen Sie den hartcodierten Teams-Link, und ersetzen Sie ihn durch leere Anführungszeichen:const [teamsMeetingLink, setTeamsMeetingLink] = useState<string>('');Suchen Sie die
useEffectFunktion, und ändern Sie sie so, dass sie wie folgt aussieht. Dadurch wird das Aufrufen der Azure-Funktion behandelt, die Sie zuvor betrachtet haben, wodurch eine Teams-Besprechung erstellt wird und der Link zum Teilnehmen an der Besprechung zurückgegeben wird:useEffect(() => { const init = async () => { /* Commenting out for now setMessage('Getting ACS user'); //Call Azure Function to get the ACS user identity and token const res = await fetch(process.env.REACT_APP_ACS_USER_FUNCTION as string); const user = await res.json(); setUserId(user.userId); setToken(user.token); */ setMessage('Getting Teams meeting link...'); //Call Azure Function to get the meeting link const resTeams = await fetch(process.env.REACT_APP_TEAMS_MEETING_FUNCTION as string); const link = await resTeams.text(); setTeamsMeetingLink(link); setMessage(''); console.log('Teams meeting link', link); } init(); }, []);Speichern Sie die Datei, bevor Sie fortfahren.
Öffnen Sie ein Terminalfenster, wechseln Sie in den Ordner *react, und führen Sie den Befehl
cdaus, um die Anwendung zu erstellen und auszuführen.Nachdem die Anwendung erstellt und geladen wurde, sollte die ACS-Anrufbenutzeroberfläche angezeigt werden, und Sie können dann an der Teams-Besprechung teilnehmen, die dynamisch von Microsoft Graph erstellt wurde.
Beenden Sie den Terminalprozess, indem Sie STRG+C in das Terminalfenster eingeben.
Beenden Sie das Azure Functions-Projekt.
Nächster Schritt
Hinweis
Besuchen Sie die Dokumentation zu Azure Communication Services, um mehr über das Erweitern von Microsoft Teams-Besprechungen auf andere Weise zu erfahren.