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:
audact.WithBaseURL("https://...")- die Umgebungsvariable
AUDACT_BASE_URL audact.DefaultBaseURL
Ein nachgestelltes / und ein nachgestelltes /v1 werden entfernt; jedem Anfragepfad wird /v1 vorangestellt.
Authentifizierung
| Art | Einstellung | Header |
|---|---|---|
| Mandanten-API-Schlüssel | NewClient(key) oder AUDACT_API_KEY | Authorization: Bearer <key> |
| Org-Token | audact.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
| Accessor | Bereich |
|---|---|
c.Agents | Agenten und Stimmen |
c.Calls | Anrufdatensätze, SIP-Anrufsteuerung, Weiterleitungen, Routen |
c.Numbers | Telefonnummern, KYC, BYO-Verbindungen |
c.Webhooks | Webhooks und Zustellungen |
c.Tools | Agenten-Tools |
c.Integrations | Drittanbieter-Integrationen |
c.KnowledgeBases | Wissensdatenbanken (RAG): Quellen, Agenten-Links, Crawl-Ausschlüsse, Abruftests |
c.Evidence | Beweisketten, Quittungen, Compliance-Ereignisse, C2PA-Content-Credentials |
c.PII | PII-Shredding, Identitäten, Ausnahmen |
c.Validator | Validierung und Bewertung |
c.LLMProxy | LLM-Proxy (einschließlich Streaming) |
c.Tenants | Mandanten, Schlüssel, Konfigurationen |
c.Org | Organisationskonten |
c.Aggregation | Aggregationsnachweise und Metachain |
c.Policy | Richtlinienauswertung und Anrufzeiten |
c.Audio | Audiovalidierung und -abgleich |
c.Auth | API-Schlüsselaustausch und -aktualisierung |
Lizenz
MIT
