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.
Dieser Leitfaden hilft Ihnen beim Portieren einer vorhandenen Slack Bolt für JavaScript-Anwendung in Teams.
Einführung
Ähnlich wie Slack Bolt ist das Teams-SDK so konzipiert, dass es eine Schnittstelle mit den Teams-Backend-APIs zum Erstellen von Unterhaltungsanwendungen bietet. Beide SDKs bieten Abstraktionen für die Verarbeitung eingehender Ereignisse, Nachrichten und Interaktionen sowie für das Zurücksenden von Antworten an Benutzer. Wenn Sie bereits einen Slack-Bot haben, sollten sich die Konzepte vertraut anfühlen.
Es gibt jedoch einige wichtige Unterschiede, wie z. B. die App-Installation. In Slack werden Apps über OAuth in Arbeitsbereichen installiert, während sie in Teams über den Teams App Store installiert werden. Darüber hinaus können Teams-Apps von einzelnen Benutzern persönlich oder in Bereichen der Zusammenarbeit wie Gruppenchats, Kanäle und Besprechungen installiert werden.
Werfen wir einen Blick auf einige Ähnlichkeiten und Unterschiede zwischen Slack- und Teams-Konzepten:
| Konzept | Teams | Slack |
|---|---|---|
| Installation | Wird über den App Store auf Umfangsbasis installiert | Installiert über OAuth to Workspace |
| Schnellstart | Neue Projekte, die über die Teams-Entwickler-CLI erstellt wurden | Neue Projekte, die über die Slack-CLI erstellt wurden. |
| App-Manifest | Erstellen und Registrieren eines Agents und seines App-Manifests bei der Entwickler-CLI von Teams. | Erstellung über JSON, YAML oder die App-Verwaltungsseite. |
| Messaging-Endpunkt | Legen Sie die Botkonfiguration im Teams-Entwicklerportal oder die Azure KI Bot Service-Ressource fest. | Im Slack-App-Manifest festlegen. |
| App-Authentifizierung | Die Entra-App-Registrierung wird während der Installation der Teams-App autorisiert. Teams SDK ruft beim Senden von Nachrichten intern das Entra-App-Token ab. App-Kernfeatures wie Messaging verwenden diesen Authentifizierungstyp intern im SDK. | App speichert Slack-Bottoken, nachdem der Benutzer anwendungsdelegierte Bereiche autorisiert hat (z. Bincoming-webhook,commands.). App-Kernfeatures wie Messaging verwenden diesen Authentifizierungstyp intern im SDK. |
| Benutzerauthentifizierung für REST-APIs | Benutzer-Entra-Token können mithilfe von Teams SSO abgerufen werden. Graph-REST-APIs sind in das Teams SDK integriert. Token werden vom Azure Bot-Tokendienst gespeichert und aktualisiert. | Benutzer-Slack-Token können mit OAuth 2.0 bezogen werden. Slack-REST-APIs sind in Slack Bolt integriert. Token müssen von der Anwendung gespeichert und aktualisiert werden. |
| Authentifizierung mit externen Diensten | Rufen Sie Benutzerzugriffstoken für externe Dienste mithilfe von OAuth 2.0 ab. Token werden vom Azure Bot-Tokendienst gespeichert und aktualisiert. | Benutzer authentifizieren sich bei externen Diensten mithilfe von OAuth 2.0, möglicherweise initiiert über Kontobindung (siehe unten). Token müssen von der Anwendung gespeichert und aktualisiert werden. |
| Kontoverknüpfung |
Activity Ereignisse enthalten Activity.from.id, die die AAD-Objekt-ID des Benutzers ist. Wenn Sie Ihren externen Dienst mit OAuth 2.0 authentifizieren, werden diese Konten implizit über den Azure Token Service gebunden, aber Sie können auch einem ähnlichen Ablauf folgen, wie Slack empfiehlt. |
Slack empfiehlt, den Leitfaden zum binden von Konten über Dienste hinweg zu befolgen. |
| Karten | Reichhaltige UI-Elemente in Nachrichten mit adaptiven Karten. | Umfangreiche UI-Elemente in Nachrichten mit dem Block Kit. |
| Files | Files können mithilfe von SharePoint/OneDrive Graph-APIs angefügt oder heruntergeladen werden. | Files können über die Datei-APIs von Slack angehängt oder heruntergeladen werden. |
| Private Nachrichten in Gruppenunterhaltungen | Gezielte Nachrichten | Flüchtige Nachrichten. |
| Schrägstrichbefehle |
Schrägstrichbefehle, die im App-Manifest deklariert und über ein AutoVervollständigen-Menü auffindbar gemacht werden. Befehle können als private gezielte Nachrichten gesendet werden oder über für alle Benutzer in einer Unterhaltung sichtbar sein @mention. Befehle werden als Nachrichten gesendet: Lauschen Sie mit einem app.message Handler auf Befehle, entweder über app.message('/command') oder app.message(regexp). |
Slack Bolt verfügt über einen dedizierten app.command Handler für Befehle im Slack-App-Manifest. Schrägstrichbefehle werden anderen Benutzern in kollaborativen Kontexten nicht angezeigt. |
| Workflows | Teams ist für Workflows in Power Automate integriert. Workflows sind keine Komponente des Teams SDK. | Slack-Workflows sind in Slack Bolt integriert. |
| Dialogfelder für die Benutzeroberfläche | Adaptive Karten können Aktionen enthalten, die UI-Dialogfelder mit einer eingebetteten Website oder einer anderen adaptiven Karte öffnen. Dialoge müssen über eine adaptive Karten-Aktion geöffnet werden und können daher nicht direkt über einen Schrägstrichbefehl geöffnet werden. | Modale Elemente der Blockkit-Benutzeroberfläche können über Schrägstrichbefehle (mit client.views.open) oder Blockkit-Aktionen geöffnet werden. |
| KI-Strategie | Teams verfügt über einzigartige KI-native Features für Dinge wie Benutzerfeedback, KI-generierte Bezeichnungen, Vorschläge für Eingabeaufforderungen, Streaming und Zitate. Wir bieten auch eine optionale ChatPrompt Klasse an, um die Integration von LLMs in Ihren Bot zu vereinfachen. Nutzen Sie die geerdete Suche über die Microsoft 365 Copilot Retrieval Graph-API. KI-Features sind im Allgemeinen für die Verwendung in jedem Unterhaltungstyp konzipiert. |
Slack verfügt über eine dedizierte Assistant Klasse für KI-Interaktionen in einer dedizierten Agent-Seitenbereichsansicht, die sich von der Strategie von Teams unterscheidet, vorhandene Bot-Interaktionsmuster zu verwenden. Kann weiterhin KI in anderen Gesprächstypen verwenden, indem er Standard-Bot-APIs verwendet. Kann die Slack-Datenzugriffs-API für die geerdete Suche verwenden. |
| KI-Benutzerfeedback | Schaltflächen für Benutzerfeedback werden nativ in Teams mit dedizierten APIs für die Verarbeitung von Feedback gerendert. Nachdem der Benutzer positives oder negatives Feedback gegeben hat, wird ein Modal geöffnet, in dem zusätzliche Informationen (z. B. Nur-Text-Antwort) erfasst werden können. | Slack verwendet einen dedizierten feedback_buttons Blockkit-Elementtyp und app.action('feedback') zum Anhängen von Benutzerfeedback (positiv vs. negativ) an Nachrichten. |
Registrieren eines Teams-Agents
Führen Sie zunächst die Schnellstartanleitung zum Registrieren eines neuen Teams-Agents aus, damit Sie ihn über Teams verwenden können, sobald Sie die Teams-SDK-Implementierung zu Ihrer vorhandenen App hinzugefügt haben.
Teams-SDK installieren
Installieren Sie das Teams SDK in Ihrem Slack Bolt-Projekt:
npm install @microsoft/teams.apps
Kopieren der Authentifizierungskonfiguration
Kopieren Sie die Einstellungen aus der Datei, die .env die Teams-Entwickler-CLI in der Schnellstartanwendung erstellt hat, in Ihre Slack Bolt-Implementierung. Diese Einstellungen sind Anmeldeinformationen für die Authentifizierung einer Teams SDK-App, damit diese mit Teams kommunizieren kann.
Initialisieren der Laufzeit
Fügen Sie Code in Ihrer Implementierung hinzu oder ersetzen Sie ihn, um die Teams SDK-Anwendungslaufzeit mithilfe der App Klasse zu starten. Dies entspricht der Klasse von App Slack Bolt.
import { App } from '@microsoft/teams.apps';
const app = new App();
app.start(process.env.PORT || 3978).catch(console.error);
Nachrichtenhandler hinzufügen
In Slack gibt es Nachrichtenhandler für Ereignisse mit verschiedenen Untertypen (z. B. ist ein nicht definierter Untertyp eine normale Nachricht, event.subtype == 'file_share' ist eine Dateifreigabenachricht usw.). In Teams gibt es verschiedene Activity Handler für verschiedene Arten von Ereignissen, die über die ActivityTypes Aufzählung aufgelistet werden (z. B app.activity(ActivityTypes.Message). ), wobei einige Activity Typen maßgeschneiderte APIs innerhalb des SDK haben (z. B app.message. ). Diese Konzepte sind ungefähr ähnlich, obwohl sich die Namenskonventionen und die Syntax unterscheiden.
// triggers when user sends "hi" or "@bot hi"
app.message("hi", async ({ send, activity }) => {
await send(`Hello, ${activity.from.name}!`);
});
// listen for ANY message to be received
app.on('message', async ({ send, activity }) => {
// echo back users request
await send(`you said: ${activity.text}`);
});
Blockkit-Nutzung in adaptive Karten umwandeln
Um die Rich-UI in Nachrichten einzubinden, die von Ihrem Agent gesendet werden, entsprechen die adaptiven Karten von Teams dem Block Kit von Slack.
import { Card, TextBlock } from '@microsoft/teams.cards';
app.message('/card', async ({ send }) => {
await send(
new Card(new TextBlock('Hello, world!', { wrap: true, isSubtle: false }))
.withOptions({
width: 'Full',
})
);
});
Implementieren der Benutzerauthentifizierung
Es gibt zwei primäre Arten der Benutzerauthentifizierung für Teams und Slack: Authentifizierung für Slack- & Graph-REST-APIs und Authentifizierung für externe Dienste. Sehen wir uns diese Bereiche der Reihe nach an.
Vom Benutzer delegierte REST-APIs
Wenn Sie in Slack Slack-REST-APIs verwenden möchten, die vom Benutzer delegierte Bereiche erfordern, müssen Sie einen OAuth 2.0-Installationsablauf in Ihrer Anwendung implementieren, um Slack-Benutzertoken abzurufen und zu speichern, auch wenn die App bereits von einem anderen Benutzer installiert wurde. In Teams können Sie Teams SSO nutzen, um Benutzer-Entra-Token zum Aufrufen von Graph-REST-APIs abzurufen. Das Teams SDK ist in Teams SSO und Azure Bot Token Service integriert, um den Tokenerwerb, die Speicherung und die Aktualisierung automatisch für Sie zu übernehmen.
Befolgen Sie zunächst die Anweisungen im Teams SSO-Handbuch. Konfigurieren Sie dann die Authentifizierung in Ihrem Code.
const app = new App({
// ... rest of App config
oauth: {
// The key here should match the OAuth Connection setting
// defined in your Azure Bot resource.
defaultConnectionName: 'graph',
},
});
app.message('me', async ({ signin, userGraph, send }) => {
if (!await signin()) {
return;
}
const me = await userGraph.call(endpoints.me.get);
await send(JSON.stringify(me));
});
Benutzerauthentifizierung für externe Dienste
In Slack können Sie auf externe Dienste zugreifen, indem Sie einen Kontobindungsfluss mit OAuth 2.0 implementieren, wie hier dokumentiert. In Teams können Sie auf externe Dienste zugreifen, indem Sie einen OAuth 2.0-Flow implementieren, wobei der Azure Bot Token Service die Tokenbeschaffung, -speicherung und -aktualisierung für Sie übernimmt.
Richten Sie zunächst Ihre OAuth 2.0-Verbindungseinstellungen im Azure-Portal für Ihre Azure Bot-Ressource ein.
Fügen Sie dann den Authentifizierungscode zu Ihrer Anwendung hinzu, um das entsprechende Benutzertoken abzurufen, und rufen Sie Ihren externen Dienst auf.
import
{ App } from '@microsoft/teams.apps';
const app = new App({
// ... rest of App config
oauth: {
// The key here should match the OAuth Connection setting
// defined in your Azure Bot resource.
defaultConnectionName: 'custom',
},
});
app.message('me', async ({ activity, signin, token, send }) => {
// In production, it is probably better to implement a local cache.
// (e.g. \`activity.from.id\` <-> token).
// Otherwise this triggers an API call to Azure Token Service on every inbound message.
if (!await signin()) {
return;
}
// Call external API
const response = await fetch('https://example.com/api/helloworld', {
method: 'POST',
headers: {
"Authorization": token,
},
});
const result = await response.json();
await send(JSON.stringify(result));
});