Erstellen einer API-basierten Nachrichtenerweiterung
Hinweis
API-basierte Nachrichtenerweiterungen unterstützen nur Suchbefehle.
API-basierte Nachrichtenerweiterungen sind eine Microsoft Teams-App-Funktion, die externe APIs direkt in Teams integriert, um die Benutzerfreundlichkeit Ihrer App zu verbessern und eine nahtlose Benutzererfahrung zu bieten. API-basierte Nachrichtenerweiterungen unterstützen Suchbefehle und können zum Abrufen und Anzeigen von Daten aus externen Diensten innerhalb von Teams verwendet werden, um Workflows zu optimieren, indem sie den Wechsel zwischen Anwendungen reduzieren.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden Anforderungen erfüllen:
1. OpenAPI Description (OAD)
Stellen Sie sicher, dass Sie die folgenden Richtlinien für das OAD-Dokument (OpenAPI Description) einhalten:
- Die OpenAPI-Versionen 2.0 und 3.0.x werden unterstützt.
- JSON und YAML sind die unterstützten Formate.
- Falls vorhanden, muss der Anforderungstext application/JSON sein.
- Definieren Sie eine HTTPS-Protokollserver-URL für die
servers.url
-Eigenschaft. - Nur DIE HTTP-Methoden POST und GET werden unterstützt.
- Das OpenAPI-Beschreibungsdokument muss über einen verfügen
operationId
. - Nur ein erforderlicher Parameter ohne Standardwert ist zulässig.
- Ein erforderlicher Parameter mit einem Standardwert wird als optional betrachtet.
- Benutzer dürfen keinen Parameter für eine Kopfzeile oder ein Cookie eingeben.
- Der Vorgang darf keine erforderlichen Header- oder Cookieparameter ohne Standardwerte aufweisen.
- Stellen Sie sicher, dass im Dokument OpenAPI Description keine Remoteverweise vorhanden sind.
- Das Erstellen von Arrays für die Anforderung wird nicht unterstützt. Geschachtelte Objekte in einem JSON-Anforderungstext werden jedoch unterstützt.
- Teams unterstützt
oneOf
die Konstrukte ,anyOf
,allOf
, undnot
(swagger.io) nicht.
Der folgende Code ist ein Beispiel für ein OpenAPI-Beschreibungsdokument:
openapi: 3.0.1
info:
title: OpenTools Plugin
description: A plugin that allows the user to find the most appropriate AI tools for their use cases, with their pricing information.
version: 'v1'
servers:
- url: https://gptplugin.opentools.ai
paths:
/tools:
get:
operationId: searchTools
summary: Search for AI Tools
parameters:
- in: query
name: search
required: true
schema:
type: string
description: Used to search for AI tools by their category based on the keywords. For example, ?search="tool to create music" will give tools that can create music.
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/searchToolsResponse'
"400":
description: Search Error
content:
application/json:
schema:
$ref: '#/components/schemas/searchToolsError'
components:
schemas:
searchToolsResponse:
required:
- search
type: object
properties:
tools:
type: array
items:
type: object
properties:
name:
type: string
description: The name of the tool.
opentools_url:
type: string
description: The URL to access the tool.
main_summary:
type: string
description: A summary of what the tool is.
pricing_summary:
type: string
description: A summary of the pricing of the tool.
categories:
type: array
items:
type: string
description: The categories assigned to the tool.
platforms:
type: array
items:
type: string
description: The platforms that this tool is available on.
description: The list of AI tools.
searchToolsError:
type: object
properties:
message:
type: string
description: Message of the error.
Weitere Informationen finden Sie unter OpenAPI-Struktur.
2. App-Manifest
Stellen Sie sicher, dass Sie die folgenden Richtlinien für das App-Manifest einhalten:
Legen Sie die App-Manifestversion auf fest
1.17
.Legen Sie auf fest
composeExtensions.composeExtensionType
apiBased
.Definieren Sie
composeExtensions.apiSpecificationFile
als relativen Pfad zur OpenAPI-Beschreibungsdatei innerhalb des Ordners. Dadurch wird das App-Manifest mit der API-Spezifikation verknüpft.Definieren Sie
apiResponseRenderingTemplateFile
als relativen Pfad zur Antwortrenderingvorlage. Dies gibt den Speicherort der Vorlage an, die zum Rendern von API-Antworten verwendet wird.Jeder Befehl muss über einen Link zur Antwortrenderingvorlage verfügen. Dadurch wird jeder Befehl mit dem entsprechenden Antwortformat verbunden.
Die
Commands.id
-Eigenschaft im App-Manifest muss mit demoperationId
in der OpenAPI-Beschreibung übereinstimmen.Wenn ein erforderlicher Parameter ohne Standardwert ist, muss der Befehl
parameters.name
im App-Manifest mit demparameters.name
im Dokument OpenAPI Description übereinstimmen.Wenn kein erforderlicher Parameter vorhanden ist, muss der Befehl
parameters.name
im App-Manifest mit dem optionalenparameters.name
in der OpenAPI-Beschreibung übereinstimmen.Stellen Sie sicher, dass die Parameter für jeden Befehl genau mit den Namen der Parameter übereinstimmen, die für den Vorgang in der OpenAPI-Spezifikation definiert sind.
Eine Antwortrenderingvorlage muss pro Befehl definiert werden, der zum Konvertieren von Antworten von einer API verwendet wird.
Die vollständige Beschreibung darf 128 Zeichen nicht überschreiten.
{ "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.17/MicrosoftTeams.schema.json", + "manifestVersion": "1.17", "version": "1.0.0", "id": "04805b4b-xxxx-xxxx-xxxx-4dbc1cac8f89", "packageName": "com.microsoft.teams.extension", "developer": { "name": "Teams App, Inc.", "websiteUrl": "https://www.example.com", "privacyUrl": "https://www.example.com/termofuse", "termsOfUseUrl": "https://www.example.com/privacy" }, "icons": { "color": "color.png", "outline": "outline.png" }, "name": { "short": "AI tools", "full": "AI tools" }, "description": { "short": "AI tools", "full": "AI tools" }, "accentColor": "#FFFFFF", "composeExtensions": [ { + "composeExtensionType": "apiBased", + "authorization": { + "authType": "apiSecretServiceAuth ", + "apiSecretServiceAuthConfiguration": { + "apiSecretRegistrationId": "9xxxxxxx-7xxx-4xxx-bxxx-1xxxxxxxxxxx" + } + }, + "apiSpecificationFile": "aitools-openapi.yml", "commands": [ { "id": "searchTools", "type": "query", "context": [ "compose", "commandBox" ], "title": "search for AI tools", "description": "search for AI tools", "parameters": [ { "name": "search", "title": "search query", "description": "e.g. search='tool to create music'" } ], + "apiResponseRenderingTemplateFile": "response-template.json" } ] } ], "validDomains": [] }
Parameter
Name | Beschreibung |
---|---|
composeExtensions.composeExtensionType |
Compose Erweiterungstyp. Aktualisieren Sie den Wert auf apiBased . |
composeExtensions.authorization |
Autorisierungsbezogene Informationen für die API-basierte Nachrichtenerweiterung |
composeExtensions.authorization.authType |
Enumeration möglicher Autorisierungstypen. Unterstützte Werte sind none , apiSecretServiceAuth und microsoftEntra . |
composeExtensions.authorization.apiSecretServiceAuthConfiguration |
Objekterfassungsdetails, die für die Dienstauthentifizierung erforderlich sind. Gilt nur, wenn der Authentifizierungstyp ist apiSecretServiceAuth . |
composeExtensions.authorization.apiSecretServiceAuthConfiguration.apiSecretRegistrationId |
Die Registrierungs-ID wird zurückgegeben, wenn der Entwickler den API-Schlüssel über das Entwicklerportal übermittelt. |
composeExtensions.apiSpecificationFile |
Verweist auf eine OpenAPI-Beschreibungsdatei im App-Paket. Schließen Sie ein, wenn der Typ ist apiBased . |
composeExtensions.commands.id |
Eindeutige ID, die Sie dem Suchbefehl zuweisen. Die Benutzeranforderung enthält diese ID. Die ID muss mit der OperationId in der OpenAPI-Beschreibung verfügbaren übereinstimmen. |
composeExtensions.commands.context |
Array, in dem die Einstiegspunkte für die Nachrichtenerweiterung definiert sind. Die Standardwerte sind compose und commandBox . |
composeExtensions.commands.parameters |
Definiert eine statische Liste von Parametern für den Befehl. Der Name muss dem parameters.name in der OpenAPI-Beschreibung zugeordnet werden. Wenn Sie auf eine Eigenschaft im Anforderungstextschema verweisen, muss der Name oder abfrageparametern zugeordnet properties.name werden. |
composeExtensions.commands.apiResponseRenderingTemplateFile |
Vorlage, die zum Formatieren der JSON-Antwort von der Entwickler-API auf die Antwort für adaptive Karten verwendet wird. [Obligatorisch] |
Weitere Informationen finden Sie unter composeExtensions.
3. Antwortrenderingvorlage
Hinweis
Teams unterstützt adaptive Karten bis Version 1.5 und adaptive Karten Designer bis Version 1.6.
-
Definieren Sie die Schemaverweis-URL in der
$schema
-Eigenschaft, um die Struktur Ihrer Vorlage festzulegen. -
Die unterstützten Werte für
responseLayout
sindlist
undgrid
, die bestimmen, wie die Antwort visuell dargestellt wird. -
Ein
jsonPath
wird für Arrays oder empfohlen, wenn die Daten für die adaptive Karte nicht das Stammobjekt sind. Wenn Ihre Daten beispielsweise unterproductDetails
geschachtelt sind, lautetproductDetails
Ihr JSON-Pfad . -
Definieren Sie
jsonPath
als Pfad zu den relevanten Daten oder Arrays in der API-Antwort. Wenn der Pfad auf ein Array zeigt, wird jeder Eintrag im Array an die Vorlage adaptive Karte gebunden und als separates Ergebnis zurückgegeben. [Optional] - Rufen Sie eine Beispielantwort zum Überprüfen der Antwortrenderingvorlage ab. Dies dient als Test, um sicherzustellen, dass Ihre Vorlage wie erwartet funktioniert.
- Verwenden Sie Tools wie Fiddler oder Postman , um die API aufzurufen und sicherzustellen, dass die Anforderung und die Antwort gültig sind. Dieser Schritt ist entscheidend für die Problembehandlung und die Bestätigung, dass Ihre API ordnungsgemäß funktioniert.
- Sie können die adaptive Karte Designer verwenden, um die API-Antwort an die Antwortrenderingvorlage zu binden und eine Vorschau der adaptiven Karte anzuzeigen. Fügen Sie die Vorlage in den CARD PAYLOAD EDITOR ein, und fügen Sie den Beispielantworteintrag im SAMPLE DATA EDITOR ein.
Der folgende Code ist ein Beispiel für eine Antwortrenderingvorlage:
Beispiel für eine Antwortrenderingvorlage
{
"version": "1.0",
"jsonPath": "repairs",
"responseLayout": "grid",
"responseCardTemplate": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"text": "Title: ${if(title, title, 'N/A')}",
"wrap": true
},
{
"type": "TextBlock",
"text": "Description: ${if(description, description, 'N/A')}",
"wrap": true
},
{
"type": "TextBlock",
"text": "Assigned To: ${if(assignedTo, assignedTo, 'N/A')}",
"wrap": true
},
{
"type": "Image",
"url": "${image}",
"size": "Medium",
"$when": "${image != null}"
}
]
},
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url": "${if(image, image, '')}",
"size": "Medium"
}
]
}
]
},
{
"type": "FactSet",
"facts": [
{
"title": "Repair ID:",
"value": "${if(id, id, 'N/A')}"
},
{
"title": "Date:",
"value": "${if(date, date, 'N/A')}"
}
]
}
]
}
]
},
"previewCardTemplate": {
"title": "Title: ${if(title, title, 'N/A')}",
"subtitle": "Description: ${if(description, description, 'N/A')}",
"text": "Assigned To: ${if(assignedTo, assignedTo, 'N/A')}",
"image": {
"url": "${image}",
"$when": "${image != null}"
}
}
}
Vorschaukarte
Erweiterte adaptive Karte
Parameter
Eigenschaft | Typ | Beschreibung | Erforderlich |
---|---|---|---|
version |
string |
Die Schemaversion der aktuellen Antwortrenderingvorlage. | Ja |
jsonPath |
string |
Der Pfad zum relevanten Abschnitt in den Ergebnissen, auf den responseCardTemplate und previewCardTemplate angewendet werden sollen. Wenn nicht festgelegt, wird das Stammobjekt als relevanter Abschnitt behandelt. Wenn der relevante Abschnitt ein Array ist, wird jeder Eintrag der responseCardTemplate und der previewCardTemplate zugeordnet. | Nein |
responseLayout |
responseLayoutType |
Gibt das Layout der Ergebnisse im Nachrichtenerweiterungs-Flyout an. Die unterstützten Typen sind list und grid . |
Ja |
responseCardTemplate |
adaptiveCardTemplate |
Eine Vorlage zum Erstellen einer adaptiven Karte aus einem Ergebniseintrag. | Ja |
previewCardTemplate |
previewCardTemplate |
Eine Vorlage zum Erstellen einer Vorschauversion Karte aus einem Ergebniseintrag. Die resultierende Vorschauversion Karte wird im Flyoutmenü der Nachrichtenerweiterung angezeigt. | Ja |
JSON-Pfad
Der JSON-Pfad ist optional, sollte aber für Arrays verwendet werden, oder wenn das Objekt, das als Daten für die adaptive Karte verwendet werden soll, nicht das Stammobjekt ist. Der JSON-Pfad sollte dem von Newtonsoft definierten Format folgen. Wenn der JSON-Pfad auf ein Array verweist, wird jeder Eintrag in diesem Array an die Vorlage adaptive Karte gebunden und als separate Ergebnisse zurückgegeben.
Beispiel Angenommen, Sie verfügen über den folgenden JSON-Code für eine Liste von Produkten und möchten für jeden Eintrag ein Karte Ergebnis erstellen.
{
"version": "1.0",
"title": "All Products",
"warehouse": {
"products": [
...
]
}
}
Wie Sie sehen können, befindet sich das Ergebnisarray unter "products", das unter "warehouse" geschachtelt ist, sodass der JSON-Pfad "warehouse.products" lautet.
Verwenden Sie , um eine Vorschau der adaptiven Karte anzuzeigen, indem Sie die Vorlage in Kartennutzlast Editor einfügen. Nehmen Sie https://adaptivecards.io/designer/ einen Beispielantworteintrag aus Ihrem Array oder für Ihr Objekt, und fügen Sie ihn in den Editor für gleiche Daten auf der rechten Seite ein. Stellen Sie sicher, dass die Karte ordnungsgemäß gerendert wird und Ihren Wünschen entspricht. Beachten Sie, dass Teams Karten bis Version 1.5 unterstützt, während der Designer 1.6 unterstützt.
Schemazuordnung
Die Eigenschaften im OpenAPI-Beschreibungsdokument werden der Vorlage für adaptive Karten wie folgt zugeordnet:
string
Die Typen ,number
, undinteger
boolean
werden in textBlock konvertiert.Beispiel
Quellschema:
string
,number
,integer
undboolean
name: type: string example: doggie
Zielschema:
Textblock
{ "type": "TextBlock", "text": "name: ${if(name, name, 'N/A')}", "wrap": true }
array
: Ein Array wird in einen Container innerhalb der adaptiven Karte konvertiert.Beispiel
Quellschema:
array
type: array items: required: - name type: object properties: id: type: integer category: type: object properties: name: type: string
Zielschema:
Container
{ "type": "Container", "$data": "${$root}", "items": [ { "type": "TextBlock", "text": "id: ${if(id, id, 'N/A')}", "wrap": true }, { "type": "TextBlock", "text": "category.name: ${if(category.name, category.name, 'N/A')}", "wrap": true } ] }
object
: Ein Objekt wird in adaptive Karte in eine geschachtelte Eigenschaft konvertiert.Beispiel
Quellschema:
object
components: schemas: Pet: category: type: object properties: id: type: integer name: type: string
Zielschema: Geschachtelte Eigenschaft in einer adaptiven Karte
{ "type": "TextBlock", "text": "category.id: ${if(category.id, category.id, 'N/A')}", "wrap": true }, { "type": "TextBlock", "text": "category.name: ${if(category.name, category.name, 'N/A')}", "wrap": true }
image
: Wenn eine Eigenschaft eine Bild-URL ist, wird sie in ein Image-Element auf der adaptiven Karte konvertiert.Beispiel
Quellschema:
image
image: type: string format: uri description: The URL of the image of the item to be repaired
Zielschema:
"Image"
{ "type": "Image", "url": "${image}", "$when": "${image != null}" }
Sie können eine API-basierte Nachrichtenerweiterung mithilfe des Entwicklerportals für Teams, des Teams-Toolkits für Visual Studio Code, der Befehlszeilenschnittstelle (CLI) oder Visual Studio erstellen.
Führen Sie die folgenden Schritte aus, um eine API-basierte Nachrichtenerweiterung über das Entwicklerportal zu erstellen:
Wechseln Sie zum Entwicklerportal.
Wechseln Sie zu Apps.
Wählen Sie + Neue App aus.
Geben Sie einen Namen der App ein, und wählen Sie die Manifestversionals Öffentliche Entwicklervorschau (devPreview) aus.
Klicken Sie auf Hinzufügen.
Aktualisieren Sie im linken Bereich unter Konfigurieren die folgenden grundlegenden Informationen:
- Vollständiger Name
- Kurzbeschreibung
- Lange Beschreibung
- Entwickler- oder Firmenname
- Website (muss eine gültige HTTPS-URL sein)
- Datenschutzrichtlinie
- Nutzungsbedingungen
Klicken Sie auf Speichern.
Wählen Sie App-Features aus.
Wählen Sie Nachrichtenerweiterung aus.
Wählen Sie unter Nachrichtenerweiterungstyp die Option API aus.
- Wenn Sie einen Haftungsausschluss erhalten, der besagt, dass die Bot-Nachrichtenerweiterung bereits von Benutzern verwendet wird. Möchten Sie den Nachrichtenerweiterungstyp in API ändern?, wählen Sie Ja, ändern aus.
Wählen Sie unter OpenAPI-Spezifikation die Option Jetzt hochladen aus.
Wählen Sie das Dokument OpenAPI-Beschreibung im JSON- oder YAML-Format aus, und wählen Sie Öffnen aus.
Klicken Sie auf Speichern. Es wird ein Popupfenster mit der Meldungs-API-Spezifikation angezeigt, die erfolgreich gespeichert wurde.
Wählen Sie Got it (Erhalten) aus.
Hinzufügen von Befehlen
Hinweis
Nachrichtenerweiterungen, die aus einer API erstellt wurden, unterstützen nur einen einzelnen Parameter.
Sie können Ihrer Nachrichtenerweiterung Befehle und Parameter hinzufügen, um Befehle hinzuzufügen:
Wählen Sie unter Nachrichtenerweiterungstyp die Option Hinzufügen aus.
Das Popupfenster Befehl hinzufügen wird mit einer Liste aller verfügbaren APIs aus dem OpenAPI-Beschreibungsdokument angezeigt.
Wählen Sie eine API aus der Liste aus, und wählen Sie Weiter aus.
Wählen Sie unter Antwortvorlage die Option Jetzt hochladen aus.
Hinweis
Wenn Sie über mehr als eine API verfügen, stellen Sie sicher, dass Sie die Antwortvorlage für adaptive Karten für jede API hochladen.
Wählen Sie die Antwortvorlagendatei für adaptive Karten im JSON-Format und dann Öffnen aus.
Die folgenden Attribute werden automatisch aus der Vorlage für adaptive Karten aktualisiert:
- Befehlstyp
- Befehls-ID
- Befehlstitel
- Parametername
- Parameterbeschreibung
Aktualisieren Sie unter Details die Befehlsbeschreibung.
Wenn Sie einen Befehl mithilfe eines Triggers in Microsoft 365 Copilot starten möchten, aktivieren Sie die Umschaltfläche Diesen Befehl automatisch ausführen, wenn ein Benutzer die Erweiterung öffnet.
Klicken Sie auf Hinzufügen. Der Befehl wurde erfolgreich hinzugefügt.
Klicken Sie auf Speichern.
Wählen Sie unter Authentifizierung und Autorisierung eine der folgenden Optionen aus:
- Keine Authentifizierung (nicht empfohlen)
- API-Schlüssel
- OAuth
Eine API-basierte Nachrichtenerweiterung wird erstellt.
Zum Testen Der API-basierten Nachrichtenerweiterung, die im Entwicklerportal erstellt wurde, können Sie die folgenden Methoden verwenden:
Vorschau in Teams: Öffnen Sie Ihre Nachrichtenerweiterung, und wählen Sie in Teams in der oberen rechten Ecke Vorschau aus. Sie werden zu Teams weitergeleitet, wo Sie die App zu Teams hinzufügen können, um eine Vorschau der App anzuzeigen.
App-Paket herunterladen: Wählen Sie auf der Seite der Nachrichtenerweiterung im linken Bereich App-Paket aus, und wählen Sie dann in der oberen linken Ecke des Fensters App-Paket herunterladen aus. Das App-Paket wird in einer .zip-Datei auf Ihren lokalen Computer heruntergeladen. Sie können das App-Paket in Teams hochladen und die Nachrichtenerweiterung testen.
Mehrere Parameter
Mehrere Parameter ermöglichen API-basierten Nachrichtenerweiterungen mehr als einen Eingabetyp für Abfragebefehle. Sie können beispielsweise nach Anime nach Genre, Bewertung, status und Datum suchen.
Sie können die Eingabetypen, Titel, Beschreibungen und Pflichtfelder für die Parameter im Manifest angeben.
- Die
isRequired
-Eigenschaft im Parameterfeld gibt an, ob ein Parameter für den Abfragebefehl obligatorisch ist. - Die
name
-Eigenschaft desparameters
Felds im App-Manifest muss mit demid
Feld im OpenAPI-Beschreibungsdokument für den entsprechenden Parameter übereinstimmen.
Beispiel
"composeExtensions": [
{
"composeExtensionType": "apiBased",
"apiSpecificationFile": "apiSpecificationFiles/openapi.json",
"commands": [
{
"context": [
"compose"
],
"type": "query",
"title": "Search Animes",
"id": "getAnimeSearch",
"parameters": [
{
"name": "q",
"title": "Search Query",
"description": "The search query",
"isRequired": true
},
{
"name": "type",
"inputType": "choiceset",
"title": "Type",
"description": "Available anime types",
"choices": [
{
"title": "TV",
"value": "tv"
},
{
"title": "OVA",
"value": "ova"
},
{
"title": "Movie",
"value": "movie"
},
{
"title": "Special",
"value": "special"
},
{
"title": "ONA",
"value": "ona"
},
{
"title": "Music",
"value": "music"
}
]
},
{
"name": "status",
"inputType": "choiceset",
"title": "Status",
"description": "Available airing statuses",
"choices": [
{
"title": "Airing",
"value": "airing"
},
{
"title": "Completed",
"value": "complete"
},
{
"title": "Upcoming",
"value": "upcoming"
}
]
},
{
"name": "rating",
"inputType": "choiceset",
"title": "Rating",
"description": "Available ratings",
"choices": [
{
"title": "G",
"value": "g"
},
{
"title": "PG",
"value": "pg"
},
{
"title": "PG-13",
"value": "pg13"
},
{
"title": "R",
"value": "r17"
},
{
"title": "R+",
"value": "r"
},
{
"title": "Rx",
"value": "rx"
}
]
}
],
"description": "Search animes",
"apiResponseRenderingTemplateFile": "response_json/getAnimeSearch.json"
},
{
"context": [
"compose"
],
"type": "query",
"title": "Search mangas",
"id": "getMangaSearch",
"parameters": [
{
"name": "q",
"title": "Search Query",
"description": "The search query",
"isRequired": true
},
{
"name": "type",
"inputType": "choiceset",
"title": "Type",
"description": "Available manga types",
"choices": [
{
"title": "Manga",
"value": "manga"
},
{
"title": "Novel",
"value": "novel"
},
{
"title": "Light Novel",
"value": "lightnovel"
},
{
"title": "One Shot",
"value": "oneshot"
},
{
"title": "Doujin",
"value": "doujin"
},
{
"title": "Manhwa",
"value": "manhwa"
},
{
"title": "Manhua",
"value": "manhua"
}
]
},
{
"name": "status",
"inputType": "choiceset",
"title": "Status",
"description": "Available manga statuses",
"choices": [
{
"title": "Publishing",
"value": "publishing"
},
{
"title": "Complete",
"value": "complete"
},
{
"title": "Hiatus",
"value": "hiatus"
},
{
"title": "Discontinued",
"value": "discontinued"
},
{
"title": "Upcoming",
"value": "upcoming"
}
]
},
{
"name": "start_date",
"title": "Start Date",
"description": "Start date of the manga",
"inputType": "date"
},
{
"name": "end_date",
"title": "End Date",
"description": "End date of the manga",
"inputType": "date"
}
],
Schritt-für-Schritt-Anleitungen
Um eine API-basierte Nachrichtenerweiterung zu erstellen, befolgen Sie die folgenden schrittweisen Anleitungen:
- Für Einsteiger: Erstellen Sie eine API-basierte Nachrichtenerweiterung mithilfe des Teams Toolkits.
- Für fortgeschrittene Benutzer: Erstellen Sie eine API-basierte Nachrichtenerweiterung von Grund auf.