Zum Inhalt springen

OAuth-v2-Arbeitsabläufe

Terminal-Fenster
npm install --global @anakonn/ankk@0.5.1
ankk --version

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.

Terminal-Fenster
export ANKK_OAUTH_CLIENT_ID=ankk-cli-production
Terminal-Fenster
ankk --json auth login --environment production
ankk auth status --environment production --connection OAUTH_CONNECTION_ID
ankk --json brands list --environment production --connection OAUTH_CONNECTION_ID --all
ankk --json connections list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --all

Ersetzen 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.

Terminal-Fenster
ankk --json analytics get --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --from 2026-10-01T00:00:00Z --to 2026-10-02T00:00:00Z
ankk --json posts list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --all

Wä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.

Terminal-Fenster
ankk --json media create-upload --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file ./photo.jpg --idempotency-key UPLOAD_KEY
ankk --json media complete-upload MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --idempotency-key INSPECTION_KEY --wait --wait-timeout 180
ankk --json media get MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID

Der 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.

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"]
}
]
}
Terminal-Fenster
ankk --json contents publish --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file publish.json --idempotency-key PUBLICATION_KEY

Wä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.

Terminal-Fenster
ankk --json operations get OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --wait --wait-timeout 180

Bei 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:

Terminal-Fenster
ankk --json contents retry ORIGINAL_OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --accounts FAILED_SNS_ACCOUNT_ID --idempotency-key RETRY_KEY

Dies 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.

Terminal-Fenster
ankk auth logout --environment production --connection OAUTH_CONNECTION_ID

Die 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 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.

Terminal-Fenster
npx skills add https://github.com/Anakonn/ankk-skills/tree/v0.1.0-rc.1 --skill ankk-analyze --skill ankk-publish