Ga naar hoofdinhoud
Audact
Bekijk het aanbod

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:

  1. audact.WithBaseURL("https://...")
  2. de omgevingsvariabele AUDACT_BASE_URL
  3. audact.DefaultBaseURL

Een afsluitende / en een afsluitende /v1 worden verwijderd; elk aanvraagpad wordt voorafgegaan door /v1.

Authenticatie

SoortInstellingHeader
Tenant-API-sleutelNewClient(key) of AUDACT_API_KEYAuthorization: Bearer <key>
Org-tokenaudact.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

AccessorGebied
c.AgentsAgenten en stemmen
c.CallsOproepdatenslagen, SIP-oproepbeheer, overdrachten, routes
c.NumbersTelefoonnummers, KYC, BYO-verbindingen
c.WebhooksWebhooks en bezorgingen
c.ToolsAgenttools
c.IntegrationsIntegraties van derden
c.KnowledgeBasesKennisdatabases (RAG): bronnen, agentlinks, crawl-uitsluitingen, retrievaltests
c.EvidenceBewijsketens, bonnen, compliancegebeurtenissen, C2PA-inhoudsgeloofsbrieven
c.PIIPII-shredding, identiteiten, uitzonderingen
c.ValidatorValidatie en scoring
c.LLMProxyLLM-proxy (inclusief streaming)
c.TenantsTenants, sleutels, configuraties
c.OrgOrganisatieaccounts
c.AggregationAggregatiebewijzen en metachain
c.PolicyBeleidsevaluatie en oproeptijden
c.AudioAudiovalidatie en -afstemming
c.AuthAPI-sleuteluitwisseling en -vernieuwing

Licentie

MIT

Bron bijgewerkt: 19 oktober 2026