Files
dobotai-platform/internal/agentbinding/resolver.go
2026-07-20 11:47:37 +08:00

37 lines
997 B
Go

package agentbinding
import (
"encoding/json"
"errors"
"fmt"
"strings"
)
type Resolver struct{ bindings map[string]string }
func New(rawJSON string) (*Resolver, error) {
bindings := map[string]string{}
if err := json.Unmarshal([]byte(rawJSON), &bindings); err != nil {
return nil, fmt.Errorf("decode DOBOTAI_AGENT_BINDINGS: %w", err)
}
for key, value := range bindings {
if strings.TrimSpace(key) == "" || strings.TrimSpace(value) == "" {
return nil, errors.New("agent binding keys and values must be non-empty")
}
}
return &Resolver{bindings: bindings}, nil
}
func (r *Resolver) Resolve(channel, externalChatID string) (string, error) {
if r == nil {
return "", errors.New("agent resolver is not configured")
}
if agentID := r.bindings[channel+":"+externalChatID]; agentID != "" {
return agentID, nil
}
if agentID := r.bindings[channel+":*"]; agentID != "" {
return agentID, nil
}
return "", fmt.Errorf("no agent binding for %s:%s", channel, externalChatID)
}