Zum Hauptinhalt springen
Audact
Angebot ansehen

Go-SDK

Go-Client für die Audact-API, der ausschließlich die Standardbibliothek verwendet. Umfasst Anrufe, Nummern, Beweise, Webhooks und mehr mit typisierten Fehlern und context.Context-Unterstützung.

Handgeschriebener Go-Client für die Audact-API, der ausschließlich die Standardbibliothek verwendet. Er deckt die Audact-API ab, mit typisierten Fehlern und context.Context bei jedem Aufruf.

Installation

Das Go-SDK ist noch nicht veröffentlicht. Die Installationsanleitung erscheint hier, sobald es so weit ist.

Erfordert Go 1.24 oder neuer. Das Modul hat keine Drittanbieter-Abhängigkeiten.

Schnellstart

go

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	audact "github.com/audactai/audact-go-sdk"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()

	c, err := audact.NewClient("") // reads AUDACT_API_KEY
	if err != nil {
		log.Fatal(err)
	}
	agents, err := c.Agents.List(ctx, &audact.ListAgentsParams{Limit: 10})
	if err != nil {
		log.Fatal(err)
	}
	for _, a := range agents.Agents {
		fmt.Println(a.AgentID, a.Name)
	}
}

Ein ausführlicheres Beispiel befindet sich in examples/quickstart.

Basis-URL

Der Standard ist https://api.audact.ai. Auflösungsreihenfolge:

  1. audact.WithBaseURL("https://...")
  2. die Umgebungsvariable AUDACT_BASE_URL
  3. audact.DefaultBaseURL

Ein nachgestelltes / und ein nachgestelltes /v1 werden entfernt; jedem Anfragepfad wird /v1 vorangestellt.

Authentifizierung

ArtEinstellungHeader
Mandanten-API-SchlüsselNewClient(key) oder AUDACT_API_KEYAuthorization: Bearer <key>
Org-Tokenaudact.WithOrgToken(t), oder c.Org.Login / Signup (automatisch gespeichert). c.Org.Refresh liest den Refresh-Cookie, benötigt also einen http.Client mit einem Cookie-Jar (WithHTTPClient)Authorization: Bearer <token>

NewClient schlägt bei fehlendem Schlüssel nicht fehl, da einige Operationen öffentlich sind. Es gibt nur bei einer ungültigen Basis-URL oder einer nil-Option einen Fehler zurück. Wenn ein benötigtes Anmeldedatum leer ist, wird der Header weggelassen und der 401 des Servers wird als audact.ErrUnauthorized zurückgegeben.

Fehler

Nicht-2xx-Antworten geben *audact.APIError zurück, das StatusCode, Code, Message, Hint, Details und RequestID enthält.

go

_, err := c.Calls.Get(ctx, "call_123")
var apiErr *audact.APIError
switch {
case errors.Is(err, audact.ErrNotFound):
	fmt.Println("no such call")
case errors.As(err, &apiErr):
	fmt.Println(apiErr.StatusCode, apiErr.Code, "request_id:", apiErr.RequestID)
case err != nil:
	log.Fatal(err) // transport error, wrapped with %w
}

Sentinels: ErrUnauthorized (401), ErrForbidden (403), ErrNotFound (404), ErrConflict (409), ErrRateLimited (429). Ein 429 gibt *audact.RateLimitError zurück; verwenden Sie RetryAfter für die vom Server angeforderte Verzögerung:

go

var rl *audact.RateLimitError
if errors.As(err, &rl) {
	time.Sleep(rl.RetryAfter)
}

Wiederholungen und Idempotenz

Das SDK wiederholt niemals von sich aus. Schreiboperationen, die Beweise oder andere dauerhafte Datensätze erstellen, akzeptieren einen Idempotenzschlüssel: Übergeben Sie denselben Schlüssel beim Wiederholen, und der Server gibt die erste Antwort wieder, anstatt zweimal zu handeln. Ein leerer Schlüssel sendet keinen Idempotency-Key-Header.

go

m, err := c.Evidence.GenerateC2PAManifest(ctx, callID, "c2pa-"+callID)

Methoden mit einem Idempotenzschlüssel umfassen Evidence.PostEvent, Evidence.ConfirmDelivery, Evidence.ReconcileTranscript und Evidence.GenerateC2PAManifest. C2PA-Manifeste und Beweisereignisse sind Nur-Anhängen, sodass eine Wiederholung ohne Schlüssel dauerhaft ein Duplikat speichert.

Context und Timeouts

Jede Methode nimmt zuerst einen context.Context; Abbruch und Deadlines werden berücksichtigt, und errors.Is(err, context.DeadlineExceeded) funktioniert. Der Standard-HTTP-Client hat einen Timeout von 30 s. Stellen Sie Ihren eigenen mit WithHTTPClient bereit:

go

c, err := audact.NewClient("", audact.WithHTTPClient(&http.Client{Timeout: 10 * time.Second}))

WithUserAgent("myapp/1.0") wird dem Standard-Agent audact-go/0.3.0 hinzugefügt.

Streaming

c.LLMProxy.Stream gibt einen *Stream über Server-Sent-Events zurück. Der Proxy validiert die Antwort Satz für Satz: Current() ist der Satztext, und Chunk().AudactValidation trägt sein Urteil (MODIFY bedeutet, der Text wurde umgeschrieben; ein BLOCK-Chunk trägt die Fallback-Zeile und beendet den Stream). Tool-Call-Deltas kommen als Chunks ohne AudactValidation an.

go

st, err := c.LLMProxy.Stream(ctx, nil, &audact.ChatCompletionRequest{
	Messages: []audact.ChatMessage{{Role: "user", Content: "Hello"}},
})
if err != nil {
	log.Fatal(err)
}
defer st.Close()
for st.Next() {
	if v := st.Chunk().AudactValidation; v != nil && v.Verdict == "BLOCK" {
		log.Println("reply blocked by compliance check")
	}
	fmt.Print(st.Current())
}
if err := st.Err(); err != nil {
	log.Fatal(err)
}

PII-Hilfsfunktionen

audact.NormalizeIdentifier(typ, value) kanonisiert einen Namen-, E-Mail- oder Telefonbezeichner, und audact.ClientHash(typ, value) berechnet den clientseitigen Hash. Beide stimmen mit den TypeScript- und Python-SDKs auf den gemeinsamen Testvektoren überein.

go

h, err := audact.ClientHash("email", "Jane@Example.com")

Services

AccessorBereich
c.AgentsAgenten und Stimmen
c.CallsAnrufdatensätze, SIP-Anrufsteuerung, Weiterleitungen, Routen
c.NumbersTelefonnummern, KYC, BYO-Verbindungen
c.WebhooksWebhooks und Zustellungen
c.ToolsAgenten-Tools
c.IntegrationsDrittanbieter-Integrationen
c.KnowledgeBasesWissensdatenbanken (RAG): Quellen, Agenten-Links, Crawl-Ausschlüsse, Abruftests
c.EvidenceBeweisketten, Quittungen, Compliance-Ereignisse, C2PA-Content-Credentials
c.PIIPII-Shredding, Identitäten, Ausnahmen
c.ValidatorValidierung und Bewertung
c.LLMProxyLLM-Proxy (einschließlich Streaming)
c.TenantsMandanten, Schlüssel, Konfigurationen
c.OrgOrganisationskonten
c.AggregationAggregationsnachweise und Metachain
c.PolicyRichtlinienauswertung und Anrufzeiten
c.AudioAudiovalidierung und -abgleich
c.AuthAPI-Schlüsselaustausch und -aktualisierung

Lizenz

MIT

Quelle aktualisiert: 19. Oktober 2026