OAuth-v2-Arbeitsabläufe
Installation
Abschnitt betitelt „Installation“npm install --global @anakonn/ankk@0.5.1ankk --versionAnmelden und eine Marke auswählen
Abschnitt betitelt „Anmelden und eine Marke auswählen“ANKK v2 verwendet Ihr Benutzerkonto über Browser-OAuth. Ihre vorhandenen Berechtigungen gelten für jede Anfrage. Das Verbinden einer App gewährt keine zusätzlichen Markenberechtigungen. Wählen Sie die Marke bei der Arbeit aus; die OAuth-Autorisierung wählt keine Marke.
Verwenden Sie CLI 0.5.1 mit Node.js 24 oder neuer. Die öffentliche Client-ID bezeichnet ANKK CLI und ist kein Geheimnis.
export ANKK_OAUTH_CLIENT_ID=ankk-cli-productionankk --json auth login --environment productionankk auth status --environment production --connection OAUTH_CONNECTION_IDankk --json brands list --environment production --connection OAUTH_CONNECTION_ID --allankk --json connections list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --allErsetzen Sie die großgeschriebenen Kennungen durch IDs aus Ihren eigenen Antworten. Die OAuth-Verbindungs-ID wählt Ihre Anmeldung aus. Eine SNS-Konto-ID bezeichnet ein Veröffentlichungsziel; sie unterscheidet sich sowohl von der OAuth-Verbindung als auch von der Konto-ID des Anbieters. Verwenden Sie im gesamten Ablauf dieselbe Umgebung und Marke. Die Beispiele geben beides ausdrücklich an, auch wenn lokal bereits eine Standardmarke konfiguriert ist.
Wenn ein Terminal den Browser nicht automatisch öffnet, verwenden Sie ankk auth login --environment production --device --no-open und folgen Sie den angezeigten Verifizierungsanweisungen. Tokens werden im Anmeldedatenspeicher des Betriebssystems abgelegt. Ist dieser nicht verfügbar, stellen Sie ihn vor der Anmeldung wieder her. Fügen Sie niemals Tokens in einen Chat ein und speichern Sie sie nicht in einer Veröffentlichungs-JSON-Datei.
Leistung und gespeicherte Beiträge abrufen
Abschnitt betitelt „Leistung und gespeicherte Beiträge abrufen“ankk --json analytics get --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --from 2026-10-01T00:00:00Z --to 2026-10-02T00:00:00Zankk --json posts list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --allWählen Sie den tatsächlichen Berichtszeitraum. Der Anfang ist eingeschlossen, das Ende ausgeschlossen; Zeitstempel verwenden UTC. Rechnen Sie lokale Datumsangaben des Benutzers vor der Abfrage in UTC um. Mit --sns-account SNS_ACCOUNT_ID beschränken Sie das Ergebnis auf ein Konto.
Das Ergebnis beschreibt gespeicherte Beobachtungen. Prüfen Sie Abdeckung und Beobachtungszeitpunkte, bevor Sie Zeiträume vergleichen. Fehlende Daten sind nicht null. Die neueste Momentaufnahme eines Kontos hat einen eigenen Messzeitpunkt und ist nicht zwangsläufig die Summe eines Zeitraums. Instagram-Statistiken für einen exakten Zeitraum sind von angesammelten Beobachtungen getrennt. Ein Lesezugriff startet keine Datenerhebung beim Anbieter. posts refresh ist eine separate Aktion für Beitrags- und Kommentardaten, keine Anfrage zur Aktualisierung der Analysen.
Listen verwenden Cursor. --all ruft Folgeseiten ab; währenddessen können sich Daten ändern, daher ist das Ergebnis keine Momentaufnahme. Wenn ein Cursor abläuft, melden Sie das unvollständige Ergebnis und starten Sie bewusst eine neue Auflistung, statt sie stillschweigend mit den alten Seiten zu kombinieren.
Eine Datei vor der Veröffentlichung vorbereiten
Abschnitt betitelt „Eine Datei vor der Veröffentlichung vorbereiten“ankk --json media create-upload --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file ./photo.jpg --idempotency-key UPLOAD_KEYankk --json media complete-upload MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --idempotency-key INSPECTION_KEY --wait --wait-timeout 180ankk --json media get MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_IDDer erste Befehl registriert und überträgt die Datei. Speichern Sie ihre Medien-ID auch dann, wenn die Übertragung scheitert oder die Antwort ungewiss ist. Der zweite fordert die Prüfung an; verwenden Sie das Medium erst, wenn sein endgültiger Status ready lautet. Diese Schritte veröffentlichen nichts. Medien können innerhalb ihrer Marke wiederverwendet werden. Für eine andere Marke ist ein separater Upload erforderlich.
Wenn nur die Upload-URL abläuft, verwenden Sie media refresh-upload MEDIA_ID mit derselben Umgebung, Anmeldung und Marke. Die neue URL verlängert weder die ursprüngliche fachliche Frist noch ersetzt sie die Datei. Andere Bytes erfordern einen neuen Medien-Upload. Behandeln Sie signierte Übertragungs-URLs wie Zugangsdaten und halten Sie sie aus geteilten Gesprächsprotokollen heraus. Clients ohne Dateiübertragung können die zurückgegebene Browser-Fortschritts-URL verwenden, sich anmelden und die Datei auswählen, anschließend mit derselben Medien-ID zurückkehren und die Bereitschaft prüfen.
Prüfen und veröffentlichen
Abschnitt betitelt „Prüfen und veröffentlichen“Bestätigen Sie Marke, Konten, vollständigen Text, Reihenfolge der Thread-Abschnitte, Anhänge, Anbieteroptionen und Ausführungszeit, bevor Sie KI-vorbereitete Inhalte veröffentlichen. Eine bestehende Freigabe für genau diese Ausführungsabsicht genügt. Eine reine Analyse- oder Entwurfsanfrage ist keine Veröffentlichungsfreigabe.
Speichern Sie diese minimale Eingabe zur sofortigen Veröffentlichung als publish.json. Wählen Sie ein Konto, das die vorgeschlagene Kombination aus Text und Bild unterstützt; der Server prüft aktuelle Fähigkeiten, Medienbereitschaft und Berechtigung erneut. Ersetzen Sie den englischen Beispieltext durch den exakt freigegebenen Text.
{ "scheduled_at": null, "targets": [ { "sns_account_id": "SNS_ACCOUNT_ID", "text": "The exact text you approved", "media_ids": ["MEDIA_ID"] } ]}ankk --json contents publish --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file publish.json --idempotency-key PUBLICATION_KEYWählen und speichern Sie vor dem Senden einen eindeutigen Schlüssel für diese Absicht. Verwenden Sie nach einer ungewissen Antwort exakt denselben Schlüssel und dieselben Daten, auch beim Wechsel zwischen API, CLI und MCP. Erstellen Sie keine weitere Veröffentlichung nur wegen eines Verbindungs-Timeouts. Derselbe Schlüssel mit geänderter Eingabe verursacht einen Konflikt. Ein abgelaufener Schlüssel erzeugt keine neue Arbeit: Prüfen Sie das alte Ergebnis, bevor Sie bewusst eine neue Absicht starten.
Für eine Terminierung ersetzen Sie scheduled_at: null durch die genehmigte zukünftige UTC-Zeit, zum Beispiel 2026-12-01T09:00:00Z. Ersetzen Sie dieses Beispieldatum vor Gebrauch und prüfen Sie, dass es noch in der Zukunft liegt. Eine abgeschlossene Registrierung liefert eine separate publish_operation_id; dies bedeutet nicht, dass die geplanten SNS-Beiträge bereits veröffentlicht sind.
Das Ergebnis verfolgen
Abschnitt betitelt „Das Ergebnis verfolgen“ankk --json operations get OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --wait --wait-timeout 180Bei sofortiger Veröffentlichung verfolgen Sie die zurückgegebene Vorgangs-ID. Bei einer Terminierung verfolgen Sie zur Ausführungszeit publish_operation_id. Warten ist optional und lokal. CLI-Exitcode 10 bedeutet, dass das Wartelimit abgelaufen ist; Exitcode 130 bedeutet, dass das Warten unterbrochen wurde. Beides bricht die Serveraufgabe nicht ab. Lesen Sie denselben Vorgang weiter. Exitcode 11 beim Warten bezeichnet ein fehlgeschlagenes, abgebrochenes oder teilweise erfolgreiches Endergebnis; prüfen Sie die Ergebnisse je Konto. Eine normale Statusabfrage kann mit 0 enden und dennoch einen fehlgeschlagenen Vorgang melden. Skripte müssen daher auch den Status der Antwort prüfen.
Melden Sie jedes Konto separat. Bewahren Sie erfolgreiche Beiträge und ihre URLs auf. Das geordnete Array posts enthält die bestätigten Beiträge eines Threads; die repräsentative post_url allein beschreibt möglicherweise nicht den ganzen Thread. Eine fehlende URL oder ein ungeklärter Status beweist nicht, dass der Anbieter nichts erstellt hat. Belassen Sie Ergebnisse im Abgleich oder mit unbekanntem Ausgang als ungeklärt, bis die bestehende Aufgabe Belege liefert.
Eine Terminierung ändern oder einen Fehler beheben
Abschnitt betitelt „Eine Terminierung ändern oder einen Fehler beheben“Lesen Sie vor Änderungen an Inhalt oder Zeitpunkt contents get CONTENT_ID mit derselben Umgebung, Anmeldung und Marke. Übergeben Sie die aktuelle Version als --expected-version. contents update bearbeitet zulässige, noch nicht gestartete Ziele; contents reschedule ändert deren UTC-Zeitplanung. Ein Versionskonflikt erfordert erneutes Lesen und Prüfen, kein stilles Überschreiben. contents cancel fordert einen Abbruch an; prüfen Sie den zurückgegebenen Veröffentlichungsvorgang, bis der Abbruch bestätigt ist. Die Ausführung kann dem Abbruch zuvorkommen.
Wiederholen Sie nur ausgewählte fehlgeschlagene Konten, die aktuell mit can_retry gekennzeichnet sind:
ankk --json contents retry ORIGINAL_OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --accounts FAILED_SNS_ACCOUNT_ID --idempotency-key RETRY_KEYDies ist eine neue Ausführungsabsicht und benötigt einen passenden neuen Schlüssel sowie eine Benutzerfreigabe, sofern sie nicht bereits abgedeckt ist. Behalten Sie diesen Wiederholungsschlüssel nach einer ungewissen Antwort bei. Die Wiederholung verwendet gespeicherte Inhalte und führt sie so bald wie möglich aus; erfolgreiche oder ungewisse Ziele werden niemals erneut veröffentlicht. Für eine neue zukünftige Terminierung liefert contents duplicate nur bearbeitbare Eingabedaten. Prüfen Sie diese und reichen Sie eine neue genehmigte Veröffentlichung ein.
Das Verwerfen zulässiger fehlgeschlagener Warteschlangeneinträge blendet sie aus der Arbeitswarteschlange aus; es löscht keine Beiträge oder Ausführungshistorie und wiederholt nichts. Ein Sammelabbruch kann akzeptierte und abgelehnte Gruppen gemeinsam zurückgeben; verfolgen Sie jeden akzeptierten Veröffentlichungsvorgang. Sammelweises Verwerfen endet synchron: Prüfen Sie die verworfenen und abgelehnten Gruppen des Belegs, ohne auf einen neuen Vorgang zu warten. Lesen Sie in beiden Fällen den vollständigen Beleg, statt einen Exitcode als Alles-oder-nichts-Ergebnis zu behandeln.
Anfragefehler behandeln und die Verbindung trennen
Abschnitt betitelt „Anfragefehler behandeln und die Verbindung trennen“Lesen Sie den strukturierten Fehlercode, die Anfrage-ID, die Vorgangs-ID soweit vorhanden, next_action und retry_at. Nach Wiederherstellung der Authentifizierung kehren Sie zum ursprünglichen Vorgang zurück. Berechtigungsfehler erfordern legitimen Zugriff, keine andere Schnittstelle. Beachten Sie Anfragebegrenzungen und Funktionseinschränkungen. Eine wiederholbare Anfrage erlaubt weder eine neue Veröffentlichung noch einen Ersatzschlüssel.
ankk auth logout --environment production --connection OAUTH_CONNECTION_IDDie Abmeldung meldet serverseitigen Widerruf und Entfernung lokaler Zugangsdaten getrennt. Ist der serverseitige Widerruf nicht bestätigt, widerrufen Sie die alte Verbindung in den ANKK-Einstellungen oder über eine andere gültige Verbindung. Das Entfernen einer OAuth-Verbindung bricht bereits akzeptierte Veröffentlichungen nicht ab und löscht keine markeneigenen Medien.
MCP und Skills verwenden
Abschnitt betitelt „MCP und Skills verwenden“MCP verwendet Benutzer-OAuth unter https://api.ankk.app/mcp/v2. Der Host benötigt einen registrierten Client; die URL allein reicht nicht aus. Offizielle Einträge in den Verzeichnissen von ChatGPT und Claude sind nicht verfügbar. Ohne Karten verwenden Sie Text und strukturierte Ergebnisse. Prüfen Sie Werte und Beobachtungszeiten statt nur die Gesprächszusammenfassung.
Skills stellt Abläufe bereit, keine Berechtigungen oder Zugangsdaten. Installieren Sie den festen Kandidaten-Tag und prüfen Sie Marke, Freigabe und Endergebnis.
npx skills add https://github.com/Anakonn/ankk-skills/tree/v0.1.0-rc.1 --skill ankk-analyze --skill ankk-publish