Go-SDK
Handgeschreven Go-client voor de Audact-API die uitsluitend de standaardbibliotheek gebruikt. Het dekt de Audact-API, met getypeerde fouten en context.Context bij elke aanroep.
Installatie
De Go-SDK is nog niet gepubliceerd. De installatie-instructies verschijnen hier zodra dat zo is.
Vereist Go 1.24 of nieuwer. De module heeft geen afhankelijkheden van derden.
Snelstart
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)
}
}Een uitgebreider voorbeeld staat in examples/quickstart.
Basis-URL
De standaard is https://api.audact.ai. Volgorde van resolutie:
audact.WithBaseURL("https://...")- de omgevingsvariabele
AUDACT_BASE_URL audact.DefaultBaseURL
Een afsluitende / en een afsluitende /v1 worden verwijderd; elk aanvraagpad wordt voorafgegaan door /v1.
Authenticatie
| Soort | Instelling | Header |
|---|---|---|
| Tenant-API-sleutel | NewClient(key) of AUDACT_API_KEY | Authorization: Bearer <key> |
| Org-token | audact.WithOrgToken(t), of c.Org.Login / Signup (automatisch opgeslagen). c.Org.Refresh leest de refresh-cookie en heeft dus een http.Client nodig met een cookie-jar (WithHTTPClient) | Authorization: Bearer <token> |
NewClient mislukt niet bij een ontbrekende sleutel omdat sommige operaties openbaar zijn. Het retourneert alleen een fout bij een ongeldige basis-URL of een nil-optie. Als een vereiste inloggegevens leeg zijn, wordt de header weggelaten en verschijnt de 401 van de server als audact.ErrUnauthorized.
Fouten
Niet-2xx-responsen retourneren *audact.APIError, dat StatusCode, Code, Message, Hint, Details en RequestID bevat.
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). Een 429 retourneert *audact.RateLimitError; gebruik RetryAfter voor de door de server gevraagde vertraging:
go
var rl *audact.RateLimitError
if errors.As(err, &rl) {
time.Sleep(rl.RetryAfter)
}Herhalingen en idempotentie
De SDK herhaalt nooit uit zichzelf. Schrijfoperaties die bewijs of andere permanente records aanmaken, accepteren een idempotentiesleutel: geef dezelfde sleutel mee bij herhaling en de server speelt de eerste respons opnieuw af in plaats van tweemaal te handelen. Een lege sleutel verzendt geen Idempotency-Key-header.
go
m, err := c.Evidence.GenerateC2PAManifest(ctx, callID, "c2pa-"+callID)
Methoden met een idempotentiesleutel zijn Evidence.PostEvent, Evidence.ConfirmDelivery, Evidence.ReconcileTranscript en Evidence.GenerateC2PAManifest. C2PA-manifesten en bewijsgebeurtenissen zijn alleen-toevoegen, zodat een herhaling zonder sleutel permanent een duplicaat opslaat.
Context en time-outs
Elke methode neemt als eerste een context.Context; annulering en deadlines worden gehonoreerd, en errors.Is(err, context.DeadlineExceeded) werkt. De standaard-HTTP-client heeft een time-out van 30 s. Geef uw eigen op met WithHTTPClient:
go
c, err := audact.NewClient("", audact.WithHTTPClient(&http.Client{Timeout: 10 * time.Second}))WithUserAgent("myapp/1.0") wordt toegevoegd aan de standaard-agent audact-go/0.3.0.
Streaming
c.LLMProxy.Stream retourneert een *Stream over server-sent events. De proxy valideert de respons zin voor zin: Current() is de zintekst, en Chunk().AudactValidation draagt het oordeel (MODIFY betekent dat de tekst is herschreven; een BLOCK-chunk draagt de fallback-regel en beëindigt de stream). Tool-call-delta's komen aan als chunks zonder AudactValidation.
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-hulpfuncties
audact.NormalizeIdentifier(typ, value) normaliseert een naam-, e-mail- of telefoon-identifier, en audact.ClientHash(typ, value) berekent de client-hash. Beide komen overeen met de TypeScript- en Python-SDK's op de gedeelde testvectoren.
go
h, err := audact.ClientHash("email", "Jane@Example.com")Services
| Accessor | Gebied |
|---|---|
c.Agents | Agenten en stemmen |
c.Calls | Oproepdatenslagen, SIP-oproepbeheer, overdrachten, routes |
c.Numbers | Telefoonnummers, KYC, BYO-verbindingen |
c.Webhooks | Webhooks en bezorgingen |
c.Tools | Agenttools |
c.Integrations | Integraties van derden |
c.KnowledgeBases | Kennisdatabases (RAG): bronnen, agentlinks, crawl-uitsluitingen, retrievaltests |
c.Evidence | Bewijsketens, bonnen, compliancegebeurtenissen, C2PA-inhoudsgeloofsbrieven |
c.PII | PII-shredding, identiteiten, uitzonderingen |
c.Validator | Validatie en scoring |
c.LLMProxy | LLM-proxy (inclusief streaming) |
c.Tenants | Tenants, sleutels, configuraties |
c.Org | Organisatieaccounts |
c.Aggregation | Aggregatiebewijzen en metachain |
c.Policy | Beleidsevaluatie en oproeptijden |
c.Audio | Audiovalidatie en -afstemming |
c.Auth | API-sleuteluitwisseling en -vernieuwing |
Licentie
MIT
