mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-11 07:58:06 -05:00
Compare commits
11 Commits
feat/figma
...
v0.5.17
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31874939ee | ||
|
|
e157ce5fbc | ||
|
|
774e5d585c | ||
|
|
54cc93743f | ||
|
|
8c32ad4c0d | ||
|
|
1d08796853 | ||
|
|
ebcd243942 | ||
|
|
b7e814b721 | ||
|
|
842ef27ed9 | ||
|
|
31c34b2ea3 | ||
|
|
8f0ef58056 |
@@ -1,45 +0,0 @@
|
||||
---
|
||||
description: EMCN component library patterns with CVA
|
||||
globs: ["apps/sim/components/emcn/**"]
|
||||
---
|
||||
|
||||
# EMCN Component Guidelines
|
||||
|
||||
## When to Use CVA vs Direct Styles
|
||||
|
||||
**Use CVA (class-variance-authority) when:**
|
||||
- 2+ visual variants (primary, secondary, outline)
|
||||
- Multiple sizes or state variations
|
||||
- Example: Button with variants
|
||||
|
||||
**Use direct className when:**
|
||||
- Single consistent style
|
||||
- No variations needed
|
||||
- Example: Label with one style
|
||||
|
||||
## Patterns
|
||||
|
||||
**With CVA:**
|
||||
```tsx
|
||||
const buttonVariants = cva('base-classes', {
|
||||
variants: {
|
||||
variant: { default: '...', primary: '...' },
|
||||
size: { sm: '...', md: '...' }
|
||||
}
|
||||
})
|
||||
export { Button, buttonVariants }
|
||||
```
|
||||
|
||||
**Without CVA:**
|
||||
```tsx
|
||||
function Label({ className, ...props }) {
|
||||
return <Primitive className={cn('single-style-classes', className)} {...props} />
|
||||
}
|
||||
```
|
||||
|
||||
## Rules
|
||||
- Use Radix UI primitives for accessibility
|
||||
- Export component and variants (if using CVA)
|
||||
- TSDoc with usage examples
|
||||
- Consistent tokens: `font-medium`, `text-[12px]`, `rounded-[4px]`
|
||||
- Always use `transition-colors` for hover states
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
description: Global coding standards that apply to all files
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Global Standards
|
||||
|
||||
You are a professional software engineer. All code must follow best practices: accurate, readable, clean, and efficient.
|
||||
|
||||
## Logging
|
||||
Use `logger.info`, `logger.warn`, `logger.error` instead of `console.log`.
|
||||
|
||||
## Comments
|
||||
Use TSDoc for documentation. No `====` separators. No non-TSDoc comments.
|
||||
|
||||
## Styling
|
||||
Never update global styles. Keep all styling local to components.
|
||||
|
||||
## Package Manager
|
||||
Use `bun` and `bunx`, not `npm` and `npx`.
|
||||
@@ -1,67 +0,0 @@
|
||||
---
|
||||
description: Core architecture principles for the Sim app
|
||||
globs: ["apps/sim/**"]
|
||||
---
|
||||
|
||||
# Sim App Architecture
|
||||
|
||||
## Core Principles
|
||||
1. **Single Responsibility**: Each component, hook, store has one clear purpose
|
||||
2. **Composition Over Complexity**: Break down complex logic into smaller pieces
|
||||
3. **Type Safety First**: TypeScript interfaces for all props, state, return types
|
||||
4. **Predictable State**: Zustand for global state, useState for UI-only concerns
|
||||
5. **Performance by Default**: useMemo, useCallback, refs appropriately
|
||||
|
||||
## File Organization
|
||||
|
||||
```
|
||||
feature/
|
||||
├── components/ # Feature components
|
||||
│ └── sub-feature/ # Sub-feature with own components
|
||||
├── hooks/ # Custom hooks
|
||||
└── feature.tsx # Main component
|
||||
```
|
||||
|
||||
## Naming Conventions
|
||||
- **Components**: PascalCase (`WorkflowList`, `TriggerPanel`)
|
||||
- **Hooks**: camelCase with `use` prefix (`useWorkflowOperations`)
|
||||
- **Files**: kebab-case matching export (`workflow-list.tsx`)
|
||||
- **Stores**: kebab-case in stores/ (`sidebar/store.ts`)
|
||||
- **Constants**: SCREAMING_SNAKE_CASE
|
||||
- **Interfaces**: PascalCase with suffix (`WorkflowListProps`)
|
||||
|
||||
## State Management
|
||||
|
||||
**useState**: UI-only concerns (dropdown open, hover, form inputs)
|
||||
**Zustand**: Shared state, persistence, global app state
|
||||
**useRef**: DOM refs, avoiding dependency issues, mutable non-reactive values
|
||||
|
||||
## Component Extraction
|
||||
|
||||
**Extract to separate file when:**
|
||||
- Complex (50+ lines)
|
||||
- Used across 2+ files
|
||||
- Has own state/logic
|
||||
|
||||
**Keep inline when:**
|
||||
- Simple (< 10 lines)
|
||||
- Used in only 1 file
|
||||
- Purely presentational
|
||||
|
||||
**Never import utilities from another component file.** Extract shared helpers to `lib/` or `utils/`.
|
||||
|
||||
## Utils Files
|
||||
|
||||
**Never create a `utils.ts` file for a single consumer.** Inline the logic directly in the consuming component.
|
||||
|
||||
**Create `utils.ts` when:**
|
||||
- 2+ files import the same helper
|
||||
|
||||
**Prefer existing sources of truth:**
|
||||
- Before duplicating logic, check if a centralized helper already exists (e.g., `lib/logs/get-trigger-options.ts`)
|
||||
- Import from the source of truth rather than creating wrapper functions
|
||||
|
||||
**Location hierarchy:**
|
||||
- `lib/` — App-wide utilities (auth, billing, core)
|
||||
- `feature/utils.ts` — Feature-scoped utilities (used by 2+ components in the feature)
|
||||
- Inline — Single-use helpers (define directly in the component)
|
||||
@@ -1,64 +0,0 @@
|
||||
---
|
||||
description: Component patterns and structure for React components
|
||||
globs: ["apps/sim/**/*.tsx"]
|
||||
---
|
||||
|
||||
# Component Patterns
|
||||
|
||||
## Structure Order
|
||||
```typescript
|
||||
'use client' // Only if using hooks
|
||||
|
||||
// 1. Imports (external → internal → relative)
|
||||
// 2. Constants at module level
|
||||
const CONFIG = { SPACING: 8 } as const
|
||||
|
||||
// 3. Props interface with TSDoc
|
||||
interface ComponentProps {
|
||||
/** Description */
|
||||
requiredProp: string
|
||||
optionalProp?: boolean
|
||||
}
|
||||
|
||||
// 4. Component with TSDoc
|
||||
export function Component({ requiredProp, optionalProp = false }: ComponentProps) {
|
||||
// a. Refs
|
||||
// b. External hooks (useParams, useRouter)
|
||||
// c. Store hooks
|
||||
// d. Custom hooks
|
||||
// e. Local state
|
||||
// f. useMemo computations
|
||||
// g. useCallback handlers
|
||||
// h. useEffect
|
||||
// i. Return JSX
|
||||
}
|
||||
```
|
||||
|
||||
## Rules
|
||||
1. Add `'use client'` when using React hooks
|
||||
2. Always define props interface
|
||||
3. TSDoc on component: description, @param, @returns
|
||||
4. Extract constants with `as const`
|
||||
5. Use Tailwind only, no inline styles
|
||||
6. Semantic HTML (`aside`, `nav`, `article`)
|
||||
7. Include ARIA attributes where appropriate
|
||||
8. Optional chain callbacks: `onAction?.(id)`
|
||||
|
||||
## Factory Pattern with Caching
|
||||
|
||||
When generating components for a specific signature (e.g., icons):
|
||||
|
||||
```typescript
|
||||
const cache = new Map<string, React.ComponentType<{ className?: string }>>()
|
||||
|
||||
function getColorIcon(color: string) {
|
||||
if (cache.has(color)) return cache.get(color)!
|
||||
|
||||
const Icon = ({ className }: { className?: string }) => (
|
||||
<div className={cn(className, 'rounded-[3px]')} style={{ backgroundColor: color, width: 10, height: 10 }} />
|
||||
)
|
||||
Icon.displayName = `ColorIcon(${color})`
|
||||
cache.set(color, Icon)
|
||||
return Icon
|
||||
}
|
||||
```
|
||||
@@ -1,68 +0,0 @@
|
||||
---
|
||||
description: Custom hook patterns and best practices
|
||||
globs: ["apps/sim/**/use-*.ts", "apps/sim/**/hooks/**/*.ts"]
|
||||
---
|
||||
|
||||
# Hook Patterns
|
||||
|
||||
## Structure
|
||||
```typescript
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
|
||||
const logger = createLogger('useFeatureName')
|
||||
|
||||
interface UseFeatureProps {
|
||||
id: string
|
||||
onSuccess?: (result: Result) => void
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook description.
|
||||
* @param props - Configuration
|
||||
* @returns State and operations
|
||||
*/
|
||||
export function useFeature({ id, onSuccess }: UseFeatureProps) {
|
||||
// 1. Refs for stable dependencies
|
||||
const idRef = useRef(id)
|
||||
const onSuccessRef = useRef(onSuccess)
|
||||
|
||||
// 2. State
|
||||
const [data, setData] = useState<Data | null>(null)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
const [error, setError] = useState<Error | null>(null)
|
||||
|
||||
// 3. Sync refs
|
||||
useEffect(() => {
|
||||
idRef.current = id
|
||||
onSuccessRef.current = onSuccess
|
||||
}, [id, onSuccess])
|
||||
|
||||
// 4. Operations with useCallback
|
||||
const fetchData = useCallback(async () => {
|
||||
setIsLoading(true)
|
||||
try {
|
||||
const result = await fetch(`/api/${idRef.current}`).then(r => r.json())
|
||||
setData(result)
|
||||
onSuccessRef.current?.(result)
|
||||
} catch (err) {
|
||||
setError(err as Error)
|
||||
logger.error('Failed', { error: err })
|
||||
} finally {
|
||||
setIsLoading(false)
|
||||
}
|
||||
}, []) // Empty deps - using refs
|
||||
|
||||
// 5. Return grouped by state/operations
|
||||
return { data, isLoading, error, fetchData }
|
||||
}
|
||||
```
|
||||
|
||||
## Rules
|
||||
1. Single responsibility per hook
|
||||
2. Props interface required
|
||||
3. TSDoc required
|
||||
4. Use logger, not console.log
|
||||
5. Refs for stable callback dependencies
|
||||
6. Wrap returned functions in useCallback
|
||||
7. Always try/catch async operations
|
||||
8. Track loading/error states
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
description: Import patterns for the Sim application
|
||||
globs: ["apps/sim/**/*.ts", "apps/sim/**/*.tsx"]
|
||||
---
|
||||
|
||||
# Import Patterns
|
||||
|
||||
## EMCN Components
|
||||
Import from `@/components/emcn`, never from subpaths like `@/components/emcn/components/modal/modal`.
|
||||
|
||||
**Exception**: CSS imports use actual file paths: `import '@/components/emcn/components/code/code.css'`
|
||||
|
||||
## Feature Components
|
||||
Import from central folder indexes, not specific subfolders:
|
||||
```typescript
|
||||
// ✅ Correct
|
||||
import { Dashboard, Sidebar } from '@/app/workspace/[workspaceId]/logs/components'
|
||||
|
||||
// ❌ Wrong
|
||||
import { Dashboard } from '@/app/workspace/[workspaceId]/logs/components/dashboard'
|
||||
```
|
||||
|
||||
## Internal vs External
|
||||
- **Cross-feature**: Absolute paths through central index
|
||||
- **Within feature**: Relative paths (`./components/...`, `../utils`)
|
||||
|
||||
## Import Order
|
||||
1. React/core libraries
|
||||
2. External libraries
|
||||
3. UI components (`@/components/emcn`, `@/components/ui`)
|
||||
4. Utilities (`@/lib/...`)
|
||||
5. Feature imports from indexes
|
||||
6. Relative imports
|
||||
7. CSS imports
|
||||
|
||||
## Types
|
||||
Use `type` keyword: `import type { WorkflowLog } from '...'`
|
||||
@@ -1,57 +0,0 @@
|
||||
---
|
||||
description: Zustand store patterns
|
||||
globs: ["apps/sim/**/store.ts", "apps/sim/**/stores/**/*.ts"]
|
||||
---
|
||||
|
||||
# Zustand Store Patterns
|
||||
|
||||
## Structure
|
||||
```typescript
|
||||
import { create } from 'zustand'
|
||||
import { persist } from 'zustand/middleware'
|
||||
|
||||
interface FeatureState {
|
||||
// State
|
||||
items: Item[]
|
||||
activeId: string | null
|
||||
|
||||
// Actions
|
||||
setItems: (items: Item[]) => void
|
||||
addItem: (item: Item) => void
|
||||
clearState: () => void
|
||||
}
|
||||
|
||||
const createInitialState = () => ({
|
||||
items: [],
|
||||
activeId: null,
|
||||
})
|
||||
|
||||
export const useFeatureStore = create<FeatureState>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
...createInitialState(),
|
||||
|
||||
setItems: (items) => set({ items }),
|
||||
|
||||
addItem: (item) => set((state) => ({
|
||||
items: [...state.items, item],
|
||||
})),
|
||||
|
||||
clearState: () => set(createInitialState()),
|
||||
}),
|
||||
{
|
||||
name: 'feature-state',
|
||||
partialize: (state) => ({ items: state.items }),
|
||||
}
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## Rules
|
||||
1. Interface includes state and actions
|
||||
2. Extract config to module constants
|
||||
3. TSDoc on store
|
||||
4. Only persist what's needed
|
||||
5. Immutable updates only - never mutate
|
||||
6. Use `set((state) => ...)` when depending on previous state
|
||||
7. Provide clear/reset actions
|
||||
@@ -1,47 +0,0 @@
|
||||
---
|
||||
description: Tailwind CSS and styling conventions
|
||||
globs: ["apps/sim/**/*.tsx", "apps/sim/**/*.css"]
|
||||
---
|
||||
|
||||
# Styling Rules
|
||||
|
||||
## Tailwind
|
||||
1. **No inline styles** - Use Tailwind classes exclusively
|
||||
2. **No duplicate dark classes** - Don't add `dark:` when value matches light mode
|
||||
3. **Exact values** - Use design system values (`text-[14px]`, `h-[25px]`)
|
||||
4. **Prefer px** - Use `px-[4px]` over `px-1`
|
||||
5. **Transitions** - Add `transition-colors` for interactive states
|
||||
|
||||
## Conditional Classes
|
||||
```typescript
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
<div className={cn(
|
||||
'base-classes',
|
||||
isActive && 'active-classes',
|
||||
disabled ? 'opacity-60' : 'hover:bg-accent'
|
||||
)} />
|
||||
```
|
||||
|
||||
## CSS Variables for Dynamic Styles
|
||||
```typescript
|
||||
// In store setter
|
||||
setSidebarWidth: (width) => {
|
||||
set({ sidebarWidth: width })
|
||||
document.documentElement.style.setProperty('--sidebar-width', `${width}px`)
|
||||
}
|
||||
|
||||
// In component
|
||||
<aside style={{ width: 'var(--sidebar-width)' }} />
|
||||
```
|
||||
|
||||
## Anti-Patterns
|
||||
```typescript
|
||||
// ❌ Bad
|
||||
<div style={{ width: 200 }}>
|
||||
<div className='text-[var(--text-primary)] dark:text-[var(--text-primary)]'>
|
||||
|
||||
// ✅ Good
|
||||
<div className='w-[200px]'>
|
||||
<div className='text-[var(--text-primary)]'>
|
||||
```
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
description: TypeScript conventions and type safety
|
||||
globs: ["apps/sim/**/*.ts", "apps/sim/**/*.tsx"]
|
||||
---
|
||||
|
||||
# TypeScript Rules
|
||||
|
||||
1. **No `any`** - Use proper types or `unknown` with type guards
|
||||
2. **Props interface** - Always define, even for simple components
|
||||
3. **Callback types** - Full signature with params and return type
|
||||
4. **Generics** - Use for reusable components/hooks
|
||||
5. **Const assertions** - `as const` for constant objects/arrays
|
||||
6. **Ref types** - Explicit: `useRef<HTMLDivElement>(null)`
|
||||
|
||||
## Anti-Patterns
|
||||
```typescript
|
||||
// ❌ Bad
|
||||
const handleClick = (e: any) => {}
|
||||
useEffect(() => { doSomething(prop) }, []) // Missing dep
|
||||
|
||||
// ✅ Good
|
||||
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {}
|
||||
useEffect(() => { doSomething(prop) }, [prop])
|
||||
```
|
||||
19
.cursorrules
Normal file
19
.cursorrules
Normal file
@@ -0,0 +1,19 @@
|
||||
# Role
|
||||
|
||||
You are a professional software engineer. All code you write MUST follow best practices, ensuring accuracy, quality, readability, and cleanliness. You MUST make FOCUSED EDITS that are EFFICIENT and ELEGANT.
|
||||
|
||||
## Logs
|
||||
|
||||
ENSURE that you use the logger.info and logger.warn and logger.error instead of the console.log whenever you want to display logs.
|
||||
|
||||
## Comments
|
||||
|
||||
You must use TSDOC for comments. Do not use ==== for comments to separate sections. Do not leave any comments that are not TSDOC.
|
||||
|
||||
## Globals styles
|
||||
|
||||
You should not update the global styles unless it is absolutely necessary. Keep all styling local to components and files.
|
||||
|
||||
## Bun
|
||||
|
||||
Use bun and bunx not npm and npx
|
||||
@@ -1,67 +1,11 @@
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Documentation
|
||||
LICENSE
|
||||
NOTICE
|
||||
README.md
|
||||
*.md
|
||||
docs/
|
||||
|
||||
# IDE and editor
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Environment and config
|
||||
.env*
|
||||
!.env.example
|
||||
.prettierrc
|
||||
.prettierignore
|
||||
.eslintrc*
|
||||
.eslintignore
|
||||
|
||||
# CI/CD and DevOps
|
||||
README.md
|
||||
.gitignore
|
||||
.husky
|
||||
.github
|
||||
.devcontainer
|
||||
.husky
|
||||
docker-compose*.yml
|
||||
Dockerfile*
|
||||
|
||||
# Build artifacts and caches
|
||||
.next
|
||||
.turbo
|
||||
.cache
|
||||
dist
|
||||
build
|
||||
out
|
||||
coverage
|
||||
*.log
|
||||
|
||||
# Dependencies (will be installed fresh in container)
|
||||
node_modules
|
||||
.bun
|
||||
|
||||
# Test files
|
||||
**/*.test.ts
|
||||
**/*.test.tsx
|
||||
**/*.spec.ts
|
||||
**/*.spec.tsx
|
||||
__tests__
|
||||
__mocks__
|
||||
jest.config.*
|
||||
vitest.config.*
|
||||
|
||||
# TypeScript build info
|
||||
*.tsbuildinfo
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Temporary files
|
||||
tmp
|
||||
temp
|
||||
*.tmp
|
||||
.env.example
|
||||
node_modules
|
||||
62
.github/workflows/ci.yml
vendored
62
.github/workflows/ci.yml
vendored
@@ -16,35 +16,10 @@ jobs:
|
||||
uses: ./.github/workflows/test-build.yml
|
||||
secrets: inherit
|
||||
|
||||
# Detect if this is a version release commit (e.g., "v0.5.24: ...")
|
||||
detect-version:
|
||||
name: Detect Version
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging')
|
||||
outputs:
|
||||
version: ${{ steps.extract.outputs.version }}
|
||||
is_release: ${{ steps.extract.outputs.is_release }}
|
||||
steps:
|
||||
- name: Extract version from commit message
|
||||
id: extract
|
||||
run: |
|
||||
COMMIT_MSG="${{ github.event.head_commit.message }}"
|
||||
# Only tag versions on main branch
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ] && [[ "$COMMIT_MSG" =~ ^(v[0-9]+\.[0-9]+\.[0-9]+): ]]; then
|
||||
VERSION="${BASH_REMATCH[1]}"
|
||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
||||
echo "is_release=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ Detected release commit: ${VERSION}"
|
||||
else
|
||||
echo "version=" >> $GITHUB_OUTPUT
|
||||
echo "is_release=false" >> $GITHUB_OUTPUT
|
||||
echo "ℹ️ Not a release commit"
|
||||
fi
|
||||
|
||||
# Build AMD64 images and push to ECR immediately (+ GHCR for main)
|
||||
build-amd64:
|
||||
name: Build AMD64
|
||||
needs: [test-build, detect-version]
|
||||
needs: test-build
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging')
|
||||
runs-on: blacksmith-8vcpu-ubuntu-2404
|
||||
permissions:
|
||||
@@ -118,14 +93,6 @@ jobs:
|
||||
GHCR_AMD64="${GHCR_IMAGE}:latest-amd64"
|
||||
GHCR_SHA="${GHCR_IMAGE}:${{ github.sha }}-amd64"
|
||||
TAGS="${TAGS},$GHCR_AMD64,$GHCR_SHA"
|
||||
|
||||
# Add version tag if this is a release commit
|
||||
if [ "${{ needs.detect-version.outputs.is_release }}" = "true" ]; then
|
||||
VERSION="${{ needs.detect-version.outputs.version }}"
|
||||
GHCR_VERSION="${GHCR_IMAGE}:${VERSION}-amd64"
|
||||
TAGS="${TAGS},$GHCR_VERSION"
|
||||
echo "📦 Adding version tag: ${VERSION}-amd64"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
@@ -144,7 +111,7 @@ jobs:
|
||||
# Build ARM64 images for GHCR (main branch only, runs in parallel)
|
||||
build-ghcr-arm64:
|
||||
name: Build ARM64 (GHCR Only)
|
||||
needs: [test-build, detect-version]
|
||||
needs: test-build
|
||||
runs-on: blacksmith-8vcpu-ubuntu-2404-arm
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
@@ -179,16 +146,7 @@ jobs:
|
||||
id: meta
|
||||
run: |
|
||||
IMAGE="${{ matrix.image }}"
|
||||
TAGS="${IMAGE}:latest-arm64,${IMAGE}:${{ github.sha }}-arm64"
|
||||
|
||||
# Add version tag if this is a release commit
|
||||
if [ "${{ needs.detect-version.outputs.is_release }}" = "true" ]; then
|
||||
VERSION="${{ needs.detect-version.outputs.version }}"
|
||||
TAGS="${TAGS},${IMAGE}:${VERSION}-arm64"
|
||||
echo "📦 Adding version tag: ${VERSION}-arm64"
|
||||
fi
|
||||
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
echo "tags=${IMAGE}:latest-arm64,${IMAGE}:${{ github.sha }}-arm64" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push ARM64 to GHCR
|
||||
uses: useblacksmith/build-push-action@v2
|
||||
@@ -204,8 +162,8 @@ jobs:
|
||||
# Create GHCR multi-arch manifests (only for main, after both builds)
|
||||
create-ghcr-manifests:
|
||||
name: Create GHCR Manifests
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
needs: [build-amd64, build-ghcr-arm64, detect-version]
|
||||
runs-on: blacksmith-8vcpu-ubuntu-2404
|
||||
needs: [build-amd64, build-ghcr-arm64]
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
packages: write
|
||||
@@ -240,16 +198,6 @@ jobs:
|
||||
"${IMAGE_BASE}:${{ github.sha }}-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:${{ github.sha }}"
|
||||
|
||||
# Create version manifest if this is a release commit
|
||||
if [ "${{ needs.detect-version.outputs.is_release }}" = "true" ]; then
|
||||
VERSION="${{ needs.detect-version.outputs.version }}"
|
||||
echo "📦 Creating version manifest: ${VERSION}"
|
||||
docker manifest create "${IMAGE_BASE}:${VERSION}" \
|
||||
"${IMAGE_BASE}:${VERSION}-amd64" \
|
||||
"${IMAGE_BASE}:${VERSION}-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:${VERSION}"
|
||||
fi
|
||||
|
||||
# Check if docs changed
|
||||
check-docs-changes:
|
||||
name: Check Docs Changes
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -67,9 +67,6 @@ start-collector.sh
|
||||
# VSCode
|
||||
.vscode
|
||||
|
||||
# IntelliJ
|
||||
.idea
|
||||
|
||||
## Helm Chart Tests
|
||||
helm/sim/test
|
||||
i18n.cache
|
||||
|
||||
47
CLAUDE.md
47
CLAUDE.md
@@ -1,47 +0,0 @@
|
||||
# Expert Programming Standards
|
||||
|
||||
**You are tasked with implementing solutions that follow best practices. You MUST be accurate, elegant, and efficient as an expert programmer.**
|
||||
|
||||
---
|
||||
|
||||
# Role
|
||||
|
||||
You are a professional software engineer. All code you write MUST follow best practices, ensuring accuracy, quality, readability, and cleanliness. You MUST make FOCUSED EDITS that are EFFICIENT and ELEGANT.
|
||||
|
||||
## Logs
|
||||
|
||||
ENSURE that you use the logger.info and logger.warn and logger.error instead of the console.log whenever you want to display logs.
|
||||
|
||||
## Comments
|
||||
|
||||
You must use TSDOC for comments. Do not use ==== for comments to separate sections. Do not leave any comments that are not TSDOC.
|
||||
|
||||
## Global Styles
|
||||
|
||||
You should not update the global styles unless it is absolutely necessary. Keep all styling local to components and files.
|
||||
|
||||
## Bun
|
||||
|
||||
Use bun and bunx not npm and npx.
|
||||
|
||||
## Code Quality
|
||||
|
||||
- Write clean, maintainable code that follows the project's existing patterns
|
||||
- Prefer composition over inheritance
|
||||
- Keep functions small and focused on a single responsibility
|
||||
- Use meaningful variable and function names
|
||||
- Handle errors gracefully and provide useful error messages
|
||||
- Write type-safe code with proper TypeScript types
|
||||
|
||||
## Testing
|
||||
|
||||
- Write tests for new functionality when appropriate
|
||||
- Ensure existing tests pass before completing work
|
||||
- Follow the project's testing conventions
|
||||
|
||||
## Performance
|
||||
|
||||
- Consider performance implications of your code
|
||||
- Avoid unnecessary re-renders in React components
|
||||
- Use appropriate data structures and algorithms
|
||||
- Profile and optimize when necessary
|
||||
70
README.md
70
README.md
@@ -89,36 +89,6 @@ Wait for the model to download, then visit [http://localhost:3000](http://localh
|
||||
docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.1:8b
|
||||
```
|
||||
|
||||
#### Using an External Ollama Instance
|
||||
|
||||
If you already have Ollama running on your host machine (outside Docker), you need to configure the `OLLAMA_URL` to use `host.docker.internal` instead of `localhost`:
|
||||
|
||||
```bash
|
||||
# Docker Desktop (macOS/Windows)
|
||||
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Linux (add extra_hosts or use host IP)
|
||||
docker compose -f docker-compose.prod.yml up -d # Then set OLLAMA_URL to your host's IP
|
||||
```
|
||||
|
||||
**Why?** When running inside Docker, `localhost` refers to the container itself, not your host machine. `host.docker.internal` is a special DNS name that resolves to the host.
|
||||
|
||||
For Linux users, you can either:
|
||||
- Use your host machine's actual IP address (e.g., `http://192.168.1.100:11434`)
|
||||
- Add `extra_hosts: ["host.docker.internal:host-gateway"]` to the simstudio service in your compose file
|
||||
|
||||
#### Using vLLM
|
||||
|
||||
Sim also supports [vLLM](https://docs.vllm.ai/) for self-hosted models with OpenAI-compatible API:
|
||||
|
||||
```bash
|
||||
# Set these environment variables
|
||||
VLLM_BASE_URL=http://your-vllm-server:8000
|
||||
VLLM_API_KEY=your_optional_api_key # Only if your vLLM instance requires auth
|
||||
```
|
||||
|
||||
When running with Docker, use `host.docker.internal` if vLLM is on your host machine (same as Ollama above).
|
||||
|
||||
### Self-hosted: Dev Containers
|
||||
|
||||
1. Open VS Code with the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||||
@@ -220,46 +190,6 @@ Copilot is a Sim-managed service. To use Copilot on a self-hosted instance:
|
||||
- Go to https://sim.ai → Settings → Copilot and generate a Copilot API key
|
||||
- Set `COPILOT_API_KEY` environment variable in your self-hosted apps/sim/.env file to that value
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Key environment variables for self-hosted deployments (see `apps/sim/.env.example` for full list):
|
||||
|
||||
| Variable | Required | Description |
|
||||
|----------|----------|-------------|
|
||||
| `DATABASE_URL` | Yes | PostgreSQL connection string with pgvector |
|
||||
| `BETTER_AUTH_SECRET` | Yes | Auth secret (`openssl rand -hex 32`) |
|
||||
| `BETTER_AUTH_URL` | Yes | Your app URL (e.g., `http://localhost:3000`) |
|
||||
| `NEXT_PUBLIC_APP_URL` | Yes | Public app URL (same as above) |
|
||||
| `ENCRYPTION_KEY` | Yes | Encryption key (`openssl rand -hex 32`) |
|
||||
| `OLLAMA_URL` | No | Ollama server URL (default: `http://localhost:11434`) |
|
||||
| `VLLM_BASE_URL` | No | vLLM server URL for self-hosted models |
|
||||
| `COPILOT_API_KEY` | No | API key from sim.ai for Copilot features |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Ollama models not showing in dropdown (Docker)
|
||||
|
||||
If you're running Ollama on your host machine and Sim in Docker, change `OLLAMA_URL` from `localhost` to `host.docker.internal`:
|
||||
|
||||
```bash
|
||||
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
See [Using an External Ollama Instance](#using-an-external-ollama-instance) for details.
|
||||
|
||||
### Database connection issues
|
||||
|
||||
Ensure PostgreSQL has the pgvector extension installed. When using Docker, wait for the database to be healthy before running migrations.
|
||||
|
||||
### Port conflicts
|
||||
|
||||
If ports 3000, 3002, or 5432 are in use, configure alternatives:
|
||||
|
||||
```bash
|
||||
# Custom ports
|
||||
NEXT_PUBLIC_APP_URL=http://localhost:3100 POSTGRES_PORT=5433 docker compose up -d
|
||||
```
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Framework**: [Next.js](https://nextjs.org/) (App Router)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { findNeighbour } from 'fumadocs-core/page-tree'
|
||||
import { findNeighbour } from 'fumadocs-core/server'
|
||||
import defaultMdxComponents from 'fumadocs-ui/mdx'
|
||||
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page'
|
||||
import { ChevronLeft, ChevronRight } from 'lucide-react'
|
||||
@@ -6,10 +6,9 @@ import Link from 'next/link'
|
||||
import { notFound } from 'next/navigation'
|
||||
import { PageNavigationArrows } from '@/components/docs-layout/page-navigation-arrows'
|
||||
import { TOCFooter } from '@/components/docs-layout/toc-footer'
|
||||
import { LLMCopyButton } from '@/components/page-actions'
|
||||
import { StructuredData } from '@/components/structured-data'
|
||||
import { CodeBlock } from '@/components/ui/code-block'
|
||||
import { Heading } from '@/components/ui/heading'
|
||||
import { CopyPageButton } from '@/components/ui/copy-page-button'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
export default async function Page(props: { params: Promise<{ slug?: string[]; lang: string }> }) {
|
||||
@@ -183,14 +182,13 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
|
||||
tableOfContent={{
|
||||
style: 'clerk',
|
||||
enabled: true,
|
||||
header: (
|
||||
<div key='toc-header' className='mb-2 font-medium text-sm'>
|
||||
On this page
|
||||
</div>
|
||||
),
|
||||
header: <div className='mb-2 font-medium text-sm'>On this page</div>,
|
||||
footer: <TOCFooter />,
|
||||
single: false,
|
||||
}}
|
||||
article={{
|
||||
className: 'scroll-smooth max-sm:pb-16',
|
||||
}}
|
||||
tableOfContentPopover={{
|
||||
style: 'clerk',
|
||||
enabled: true,
|
||||
@@ -203,7 +201,7 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
|
||||
<div className='relative mt-6 sm:mt-0'>
|
||||
<div className='absolute top-1 right-0 flex items-center gap-2'>
|
||||
<div className='hidden sm:flex'>
|
||||
<LLMCopyButton markdownUrl={`${page.url}.mdx`} />
|
||||
<CopyPageButton markdownUrl={`${page.url}.mdx`} />
|
||||
</div>
|
||||
<PageNavigationArrows previous={neighbours?.previous} next={neighbours?.next} />
|
||||
</div>
|
||||
@@ -215,12 +213,6 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
|
||||
components={{
|
||||
...defaultMdxComponents,
|
||||
CodeBlock,
|
||||
h1: (props) => <Heading as='h1' {...props} />,
|
||||
h2: (props) => <Heading as='h2' {...props} />,
|
||||
h3: (props) => <Heading as='h3' {...props} />,
|
||||
h4: (props) => <Heading as='h4' {...props} />,
|
||||
h5: (props) => <Heading as='h5' {...props} />,
|
||||
h6: (props) => <Heading as='h6' {...props} />,
|
||||
}}
|
||||
/>
|
||||
</DocsBody>
|
||||
@@ -243,9 +235,6 @@ export async function generateMetadata(props: {
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
const fullUrl = `${baseUrl}${page.url}`
|
||||
|
||||
const description = page.data.description || ''
|
||||
const ogImageUrl = `${baseUrl}/api/og?title=${encodeURIComponent(page.data.title)}&category=DOCUMENTATION${description ? `&description=${encodeURIComponent(description)}` : ''}`
|
||||
|
||||
return {
|
||||
title: page.data.title,
|
||||
description:
|
||||
@@ -275,23 +264,12 @@ export async function generateMetadata(props: {
|
||||
alternateLocale: ['en', 'es', 'fr', 'de', 'ja', 'zh']
|
||||
.filter((lang) => lang !== params.lang)
|
||||
.map((lang) => (lang === 'en' ? 'en_US' : `${lang}_${lang.toUpperCase()}`)),
|
||||
images: [
|
||||
{
|
||||
url: ogImageUrl,
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: page.data.title,
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
card: 'summary',
|
||||
title: page.data.title,
|
||||
description:
|
||||
page.data.description || 'Sim visual workflow builder for AI applications documentation',
|
||||
images: [ogImageUrl],
|
||||
creator: '@simdotai',
|
||||
site: '@simdotai',
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
|
||||
@@ -101,6 +101,9 @@ export default async function Layout({ children, params }: LayoutProps) {
|
||||
<Navbar />
|
||||
<DocsLayout
|
||||
tree={source.pageTree[lang]}
|
||||
themeSwitch={{
|
||||
enabled: false,
|
||||
}}
|
||||
nav={{
|
||||
title: (
|
||||
<Image
|
||||
@@ -125,7 +128,7 @@ export default async function Layout({ children, params }: LayoutProps) {
|
||||
},
|
||||
}}
|
||||
containerProps={{
|
||||
className: '!pt-0',
|
||||
className: '!pt-10',
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
import { ImageResponse } from 'next/og'
|
||||
import type { NextRequest } from 'next/server'
|
||||
|
||||
export const runtime = 'edge'
|
||||
|
||||
const TITLE_FONT_SIZE = {
|
||||
large: 64,
|
||||
medium: 56,
|
||||
small: 48,
|
||||
} as const
|
||||
|
||||
function getTitleFontSize(title: string): number {
|
||||
if (title.length > 45) return TITLE_FONT_SIZE.small
|
||||
if (title.length > 30) return TITLE_FONT_SIZE.medium
|
||||
return TITLE_FONT_SIZE.large
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a Google Font dynamically by fetching the CSS and extracting the font URL.
|
||||
*/
|
||||
async function loadGoogleFont(font: string, weights: string, text: string): Promise<ArrayBuffer> {
|
||||
const url = `https://fonts.googleapis.com/css2?family=${font}:wght@${weights}&text=${encodeURIComponent(text)}`
|
||||
const css = await (await fetch(url)).text()
|
||||
const resource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/)
|
||||
|
||||
if (resource) {
|
||||
const response = await fetch(resource[1])
|
||||
if (response.status === 200) {
|
||||
return await response.arrayBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error('Failed to load font data')
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates dynamic Open Graph images for documentation pages.
|
||||
*/
|
||||
export async function GET(request: NextRequest) {
|
||||
const { searchParams } = new URL(request.url)
|
||||
const title = searchParams.get('title') || 'Documentation'
|
||||
const category = searchParams.get('category') || 'DOCUMENTATION'
|
||||
const description = searchParams.get('description') || ''
|
||||
|
||||
const baseUrl = new URL(request.url).origin
|
||||
const backgroundImageUrl = `${baseUrl}/static/og-background.png`
|
||||
|
||||
const allText = `${title}${category}${description}docs.sim.ai`
|
||||
const fontData = await loadGoogleFont('Geist', '400;500;600', allText)
|
||||
|
||||
return new ImageResponse(
|
||||
<div
|
||||
style={{
|
||||
height: '100%',
|
||||
width: '100%',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
background: 'linear-gradient(315deg, #1e1e3f 0%, #1a1a2e 40%, #0f0f0f 100%)',
|
||||
position: 'relative',
|
||||
fontFamily: 'Geist',
|
||||
}}
|
||||
>
|
||||
{/* Background texture */}
|
||||
<img
|
||||
src={backgroundImageUrl}
|
||||
alt=''
|
||||
style={{
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
objectFit: 'cover',
|
||||
opacity: 0.04,
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* Subtle purple glow from bottom right */}
|
||||
<div
|
||||
style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
width: '50%',
|
||||
height: '100%',
|
||||
background:
|
||||
'radial-gradient(ellipse at bottom right, rgba(112, 31, 252, 0.1) 0%, transparent 50%)',
|
||||
display: 'flex',
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* Content */}
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
padding: '56px 72px',
|
||||
height: '100%',
|
||||
justifyContent: 'space-between',
|
||||
}}
|
||||
>
|
||||
{/* Logo */}
|
||||
<img src={`${baseUrl}/static/logo.png`} alt='sim' height={32} />
|
||||
|
||||
{/* Category + Title + Description */}
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: 12,
|
||||
}}
|
||||
>
|
||||
<span
|
||||
style={{
|
||||
fontSize: 15,
|
||||
fontWeight: 600,
|
||||
color: '#802fff',
|
||||
letterSpacing: '0.02em',
|
||||
}}
|
||||
>
|
||||
{category}
|
||||
</span>
|
||||
<span
|
||||
style={{
|
||||
fontSize: getTitleFontSize(title),
|
||||
fontWeight: 600,
|
||||
color: '#ffffff',
|
||||
lineHeight: 1.1,
|
||||
letterSpacing: '-0.02em',
|
||||
}}
|
||||
>
|
||||
{title}
|
||||
</span>
|
||||
{description && (
|
||||
<span
|
||||
style={{
|
||||
fontSize: 18,
|
||||
fontWeight: 400,
|
||||
color: '#a1a1aa',
|
||||
lineHeight: 1.4,
|
||||
marginTop: 4,
|
||||
}}
|
||||
>
|
||||
{description.length > 100 ? `${description.slice(0, 100)}...` : description}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Footer */}
|
||||
<span
|
||||
style={{
|
||||
fontSize: 15,
|
||||
fontWeight: 500,
|
||||
color: '#52525b',
|
||||
}}
|
||||
>
|
||||
docs.sim.ai
|
||||
</span>
|
||||
</div>
|
||||
</div>,
|
||||
{
|
||||
width: 1200,
|
||||
height: 630,
|
||||
fonts: [
|
||||
{
|
||||
name: 'Geist',
|
||||
data: fontData,
|
||||
style: 'normal',
|
||||
},
|
||||
],
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -2,12 +2,6 @@
|
||||
@import "fumadocs-ui/css/neutral.css";
|
||||
@import "fumadocs-ui/css/preset.css";
|
||||
|
||||
/* Prevent overscroll bounce effect on the page */
|
||||
html,
|
||||
body {
|
||||
overscroll-behavior: none;
|
||||
}
|
||||
|
||||
@theme {
|
||||
--color-fd-primary: #802fff; /* Purple from control-bar component */
|
||||
--font-geist-sans: var(--font-geist-sans);
|
||||
@@ -102,48 +96,45 @@ aside#nd-sidebar {
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
/* Fumadocs v16: Add sidebar placeholder styling for grid area */
|
||||
[data-sidebar-placeholder] {
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
/* Fumadocs v16: Hide sidebar panel (floating collapse button) */
|
||||
[data-sidebar-panel] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* Mobile only: Reduce gap between navbar and content */
|
||||
@media (max-width: 1023px) {
|
||||
#nd-docs-layout {
|
||||
margin-top: -25px;
|
||||
/* Responsive sidebar positioning */
|
||||
/* Mobile: Fumadocs handles drawer */
|
||||
@media (min-width: 768px) and (max-width: 1024px) {
|
||||
aside[data-sidebar],
|
||||
aside#nd-sidebar {
|
||||
left: var(--sidebar-offset) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Desktop only: Apply custom navbar offset, sidebar width and margin offsets */
|
||||
/* On mobile, let fumadocs handle the layout natively */
|
||||
@media (min-width: 1024px) {
|
||||
:root {
|
||||
--fd-banner-height: 64px !important;
|
||||
}
|
||||
|
||||
#nd-docs-layout {
|
||||
--fd-docs-height: calc(100dvh - 64px) !important;
|
||||
--fd-sidebar-width: 300px !important;
|
||||
/* Desktop layout alignment */
|
||||
@media (min-width: 1025px) {
|
||||
[data-sidebar-container] {
|
||||
margin-left: var(--sidebar-offset) !important;
|
||||
margin-right: var(--toc-offset) !important;
|
||||
}
|
||||
aside[data-sidebar],
|
||||
aside#nd-sidebar {
|
||||
left: var(--sidebar-offset) !important;
|
||||
}
|
||||
/* TOC positioning - target all possible selectors */
|
||||
[data-toc],
|
||||
aside[data-toc],
|
||||
div[data-toc],
|
||||
.fd-toc,
|
||||
#nd-toc,
|
||||
nav[data-toc],
|
||||
aside:has([role="complementary"]) {
|
||||
right: var(--toc-offset) !important;
|
||||
}
|
||||
|
||||
/* Hide fumadocs nav on desktop - we use custom navbar there */
|
||||
#nd-docs-layout > header {
|
||||
display: none !important;
|
||||
/* Alternative TOC container targeting */
|
||||
[data-docs-page] > aside:last-child,
|
||||
main ~ aside {
|
||||
right: var(--toc-offset) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Sidebar spacing - compact like turborepo */
|
||||
/* Fumadocs v16: [data-sidebar-viewport] doesn't exist, target #nd-sidebar > div instead */
|
||||
[data-sidebar-viewport],
|
||||
#nd-sidebar > div {
|
||||
padding: 0.5rem 12px 12px;
|
||||
[data-sidebar-viewport] {
|
||||
padding: 0.5rem 20px 12px;
|
||||
background: transparent !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
@@ -151,9 +142,8 @@ aside#nd-sidebar {
|
||||
/* Override sidebar item styling to match Raindrop */
|
||||
/* Target Link and button elements in sidebar - override Fumadocs itemVariants */
|
||||
/* Exclude the small chevron-only toggle buttons */
|
||||
/* Using html prefix for higher specificity over Tailwind v4 utilities */
|
||||
html #nd-sidebar a,
|
||||
html #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
#nd-sidebar a,
|
||||
#nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
font-size: 0.9375rem !important; /* 15px to match Raindrop */
|
||||
line-height: 1.4 !important;
|
||||
padding: 0.5rem 0.75rem !important; /* More compact like Raindrop */
|
||||
@@ -164,14 +154,14 @@ html #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"])
|
||||
}
|
||||
|
||||
/* Dark mode sidebar text */
|
||||
html.dark #nd-sidebar a,
|
||||
html.dark #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
.dark #nd-sidebar a,
|
||||
.dark #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
color: rgba(255, 255, 255, 0.6) !important;
|
||||
}
|
||||
|
||||
/* Light mode sidebar text */
|
||||
html:not(.dark) #nd-sidebar a,
|
||||
html:not(.dark) #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
:root:not(.dark) #nd-sidebar a,
|
||||
:root:not(.dark) #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
|
||||
color: rgba(0, 0, 0, 0.6) !important;
|
||||
}
|
||||
|
||||
@@ -204,10 +194,7 @@ html:not(.dark) #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*
|
||||
}
|
||||
|
||||
/* Section headers should be slightly larger */
|
||||
/* Fumadocs v16: Also target #nd-sidebar for compatibility */
|
||||
[data-sidebar-viewport] [data-separator],
|
||||
#nd-sidebar [data-separator],
|
||||
#nd-sidebar p {
|
||||
[data-sidebar-viewport] [data-separator] {
|
||||
font-size: 0.75rem !important;
|
||||
font-weight: 600 !important;
|
||||
text-transform: uppercase !important;
|
||||
@@ -231,61 +218,61 @@ html:not(.dark) #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*
|
||||
}
|
||||
|
||||
/* Dark mode active state */
|
||||
html.dark #nd-sidebar a[data-active="true"],
|
||||
html.dark #nd-sidebar button[data-active="true"],
|
||||
html.dark #nd-sidebar a.bg-fd-primary\/10,
|
||||
html.dark #nd-sidebar a.text-fd-primary,
|
||||
html.dark #nd-sidebar a[class*="bg-fd-primary"],
|
||||
html.dark #nd-sidebar a[class*="text-fd-primary"],
|
||||
html.dark #nd-sidebar a.bg-purple-50\/80,
|
||||
html.dark #nd-sidebar a.text-purple-600,
|
||||
html.dark #nd-sidebar a[class*="bg-purple"],
|
||||
html.dark #nd-sidebar a[class*="text-purple"] {
|
||||
.dark #nd-sidebar a[data-active="true"],
|
||||
.dark #nd-sidebar button[data-active="true"],
|
||||
.dark #nd-sidebar a.bg-fd-primary\/10,
|
||||
.dark #nd-sidebar a.text-fd-primary,
|
||||
.dark #nd-sidebar a[class*="bg-fd-primary"],
|
||||
.dark #nd-sidebar a[class*="text-fd-primary"],
|
||||
.dark #nd-sidebar a.bg-purple-50\/80,
|
||||
.dark #nd-sidebar a.text-purple-600,
|
||||
.dark #nd-sidebar a[class*="bg-purple"],
|
||||
.dark #nd-sidebar a[class*="text-purple"] {
|
||||
background-color: rgba(255, 255, 255, 0.15) !important;
|
||||
color: rgba(255, 255, 255, 1) !important;
|
||||
}
|
||||
|
||||
/* Light mode active state */
|
||||
html:not(.dark) #nd-sidebar a[data-active="true"],
|
||||
html:not(.dark) #nd-sidebar button[data-active="true"],
|
||||
html:not(.dark) #nd-sidebar a.bg-fd-primary\/10,
|
||||
html:not(.dark) #nd-sidebar a.text-fd-primary,
|
||||
html:not(.dark) #nd-sidebar a[class*="bg-fd-primary"],
|
||||
html:not(.dark) #nd-sidebar a[class*="text-fd-primary"],
|
||||
html:not(.dark) #nd-sidebar a.bg-purple-50\/80,
|
||||
html:not(.dark) #nd-sidebar a.text-purple-600,
|
||||
html:not(.dark) #nd-sidebar a[class*="bg-purple"],
|
||||
html:not(.dark) #nd-sidebar a[class*="text-purple"] {
|
||||
:root:not(.dark) #nd-sidebar a[data-active="true"],
|
||||
:root:not(.dark) #nd-sidebar button[data-active="true"],
|
||||
:root:not(.dark) #nd-sidebar a.bg-fd-primary\/10,
|
||||
:root:not(.dark) #nd-sidebar a.text-fd-primary,
|
||||
:root:not(.dark) #nd-sidebar a[class*="bg-fd-primary"],
|
||||
:root:not(.dark) #nd-sidebar a[class*="text-fd-primary"],
|
||||
:root:not(.dark) #nd-sidebar a.bg-purple-50\/80,
|
||||
:root:not(.dark) #nd-sidebar a.text-purple-600,
|
||||
:root:not(.dark) #nd-sidebar a[class*="bg-purple"],
|
||||
:root:not(.dark) #nd-sidebar a[class*="text-purple"] {
|
||||
background-color: rgba(0, 0, 0, 0.07) !important;
|
||||
color: rgba(0, 0, 0, 0.9) !important;
|
||||
}
|
||||
|
||||
/* Dark mode hover state */
|
||||
html.dark #nd-sidebar a:hover:not([data-active="true"]),
|
||||
html.dark #nd-sidebar button:hover:not([data-active="true"]) {
|
||||
.dark #nd-sidebar a:hover:not([data-active="true"]),
|
||||
.dark #nd-sidebar button:hover:not([data-active="true"]) {
|
||||
background-color: rgba(255, 255, 255, 0.08) !important;
|
||||
}
|
||||
|
||||
/* Light mode hover state */
|
||||
html:not(.dark) #nd-sidebar a:hover:not([data-active="true"]),
|
||||
html:not(.dark) #nd-sidebar button:hover:not([data-active="true"]) {
|
||||
:root:not(.dark) #nd-sidebar a:hover:not([data-active="true"]),
|
||||
:root:not(.dark) #nd-sidebar button:hover:not([data-active="true"]) {
|
||||
background-color: rgba(0, 0, 0, 0.03) !important;
|
||||
}
|
||||
|
||||
/* Dark mode - ensure active/selected items don't change on hover */
|
||||
html.dark #nd-sidebar a.bg-purple-50\/80:hover,
|
||||
html.dark #nd-sidebar a[class*="bg-purple"]:hover,
|
||||
html.dark #nd-sidebar a[data-active="true"]:hover,
|
||||
html.dark #nd-sidebar button[data-active="true"]:hover {
|
||||
.dark #nd-sidebar a.bg-purple-50\/80:hover,
|
||||
.dark #nd-sidebar a[class*="bg-purple"]:hover,
|
||||
.dark #nd-sidebar a[data-active="true"]:hover,
|
||||
.dark #nd-sidebar button[data-active="true"]:hover {
|
||||
background-color: rgba(255, 255, 255, 0.15) !important;
|
||||
color: rgba(255, 255, 255, 1) !important;
|
||||
}
|
||||
|
||||
/* Light mode - ensure active/selected items don't change on hover */
|
||||
html:not(.dark) #nd-sidebar a.bg-purple-50\/80:hover,
|
||||
html:not(.dark) #nd-sidebar a[class*="bg-purple"]:hover,
|
||||
html:not(.dark) #nd-sidebar a[data-active="true"]:hover,
|
||||
html:not(.dark) #nd-sidebar button[data-active="true"]:hover {
|
||||
:root:not(.dark) #nd-sidebar a.bg-purple-50\/80:hover,
|
||||
:root:not(.dark) #nd-sidebar a[class*="bg-purple"]:hover,
|
||||
:root:not(.dark) #nd-sidebar a[data-active="true"]:hover,
|
||||
:root:not(.dark) #nd-sidebar button[data-active="true"]:hover {
|
||||
background-color: rgba(0, 0, 0, 0.07) !important;
|
||||
color: rgba(0, 0, 0, 0.9) !important;
|
||||
}
|
||||
@@ -364,16 +351,7 @@ aside[data-sidebar] > *:not([data-sidebar-viewport]) {
|
||||
[data-sidebar] [data-title],
|
||||
#nd-sidebar > a:first-child,
|
||||
#nd-sidebar > div:first-child > a:first-child,
|
||||
#nd-sidebar img[alt="Sim"],
|
||||
/* Hide theme toggle at bottom of sidebar on desktop */
|
||||
#nd-sidebar
|
||||
> footer,
|
||||
#nd-sidebar footer,
|
||||
aside#nd-sidebar > *:last-child:not(div),
|
||||
#nd-sidebar > button:last-child,
|
||||
#nd-sidebar button[aria-label*="theme" i],
|
||||
#nd-sidebar button[aria-label*="Theme"],
|
||||
#nd-sidebar > div:last-child > button {
|
||||
#nd-sidebar img[alt="Sim"] {
|
||||
display: none !important;
|
||||
visibility: hidden !important;
|
||||
height: 0 !important;
|
||||
@@ -520,14 +498,13 @@ main article,
|
||||
============================================ */
|
||||
|
||||
/* Main content area - center and constrain like turborepo/raindrop */
|
||||
/* Note: --sidebar-offset and --toc-offset are now applied at #nd-docs-layout level */
|
||||
main[data-main] {
|
||||
max-width: var(--spacing-fd-container, 1400px);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-top: 1rem;
|
||||
padding-left: var(--content-gap);
|
||||
padding-right: var(--content-gap);
|
||||
padding-left: calc(var(--sidebar-offset) + var(--content-gap));
|
||||
padding-right: calc(var(--toc-offset) + var(--content-gap));
|
||||
order: 1 !important;
|
||||
}
|
||||
|
||||
|
||||
@@ -56,14 +56,6 @@ export const metadata = {
|
||||
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
|
||||
description:
|
||||
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
|
||||
images: [
|
||||
{
|
||||
url: 'https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION',
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: 'Sim Documentation',
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
@@ -72,7 +64,7 @@ export const metadata = {
|
||||
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
|
||||
creator: '@simdotai',
|
||||
site: '@simdotai',
|
||||
images: ['https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION'],
|
||||
images: ['/og-image.png'],
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { notFound } from 'next/navigation'
|
||||
import { type NextRequest, NextResponse } from 'next/server'
|
||||
import { i18n } from '@/lib/i18n'
|
||||
import { getLLMText } from '@/lib/llms'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
@@ -8,16 +7,7 @@ export const revalidate = false
|
||||
|
||||
export async function GET(_req: NextRequest, { params }: { params: Promise<{ slug?: string[] }> }) {
|
||||
const { slug } = await params
|
||||
|
||||
let lang: (typeof i18n.languages)[number] = i18n.defaultLanguage
|
||||
let pageSlug = slug
|
||||
|
||||
if (slug && slug.length > 0 && i18n.languages.includes(slug[0] as typeof lang)) {
|
||||
lang = slug[0] as typeof lang
|
||||
pageSlug = slug.slice(1)
|
||||
}
|
||||
|
||||
const page = source.getPage(pageSlug, lang)
|
||||
const page = source.getPage(slug)
|
||||
if (!page) notFound()
|
||||
|
||||
return new NextResponse(await getLLMText(page), {
|
||||
|
||||
@@ -1,194 +1,126 @@
|
||||
'use client'
|
||||
|
||||
import { type ReactNode, useEffect, useState } from 'react'
|
||||
import type { Folder, Item, Separator } from 'fumadocs-core/page-tree'
|
||||
import type { PageTree } from 'fumadocs-core/server'
|
||||
import { ChevronRight } from 'lucide-react'
|
||||
import Link from 'next/link'
|
||||
import { usePathname } from 'next/navigation'
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
const LANG_PREFIXES = ['/en', '/es', '/fr', '/de', '/ja', '/zh']
|
||||
|
||||
function stripLangPrefix(path: string): string {
|
||||
for (const prefix of LANG_PREFIXES) {
|
||||
if (path === prefix) return '/'
|
||||
if (path.startsWith(`${prefix}/`)) return path.slice(prefix.length)
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
function isActive(url: string, pathname: string, nested = true): boolean {
|
||||
const normalizedPathname = stripLangPrefix(pathname)
|
||||
const normalizedUrl = stripLangPrefix(url)
|
||||
return (
|
||||
normalizedUrl === normalizedPathname ||
|
||||
(nested && normalizedPathname.startsWith(`${normalizedUrl}/`))
|
||||
)
|
||||
return url === pathname || (nested && pathname.startsWith(`${url}/`))
|
||||
}
|
||||
|
||||
export function SidebarItem({ item }: { item: Item }) {
|
||||
export function SidebarItem({ item }: { item: PageTree.Item }) {
|
||||
const pathname = usePathname()
|
||||
const active = isActive(item.url, pathname, false)
|
||||
|
||||
return (
|
||||
<Link
|
||||
href={item.url}
|
||||
data-active={active}
|
||||
className={cn(
|
||||
// Mobile styles (default)
|
||||
'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors',
|
||||
'text-fd-muted-foreground hover:bg-fd-accent/50 hover:text-fd-accent-foreground',
|
||||
active && 'bg-fd-primary/10 font-medium text-fd-primary',
|
||||
// Desktop styles (lg+)
|
||||
'lg:mb-[0.0625rem] lg:block lg:rounded-md lg:px-2.5 lg:py-1.5 lg:font-normal lg:text-[13px] lg:leading-tight',
|
||||
'lg:text-gray-600 lg:dark:text-gray-400',
|
||||
!active && 'lg:hover:bg-gray-100/60 lg:dark:hover:bg-gray-800/40',
|
||||
active &&
|
||||
'lg:bg-purple-50/80 lg:font-normal lg:text-purple-600 lg:dark:bg-purple-900/15 lg:dark:text-purple-400'
|
||||
)}
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
<li className='mb-[0.0625rem] list-none'>
|
||||
<Link
|
||||
href={item.url}
|
||||
className={cn(
|
||||
'block rounded-md px-2.5 py-1.5 font-normal text-[13px] leading-tight transition-colors',
|
||||
'text-gray-600 dark:text-gray-400',
|
||||
!active && 'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
|
||||
active &&
|
||||
'bg-purple-50/80 font-medium text-purple-600 dark:bg-purple-900/15 dark:text-purple-400'
|
||||
)}
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
}
|
||||
|
||||
export function SidebarFolder({ item, children }: { item: Folder; children: ReactNode }) {
|
||||
export function SidebarFolder({
|
||||
item,
|
||||
level,
|
||||
children,
|
||||
}: {
|
||||
item: PageTree.Folder
|
||||
level: number
|
||||
children: ReactNode
|
||||
}) {
|
||||
const pathname = usePathname()
|
||||
const hasActiveChild = checkHasActiveChild(item, pathname)
|
||||
const hasChildren = item.children.length > 0
|
||||
const [open, setOpen] = useState(hasActiveChild)
|
||||
|
||||
useEffect(() => {
|
||||
setOpen(hasActiveChild)
|
||||
}, [hasActiveChild])
|
||||
|
||||
const active = item.index ? isActive(item.index.url, pathname, false) : false
|
||||
|
||||
if (item.index && !hasChildren) {
|
||||
return (
|
||||
<Link
|
||||
href={item.index.url}
|
||||
data-active={active}
|
||||
className={cn(
|
||||
// Mobile styles (default)
|
||||
'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors',
|
||||
'text-fd-muted-foreground hover:bg-fd-accent/50 hover:text-fd-accent-foreground',
|
||||
active && 'bg-fd-primary/10 font-medium text-fd-primary',
|
||||
// Desktop styles (lg+)
|
||||
'lg:mb-[0.0625rem] lg:block lg:rounded-md lg:px-2.5 lg:py-1.5 lg:font-normal lg:text-[13px] lg:leading-tight',
|
||||
'lg:text-gray-600 lg:dark:text-gray-400',
|
||||
!active && 'lg:hover:bg-gray-100/60 lg:dark:hover:bg-gray-800/40',
|
||||
active &&
|
||||
'lg:bg-purple-50/80 lg:font-normal lg:text-purple-600 lg:dark:bg-purple-900/15 lg:dark:text-purple-400'
|
||||
)}
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='flex flex-col lg:mb-[0.0625rem]'>
|
||||
<div className='flex w-full items-center lg:gap-0.5'>
|
||||
{item.index ? (
|
||||
<li className='mb-[0.0625rem] list-none'>
|
||||
{item.index ? (
|
||||
<div className='flex items-center gap-0.5'>
|
||||
<Link
|
||||
href={item.index.url}
|
||||
data-active={active}
|
||||
className={cn(
|
||||
// Mobile styles (default)
|
||||
'flex flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors',
|
||||
'text-fd-muted-foreground hover:bg-fd-accent/50 hover:text-fd-accent-foreground',
|
||||
active && 'bg-fd-primary/10 font-medium text-fd-primary',
|
||||
// Desktop styles (lg+)
|
||||
'lg:block lg:flex-1 lg:rounded-md lg:px-2.5 lg:py-1.5 lg:font-medium lg:text-[13px] lg:leading-tight',
|
||||
'lg:text-gray-800 lg:dark:text-gray-200',
|
||||
!active && 'lg:hover:bg-gray-100/60 lg:dark:hover:bg-gray-800/40',
|
||||
active &&
|
||||
'lg:bg-purple-50/80 lg:text-purple-600 lg:dark:bg-purple-900/15 lg:dark:text-purple-400'
|
||||
'block flex-1 rounded-md px-2.5 py-1.5 font-medium text-[13px] leading-tight transition-colors',
|
||||
'text-gray-800 dark:text-gray-200',
|
||||
!isActive(item.index.url, pathname, false) &&
|
||||
'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
|
||||
isActive(item.index.url, pathname, false) &&
|
||||
'bg-purple-50/80 text-purple-600 dark:bg-purple-900/15 dark:text-purple-400'
|
||||
)}
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
) : (
|
||||
<button
|
||||
onClick={() => setOpen(!open)}
|
||||
className={cn(
|
||||
// Mobile styles (default)
|
||||
'flex flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors',
|
||||
'text-fd-muted-foreground hover:bg-fd-accent/50',
|
||||
// Desktop styles (lg+)
|
||||
'lg:flex lg:w-full lg:cursor-pointer lg:items-center lg:justify-between lg:rounded-md lg:px-2.5 lg:py-1.5 lg:text-left lg:font-medium lg:text-[13px] lg:leading-tight',
|
||||
'lg:text-gray-800 lg:hover:bg-gray-100/60 lg:dark:text-gray-200 lg:dark:hover:bg-gray-800/40'
|
||||
)}
|
||||
>
|
||||
<span>{item.name}</span>
|
||||
{/* Desktop-only chevron for non-index folders */}
|
||||
<ChevronRight
|
||||
className={cn(
|
||||
'ml-auto hidden h-3 w-3 flex-shrink-0 text-gray-400 transition-transform duration-200 ease-in-out lg:block dark:text-gray-500',
|
||||
open && 'rotate-90'
|
||||
)}
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
{hasChildren && (
|
||||
<button
|
||||
onClick={() => setOpen(!open)}
|
||||
className={cn(
|
||||
// Mobile styles
|
||||
'rounded p-1 hover:bg-fd-accent/50',
|
||||
// Desktop styles
|
||||
'lg:cursor-pointer lg:rounded lg:p-1 lg:transition-colors lg:hover:bg-gray-100/60 lg:dark:hover:bg-gray-800/40'
|
||||
)}
|
||||
className='cursor-pointer rounded p-1 transition-colors hover:bg-gray-100/60 dark:hover:bg-gray-800/40'
|
||||
aria-label={open ? 'Collapse' : 'Expand'}
|
||||
>
|
||||
<ChevronRight
|
||||
className={cn(
|
||||
// Mobile styles
|
||||
'h-4 w-4 transition-transform',
|
||||
// Desktop styles
|
||||
'lg:h-3 lg:w-3 lg:text-gray-400 lg:duration-200 lg:ease-in-out lg:dark:text-gray-500',
|
||||
'h-3 w-3 text-gray-400 transition-transform duration-200 ease-in-out dark:text-gray-500',
|
||||
open && 'rotate-90'
|
||||
)}
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
{hasChildren && (
|
||||
<div
|
||||
</div>
|
||||
) : (
|
||||
<button
|
||||
onClick={() => setOpen(!open)}
|
||||
className={cn(
|
||||
'overflow-hidden transition-all duration-200 ease-in-out',
|
||||
open ? 'max-h-[10000px] opacity-100' : 'max-h-0 opacity-0'
|
||||
'flex w-full cursor-pointer items-center justify-between rounded-md px-2.5 py-1.5 text-left font-medium text-[13px] leading-tight transition-colors',
|
||||
'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
|
||||
'text-gray-800 dark:text-gray-200'
|
||||
)}
|
||||
>
|
||||
{/* Mobile: simple indent */}
|
||||
<div className='ml-4 flex flex-col gap-0.5 lg:hidden'>{children}</div>
|
||||
{/* Desktop: styled with border */}
|
||||
<ul className='mt-0.5 ml-2 hidden space-y-[0.0625rem] border-gray-200/60 border-l pl-2.5 lg:block dark:border-gray-700/60'>
|
||||
{children}
|
||||
</ul>
|
||||
</div>
|
||||
<span>{item.name}</span>
|
||||
<ChevronRight
|
||||
className={cn(
|
||||
'ml-auto h-3 w-3 flex-shrink-0 text-gray-400 transition-transform duration-200 ease-in-out dark:text-gray-500',
|
||||
open && 'rotate-90'
|
||||
)}
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
<div
|
||||
className={cn(
|
||||
'overflow-hidden transition-all duration-200 ease-in-out',
|
||||
open ? 'max-h-[10000px] opacity-100' : 'max-h-0 opacity-0'
|
||||
)}
|
||||
>
|
||||
<ul className='mt-0.5 ml-2 space-y-[0.0625rem] border-gray-200/60 border-l pl-2.5 dark:border-gray-700/60'>
|
||||
{children}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
)
|
||||
}
|
||||
|
||||
export function SidebarSeparator({ item }: { item: Separator }) {
|
||||
export function SidebarSeparator({ item }: { item: PageTree.Separator }) {
|
||||
return (
|
||||
<p
|
||||
className={cn(
|
||||
// Mobile styles
|
||||
'mt-4 mb-2 px-2 font-medium text-fd-muted-foreground text-xs',
|
||||
// Desktop styles
|
||||
'lg:mt-4 lg:mb-1.5 lg:px-2.5 lg:font-semibold lg:text-[10px] lg:text-gray-500/80 lg:uppercase lg:tracking-wide lg:dark:text-gray-500'
|
||||
)}
|
||||
>
|
||||
<p className='mt-4 mb-1.5 px-2.5 font-semibold text-[10px] text-gray-500/80 uppercase tracking-wide dark:text-gray-500'>
|
||||
{item.name}
|
||||
</p>
|
||||
)
|
||||
}
|
||||
|
||||
function checkHasActiveChild(node: Folder, pathname: string): boolean {
|
||||
function checkHasActiveChild(node: PageTree.Folder, pathname: string): boolean {
|
||||
if (node.index && isActive(node.index.url, pathname)) {
|
||||
return true
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -20,7 +20,7 @@ export function Navbar() {
|
||||
<div
|
||||
className='relative flex w-full items-center justify-between'
|
||||
style={{
|
||||
paddingLeft: 'calc(var(--sidebar-offset) + 32px)',
|
||||
paddingLeft: 'calc(var(--sidebar-offset) + 20px)',
|
||||
paddingRight: 'calc(var(--toc-offset) + 60px)',
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -1,50 +1,55 @@
|
||||
'use client'
|
||||
|
||||
import { useState } from 'react'
|
||||
import { useCopyButton } from 'fumadocs-ui/utils/use-copy-button'
|
||||
import { Check, Copy } from 'lucide-react'
|
||||
|
||||
const cache = new Map<string, string>()
|
||||
|
||||
export function LLMCopyButton({
|
||||
markdownUrl,
|
||||
}: {
|
||||
/**
|
||||
* A URL to fetch the raw Markdown/MDX content of page
|
||||
*/
|
||||
interface CopyPageButtonProps {
|
||||
markdownUrl: string
|
||||
}) {
|
||||
}
|
||||
|
||||
export function CopyPageButton({ markdownUrl }: CopyPageButtonProps) {
|
||||
const [copied, setCopied] = useState(false)
|
||||
const [isLoading, setLoading] = useState(false)
|
||||
const [checked, onClick] = useCopyButton(async () => {
|
||||
|
||||
const handleCopy = async () => {
|
||||
const cached = cache.get(markdownUrl)
|
||||
if (cached) return navigator.clipboard.writeText(cached)
|
||||
if (cached) {
|
||||
await navigator.clipboard.writeText(cached)
|
||||
setCopied(true)
|
||||
setTimeout(() => setCopied(false), 2000)
|
||||
return
|
||||
}
|
||||
|
||||
setLoading(true)
|
||||
|
||||
try {
|
||||
await navigator.clipboard.write([
|
||||
new ClipboardItem({
|
||||
'text/plain': fetch(markdownUrl).then(async (res) => {
|
||||
const content = await res.text()
|
||||
cache.set(markdownUrl, content)
|
||||
|
||||
return content
|
||||
}),
|
||||
}),
|
||||
])
|
||||
setCopied(true)
|
||||
setTimeout(() => setCopied(false), 2000)
|
||||
} catch (err) {
|
||||
console.error('Failed to copy:', err)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<button
|
||||
disabled={isLoading}
|
||||
onClick={onClick}
|
||||
onClick={handleCopy}
|
||||
className='flex cursor-pointer items-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-2 text-muted-foreground/60 text-sm leading-none transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
|
||||
aria-label={checked ? 'Copied to clipboard' : 'Copy page content'}
|
||||
aria-label={copied ? 'Copied to clipboard' : 'Copy page content'}
|
||||
>
|
||||
{checked ? (
|
||||
{copied ? (
|
||||
<>
|
||||
<Check className='h-3.5 w-3.5' />
|
||||
<span>Copied</span>
|
||||
@@ -1,58 +0,0 @@
|
||||
'use client'
|
||||
|
||||
import { type ComponentPropsWithoutRef, useState } from 'react'
|
||||
import { Check, Link } from 'lucide-react'
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
|
||||
|
||||
interface HeadingProps extends ComponentPropsWithoutRef<'h1'> {
|
||||
as?: HeadingTag
|
||||
}
|
||||
|
||||
export function Heading({ as, className, ...props }: HeadingProps) {
|
||||
const [copied, setCopied] = useState(false)
|
||||
const As = as ?? 'h1'
|
||||
|
||||
if (!props.id) {
|
||||
return <As className={className} {...props} />
|
||||
}
|
||||
|
||||
const handleClick = async (e: React.MouseEvent) => {
|
||||
e.preventDefault()
|
||||
|
||||
const url = `${window.location.origin}${window.location.pathname}#${props.id}`
|
||||
|
||||
try {
|
||||
await navigator.clipboard.writeText(url)
|
||||
setCopied(true)
|
||||
|
||||
// Update URL hash without scrolling
|
||||
window.history.pushState(null, '', `#${props.id}`)
|
||||
|
||||
setTimeout(() => setCopied(false), 2000)
|
||||
} catch {
|
||||
// Fallback: just navigate to the anchor
|
||||
window.location.hash = props.id as string
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<As className={cn('group flex scroll-m-28 flex-row items-center gap-2', className)} {...props}>
|
||||
<a data-card='' href={`#${props.id}`} className='peer' onClick={handleClick}>
|
||||
{props.children}
|
||||
</a>
|
||||
{copied ? (
|
||||
<Check
|
||||
aria-hidden
|
||||
className='size-3.5 shrink-0 text-green-500 opacity-100 transition-opacity'
|
||||
/>
|
||||
) : (
|
||||
<Link
|
||||
aria-hidden
|
||||
className='size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 peer-hover:opacity-100'
|
||||
/>
|
||||
)}
|
||||
</As>
|
||||
)
|
||||
}
|
||||
@@ -15,12 +15,10 @@ import {
|
||||
CalendlyIcon,
|
||||
ClayIcon,
|
||||
ConfluenceIcon,
|
||||
CursorIcon,
|
||||
DatadogIcon,
|
||||
DiscordIcon,
|
||||
DocumentIcon,
|
||||
DropboxIcon,
|
||||
DuckDuckGoIcon,
|
||||
DynamoDBIcon,
|
||||
ElasticsearchIcon,
|
||||
ElevenLabsIcon,
|
||||
@@ -34,10 +32,8 @@ import {
|
||||
GoogleDocsIcon,
|
||||
GoogleDriveIcon,
|
||||
GoogleFormsIcon,
|
||||
GoogleGroupsIcon,
|
||||
GoogleIcon,
|
||||
GoogleSheetsIcon,
|
||||
GoogleSlidesIcon,
|
||||
GoogleVaultIcon,
|
||||
GrafanaIcon,
|
||||
HubspotIcon,
|
||||
@@ -75,6 +71,7 @@ import {
|
||||
PolymarketIcon,
|
||||
PostgresIcon,
|
||||
PosthogIcon,
|
||||
PylonIcon,
|
||||
QdrantIcon,
|
||||
RDSIcon,
|
||||
RedditIcon,
|
||||
@@ -85,12 +82,9 @@ import {
|
||||
SendgridIcon,
|
||||
SentryIcon,
|
||||
SerperIcon,
|
||||
SftpIcon,
|
||||
ShopifyIcon,
|
||||
SlackIcon,
|
||||
SmtpIcon,
|
||||
SpotifyIcon,
|
||||
SQSIcon,
|
||||
SshIcon,
|
||||
STTIcon,
|
||||
StagehandIcon,
|
||||
@@ -143,15 +137,13 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
supabase: SupabaseIcon,
|
||||
stt: STTIcon,
|
||||
stripe: StripeIcon,
|
||||
stagehand_agent: StagehandIcon,
|
||||
stagehand: StagehandIcon,
|
||||
ssh: SshIcon,
|
||||
sqs: SQSIcon,
|
||||
spotify: SpotifyIcon,
|
||||
smtp: SmtpIcon,
|
||||
slack: SlackIcon,
|
||||
shopify: ShopifyIcon,
|
||||
sharepoint: MicrosoftSharepointIcon,
|
||||
sftp: SftpIcon,
|
||||
serper: SerperIcon,
|
||||
sentry: SentryIcon,
|
||||
sendgrid: SendgridIcon,
|
||||
@@ -162,6 +154,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
reddit: RedditIcon,
|
||||
rds: RDSIcon,
|
||||
qdrant: QdrantIcon,
|
||||
pylon: PylonIcon,
|
||||
posthog: PosthogIcon,
|
||||
postgresql: PostgresIcon,
|
||||
polymarket: PolymarketIcon,
|
||||
@@ -199,9 +192,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
hubspot: HubspotIcon,
|
||||
grafana: GrafanaIcon,
|
||||
google_vault: GoogleVaultIcon,
|
||||
google_slides: GoogleSlidesIcon,
|
||||
google_sheets: GoogleSheetsIcon,
|
||||
google_groups: GoogleGroupsIcon,
|
||||
google_forms: GoogleFormsIcon,
|
||||
google_drive: GoogleDriveIcon,
|
||||
google_docs: GoogleDocsIcon,
|
||||
@@ -216,11 +207,9 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
elevenlabs: ElevenLabsIcon,
|
||||
elasticsearch: ElasticsearchIcon,
|
||||
dynamodb: DynamoDBIcon,
|
||||
duckduckgo: DuckDuckGoIcon,
|
||||
dropbox: DropboxIcon,
|
||||
discord: DiscordIcon,
|
||||
datadog: DatadogIcon,
|
||||
cursor: CursorIcon,
|
||||
confluence: ConfluenceIcon,
|
||||
clay: ClayIcon,
|
||||
calendly: CalendlyIcon,
|
||||
|
||||
@@ -143,7 +143,7 @@ Function (Process) → Condition (account_type === 'enterprise') → Advanced or
|
||||
## Bewährte Praktiken
|
||||
|
||||
- **Bedingungen korrekt anordnen**: Platzieren Sie spezifischere Bedingungen vor allgemeinen, um sicherzustellen, dass spezifische Logik Vorrang vor Fallbacks hat
|
||||
- **Verwenden Sie den Else-Zweig bei Bedarf**: Wenn keine Bedingungen übereinstimmen und der Else-Zweig nicht verbunden ist, endet der Workflow-Zweig ordnungsgemäß. Verbinden Sie den Else-Zweig, wenn Sie einen Fallback-Pfad für nicht übereinstimmende Fälle benötigen
|
||||
- **Halten Sie Ausdrücke einfach**: Verwenden Sie klare, unkomplizierte boolesche Ausdrücke für bessere Lesbarkeit und einfachere Fehlersuche
|
||||
- **Eine Standardbedingung einfügen**: Fügen Sie eine Auffangbedingung (`true`) als letzte Bedingung hinzu, um nicht übereinstimmende Fälle zu behandeln und zu verhindern, dass die Workflow-Ausführung stecken bleibt
|
||||
- **Ausdrücke einfach halten**: Verwenden Sie klare, unkomplizierte boolesche Ausdrücke für bessere Lesbarkeit und einfachere Fehlersuche
|
||||
- **Dokumentieren Sie Ihre Bedingungen**: Fügen Sie Beschreibungen hinzu, um den Zweck jeder Bedingung für bessere Teamzusammenarbeit und Wartung zu erklären
|
||||
- **Testen Sie Grenzfälle**: Überprüfen Sie, ob Bedingungen Grenzwerte korrekt behandeln, indem Sie mit Werten an den Grenzen Ihrer Bedingungsbereiche testen
|
||||
- **Grenzfälle testen**: Überprüfen Sie, ob Bedingungen Grenzwerte korrekt behandeln, indem Sie mit Werten an den Grenzen Ihrer Bedingungsbereiche testen
|
||||
|
||||
@@ -27,16 +27,14 @@ Alle API-Antworten enthalten Informationen über Ihre Workflow-Ausführungslimit
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60, // Sustained rate limit per minute
|
||||
"maxBurst": 120, // Maximum burst capacity
|
||||
"remaining": 118, // Current tokens available (up to maxBurst)
|
||||
"resetAt": "..." // When tokens next refill
|
||||
"limit": 60, // Max sync workflow executions per minute
|
||||
"remaining": 58, // Remaining sync workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200, // Sustained rate limit per minute
|
||||
"maxBurst": 400, // Maximum burst capacity
|
||||
"remaining": 398, // Current tokens available
|
||||
"resetAt": "..." // When tokens next refill
|
||||
"limit": 60, // Max async workflow executions per minute
|
||||
"remaining": 59, // Remaining async workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
}
|
||||
},
|
||||
"usage": {
|
||||
@@ -48,7 +46,7 @@ Alle API-Antworten enthalten Informationen über Ihre Workflow-Ausführungslimit
|
||||
}
|
||||
```
|
||||
|
||||
**Hinweis:** Ratenbegrenzungen verwenden einen Token-Bucket-Algorithmus. `remaining` kann `requestsPerMinute` bis zu `maxBurst` überschreiten, wenn du dein volles Kontingent in letzter Zeit nicht genutzt hast, was Burst-Traffic ermöglicht. Die Ratenbegrenzungen im Antworttext gelten für Workflow-Ausführungen. Die Ratenbegrenzungen für den Aufruf dieses API-Endpunkts befinden sich in den Antwort-Headern (`X-RateLimit-*`).
|
||||
**Hinweis:** Die Ratenbegrenzungen in der Antwort beziehen sich auf Workflow-Ausführungen. Die Ratenbegrenzungen für den Aufruf dieses API-Endpunkts befinden sich in den Antwort-Headern (`X-RateLimit-*`).
|
||||
|
||||
### Logs abfragen
|
||||
|
||||
@@ -112,15 +110,13 @@ Fragen Sie Workflow-Ausführungsprotokolle mit umfangreichen Filteroptionen ab.
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60,
|
||||
"maxBurst": 120,
|
||||
"remaining": 118,
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 398,
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
@@ -194,15 +190,13 @@ Rufen Sie detaillierte Informationen zu einem bestimmten Logeintrag ab.
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60,
|
||||
"maxBurst": 120,
|
||||
"remaining": 118,
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 398,
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
@@ -257,78 +251,32 @@ Rufen Sie Ausführungsdetails einschließlich des Workflow-Zustandsschnappschuss
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Benachrichtigungen
|
||||
## Webhook-Abonnements
|
||||
|
||||
Erhalten Sie Echtzeit-Benachrichtigungen, wenn Workflow-Ausführungen abgeschlossen sind, per Webhook, E-Mail oder Slack. Benachrichtigungen werden auf Workspace-Ebene von der Protokollseite aus konfiguriert.
|
||||
Erhalten Sie Echtzeitbenachrichtigungen, wenn Workflow-Ausführungen abgeschlossen werden. Webhooks werden über die Sim-Benutzeroberfläche im Workflow-Editor konfiguriert.
|
||||
|
||||
### Konfiguration
|
||||
|
||||
Konfigurieren Sie Benachrichtigungen von der Protokollseite aus, indem Sie auf die Menütaste klicken und "Benachrichtigungen konfigurieren" auswählen.
|
||||
Webhooks können für jeden Workflow über die Benutzeroberfläche des Workflow-Editors konfiguriert werden. Klicken Sie auf das Webhook-Symbol in der Kontrollleiste, um Ihre Webhook-Abonnements einzurichten.
|
||||
|
||||
**Benachrichtigungskanäle:**
|
||||
- **Webhook**: Senden Sie HTTP POST-Anfragen an Ihren Endpunkt
|
||||
- **E-Mail**: Erhalten Sie E-Mail-Benachrichtigungen mit Ausführungsdetails
|
||||
- **Slack**: Posten Sie Nachrichten in einen Slack-Kanal
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="configure-webhook.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
**Workflow-Auswahl:**
|
||||
- Wählen Sie bestimmte Workflows zur Überwachung aus
|
||||
- Oder wählen Sie "Alle Workflows", um aktuelle und zukünftige Workflows einzubeziehen
|
||||
|
||||
**Filteroptionen:**
|
||||
- `levelFilter`: Zu empfangende Protokollebenen (`info`, `error`)
|
||||
- `triggerFilter`: Zu empfangende Auslösertypen (`api`, `webhook`, `schedule`, `manual`, `chat`)
|
||||
|
||||
**Optionale Daten:**
|
||||
- `includeFinalOutput`: Schließt die endgültige Ausgabe des Workflows ein
|
||||
- `includeTraceSpans`: Schließt detaillierte Ausführungs-Trace-Spans ein
|
||||
- `includeRateLimits`: Schließt Informationen zum Ratenlimit ein (Sync/Async-Limits und verbleibende)
|
||||
- `includeUsageData`: Schließt Abrechnungszeitraum-Nutzung und -Limits ein
|
||||
|
||||
### Alarmregeln
|
||||
|
||||
Anstatt Benachrichtigungen für jede Ausführung zu erhalten, konfigurieren Sie Alarmregeln, um nur bei erkannten Problemen benachrichtigt zu werden:
|
||||
|
||||
**Aufeinanderfolgende Fehler**
|
||||
- Alarm nach X aufeinanderfolgenden fehlgeschlagenen Ausführungen (z.B. 3 Fehler in Folge)
|
||||
- Wird zurückgesetzt, wenn eine Ausführung erfolgreich ist
|
||||
|
||||
**Fehlerrate**
|
||||
- Alarm, wenn die Fehlerrate X% in den letzten Y Stunden überschreitet
|
||||
- Erfordert mindestens 5 Ausführungen im Zeitfenster
|
||||
- Wird erst nach Ablauf des vollständigen Zeitfensters ausgelöst
|
||||
|
||||
**Latenz-Schwellenwert**
|
||||
- Alarm, wenn eine Ausführung länger als X Sekunden dauert
|
||||
- Nützlich zum Erkennen langsamer oder hängender Workflows
|
||||
|
||||
**Latenz-Spitze**
|
||||
- Alarm, wenn die Ausführung X% langsamer als der Durchschnitt ist
|
||||
- Vergleicht mit der durchschnittlichen Dauer über das konfigurierte Zeitfenster
|
||||
- Erfordert mindestens 5 Ausführungen, um eine Baseline zu etablieren
|
||||
|
||||
**Kostenschwelle**
|
||||
- Alarmierung, wenn eine einzelne Ausführung mehr als $X kostet
|
||||
- Nützlich, um teure LLM-Aufrufe zu erkennen
|
||||
|
||||
**Keine Aktivität**
|
||||
- Alarmierung, wenn innerhalb von X Stunden keine Ausführungen stattfinden
|
||||
- Nützlich zur Überwachung geplanter Workflows, die regelmäßig ausgeführt werden sollten
|
||||
|
||||
**Fehlerzählung**
|
||||
- Alarmierung, wenn die Fehleranzahl X innerhalb eines Zeitfensters überschreitet
|
||||
- Erfasst die Gesamtfehler, nicht aufeinanderfolgende
|
||||
|
||||
Alle Alarmtypen beinhalten eine Abklingzeit von 1 Stunde, um Benachrichtigungsspam zu vermeiden.
|
||||
|
||||
### Webhook-Konfiguration
|
||||
|
||||
Für Webhooks stehen zusätzliche Optionen zur Verfügung:
|
||||
**Verfügbare Konfigurationsoptionen:**
|
||||
- `url`: Ihre Webhook-Endpunkt-URL
|
||||
- `secret`: Optionales Geheimnis für HMAC-Signaturverifizierung
|
||||
- `secret`: Optionales Geheimnis für die HMAC-Signaturverifizierung
|
||||
- `includeFinalOutput`: Die endgültige Ausgabe des Workflows in die Nutzlast einschließen
|
||||
- `includeTraceSpans`: Detaillierte Ausführungs-Trace-Spans einschließen
|
||||
- `includeRateLimits`: Informationen zum Ratelimit des Workflow-Besitzers einschließen
|
||||
- `includeUsageData`: Nutzungs- und Abrechnungsdaten des Workflow-Besitzers einschließen
|
||||
- `levelFilter`: Array von Log-Ebenen, die empfangen werden sollen (`info`, `error`)
|
||||
- `triggerFilter`: Array von Auslösertypen, die empfangen werden sollen (`api`, `webhook`, `schedule`, `manual`, `chat`)
|
||||
- `active`: Webhook-Abonnement aktivieren/deaktivieren
|
||||
|
||||
### Payload-Struktur
|
||||
### Webhook-Nutzlast
|
||||
|
||||
Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim die folgende Payload (über Webhook POST, E-Mail oder Slack):
|
||||
Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim eine POST-Anfrage an Ihre Webhook-URL:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -379,17 +327,17 @@ Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim die folgende Payloa
|
||||
|
||||
### Webhook-Header
|
||||
|
||||
Jede Webhook-Anfrage enthält diese Header (nur Webhook-Kanal):
|
||||
Jede Webhook-Anfrage enthält diese Header:
|
||||
|
||||
- `sim-event`: Ereignistyp (immer `workflow.execution.completed`)
|
||||
- `sim-timestamp`: Unix-Zeitstempel in Millisekunden
|
||||
- `sim-delivery-id`: Eindeutige Zustell-ID für Idempotenz
|
||||
- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Geheimnis konfiguriert)
|
||||
- `Idempotency-Key`: Gleich wie Zustell-ID zur Erkennung von Duplikaten
|
||||
- `sim-delivery-id`: Eindeutige Lieferungs-ID für Idempotenz
|
||||
- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Secret konfiguriert)
|
||||
- `Idempotency-Key`: Identisch mit der Lieferungs-ID zur Erkennung von Duplikaten
|
||||
|
||||
### Signaturverifizierung
|
||||
|
||||
Wenn Sie ein Webhook-Geheimnis konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt:
|
||||
Wenn Sie ein Webhook-Secret konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt:
|
||||
|
||||
<Tabs items={['Node.js', 'Python']}>
|
||||
<Tab value="Node.js">
|
||||
@@ -466,7 +414,7 @@ Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitte
|
||||
|
||||
- Maximale Versuche: 5
|
||||
- Wiederholungsverzögerungen: 5 Sekunden, 15 Sekunden, 1 Minute, 3 Minuten, 10 Minuten
|
||||
- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastung zu vermeiden
|
||||
- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastungen zu vermeiden
|
||||
- Nur HTTP 5xx und 429 Antworten lösen Wiederholungen aus
|
||||
- Zustellungen haben ein Timeout nach 30 Sekunden
|
||||
|
||||
@@ -476,39 +424,31 @@ Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitte
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Polling-Strategie**: Verwende bei der Abfrage von Logs eine cursor-basierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen.
|
||||
1. **Polling-Strategie**: Verwenden Sie beim Abfragen von Logs die cursorbasierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen.
|
||||
|
||||
2. **Webhook-Sicherheit**: Konfiguriere immer ein Webhook-Secret und überprüfe Signaturen, um sicherzustellen, dass Anfragen von Sim stammen.
|
||||
2. **Webhook-Sicherheit**: Konfigurieren Sie immer ein Webhook-Secret und überprüfen Sie Signaturen, um sicherzustellen, dass Anfragen von Sim stammen.
|
||||
|
||||
3. **Idempotenz**: Verwende den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln.
|
||||
3. **Idempotenz**: Verwenden Sie den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln.
|
||||
|
||||
4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` aus den Antworten ausgeschlossen. Aktiviere diese nur, wenn du die Daten benötigst und die Datenschutzauswirkungen verstehst.
|
||||
4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` von den Antworten ausgeschlossen. Aktivieren Sie diese nur, wenn Sie die Daten benötigen und die Datenschutzauswirkungen verstehen.
|
||||
|
||||
5. **Rate-Limiting**: Implementiere exponentielles Backoff, wenn du 429-Antworten erhältst. Überprüfe den `Retry-After`Header für die empfohlene Wartezeit.
|
||||
5. **Rate-Limiting**: Implementieren Sie exponentielles Backoff, wenn Sie 429-Antworten erhalten. Überprüfen Sie den `Retry-After`Header für die empfohlene Wartezeit.
|
||||
|
||||
## Rate-Limiting
|
||||
|
||||
Die API verwendet einen **Token-Bucket-Algorithmus** für die Ratenbegrenzung, der eine faire Nutzung ermöglicht und gleichzeitig Burst-Traffic zulässt:
|
||||
Die API implementiert Rate-Limiting, um eine faire Nutzung zu gewährleisten:
|
||||
|
||||
| Plan | Anfragen/Minute | Burst-Kapazität |
|
||||
|------|-----------------|----------------|
|
||||
| Free | 10 | 20 |
|
||||
| Pro | 30 | 60 |
|
||||
| Team | 60 | 120 |
|
||||
| Enterprise | 120 | 240 |
|
||||
- **Kostenloser Plan**: 10 Anfragen pro Minute
|
||||
- **Pro-Plan**: 30 Anfragen pro Minute
|
||||
- **Team-Plan**: 60 Anfragen pro Minute
|
||||
- **Enterprise-Plan**: Individuelle Limits
|
||||
|
||||
**Wie es funktioniert:**
|
||||
- Tokens werden mit der Rate `requestsPerMinute` aufgefüllt
|
||||
- Du kannst im Leerlauf bis zu `maxBurst` Tokens ansammeln
|
||||
- Jede Anfrage verbraucht 1 Token
|
||||
- Die Burst-Kapazität ermöglicht die Bewältigung von Verkehrsspitzen
|
||||
Informationen zum Rate-Limit sind in den Antwort-Headern enthalten:
|
||||
- `X-RateLimit-Limit`: Maximale Anfragen pro Zeitfenster
|
||||
- `X-RateLimit-Remaining`: Verbleibende Anfragen im aktuellen Zeitfenster
|
||||
- `X-RateLimit-Reset`: ISO-Zeitstempel, wann das Zeitfenster zurückgesetzt wird
|
||||
|
||||
Informationen zur Ratenbegrenzung sind in den Antwort-Headern enthalten:
|
||||
- `X-RateLimit-Limit`: Anfragen pro Minute (Auffüllrate)
|
||||
- `X-RateLimit-Remaining`: Aktuell verfügbare Tokens
|
||||
- `X-RateLimit-Reset`: ISO-Zeitstempel, wann Tokens als nächstes aufgefüllt werden
|
||||
|
||||
## Beispiel: Abfragen nach neuen Logs
|
||||
## Beispiel: Abfragen neuer Logs
|
||||
|
||||
```javascript
|
||||
let cursor = null;
|
||||
|
||||
@@ -147,20 +147,8 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
|
||||
{
|
||||
"success": true,
|
||||
"rateLimit": {
|
||||
"sync": {
|
||||
"isLimited": false,
|
||||
"requestsPerMinute": 25,
|
||||
"maxBurst": 50,
|
||||
"remaining": 50,
|
||||
"resetAt": "2025-09-08T22:51:55.999Z"
|
||||
},
|
||||
"async": {
|
||||
"isLimited": false,
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 400,
|
||||
"resetAt": "2025-09-08T22:51:56.155Z"
|
||||
},
|
||||
"sync": { "isLimited": false, "limit": 10, "remaining": 10, "resetAt": "2025-09-08T22:51:55.999Z" },
|
||||
"async": { "isLimited": false, "limit": 50, "remaining": 50, "resetAt": "2025-09-08T22:51:56.155Z" },
|
||||
"authType": "api"
|
||||
},
|
||||
"usage": {
|
||||
@@ -171,54 +159,49 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
|
||||
}
|
||||
```
|
||||
|
||||
**Rate-Limit-Felder:**
|
||||
- `requestsPerMinute`: Dauerhafte Rate-Begrenzung (Tokens werden mit dieser Rate aufgefüllt)
|
||||
- `maxBurst`: Maximale Tokens, die Sie ansammeln können (Burst-Kapazität)
|
||||
- `remaining`: Aktuell verfügbare Tokens (können bis zu `maxBurst` sein)
|
||||
|
||||
**Antwortfelder:**
|
||||
- `currentPeriodCost` spiegelt die Nutzung in der aktuellen Abrechnungsperiode wider
|
||||
- `limit` wird von individuellen Limits (Free/Pro) oder gepoolten Organisationslimits (Team/Enterprise) abgeleitet
|
||||
- `currentPeriodCost` zeigt die Nutzung im aktuellen Abrechnungszeitraum
|
||||
- `limit` wird aus individuellen Limits (Free/Pro) oder gebündelten Organisationslimits (Team/Enterprise) abgeleitet
|
||||
- `plan` ist der aktive Plan mit der höchsten Priorität, der mit Ihrem Benutzer verknüpft ist
|
||||
|
||||
## Plan-Limits
|
||||
|
||||
Verschiedene Abonnementpläne haben unterschiedliche Nutzungslimits:
|
||||
|
||||
| Plan | Monatliches Nutzungslimit | Rate-Limits (pro Minute) |
|
||||
| Plan | Monatliches Nutzungslimit | Ratengrenze (pro Minute) |
|
||||
|------|-------------------|-------------------------|
|
||||
| **Free** | $10 | 5 sync, 10 async |
|
||||
| **Pro** | $100 | 10 sync, 50 async |
|
||||
| **Team** | $500 (gepoolt) | 50 sync, 100 async |
|
||||
| **Team** | $500 (gebündelt) | 50 sync, 100 async |
|
||||
| **Enterprise** | Individuell | Individuell |
|
||||
|
||||
## Abrechnungsmodell
|
||||
|
||||
Sim verwendet ein **Basisabonnement + Mehrverbrauch**-Abrechnungsmodell:
|
||||
Sim verwendet ein **Basisabonnement + Überschreitung** Abrechnungsmodell:
|
||||
|
||||
### Wie es funktioniert
|
||||
|
||||
**Pro-Plan ($20/Monat):**
|
||||
**Pro Plan ($20/Monat):**
|
||||
- Monatliches Abonnement beinhaltet $20 Nutzung
|
||||
- Nutzung unter $20 → Keine zusätzlichen Kosten
|
||||
- Nutzung über $20 → Zahlen Sie den Mehrverbrauch am Monatsende
|
||||
- Beispiel: $35 Nutzung = $20 (Abonnement) + $15 (Mehrverbrauch)
|
||||
- Nutzung über $20 → Zahlung der Überschreitung am Monatsende
|
||||
- Beispiel: $35 Nutzung = $20 (Abonnement) + $15 (Überschreitung)
|
||||
|
||||
**Team-Plan ($40/Benutzer/Monat):**
|
||||
- Gepoolte Nutzung für alle Teammitglieder
|
||||
- Mehrverbrauch wird aus der Gesamtnutzung des Teams berechnet
|
||||
**Team Plan ($40/Benutzer/Monat):**
|
||||
- Gebündelte Nutzung für alle Teammitglieder
|
||||
- Überschreitung wird aus der Gesamtnutzung des Teams berechnet
|
||||
- Organisationsinhaber erhält eine Rechnung
|
||||
|
||||
**Enterprise-Pläne:**
|
||||
- Fester monatlicher Preis, kein Mehrverbrauch
|
||||
**Enterprise Pläne:**
|
||||
- Fester monatlicher Preis, keine Überschreitungen
|
||||
- Individuelle Nutzungslimits gemäß Vereinbarung
|
||||
|
||||
### Schwellenwert-Abrechnung
|
||||
### Schwellenwertabrechnung
|
||||
|
||||
Wenn der nicht abgerechnete Mehrverbrauch $50 erreicht, berechnet Sim automatisch den gesamten nicht abgerechneten Betrag.
|
||||
Wenn die nicht abgerechnete Überschreitung $50 erreicht, berechnet Sim automatisch den gesamten nicht abgerechneten Betrag.
|
||||
|
||||
**Beispiel:**
|
||||
- Tag 10: $70 Mehrverbrauch → Sofortige Abrechnung von $70
|
||||
- Tag 10: $70 Überschreitung → Sofortige Abrechnung von $70
|
||||
- Tag 15: Zusätzliche $35 Nutzung ($105 insgesamt) → Bereits abgerechnet, keine Aktion
|
||||
- Tag 20: Weitere $50 Nutzung ($155 insgesamt, $85 nicht abgerechnet) → Sofortige Abrechnung von $85
|
||||
|
||||
|
||||
@@ -147,4 +147,4 @@ Der Snapshot bietet:
|
||||
|
||||
- Erfahren Sie mehr über die [Kostenberechnung](/execution/costs), um die Preisgestaltung von Workflows zu verstehen
|
||||
- Erkunden Sie die [externe API](/execution/api) für programmatischen Zugriff auf Protokolle
|
||||
- Richten Sie [Benachrichtigungen](/execution/api#notifications) für Echtzeit-Warnungen per Webhook, E-Mail oder Slack ein
|
||||
- Richten Sie [Webhook-Benachrichtigungen](/execution/api#webhook-subscriptions) für Echtzeit-Warnungen ein
|
||||
@@ -72,7 +72,7 @@ Für benutzerdefinierte Integrationen nutzen Sie unsere [MCP (Model Context Prot
|
||||
<Video src="introduction/integrations-sidebar.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Copilot
|
||||
## KI-gesteuerter Copilot
|
||||
|
||||
**Fragen stellen & Anleitung erhalten**
|
||||
Der Copilot beantwortet Fragen zu Sim, erklärt Ihre Workflows und gibt Verbesserungsvorschläge. Verwenden Sie das `@` Symbol, um auf Workflows, Blöcke, Dokumentation, Wissen und Protokolle für kontextbezogene Unterstützung zu verweisen.
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
---
|
||||
title: Übersicht
|
||||
description: Laden Sie Ihre Dokumente hoch, verarbeiten und durchsuchen Sie sie
|
||||
mit intelligenter Vektorsuche und Chunking
|
||||
title: Wissensdatenbank
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
---
|
||||
title: Docker
|
||||
description: Sim Studio mit Docker Compose bereitstellen
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Schnellstart
|
||||
|
||||
```bash
|
||||
# Clone and start
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
Öffnen Sie [http://localhost:3000](http://localhost:3000)
|
||||
|
||||
## Produktionseinrichtung
|
||||
|
||||
### 1. Umgebung konfigurieren
|
||||
|
||||
```bash
|
||||
# Generate secrets
|
||||
cat > .env << EOF
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
EOF
|
||||
```
|
||||
|
||||
### 2. Dienste starten
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### 3. SSL einrichten
|
||||
|
||||
<Tabs items={['Caddy (Empfohlen)', 'Nginx + Certbot']}>
|
||||
<Tab value="Caddy (Empfohlen)">
|
||||
Caddy verwaltet SSL-Zertifikate automatisch.
|
||||
|
||||
```bash
|
||||
# Install Caddy
|
||||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
||||
sudo apt update && sudo apt install caddy
|
||||
```
|
||||
|
||||
Erstellen Sie `/etc/caddy/Caddyfile`:
|
||||
|
||||
```
|
||||
sim.yourdomain.com {
|
||||
reverse_proxy localhost:3000
|
||||
|
||||
handle /socket.io/* {
|
||||
reverse_proxy localhost:3002
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo systemctl restart caddy
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Nginx + Certbot">
|
||||
|
||||
```bash
|
||||
# Install
|
||||
sudo apt install nginx certbot python3-certbot-nginx -y
|
||||
|
||||
# Create /etc/nginx/sites-available/sim
|
||||
server {
|
||||
listen 80;
|
||||
server_name sim.yourdomain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location /socket.io/ {
|
||||
proxy_pass http://127.0.0.1:3002;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
}
|
||||
|
||||
# Enable and get certificate
|
||||
sudo ln -s /etc/nginx/sites-available/sim /etc/nginx/sites-enabled/
|
||||
sudo certbot --nginx -d sim.yourdomain.com
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Ollama
|
||||
|
||||
```bash
|
||||
# With GPU
|
||||
docker compose -f docker-compose.ollama.yml --profile gpu --profile setup up -d
|
||||
|
||||
# CPU only
|
||||
docker compose -f docker-compose.ollama.yml --profile cpu --profile setup up -d
|
||||
```
|
||||
|
||||
Zusätzliche Modelle herunterladen:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.2
|
||||
```
|
||||
|
||||
### Externes Ollama
|
||||
|
||||
Wenn Ollama auf Ihrem Host-Rechner läuft (nicht in Docker):
|
||||
|
||||
```bash
|
||||
# macOS/Windows
|
||||
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Linux - use your host IP
|
||||
OLLAMA_URL=http://192.168.1.100:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
<Callout type="warning">
|
||||
Innerhalb von Docker bezieht sich `localhost` auf den Container, nicht auf Ihren Host. Verwenden Sie `host.docker.internal` oder die IP-Adresse Ihres Hosts.
|
||||
</Callout>
|
||||
|
||||
## Befehle
|
||||
|
||||
```bash
|
||||
# View logs
|
||||
docker compose -f docker-compose.prod.yml logs -f simstudio
|
||||
|
||||
# Stop
|
||||
docker compose -f docker-compose.prod.yml down
|
||||
|
||||
# Update
|
||||
docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Backup database
|
||||
docker compose -f docker-compose.prod.yml exec db pg_dump -U postgres simstudio > backup.sql
|
||||
```
|
||||
@@ -1,87 +0,0 @@
|
||||
---
|
||||
title: Umgebungsvariablen
|
||||
description: Konfigurationsreferenz für Sim Studio
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Erforderlich
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------|-------------|
|
||||
| `DATABASE_URL` | PostgreSQL-Verbindungszeichenfolge |
|
||||
| `BETTER_AUTH_SECRET` | Auth-Secret (32 Hex-Zeichen): `openssl rand -hex 32` |
|
||||
| `BETTER_AUTH_URL` | Ihre App-URL |
|
||||
| `ENCRYPTION_KEY` | Verschlüsselungsschlüssel (32 Hex-Zeichen): `openssl rand -hex 32` |
|
||||
| `INTERNAL_API_SECRET` | Internes API-Secret (32 Hex-Zeichen): `openssl rand -hex 32` |
|
||||
| `NEXT_PUBLIC_APP_URL` | Öffentliche App-URL |
|
||||
| `NEXT_PUBLIC_SOCKET_URL` | WebSocket-URL (Standard: `http://localhost:3002`) |
|
||||
|
||||
## KI-Anbieter
|
||||
|
||||
| Variable | Anbieter |
|
||||
|----------|----------|
|
||||
| `OPENAI_API_KEY` | OpenAI |
|
||||
| `ANTHROPIC_API_KEY_1` | Anthropic Claude |
|
||||
| `GEMINI_API_KEY_1` | Google Gemini |
|
||||
| `MISTRAL_API_KEY` | Mistral |
|
||||
| `OLLAMA_URL` | Ollama (Standard: `http://localhost:11434`) |
|
||||
|
||||
<Callout type="info">
|
||||
Für Lastausgleich fügen Sie mehrere Schlüssel mit den Suffixen `_1`, `_2`, `_3` hinzu (z.B. `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`). Funktioniert mit OpenAI, Anthropic und Gemini.
|
||||
</Callout>
|
||||
|
||||
<Callout type="info">
|
||||
In Docker verwenden Sie `OLLAMA_URL=http://host.docker.internal:11434` für Ollama auf dem Host-System.
|
||||
</Callout>
|
||||
|
||||
### Azure OpenAI
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------|-------------|
|
||||
| `AZURE_OPENAI_API_KEY` | Azure OpenAI API-Schlüssel |
|
||||
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI Endpoint-URL |
|
||||
| `AZURE_OPENAI_API_VERSION` | API-Version (z.B. `2024-02-15-preview`) |
|
||||
|
||||
### vLLM (Selbst-gehostet)
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------|-------------|
|
||||
| `VLLM_BASE_URL` | vLLM-Server-URL (z.B. `http://localhost:8000/v1`) |
|
||||
| `VLLM_API_KEY` | Optionaler Bearer-Token für vLLM |
|
||||
|
||||
## OAuth-Anbieter
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------|-------------|
|
||||
| `GOOGLE_CLIENT_ID` | Google OAuth Client-ID |
|
||||
| `GOOGLE_CLIENT_SECRET` | Google OAuth Client-Secret |
|
||||
| `GITHUB_CLIENT_ID` | GitHub OAuth Client-ID |
|
||||
| `GITHUB_CLIENT_SECRET` | GitHub OAuth Client-Secret |
|
||||
|
||||
## Optional
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------|-------------|
|
||||
| `API_ENCRYPTION_KEY` | Verschlüsselt gespeicherte API-Schlüssel (32 Hex-Zeichen): `openssl rand -hex 32` |
|
||||
| `COPILOT_API_KEY` | API-Schlüssel für Copilot-Funktionen |
|
||||
| `ADMIN_API_KEY` | Admin-API-Schlüssel für GitOps-Operationen |
|
||||
| `RESEND_API_KEY` | E-Mail-Dienst für Benachrichtigungen |
|
||||
| `ALLOWED_LOGIN_DOMAINS` | Registrierungen auf Domains beschränken (durch Kommas getrennt) |
|
||||
| `ALLOWED_LOGIN_EMAILS` | Registrierungen auf bestimmte E-Mails beschränken (durch Kommas getrennt) |
|
||||
| `DISABLE_REGISTRATION` | Auf `true` setzen, um neue Benutzerregistrierungen zu deaktivieren |
|
||||
|
||||
## Beispiel .env
|
||||
|
||||
```bash
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=<openssl rand -hex 32>
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
ENCRYPTION_KEY=<openssl rand -hex 32>
|
||||
INTERNAL_API_SECRET=<openssl rand -hex 32>
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
OPENAI_API_KEY=sk-...
|
||||
```
|
||||
|
||||
Siehe `apps/sim/.env.example` für alle Optionen.
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
title: Self-Hosting
|
||||
description: Stellen Sie Sim Studio auf Ihrer eigenen Infrastruktur bereit
|
||||
---
|
||||
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
Stellen Sie Sim Studio auf Ihrer eigenen Infrastruktur mit Docker oder Kubernetes bereit.
|
||||
|
||||
## Anforderungen
|
||||
|
||||
| Ressource | Minimum | Empfohlen |
|
||||
|----------|---------|-------------|
|
||||
| CPU | 2 Kerne | 4+ Kerne |
|
||||
| RAM | 12 GB | 16+ GB |
|
||||
| Speicher | 20 GB SSD | 50+ GB SSD |
|
||||
| Docker | 20.10+ | Neueste Version |
|
||||
|
||||
## Schnellstart
|
||||
|
||||
```bash
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
Öffnen Sie [http://localhost:3000](http://localhost:3000)
|
||||
|
||||
## Bereitstellungsoptionen
|
||||
|
||||
<Cards>
|
||||
<Card title="Docker" href="/self-hosting/docker">
|
||||
Bereitstellung mit Docker Compose auf jedem Server
|
||||
</Card>
|
||||
<Card title="Kubernetes" href="/self-hosting/kubernetes">
|
||||
Bereitstellung mit Helm auf Kubernetes-Clustern
|
||||
</Card>
|
||||
<Card title="Cloud-Plattformen" href="/self-hosting/platforms">
|
||||
Anleitungen für Railway, DigitalOcean, AWS, Azure, GCP
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Architektur
|
||||
|
||||
| Komponente | Port | Beschreibung |
|
||||
|-----------|------|-------------|
|
||||
| simstudio | 3000 | Hauptanwendung |
|
||||
| realtime | 3002 | WebSocket-Server |
|
||||
| db | 5432 | PostgreSQL mit pgvector |
|
||||
| migrations | - | Datenbank-Migrationen (werden einmal ausgeführt) |
|
||||
@@ -1,133 +0,0 @@
|
||||
---
|
||||
title: Kubernetes
|
||||
description: Sim Studio mit Helm bereitstellen
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Kubernetes 1.19+
|
||||
- Helm 3.0+
|
||||
- PV-Provisioner-Unterstützung
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# Clone repo
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
|
||||
# Generate secrets
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
|
||||
# Install
|
||||
helm install sim ./helm/sim \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
|
||||
## Cloud-spezifische Werte
|
||||
|
||||
<Tabs items={['AWS EKS', 'Azure AKS', 'GCP GKE']}>
|
||||
<Tab value="AWS EKS">
|
||||
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-aws.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Azure AKS">
|
||||
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-azure.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="GCP GKE">
|
||||
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-gcp.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Schlüsselkonfiguration
|
||||
|
||||
```yaml
|
||||
# Custom values.yaml
|
||||
app:
|
||||
replicaCount: 2
|
||||
env:
|
||||
NEXT_PUBLIC_APP_URL: "https://sim.yourdomain.com"
|
||||
OPENAI_API_KEY: "sk-..."
|
||||
|
||||
postgresql:
|
||||
persistence:
|
||||
size: 50Gi
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
tls:
|
||||
enabled: true
|
||||
app:
|
||||
host: sim.yourdomain.com
|
||||
```
|
||||
|
||||
Siehe `helm/sim/values.yaml` für alle Optionen.
|
||||
|
||||
## Externe Datenbank
|
||||
|
||||
```yaml
|
||||
postgresql:
|
||||
enabled: false
|
||||
|
||||
externalDatabase:
|
||||
enabled: true
|
||||
host: "your-db-host"
|
||||
port: 5432
|
||||
username: "postgres"
|
||||
password: "your-password"
|
||||
database: "simstudio"
|
||||
sslMode: "require"
|
||||
```
|
||||
|
||||
## Befehle
|
||||
|
||||
```bash
|
||||
# Port forward for local access
|
||||
kubectl port-forward deployment/sim-sim-app 3000:3000 -n simstudio
|
||||
|
||||
# View logs
|
||||
kubectl logs -l app.kubernetes.io/component=app -n simstudio --tail=100
|
||||
|
||||
# Upgrade
|
||||
helm upgrade sim ./helm/sim --namespace simstudio
|
||||
|
||||
# Uninstall
|
||||
helm uninstall sim --namespace simstudio
|
||||
```
|
||||
@@ -1,124 +0,0 @@
|
||||
---
|
||||
title: Cloud-Plattformen
|
||||
description: Sim Studio auf Cloud-Plattformen bereitstellen
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Railway
|
||||
|
||||
Bereitstellung mit einem Klick und automatischer PostgreSQL-Bereitstellung.
|
||||
|
||||
[
|
||||
|
||||

|
||||
|
||||
](https://railway.com/new/template/sim-studio)
|
||||
|
||||
Nach der Bereitstellung fügen Sie Umgebungsvariablen im Railway-Dashboard hinzu:
|
||||
- `BETTER_AUTH_SECRET`, `ENCRYPTION_KEY`, `INTERNAL_API_SECRET` (automatisch generiert)
|
||||
- `OPENAI_API_KEY` oder andere KI-Anbieter-Schlüssel
|
||||
- Benutzerdefinierte Domain in Einstellungen → Netzwerk
|
||||
|
||||
## VPS-Bereitstellung
|
||||
|
||||
Für DigitalOcean, AWS EC2, Azure VMs oder jeden Linux-Server:
|
||||
|
||||
<Tabs items={['DigitalOcean', 'AWS EC2', 'Azure VM']}>
|
||||
<Tab value="DigitalOcean">
|
||||
**Empfohlen:** 16 GB RAM Droplet, Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
# Create Droplet via console, then SSH in
|
||||
ssh root@your-droplet-ip
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="AWS EC2">
|
||||
**Empfohlen:** t3.xlarge (16 GB RAM), Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
ssh -i your-key.pem ubuntu@your-ec2-ip
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Azure VM">
|
||||
**Empfohlen:** Standard_D4s_v3 (16 GB RAM), Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
ssh azureuser@your-vm-ip
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Docker installieren
|
||||
|
||||
```bash
|
||||
# Install Docker (official method)
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Logout and reconnect, then verify
|
||||
docker --version
|
||||
```
|
||||
|
||||
### Sim Studio bereitstellen
|
||||
|
||||
```bash
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
|
||||
# Create .env with secrets
|
||||
cat > .env << EOF
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
EOF
|
||||
|
||||
# Start
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### SSL mit Caddy
|
||||
|
||||
```bash
|
||||
# Install Caddy
|
||||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
||||
sudo apt update && sudo apt install caddy
|
||||
|
||||
# Configure (replace domain)
|
||||
echo 'sim.yourdomain.com {
|
||||
reverse_proxy localhost:3000
|
||||
handle /socket.io/* {
|
||||
reverse_proxy localhost:3002
|
||||
}
|
||||
}' | sudo tee /etc/caddy/Caddyfile
|
||||
|
||||
sudo systemctl restart caddy
|
||||
```
|
||||
|
||||
Richten Sie den DNS A-Eintrag Ihrer Domain auf die IP-Adresse Ihres Servers.
|
||||
|
||||
## Kubernetes (EKS, AKS, GKE)
|
||||
|
||||
Siehe den [Kubernetes-Leitfaden](/self-hosting/kubernetes) für Helm-Deployment auf verwaltetem Kubernetes.
|
||||
|
||||
## Verwaltete Datenbank (Optional)
|
||||
|
||||
Für den Produktivbetrieb sollten Sie einen verwalteten PostgreSQL-Dienst verwenden:
|
||||
|
||||
- **AWS RDS** / **Azure Database** / **Cloud SQL** - Aktivieren Sie die pgvector-Erweiterung
|
||||
- **Supabase** / **Neon** - pgvector enthalten
|
||||
|
||||
Setzen Sie `DATABASE_URL` in Ihrer Umgebung:
|
||||
|
||||
```bash
|
||||
DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require"
|
||||
```
|
||||
@@ -1,113 +0,0 @@
|
||||
---
|
||||
title: Fehlerbehebung
|
||||
description: Häufige Probleme und Lösungen
|
||||
---
|
||||
|
||||
## Datenbankverbindung fehlgeschlagen
|
||||
|
||||
```bash
|
||||
# Check database is running
|
||||
docker compose ps db
|
||||
|
||||
# Test connection
|
||||
docker compose exec db psql -U postgres -c "SELECT 1"
|
||||
```
|
||||
|
||||
Überprüfen Sie das `DATABASE_URL` Format: `postgresql://user:pass@host:5432/database`
|
||||
|
||||
## Ollama-Modelle werden nicht angezeigt
|
||||
|
||||
In Docker ist `localhost` = der Container, nicht Ihr Host-Rechner.
|
||||
|
||||
```bash
|
||||
# For host-machine Ollama, use:
|
||||
OLLAMA_URL=http://host.docker.internal:11434 # macOS/Windows
|
||||
OLLAMA_URL=http://192.168.1.x:11434 # Linux (use actual IP)
|
||||
```
|
||||
|
||||
## WebSocket/Echtzeit funktioniert nicht
|
||||
|
||||
1. Prüfen Sie, ob `NEXT_PUBLIC_SOCKET_URL` mit Ihrer Domain übereinstimmt
|
||||
2. Überprüfen Sie, ob der Echtzeit-Dienst läuft: `docker compose ps realtime`
|
||||
3. Stellen Sie sicher, dass der Reverse-Proxy WebSocket-Upgrades weiterleitet (siehe [Docker-Anleitung](/self-hosting/docker))
|
||||
|
||||
## 502 Bad Gateway
|
||||
|
||||
```bash
|
||||
# Check app is running
|
||||
docker compose ps simstudio
|
||||
docker compose logs simstudio
|
||||
|
||||
# Common causes: out of memory, database not ready
|
||||
```
|
||||
|
||||
## Migrationsfehler
|
||||
|
||||
```bash
|
||||
# View migration logs
|
||||
docker compose logs migrations
|
||||
|
||||
# Run manually
|
||||
docker compose exec simstudio bun run db:migrate
|
||||
```
|
||||
|
||||
## pgvector nicht gefunden
|
||||
|
||||
Verwenden Sie das richtige PostgreSQL-Image:
|
||||
|
||||
```yaml
|
||||
image: pgvector/pgvector:pg17 # NOT postgres:17
|
||||
```
|
||||
|
||||
## Zertifikatsfehler (CERT_HAS_EXPIRED)
|
||||
|
||||
Wenn Sie SSL-Zertifikatsfehler beim Aufrufen externer APIs sehen:
|
||||
|
||||
```bash
|
||||
# Update CA certificates in container
|
||||
docker compose exec simstudio apt-get update && apt-get install -y ca-certificates
|
||||
|
||||
# Or set in environment (not recommended for production)
|
||||
NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||
```
|
||||
|
||||
## Leere Seite nach dem Login
|
||||
|
||||
1. Überprüfen Sie die Browser-Konsole auf Fehler
|
||||
2. Stellen Sie sicher, dass `NEXT_PUBLIC_APP_URL` mit Ihrer tatsächlichen Domain übereinstimmt
|
||||
3. Löschen Sie Browser-Cookies und lokalen Speicher
|
||||
4. Prüfen Sie, ob alle Dienste laufen: `docker compose ps`
|
||||
|
||||
## Windows-spezifische Probleme
|
||||
|
||||
**Turbopack-Fehler unter Windows:**
|
||||
|
||||
```bash
|
||||
# Use WSL2 for better compatibility
|
||||
wsl --install
|
||||
|
||||
# Or disable Turbopack in package.json
|
||||
# Change "next dev --turbopack" to "next dev"
|
||||
```
|
||||
|
||||
**Zeilenende-Probleme:**
|
||||
|
||||
```bash
|
||||
# Configure git to use LF
|
||||
git config --global core.autocrlf input
|
||||
```
|
||||
|
||||
## Logs anzeigen
|
||||
|
||||
```bash
|
||||
# All services
|
||||
docker compose logs -f
|
||||
|
||||
# Specific service
|
||||
docker compose logs -f simstudio
|
||||
```
|
||||
|
||||
## Hilfe erhalten
|
||||
|
||||
- [GitHub Issues](https://github.com/simstudioai/sim/issues)
|
||||
- [Discord](https://discord.gg/Hr4UWYEcTT)
|
||||
@@ -142,11 +142,10 @@ Erhalte die Top-Seiten einer Zieldomain, sortiert nach organischem Traffic. Lief
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `target` | string | Ja | Die zu analysierende Zieldomäne |
|
||||
| `country` | string | Nein | Ländercode für Verkehrsdaten \(z.B. us, gb, de\). Standard: us |
|
||||
| `mode` | string | Nein | Analysemodus: domain \(gesamte Domäne\), prefix \(URL-Präfix\), subdomains \(alle Subdomänen einschließen\) |
|
||||
| `mode` | string | Nein | Analysemodus: domain \(gesamte Domain\), prefix \(URL-Präfix\), subdomains \(alle Subdomains einschließen\) |
|
||||
| `date` | string | Nein | Datum für historische Daten im Format JJJJ-MM-TT \(standardmäßig heute\) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 100\) |
|
||||
| `offset` | number | Nein | Anzahl der zu überspringenden Ergebnisse für Paginierung |
|
||||
| `select` | string | Nein | Kommagetrennte Liste der zurückzugebenden Felder \(z.B. url,traffic,keywords,top_keyword,value\). Standard: url,traffic,keywords,top_keyword,value |
|
||||
| `apiKey` | string | Ja | Ahrefs API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -51,9 +51,10 @@ Führe einen APIFY-Aktor synchron aus und erhalte Ergebnisse (maximal 5 Minuten)
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Actor-Lauf erfolgreich war |
|
||||
| `runId` | string | APIFY-Lauf-ID |
|
||||
| `status` | string | Laufstatus \(SUCCEEDED, FAILED, usw.\) |
|
||||
| `success` | boolean | Ob die Aktor-Ausführung erfolgreich war |
|
||||
| `runId` | string | APIFY-Ausführungs-ID |
|
||||
| `status` | string | Ausführungsstatus \(SUCCEEDED, FAILED, usw.\) |
|
||||
| `datasetId` | string | Dataset-ID mit Ergebnissen |
|
||||
| `items` | array | Dataset-Elemente \(falls abgeschlossen\) |
|
||||
|
||||
### `apify_run_actor_async`
|
||||
|
||||
@@ -34,14 +34,7 @@ Eine einzelne Aufgabe anhand der GID abrufen oder mehrere Aufgaben mit Filtern e
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `gid` | string | Global eindeutige Kennung der Aufgabe |
|
||||
| `resource_type` | string | Ressourcentyp \(task\) |
|
||||
| `resource_subtype` | string | Ressourcen-Subtyp |
|
||||
| `name` | string | Aufgabenname |
|
||||
| `notes` | string | Aufgabennotizen oder -beschreibung |
|
||||
| `completed` | boolean | Ob die Aufgabe abgeschlossen ist |
|
||||
| `assignee` | object | Details zum Zugewiesenen |
|
||||
| `output` | object | Details einer einzelnen Aufgabe oder Array von Aufgaben, abhängig davon, ob taskGid angegeben wurde |
|
||||
|
||||
### `asana_create_task`
|
||||
|
||||
@@ -61,14 +54,8 @@ Eine neue Aufgabe in Asana erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `gid` | string | Global eindeutige Kennung der Aufgabe |
|
||||
| `name` | string | Aufgabenname |
|
||||
| `notes` | string | Aufgabennotizen oder -beschreibung |
|
||||
| `completed` | boolean | Ob die Aufgabe abgeschlossen ist |
|
||||
| `created_at` | string | Zeitstempel der Aufgabenerstellung |
|
||||
| `permalink_url` | string | URL zur Aufgabe in Asana |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Details der erstellten Aufgabe mit Zeitstempel, GID, Name, Notizen und Permalink |
|
||||
|
||||
### `asana_update_task`
|
||||
|
||||
@@ -90,12 +77,7 @@ Eine bestehende Aufgabe in Asana aktualisieren
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `gid` | string | Global eindeutige Kennung der Aufgabe |
|
||||
| `name` | string | Aufgabenname |
|
||||
| `notes` | string | Aufgabennotizen oder -beschreibung |
|
||||
| `completed` | boolean | Ob die Aufgabe abgeschlossen ist |
|
||||
| `modified_at` | string | Zeitstempel der letzten Änderung der Aufgabe |
|
||||
| `output` | object | Aktualisierte Aufgabendetails mit Zeitstempel, GID, Name, Notizen und Änderungszeitstempel |
|
||||
|
||||
### `asana_get_projects`
|
||||
|
||||
@@ -112,8 +94,7 @@ Alle Projekte aus einem Asana-Workspace abrufen
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `projects` | array | Array von Projekten |
|
||||
| `output` | object | Liste der Projekte mit ihrer GID, Name und Ressourcentyp |
|
||||
|
||||
### `asana_search_tasks`
|
||||
|
||||
@@ -134,8 +115,7 @@ Nach Aufgaben in einem Asana-Workspace suchen
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `tasks` | array | Array von passenden Aufgaben |
|
||||
| `output` | object | Liste der Aufgaben, die den Suchkriterien entsprechen |
|
||||
|
||||
### `asana_add_comment`
|
||||
|
||||
@@ -153,11 +133,7 @@ Einen Kommentar (Story) zu einer Asana-Aufgabe hinzufügen
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `ts` | string | Zeitstempel der Antwort |
|
||||
| `gid` | string | Global eindeutige Kennung des Kommentars |
|
||||
| `text` | string | Textinhalt des Kommentars |
|
||||
| `created_at` | string | Erstellungszeitstempel des Kommentars |
|
||||
| `created_by` | object | Details zum Autor des Kommentars |
|
||||
| `output` | object | Kommentardetails einschließlich gid, Text, Erstellungszeitstempel und Autor |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -221,36 +221,9 @@ Löscht einen Kommentar von einer Confluence-Seite.
|
||||
| `commentId` | string | Gelöschte Kommentar-ID |
|
||||
| `deleted` | boolean | Löschstatus |
|
||||
|
||||
### `confluence_upload_attachment`
|
||||
|
||||
Laden Sie eine Datei als Anhang zu einer Confluence-Seite hoch.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
|
||||
| `pageId` | string | Ja | Confluence-Seiten-ID, an die die Datei angehängt werden soll |
|
||||
| `file` | file | Ja | Die als Anhang hochzuladende Datei |
|
||||
| `fileName` | string | Nein | Optionaler benutzerdefinierter Dateiname für den Anhang |
|
||||
| `comment` | string | Nein | Optionaler Kommentar zum Anhang |
|
||||
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ts` | string | Zeitstempel des Uploads |
|
||||
| `attachmentId` | string | Hochgeladene Anhangs-ID |
|
||||
| `title` | string | Dateiname des Anhangs |
|
||||
| `fileSize` | number | Dateigröße in Bytes |
|
||||
| `mediaType` | string | MIME-Typ des Anhangs |
|
||||
| `downloadUrl` | string | Download-URL für den Anhang |
|
||||
| `pageId` | string | Seiten-ID, zu der der Anhang hinzugefügt wurde |
|
||||
|
||||
### `confluence_list_attachments`
|
||||
|
||||
Listen Sie alle Anhänge einer Confluence-Seite auf.
|
||||
Listet alle Anhänge einer Confluence-Seite auf.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -270,7 +243,7 @@ Listen Sie alle Anhänge einer Confluence-Seite auf.
|
||||
|
||||
### `confluence_delete_attachment`
|
||||
|
||||
Löschen eines Anhangs von einer Confluence-Seite (wird in den Papierkorb verschoben).
|
||||
Löscht einen Anhang von einer Confluence-Seite (wird in den Papierkorb verschoben).
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -290,7 +263,7 @@ Löschen eines Anhangs von einer Confluence-Seite (wird in den Papierkorb versch
|
||||
|
||||
### `confluence_list_labels`
|
||||
|
||||
Listet alle Labels einer Confluence-Seite auf.
|
||||
Alle Labels einer Confluence-Seite auflisten.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -309,7 +282,7 @@ Listet alle Labels einer Confluence-Seite auf.
|
||||
|
||||
### `confluence_get_space`
|
||||
|
||||
Ruft Details zu einem bestimmten Confluence-Space ab.
|
||||
Details zu einem bestimmten Confluence-Space abrufen.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -333,7 +306,7 @@ Ruft Details zu einem bestimmten Confluence-Space ab.
|
||||
|
||||
### `confluence_list_spaces`
|
||||
|
||||
Listet alle Confluence-Spaces auf, auf die der Benutzer zugreifen kann.
|
||||
Alle für den Benutzer zugänglichen Confluence-Spaces auflisten.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
---
|
||||
title: Cursor
|
||||
description: Starten und verwalten Sie Cursor Cloud-Agenten zur Arbeit an
|
||||
GitHub-Repositories
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="cursor"
|
||||
color="#1E1E1E"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Cursor](https://www.cursor.so/) ist eine KI-IDE und cloudbasierte Plattform, mit der Sie leistungsstarke KI-Agenten starten und verwalten können, die direkt mit Ihren GitHub-Repositories arbeiten können. Cursor-Agenten können Entwicklungsaufgaben automatisieren, die Produktivität Ihres Teams steigern und mit Ihnen zusammenarbeiten, indem sie Codeänderungen vornehmen, auf natürlichsprachliche Anweisungen reagieren und einen Gesprächsverlauf über ihre Aktivitäten führen.
|
||||
|
||||
Mit Cursor können Sie:
|
||||
|
||||
- **Cloud-Agenten für Codebasen starten**: Erstellen Sie sofort neue KI-Agenten, die in der Cloud an Ihren Repositories arbeiten
|
||||
- **Codierungsaufgaben mit natürlicher Sprache delegieren**: Leiten Sie Agenten mit schriftlichen Anweisungen, Änderungen und Klarstellungen an
|
||||
- **Fortschritt und Ergebnisse überwachen**: Rufen Sie den Agentenstatus ab, sehen Sie detaillierte Ergebnisse und prüfen Sie aktuelle oder abgeschlossene Aufgaben
|
||||
- **Zugriff auf den vollständigen Gesprächsverlauf**: Überprüfen Sie alle Eingabeaufforderungen und KI-Antworten für Transparenz und Nachvollziehbarkeit
|
||||
- **Steuerung und Verwaltung des Agenten-Lebenszyklus**: Listen Sie aktive Agenten auf, beenden Sie Agenten und verwalten Sie API-basierte Agentenstarts und Nachverfolgungen
|
||||
|
||||
In Sim ermöglicht die Cursor-Integration Ihren Agenten und Workflows, programmatisch mit Cursor-Cloud-Agenten zu interagieren. Das bedeutet, Sie können Sim verwenden, um:
|
||||
|
||||
- Alle Cloud-Agenten auflisten und ihren aktuellen Status durchsuchen (`cursor_list_agents`)
|
||||
- Aktuellen Status und Ausgaben für jeden Agenten abrufen (`cursor_get_agent`)
|
||||
- Den vollständigen Gesprächsverlauf für jeden Codierungsagenten anzeigen (`cursor_get_conversation`)
|
||||
- Nachfolgende Anweisungen oder neue Eingabeaufforderungen zu einem laufenden Agenten hinzufügen
|
||||
- Agenten nach Bedarf verwalten und beenden
|
||||
|
||||
Diese Integration hilft Ihnen, die flexible Intelligenz von Sim-Agenten mit den leistungsstarken Automatisierungsfunktionen von Cursor zu kombinieren, wodurch es möglich wird, KI-gesteuerte Entwicklung über Ihre Projekte hinweg zu skalieren.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Gebrauchsanweisung
|
||||
|
||||
Interagieren Sie mit der Cursor Cloud Agents API, um KI-Agenten zu starten, die an Ihren GitHub-Repositories arbeiten können. Unterstützt das Starten von Agenten, das Hinzufügen von Folgeanweisungen, die Statusprüfung, die Anzeige von Konversationen und die Verwaltung des Agenten-Lebenszyklus.
|
||||
|
||||
## Tools
|
||||
|
||||
### `cursor_list_agents`
|
||||
|
||||
Listet alle Cloud-Agenten für den authentifizierten Benutzer mit optionaler Paginierung auf.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `limit` | number | Nein | Anzahl der zurückzugebenden Agenten \(Standard: 20, max: 100\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor aus der vorherigen Antwort |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare Liste der Agenten |
|
||||
| `metadata` | object | Metadaten der Agentenliste |
|
||||
|
||||
### `cursor_get_agent`
|
||||
|
||||
Ruft den aktuellen Status und die Ergebnisse eines Cloud-Agenten ab.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `agentId` | string | Ja | Eindeutige Kennung für den Cloud-Agenten \(z.B. bc_abc123\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare Agentendetails |
|
||||
| `metadata` | object | Agenten-Metadaten |
|
||||
|
||||
### `cursor_get_conversation`
|
||||
|
||||
Ruft den Konversationsverlauf eines Cloud-Agenten ab, einschließlich aller Benutzeraufforderungen und Assistentenantworten.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `agentId` | string | Ja | Eindeutige Kennung für den Cloud-Agenten \(z.B. bc_abc123\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbarer Konversationsverlauf |
|
||||
| `metadata` | object | Konversations-Metadaten |
|
||||
|
||||
### `cursor_launch_agent`
|
||||
|
||||
Starten Sie einen neuen Cloud-Agenten, um an einem GitHub-Repository mit den angegebenen Anweisungen zu arbeiten.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `repository` | string | Ja | GitHub-Repository-URL \(z.B. https://github.com/your-org/your-repo\) |
|
||||
| `ref` | string | Nein | Branch, Tag oder Commit, von dem aus gearbeitet werden soll \(standardmäßig der Hauptbranch\) |
|
||||
| `promptText` | string | Ja | Der Anweisungstext für den Agenten |
|
||||
| `promptImages` | string | Nein | JSON-Array von Bildobjekten mit Base64-Daten und Abmessungen |
|
||||
| `model` | string | Nein | Zu verwendendes Modell \(leer lassen für automatische Auswahl\) |
|
||||
| `branchName` | string | Nein | Benutzerdefinierter Branch-Name für den Agenten |
|
||||
| `autoCreatePr` | boolean | Nein | Automatisches Erstellen eines PR, wenn der Agent fertig ist |
|
||||
| `openAsCursorGithubApp` | boolean | Nein | Öffnen des PR als Cursor GitHub App |
|
||||
| `skipReviewerRequest` | boolean | Nein | Überspringen der Anfrage nach Prüfern für den PR |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung mit Agenten-Details |
|
||||
| `metadata` | object | Metadaten zum Startergebnis |
|
||||
|
||||
### `cursor_add_followup`
|
||||
|
||||
Fügen Sie einem bestehenden Cloud-Agenten eine Folgeanweisung hinzu.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `agentId` | string | Ja | Eindeutige Kennung für den Cloud-Agenten \(z.B. bc_abc123\) |
|
||||
| `followupPromptText` | string | Ja | Der Folgeanweisungstext für den Agenten |
|
||||
| `promptImages` | string | Nein | JSON-Array von Bildobjekten mit Base64-Daten und Abmessungen \(max. 5\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | Ergebnis-Metadaten |
|
||||
|
||||
### `cursor_stop_agent`
|
||||
|
||||
Stoppt einen laufenden Cloud-Agenten. Dies pausiert den Agenten, ohne ihn zu löschen.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `agentId` | string | Ja | Eindeutige Kennung für den Cloud-Agenten \(z.B. bc_abc123\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | Ergebnis-Metadaten |
|
||||
|
||||
### `cursor_delete_agent`
|
||||
|
||||
Löscht einen Cloud-Agenten dauerhaft. Diese Aktion kann nicht rückgängig gemacht werden.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Ja | Cursor API-Schlüssel |
|
||||
| `agentId` | string | Ja | Eindeutige Kennung für den Cloud-Agenten \(z.B. bc_abc123\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | Ergebnis-Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `cursor`
|
||||
@@ -1,63 +0,0 @@
|
||||
---
|
||||
title: DuckDuckGo
|
||||
description: Suche mit DuckDuckGo
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="duckduckgo"
|
||||
color="#FFFFFF"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[DuckDuckGo](https://duckduckgo.com/) ist eine datenschutzorientierte Websuchmaschine, die sofortige Antworten, Zusammenfassungen, verwandte Themen und mehr liefert – ohne dich oder deine Suchen zu verfolgen. DuckDuckGo macht es einfach, Informationen ohne Benutzerprofilierung oder zielgerichtete Werbung zu finden.
|
||||
|
||||
Mit DuckDuckGo in Sim kannst du:
|
||||
|
||||
- **Im Web suchen**: Finde sofort Antworten, Fakten und Übersichten für eine bestimmte Suchanfrage
|
||||
- **Direkte Antworten erhalten**: Erhalte spezifische Antworten für Berechnungen, Umrechnungen oder Faktenfragen
|
||||
- **Auf Zusammenfassungen zugreifen**: Erhalte kurze Zusammenfassungen oder Beschreibungen für deine Suchthemen
|
||||
- **Verwandte Themen abrufen**: Entdecke Links und Referenzen, die für deine Suche relevant sind
|
||||
- **Ausgabe filtern**: Optional HTML entfernen oder Begriffsklärungen überspringen für sauberere Ergebnisse
|
||||
|
||||
Diese Funktionen ermöglichen es deinen Sim-Agenten, den Zugriff auf aktuelles Webwissen zu automatisieren – vom Auffinden von Fakten in einem Workflow bis hin zur Anreicherung von Dokumenten und Analysen mit aktuellen Informationen. Da DuckDuckGos Instant Answers API offen ist und keinen API-Schlüssel erfordert, lässt sie sich einfach und datenschutzsicher in deine automatisierten Geschäftsprozesse integrieren.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Durchsuche das Web mit der DuckDuckGo Instant Answers API. Liefert sofortige Antworten, Zusammenfassungen, verwandte Themen und mehr. Kostenlos nutzbar ohne API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `duckduckgo_search`
|
||||
|
||||
Durchsuche das Web mit der DuckDuckGo Instant Answers API. Liefert sofortige Antworten, Zusammenfassungen und verwandte Themen für deine Anfrage. Kostenlos nutzbar ohne API-Schlüssel.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Ja | Die auszuführende Suchanfrage |
|
||||
| `noHtml` | boolean | Nein | HTML aus Text in Ergebnissen entfernen \(Standard: true\) |
|
||||
| `skipDisambig` | boolean | Nein | Begriffsklärungsergebnisse überspringen \(Standard: false\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `heading` | string | Die Überschrift/der Titel der Sofortantwort |
|
||||
| `abstract` | string | Eine kurze Zusammenfassung des Themas |
|
||||
| `abstractText` | string | Einfache Textversion der Zusammenfassung |
|
||||
| `abstractSource` | string | Die Quelle der Zusammenfassung \(z.B. Wikipedia\) |
|
||||
| `abstractURL` | string | URL zur Quelle der Zusammenfassung |
|
||||
| `image` | string | URL zu einem Bild zum Thema |
|
||||
| `answer` | string | Direkte Antwort, falls verfügbar \(z.B. für Berechnungen\) |
|
||||
| `answerType` | string | Typ der Antwort \(z.B. calc, ip, usw.\) |
|
||||
| `type` | string | Antworttyp: A \(Artikel\), D \(Begriffsklärung\), C \(Kategorie\), N \(Name\), E \(Exklusiv\) |
|
||||
| `relatedTopics` | array | Array verwandter Themen mit URLs und Beschreibungen |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `duckduckgo`
|
||||
@@ -46,11 +46,11 @@ Durchsuchen Sie das Web mit Exa AI. Liefert relevante Suchergebnisse mit Titeln,
|
||||
| `type` | string | Nein | Suchtyp: neural, keyword, auto oder fast \(Standard: auto\) |
|
||||
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domains, die in den Ergebnissen enthalten sein sollen |
|
||||
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domains, die aus den Ergebnissen ausgeschlossen werden sollen |
|
||||
| `category` | string | Nein | Nach Kategorie filtern: company, research paper, news, pdf, github, tweet, personal site, linkedin profile, financial report |
|
||||
| `category` | string | Nein | Nach Kategorie filtern: company, research_paper, news_article, pdf, github, tweet, movie, song, personal_site |
|
||||
| `text` | boolean | Nein | Vollständigen Textinhalt in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `summary` | boolean | Nein | KI-generierte Zusammenfassungen in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: never \(Standard\), fallback, always oder preferred \(immer livecrawl versuchen, bei Fehlschlag auf Cache zurückgreifen\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
|
||||
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
@@ -69,11 +69,11 @@ Ruft den Inhalt von Webseiten mit Exa AI ab. Gibt den Titel, Textinhalt und opti
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `urls` | string | Ja | Kommagetrennte Liste von URLs, von denen Inhalte abgerufen werden sollen |
|
||||
| `text` | boolean | Nein | Wenn true, gibt den vollständigen Seitentext mit Standardeinstellungen zurück. Wenn false, deaktiviert die Textrückgabe. |
|
||||
| `summaryQuery` | string | Nein | Anfrage zur Steuerung der Zusammenfassungserstellung |
|
||||
| `subpages` | number | Nein | Anzahl der Unterseiten, die von den bereitgestellten URLs gecrawlt werden sollen |
|
||||
| `summaryQuery` | string | Nein | Abfrage zur Steuerung der Zusammenfassungserstellung |
|
||||
| `subpages` | number | Nein | Anzahl der Unterseiten, die von den angegebenen URLs gecrawlt werden sollen |
|
||||
| `subpageTarget` | string | Nein | Kommagetrennte Schlüsselwörter zur Zielausrichtung auf bestimmte Unterseiten \(z.B. "docs,tutorial,about"\) |
|
||||
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: never \(Standard\), fallback, always oder preferred \(immer livecrawl versuchen, bei Fehlschlag auf Cache zurückgreifen\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
|
||||
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
@@ -95,10 +95,11 @@ Finde Webseiten, die einer bestimmten URL ähnlich sind, mit Exa AI. Gibt eine L
|
||||
| `text` | boolean | Nein | Ob der vollständige Text der ähnlichen Seiten eingeschlossen werden soll |
|
||||
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domains, die in den Ergebnissen enthalten sein sollen |
|
||||
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domains, die aus den Ergebnissen ausgeschlossen werden sollen |
|
||||
| `excludeSourceDomain` | boolean | Nein | Die Quell-Domain aus den Ergebnissen ausschließen \(Standard: false\) |
|
||||
| `excludeSourceDomain` | boolean | Nein | Quell-Domain aus Ergebnissen ausschließen \(Standard: false\) |
|
||||
| `category` | string | Nein | Nach Kategorie filtern: company, research_paper, news_article, pdf, github, tweet, movie, song, personal_site |
|
||||
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `summary` | boolean | Nein | KI-generierte Zusammenfassungen in Ergebnissen einschließen \(Standard: false\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: never \(Standard\), fallback, always oder preferred \(versucht immer livecrawl, fällt auf Cache zurück, wenn es fehlschlägt\) |
|
||||
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
|
||||
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -144,7 +144,8 @@ Extrahieren Sie strukturierte Daten aus vollständigen Webseiten mithilfe von na
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Extraktionsvorgang erfolgreich war |
|
||||
| `data` | object | Extrahierte strukturierte Daten gemäß dem Schema oder der Eingabeaufforderung |
|
||||
| `data` | object | Extrahierte strukturierte Daten gemäß dem Schema oder Prompt |
|
||||
| `sources` | array | Datenquellen \(nur wenn showSources aktiviert ist\) |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -38,14 +38,14 @@ Erstellt ein neues Ereignis in Google Kalender
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID (standardmäßig primary) |
|
||||
| `calendarId` | string | Nein | Kalender-ID \(standardmäßig primary\) |
|
||||
| `summary` | string | Ja | Ereignistitel/Zusammenfassung |
|
||||
| `description` | string | Nein | Ereignisbeschreibung |
|
||||
| `location` | string | Nein | Ereignisort |
|
||||
| `startDateTime` | string | Ja | Startdatum und -uhrzeit. MUSS Zeitzonen-Offset enthalten (z.B. 2025-06-03T10:00:00-08:00) ODER timeZone-Parameter bereitstellen |
|
||||
| `endDateTime` | string | Ja | Enddatum und -uhrzeit. MUSS Zeitzonen-Offset enthalten (z.B. 2025-06-03T11:00:00-08:00) ODER timeZone-Parameter bereitstellen |
|
||||
| `timeZone` | string | Nein | Zeitzone (z.B. America/Los_Angeles). Erforderlich, wenn datetime keinen Offset enthält. Standardmäßig America/Los_Angeles, wenn nicht angegeben. |
|
||||
| `attendees` | array | Nein | Array von E-Mail-Adressen der Teilnehmer |
|
||||
| `startDateTime` | string | Ja | Startdatum und -uhrzeit \(RFC3339-Format, z.B. 2025-06-03T10:00:00-08:00\) |
|
||||
| `endDateTime` | string | Ja | Enddatum und -uhrzeit \(RFC3339-Format, z.B. 2025-06-03T11:00:00-08:00\) |
|
||||
| `timeZone` | string | Nein | Zeitzone \(z.B. America/Los_Angeles\) |
|
||||
| `attendees` | array | Nein | Array mit E-Mail-Adressen der Teilnehmer |
|
||||
| `sendUpdates` | string | Nein | Wie Updates an Teilnehmer gesendet werden: all, externalOnly oder none |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -108,10 +108,10 @@ Dateien und Ordner in Google Drive auflisten
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
|
||||
| `folderSelector` | string | Nein | Den Ordner auswählen, aus dem Dateien aufgelistet werden sollen |
|
||||
| `folderId` | string | Nein | Die ID des Ordners, aus dem Dateien aufgelistet werden sollen (interne Verwendung) |
|
||||
| `query` | string | Nein | Suchbegriff, um Dateien nach Namen zu filtern (z.B. "budget" findet Dateien mit "budget" im Namen). Verwenden Sie hier KEINE Google Drive-Abfragesyntax - geben Sie einfach einen einfachen Suchbegriff ein. |
|
||||
| `pageSize` | number | Nein | Die maximale Anzahl der zurückzugebenden Dateien (Standard: 100) |
|
||||
| `query` | string | Nein | Eine Abfrage zum Filtern der Dateien |
|
||||
| `pageSize` | number | Nein | Die Anzahl der zurückzugebenden Dateien |
|
||||
| `pageToken` | string | Nein | Das Seitentoken für die Paginierung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -1,219 +0,0 @@
|
||||
---
|
||||
title: Google Groups
|
||||
description: Google Workspace-Gruppen und deren Mitglieder verwalten
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_groups"
|
||||
color="#E8F0FE"
|
||||
/>
|
||||
|
||||
## Gebrauchsanweisung
|
||||
|
||||
Verbinden Sie sich mit Google Workspace, um Gruppen und deren Mitglieder mit der Admin SDK Directory API zu erstellen, zu aktualisieren und zu verwalten.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_groups_list_groups`
|
||||
|
||||
Alle Gruppen in einer Google Workspace-Domain auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `customer` | string | Nein | Kunden-ID oder "my_customer" für die Domain des authentifizierten Benutzers |
|
||||
| `domain` | string | Nein | Domainname zum Filtern von Gruppen |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(1-200\) |
|
||||
| `pageToken` | string | Nein | Token für Paginierung |
|
||||
| `query` | string | Nein | Suchabfrage zum Filtern von Gruppen \(z.B. "email:admin*"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `groups` | json | Array von Gruppenobjekten |
|
||||
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite |
|
||||
|
||||
### `google_groups_get_group`
|
||||
|
||||
Details einer bestimmten Google-Gruppe nach E-Mail oder Gruppen-ID abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `group` | json | Gruppenobjekt |
|
||||
|
||||
### `google_groups_create_group`
|
||||
|
||||
Eine neue Google-Gruppe in der Domain erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `email` | string | Ja | E-Mail-Adresse für die neue Gruppe (z.B. team@yourdomain.com) |
|
||||
| `name` | string | Ja | Anzeigename für die Gruppe |
|
||||
| `description` | string | Nein | Beschreibung der Gruppe |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `group` | json | Erstelltes Gruppenobjekt |
|
||||
|
||||
### `google_groups_update_group`
|
||||
|
||||
Eine bestehende Google-Gruppe aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `name` | string | Nein | Neuer Anzeigename für die Gruppe |
|
||||
| `description` | string | Nein | Neue Beschreibung für die Gruppe |
|
||||
| `email` | string | Nein | Neue E-Mail-Adresse für die Gruppe |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `group` | json | Aktualisiertes Gruppenobjekt |
|
||||
|
||||
### `google_groups_delete_group`
|
||||
|
||||
Eine Google-Gruppe löschen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID zum Löschen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgsmeldung |
|
||||
|
||||
### `google_groups_list_members`
|
||||
|
||||
Alle Mitglieder einer Google-Gruppe auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(1-200\) |
|
||||
| `pageToken` | string | Nein | Token für Seitenumbruch |
|
||||
| `roles` | string | Nein | Nach Rollen filtern \(durch Komma getrennt: OWNER, MANAGER, MEMBER\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `members` | json | Array von Mitgliederobjekten |
|
||||
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite |
|
||||
|
||||
### `google_groups_get_member`
|
||||
|
||||
Details eines bestimmten Mitglieds in einer Google-Gruppe abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `memberKey` | string | Ja | E-Mail-Adresse des Mitglieds oder eindeutige Mitglieds-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `member` | json | Mitgliederobjekt |
|
||||
|
||||
### `google_groups_add_member`
|
||||
|
||||
Ein neues Mitglied zu einer Google-Gruppe hinzufügen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `email` | string | Ja | E-Mail-Adresse des hinzuzufügenden Mitglieds |
|
||||
| `role` | string | Nein | Rolle für das Mitglied \(MEMBER, MANAGER oder OWNER\). Standardmäßig MEMBER. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `member` | json | Hinzugefügtes Mitgliederobjekt |
|
||||
|
||||
### `google_groups_remove_member`
|
||||
|
||||
Ein Mitglied aus einer Google-Gruppe entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `memberKey` | string | Ja | E-Mail-Adresse oder eindeutige ID des zu entfernenden Mitglieds |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgsmeldung |
|
||||
|
||||
### `google_groups_update_member`
|
||||
|
||||
Ein Mitglied aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `memberKey` | string | Ja | E-Mail-Adresse des Mitglieds oder eindeutige Mitglieds-ID |
|
||||
| `role` | string | Ja | Neue Rolle für das Mitglied \(MEMBER, MANAGER oder OWNER\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `member` | json | Aktualisiertes Mitgliederobjekt |
|
||||
|
||||
### `google_groups_has_member`
|
||||
|
||||
Prüfen, ob ein Benutzer Mitglied einer Google-Gruppe ist
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `groupKey` | string | Ja | E-Mail-Adresse der Gruppe oder eindeutige Gruppen-ID |
|
||||
| `memberKey` | string | Ja | Zu prüfende E-Mail-Adresse des Mitglieds oder eindeutige Mitglieds-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `isMember` | boolean | Gibt an, ob der Benutzer ein Mitglied der Gruppe ist |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_groups`
|
||||
@@ -88,8 +88,8 @@ Daten aus einer Google Sheets-Tabelle lesen
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle \(zu finden in der URL: docs.google.com/spreadsheets/d/\{SPREADSHEET_ID\}/edit\). |
|
||||
| `range` | string | Nein | Der A1-Notationsbereich zum Lesen \(z.B. "Sheet1!A1:D10", "A1:B5"\). Standardmäßig wird das erste Tabellenblatt A1:Z1000 verwendet, wenn nicht angegeben. |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, aus der gelesen werden soll |
|
||||
| `range` | string | Nein | Der Zellbereich, aus dem gelesen werden soll |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -106,9 +106,9 @@ Daten in eine Google Sheets-Tabelle schreiben
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle |
|
||||
| `range` | string | Nein | Der A1-Notationsbereich, in den geschrieben werden soll \(z.B. "Sheet1!A1:D10", "A1:B5"\) |
|
||||
| `values` | array | Ja | Die zu schreibenden Daten als 2D-Array \(z.B. \[\["Name", "Alter"\], \["Alice", 30\], \["Bob", 25\]\]\) oder Array von Objekten. |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, in die geschrieben werden soll |
|
||||
| `range` | string | Nein | Der Zellbereich, in den geschrieben werden soll |
|
||||
| `values` | array | Ja | Die Daten, die in die Tabelle geschrieben werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der zu schreibenden Daten |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die geschriebenen Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
@@ -131,8 +131,8 @@ Daten in einer Google Sheets-Tabelle aktualisieren
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der zu aktualisierenden Tabelle |
|
||||
| `range` | string | Nein | Der A1-Notationsbereich, der aktualisiert werden soll \(z.B. "Sheet1!A1:D10", "A1:B5"\) |
|
||||
| `values` | array | Ja | Die zu aktualisierenden Daten als 2D-Array \(z.B. \[\["Name", "Alter"\], \["Alice", 30\]\]\) oder Array von Objekten. |
|
||||
| `range` | string | Nein | Der Bereich der zu aktualisierenden Zellen |
|
||||
| `values` | array | Ja | Die Daten, die in der Tabelle aktualisiert werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der zu aktualisierenden Daten |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die aktualisierten Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
@@ -155,10 +155,10 @@ Daten am Ende einer Google Sheets-Tabelle anhängen
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, an die angehängt werden soll |
|
||||
| `range` | string | Nein | Der A1-Notationsbereich, an den angehängt werden soll (z.B. "Sheet1", "Sheet1!A:D") |
|
||||
| `values` | array | Ja | Die anzuhängenden Daten als 2D-Array (z.B. [["Alice", 30], ["Bob", 25]]) oder Array von Objekten |
|
||||
| `range` | string | Nein | Der Bereich der Zellen, nach dem angehängt werden soll |
|
||||
| `values` | array | Ja | Die Daten, die an die Tabelle angehängt werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der anzuhängenden Daten |
|
||||
| `insertDataOption` | string | Nein | Wie die Daten eingefügt werden sollen (OVERWRITE oder INSERT_ROWS) |
|
||||
| `insertDataOption` | string | Nein | Wie die Daten eingefügt werden sollen \(OVERWRITE oder INSERT_ROWS\) |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die angehängten Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
---
|
||||
title: Google Slides
|
||||
description: Präsentationen lesen, schreiben und erstellen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_slides"
|
||||
color="#E0E0E0"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Slides](https://slides.google.com) ist eine dynamische cloudbasierte Präsentationsanwendung, mit der Benutzer in Echtzeit Präsentationen erstellen, bearbeiten, gemeinsam daran arbeiten und präsentieren können. Als Teil der Google-Produktivitätssuite bietet Google Slides eine flexible Plattform zum Gestalten ansprechender Präsentationen, zur Zusammenarbeit mit anderen und zum nahtlosen Teilen von Inhalten über die Cloud.
|
||||
|
||||
Erfahren Sie, wie Sie die Google Slides-Tools in Sim integrieren können, um Präsentationen mühelos als Teil Ihrer automatisierten Workflows zu verwalten. Mit Sim können Sie Google Slides-Präsentationen direkt über Ihre Agenten und automatisierten Prozesse lesen, schreiben, erstellen und aktualisieren, wodurch es einfach wird, aktuelle Informationen zu liefern, benutzerdefinierte Berichte zu generieren oder Marken-Präsentationen programmatisch zu erstellen.
|
||||
|
||||
Mit Google Slides können Sie:
|
||||
|
||||
- **Präsentationen erstellen und bearbeiten**: Gestalten Sie visuell ansprechende Folien mit Designs, Layouts und Multimedia-Inhalten
|
||||
- **In Echtzeit zusammenarbeiten**: Arbeiten Sie gleichzeitig mit Teammitgliedern, kommentieren Sie, weisen Sie Aufgaben zu und erhalten Sie Live-Feedback zu Präsentationen
|
||||
- **Überall präsentieren**: Zeigen Sie Präsentationen online oder offline an, teilen Sie Links oder veröffentlichen Sie im Web
|
||||
- **Bilder und umfangreiche Inhalte hinzufügen**: Fügen Sie Bilder, Grafiken, Diagramme und Videos ein, um Ihre Präsentationen ansprechend zu gestalten
|
||||
- **Mit anderen Diensten integrieren**: Verbinden Sie sich nahtlos mit Google Drive, Docs, Sheets und anderen Drittanbieter-Tools
|
||||
- **Von jedem Gerät aus zugreifen**: Nutzen Sie Google Slides auf Desktop-Computern, Laptops, Tablets und mobilen Geräten für maximale Flexibilität
|
||||
|
||||
In Sim ermöglicht die Google Slides-Integration Ihren Agenten, direkt programmatisch mit Präsentationsdateien zu interagieren. Automatisieren Sie Aufgaben wie das Lesen von Folieninhalten, das Einfügen neuer Folien oder Bilder, das Ersetzen von Text in einer gesamten Präsentation, das Erstellen neuer Präsentationen und das Abrufen von Folien-Miniaturansichten. Dies ermöglicht Ihnen, die Inhaltserstellung zu skalieren, Präsentationen aktuell zu halten und sie in automatisierte Dokumenten-Workflows einzubetten. Durch die Verbindung von Sim mit Google Slides ermöglichen Sie KI-gestütztes Präsentationsmanagement – so wird es einfach, Präsentationen ohne manuellen Aufwand zu generieren, zu aktualisieren oder Informationen daraus zu extrahieren.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Google Slides in den Workflow. Kann Präsentationen lesen, schreiben, erstellen, Text ersetzen, Folien hinzufügen, Bilder einfügen und Vorschaubilder abrufen.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_slides_read`
|
||||
|
||||
Inhalte aus einer Google Slides-Präsentation lesen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der zu lesenden Präsentation |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `slides` | json | Array von Folien mit ihren Inhalten |
|
||||
| `metadata` | json | Präsentationsmetadaten einschließlich ID, Titel und URL |
|
||||
|
||||
### `google_slides_write`
|
||||
|
||||
Inhalte in einer Google Slides-Präsentation schreiben oder aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der Präsentation, in die geschrieben werden soll |
|
||||
| `content` | string | Ja | Der Inhalt, der in die Folie geschrieben werden soll |
|
||||
| `slideIndex` | number | Nein | Der Index der Folie, in die geschrieben werden soll \(standardmäßig die erste Folie\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `updatedContent` | boolean | Gibt an, ob der Präsentationsinhalt erfolgreich aktualisiert wurde |
|
||||
| `metadata` | json | Aktualisierte Präsentationsmetadaten einschließlich ID, Titel und URL |
|
||||
|
||||
### `google_slides_create`
|
||||
|
||||
Eine neue Google Slides-Präsentation erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `title` | string | Ja | Der Titel der zu erstellenden Präsentation |
|
||||
| `content` | string | Nein | Der Inhalt, der zur ersten Folie hinzugefügt werden soll |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in dem die Präsentation erstellt werden soll |
|
||||
| `folderId` | string | Nein | Die ID des Ordners, in dem die Präsentation erstellt werden soll \(interne Verwendung\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `metadata` | json | Metadaten der erstellten Präsentation einschließlich ID, Titel und URL |
|
||||
|
||||
### `google_slides_replace_all_text`
|
||||
|
||||
Suchen und ersetzen aller Textvorkommen in einer Google Slides-Präsentation
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der Präsentation |
|
||||
| `findText` | string | Ja | Der zu suchende Text (z.B. \{\{placeholder\}\}) |
|
||||
| `replaceText` | string | Ja | Der Text, durch den ersetzt werden soll |
|
||||
| `matchCase` | boolean | Nein | Ob die Suche Groß-/Kleinschreibung berücksichtigen soll (Standard: true) |
|
||||
| `pageObjectIds` | string | Nein | Kommagetrennte Liste von Folienobjekt-IDs, um Ersetzungen auf bestimmte Folien zu beschränken (leer lassen für alle Folien) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `occurrencesChanged` | number | Anzahl der Textvorkommen, die ersetzt wurden |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Präsentations-ID und URL |
|
||||
|
||||
### `google_slides_add_slide`
|
||||
|
||||
Eine neue Folie mit einem bestimmten Layout zu einer Google Slides-Präsentation hinzufügen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der Präsentation |
|
||||
| `layout` | string | Nein | Das vordefinierte Layout für die Folie (BLANK, TITLE, TITLE_AND_BODY, TITLE_ONLY, SECTION_HEADER, usw.). Standard ist BLANK. |
|
||||
| `insertionIndex` | number | Nein | Der optionale nullbasierte Index, der angibt, wo die Folie eingefügt werden soll. Wenn nicht angegeben, wird die Folie am Ende hinzugefügt. |
|
||||
| `placeholderIdMappings` | string | Nein | JSON-Array von Platzhalter-Zuordnungen, um Platzhaltern benutzerdefinierte Objekt-IDs zuzuweisen. Format: \[\{"layoutPlaceholder":\{"type":"TITLE"\},"objectId":"custom_title_id"\}\] |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `slideId` | string | Die Objekt-ID der neu erstellten Folie |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Präsentations-ID, Layout und URL |
|
||||
|
||||
### `google_slides_add_image`
|
||||
|
||||
Ein Bild in eine bestimmte Folie einer Google Slides-Präsentation einfügen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der Präsentation |
|
||||
| `pageObjectId` | string | Ja | Die Objekt-ID der Folie/Seite, zu der das Bild hinzugefügt werden soll |
|
||||
| `imageUrl` | string | Ja | Die öffentlich zugängliche URL des Bildes \(muss PNG, JPEG oder GIF sein, max. 50MB\) |
|
||||
| `width` | number | Nein | Breite des Bildes in Punkten \(Standard: 300\) |
|
||||
| `height` | number | Nein | Höhe des Bildes in Punkten \(Standard: 200\) |
|
||||
| `positionX` | number | Nein | X-Position vom linken Rand in Punkten \(Standard: 100\) |
|
||||
| `positionY` | number | Nein | Y-Position vom oberen Rand in Punkten \(Standard: 100\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `imageId` | string | Die Objekt-ID des neu erstellten Bildes |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Präsentations-ID und Bild-URL |
|
||||
|
||||
### `google_slides_get_thumbnail`
|
||||
|
||||
Ein Vorschaubild einer bestimmten Folie in einer Google Slides-Präsentation generieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `presentationId` | string | Ja | Die ID der Präsentation |
|
||||
| `pageObjectId` | string | Ja | Die Objekt-ID der Folie/Seite, für die ein Thumbnail erstellt werden soll |
|
||||
| `thumbnailSize` | string | Nein | Die Größe des Thumbnails: SMALL \(200px\), MEDIUM \(800px\) oder LARGE \(1600px\). Standardmäßig MEDIUM. |
|
||||
| `mimeType` | string | Nein | Der MIME-Typ des Thumbnail-Bildes: PNG oder GIF. Standardmäßig PNG. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contentUrl` | string | URL zum Thumbnail-Bild \(gültig für 30 Minuten\) |
|
||||
| `width` | number | Breite des Thumbnails in Pixeln |
|
||||
| `height` | number | Höhe des Thumbnails in Pixeln |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Präsentations-ID und Seitenobjekt-ID |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_slides`
|
||||
@@ -35,7 +35,8 @@ Einen Export in einer Angelegenheit erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `export` | json | Erstelltes Export-Objekt |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters_export`
|
||||
|
||||
@@ -54,9 +55,8 @@ Exporte für eine Angelegenheit auflisten
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `exports` | json | Array von Export-Objekten |
|
||||
| `export` | json | Einzelnes Export-Objekt \(wenn exportId angegeben ist\) |
|
||||
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_download_export_file`
|
||||
|
||||
@@ -95,7 +95,8 @@ Eine Aufbewahrung in einer Angelegenheit erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `hold` | json | Erstelltes Hold-Objekt |
|
||||
| `output` | json | Vault-API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters_holds`
|
||||
|
||||
@@ -112,11 +113,10 @@ Aufbewahrungen für eine Angelegenheit auflisten
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `holds` | json | Array von Hold-Objekten |
|
||||
| `hold` | json | Einzelnes Hold-Objekt \(wenn holdId angegeben ist\) |
|
||||
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_create_matters`
|
||||
|
||||
@@ -131,9 +131,10 @@ Einen neuen Fall in Google Vault erstellen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `matter` | json | Erstelltes Matter-Objekt |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters`
|
||||
|
||||
@@ -149,11 +150,10 @@ Fälle auflisten oder einen bestimmten Fall abrufen, wenn matterId angegeben ist
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `matters` | json | Array von Matter-Objekten |
|
||||
| `matter` | json | Einzelnes Matter-Objekt \(wenn matterId angegeben ist\) |
|
||||
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ Eine Anmerkung auf einem Dashboard oder als globale Anmerkung erstellen
|
||||
| `organizationId` | string | Nein | Organisations-ID für Multi-Org-Grafana-Instanzen |
|
||||
| `text` | string | Ja | Der Textinhalt der Anmerkung |
|
||||
| `tags` | string | Nein | Kommagetrennte Liste von Tags |
|
||||
| `dashboardUid` | string | Ja | UID des Dashboards, zu dem die Anmerkung hinzugefügt werden soll |
|
||||
| `dashboardUid` | string | Nein | UID des Dashboards, zu dem die Anmerkung hinzugefügt werden soll \(optional für globale Anmerkungen\) |
|
||||
| `panelId` | number | Nein | ID des Panels, zu dem die Anmerkung hinzugefügt werden soll |
|
||||
| `time` | number | Nein | Startzeit in Epochenmillisekunden \(standardmäßig jetzt\) |
|
||||
| `timeEnd` | number | Nein | Endzeit in Epochenmillisekunden \(für Bereichsanmerkungen\) |
|
||||
@@ -346,11 +346,11 @@ Anmerkungen nach Zeitraum, Dashboard oder Tags abfragen
|
||||
| `organizationId` | string | Nein | Organisations-ID für Multi-Org-Grafana-Instanzen |
|
||||
| `from` | number | Nein | Startzeit in Epochenmillisekunden |
|
||||
| `to` | number | Nein | Endzeit in Epochenmillisekunden |
|
||||
| `dashboardUid` | string | Ja | Dashboard-UID, von der Anmerkungen abgefragt werden sollen |
|
||||
| `dashboardUid` | string | Nein | Nach Dashboard-UID filtern |
|
||||
| `panelId` | number | Nein | Nach Panel-ID filtern |
|
||||
| `tags` | string | Nein | Kommagetrennte Liste von Tags zum Filtern |
|
||||
| `tags` | string | Nein | Kommagetrennte Liste von Tags, nach denen gefiltert werden soll |
|
||||
| `type` | string | Nein | Nach Typ filtern \(alert oder annotation\) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Anmerkungen |
|
||||
| `limit` | number | Nein | Maximale Anzahl von zurückzugebenden Anmerkungen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -481,22 +481,12 @@ Einen neuen Ordner in Grafana erstellen
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `id` | number | Die numerische ID des erstellten Ordners |
|
||||
| `uid` | string | Die UID des erstellten Ordners |
|
||||
| `title` | string | Der Titel des erstellten Ordners |
|
||||
| `url` | string | Der URL-Pfad zum Ordner |
|
||||
| `hasAcl` | boolean | Ob der Ordner benutzerdefinierte ACL-Berechtigungen hat |
|
||||
| `canSave` | boolean | Ob der aktuelle Benutzer den Ordner speichern kann |
|
||||
| `canEdit` | boolean | Ob der aktuelle Benutzer den Ordner bearbeiten kann |
|
||||
| `canAdmin` | boolean | Ob der aktuelle Benutzer Administratorrechte für den Ordner hat |
|
||||
| `canDelete` | boolean | Ob der aktuelle Benutzer den Ordner löschen kann |
|
||||
| `createdBy` | string | Benutzername desjenigen, der den Ordner erstellt hat |
|
||||
| `created` | string | Zeitstempel, wann der Ordner erstellt wurde |
|
||||
| `updatedBy` | string | Benutzername desjenigen, der den Ordner zuletzt aktualisiert hat |
|
||||
| `updated` | string | Zeitstempel, wann der Ordner zuletzt aktualisiert wurde |
|
||||
| `version` | number | Versionsnummer des Ordners |
|
||||
|
||||
## Notizen
|
||||
|
||||
|
||||
@@ -46,11 +46,10 @@ Alle Benutzer vom HubSpot-Konto abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `users` | array | Array von HubSpot-Benutzerobjekten |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Benutzerdaten |
|
||||
|
||||
### `hubspot_list_contacts`
|
||||
|
||||
@@ -69,10 +68,8 @@ Alle Kontakte vom HubSpot-Konto mit Paginierungsunterstützung abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contacts` | array | Array von HubSpot-Kontaktobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Kontaktdaten |
|
||||
|
||||
### `hubspot_get_contact`
|
||||
|
||||
@@ -91,9 +88,8 @@ Einen einzelnen Kontakt anhand von ID oder E-Mail aus HubSpot abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contact` | object | HubSpot-Kontaktobjekt mit Eigenschaften |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Kontaktdaten |
|
||||
|
||||
### `hubspot_create_contact`
|
||||
|
||||
@@ -110,9 +106,8 @@ Erstellt einen neuen Kontakt in HubSpot. Erfordert mindestens eines der folgende
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contact` | object | Erstelltes HubSpot-Kontaktobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des erstellten Kontakts |
|
||||
|
||||
### `hubspot_update_contact`
|
||||
|
||||
@@ -130,9 +125,8 @@ Aktualisiert einen bestehenden Kontakt in HubSpot anhand von ID oder E-Mail
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contact` | object | Aktualisiertes HubSpot-Kontaktobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des aktualisierten Kontakts |
|
||||
|
||||
### `hubspot_search_contacts`
|
||||
|
||||
@@ -153,11 +147,8 @@ Suche nach Kontakten in HubSpot mit Filtern, Sortierung und Abfragen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `contacts` | array | Array übereinstimmender HubSpot-Kontaktobjekte |
|
||||
| `total` | number | Gesamtanzahl übereinstimmender Kontakte |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `hubspot_list_companies`
|
||||
|
||||
@@ -176,10 +167,8 @@ Alle Unternehmen aus dem HubSpot-Konto mit Paginierungsunterstützung abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `companies` | array | Array von HubSpot-Unternehmensobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Unternehmensdaten |
|
||||
|
||||
### `hubspot_get_company`
|
||||
|
||||
@@ -198,9 +187,8 @@ Ruft ein einzelnes Unternehmen anhand der ID oder Domain von HubSpot ab
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `company` | object | HubSpot-Unternehmensobjekt mit Eigenschaften |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Unternehmensdaten |
|
||||
|
||||
### `hubspot_create_company`
|
||||
|
||||
@@ -217,9 +205,8 @@ Erstellt ein neues Unternehmen in HubSpot
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `company` | object | Erstelltes HubSpot-Unternehmensobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des erstellten Unternehmens |
|
||||
|
||||
### `hubspot_update_company`
|
||||
|
||||
@@ -237,9 +224,8 @@ Aktualisiert ein bestehendes Unternehmen in HubSpot anhand der ID oder Domain
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `company` | object | Aktualisiertes HubSpot-Unternehmensobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Unternehmensdaten |
|
||||
|
||||
### `hubspot_search_companies`
|
||||
|
||||
@@ -260,11 +246,8 @@ Suche nach Unternehmen in HubSpot mit Filtern, Sortierung und Abfragen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `companies` | array | Array übereinstimmender HubSpot-Unternehmensobjekte |
|
||||
| `total` | number | Gesamtzahl übereinstimmender Unternehmen |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `hubspot_list_deals`
|
||||
|
||||
@@ -283,10 +266,8 @@ Alle Deals vom HubSpot-Konto mit Paginierungsunterstützung abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deals` | array | Array von HubSpot-Deal-Objekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Deals-Daten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -361,8 +361,6 @@ Einen bestehenden Zeitplan in incident.io aktualisieren
|
||||
| `id` | string | Ja | Die ID des zu aktualisierenden Zeitplans |
|
||||
| `name` | string | Nein | Neuer Name für den Zeitplan |
|
||||
| `timezone` | string | Nein | Neue Zeitzone für den Zeitplan \(z.B. America/New_York\) |
|
||||
| `config` | string | Nein | Zeitplankonfiguration als JSON-String mit Rotationen. Beispiel: \{"rotations": \[\{"name": "Primary", "users": \[\{"id": "user_id"\}\], "handover_start_at": "2024-01-01T09:00:00Z", "handovers": \[\{"interval": 1, "interval_type": "weekly"\}\]\}\]\} |
|
||||
| `Example` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ Ein Unternehmen in Intercom erstellen oder aktualisieren
|
||||
| `plan` | string | Nein | Der Unternehmensplan |
|
||||
| `size` | number | Nein | Die Anzahl der Mitarbeiter im Unternehmen |
|
||||
| `industry` | string | Nein | Die Branche, in der das Unternehmen tätig ist |
|
||||
| `monthly_spend` | number | Nein | Wie viel Umsatz das Unternehmen für Ihr Geschäft generiert. Hinweis: Dieses Feld kürzt Dezimalzahlen auf ganze Zahlen \(z.B. wird aus 155,98 die Zahl 155\) |
|
||||
| `monthly_spend` | number | Nein | Wie viel Umsatz das Unternehmen für Ihr Geschäft generiert |
|
||||
| `custom_attributes` | string | Nein | Benutzerdefinierte Attribute als JSON-Objekt |
|
||||
|
||||
#### Ausgabe
|
||||
@@ -196,7 +196,7 @@ Ein einzelnes Unternehmen anhand der ID von Intercom abrufen
|
||||
|
||||
### `intercom_list_companies`
|
||||
|
||||
Listet alle Unternehmen von Intercom mit Paginierungsunterstützung auf. Hinweis: Dieser Endpunkt hat ein Limit von 10.000 Unternehmen, die über Paginierung zurückgegeben werden können. Für Datensätze mit mehr als 10.000 Unternehmen verwenden Sie stattdessen die Scroll-API.
|
||||
Alle Unternehmen von Intercom mit Paginierungsunterstützung auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -259,8 +259,8 @@ Als Administrator auf eine Konversation in Intercom antworten
|
||||
| `conversationId` | string | Ja | Konversations-ID, auf die geantwortet werden soll |
|
||||
| `message_type` | string | Ja | Nachrichtentyp: "comment" oder "note" |
|
||||
| `body` | string | Ja | Der Textinhalt der Antwort |
|
||||
| `admin_id` | string | Nein | Die ID des Administrators, der die Antwort verfasst. Wenn nicht angegeben, wird ein Standard-Administrator \(Operator/Fin\) verwendet. |
|
||||
| `attachment_urls` | string | Nein | Kommagetrennte Liste von Bild-URLs \(max. 10\) |
|
||||
| `admin_id` | string | Ja | Die ID des Administrators, der die Antwort verfasst |
|
||||
| `attachment_urls` | string | Nein | Kommagetrennte Liste von Bild-URLs (max. 10) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Kalshi
|
||||
description: Zugriff auf Prognosemärkte und Handel auf Kalshi
|
||||
description: Zugriff auf Prognosemarktdaten von Kalshi
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
@@ -27,7 +27,7 @@ Durch die Nutzung dieser einheitlichen Tools und Endpunkte können Sie Kalshis P
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Kalshi-Prognosemärkte in den Workflow. Kann Märkte, Markt, Ereignisse, Ereignis, Kontostand, Positionen, Aufträge, Orderbuch, Trades, Candlesticks, Ausführungen, Serien, Börsenstatus abrufen und Trades platzieren/stornieren/ändern.
|
||||
Integrieren Sie Kalshi-Prognosemärkte in den Workflow. Kann Märkte, Markt, Ereignisse, Ereignis, Guthaben, Positionen, Aufträge, Orderbuch, Trades, Candlesticks, Ausführungen, Serien und Börsenstatus abrufen.
|
||||
|
||||
## Tools
|
||||
|
||||
@@ -49,8 +49,8 @@ Rufe eine Liste von Prognosemärkten von Kalshi mit optionaler Filterung ab
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `markets` | array | Array von Markt-Objekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Marktdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_market`
|
||||
|
||||
@@ -66,7 +66,8 @@ Rufe Details eines bestimmten Prognosemarkts nach Ticker ab
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `market` | object | Markt-Objekt mit Details |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Marktdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_events`
|
||||
|
||||
@@ -84,10 +85,10 @@ Rufe eine Liste von Events von Kalshi mit optionaler Filterung ab
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `events` | array | Array von Ereignis-Objekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ereignisdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_event`
|
||||
|
||||
@@ -102,9 +103,10 @@ Details eines bestimmten Ereignisses anhand des Tickers abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `event` | object | Ereignis-Objekt mit Details |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ereignisdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_balance`
|
||||
|
||||
@@ -119,12 +121,10 @@ Kontostand und Portfoliowert von Kalshi abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `balance` | number | Kontostand in Cent |
|
||||
| `portfolioValue` | number | Portfoliowert in Cent |
|
||||
| `balanceDollars` | number | Kontostand in Dollar |
|
||||
| `portfolioValueDollars` | number | Portfoliowert in Dollar |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Kontostandsdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_positions`
|
||||
|
||||
@@ -146,8 +146,8 @@ Offene Positionen von Kalshi abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `positions` | array | Array von Positions-Objekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Positionsdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_orders`
|
||||
|
||||
@@ -169,84 +169,72 @@ Rufen Sie Ihre Bestellungen von Kalshi mit optionaler Filterung ab
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `orders` | array | Array von Auftrags-Objekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
|
||||
### `kalshi_get_order`
|
||||
|
||||
Rufen Sie Details zu einem bestimmten Auftrag anhand der ID von Kalshi ab
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `keyId` | string | Ja | Ihre Kalshi API-Schlüssel-ID |
|
||||
| `privateKey` | string | Ja | Ihr RSA Private Key \(PEM-Format\) |
|
||||
| `orderId` | string | Ja | Die abzurufende Auftrags-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `order` | object | Auftrags-Objekt mit Details |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Bestelldaten und Metadaten |
|
||||
|
||||
### `kalshi_get_orderbook`
|
||||
|
||||
Rufen Sie das Orderbuch (Ja- und Nein-Gebote) für einen bestimmten Markt ab
|
||||
Rufen Sie das Orderbuch (Gebote und Anfragen) für einen bestimmten Markt ab
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `ticker` | string | Ja | Markt-Ticker \(z.B. KXBTC-24DEC31\) |
|
||||
| `depth` | number | Nein | Anzahl der Preisstufen, die pro Seite zurückgegeben werden sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `orderbook` | object | Orderbuch mit Ja/Nein-Geboten und -Anfragen |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Orderbuch-Daten und Metadaten |
|
||||
|
||||
### `kalshi_get_trades`
|
||||
|
||||
Rufen Sie aktuelle Trades über alle Märkte hinweg ab
|
||||
Ruft aktuelle Trades über alle Märkte oder für einen bestimmten Markt ab
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse \(1-1000, Standard: 100\) |
|
||||
| `ticker` | string | Nein | Nach Markt-Ticker filtern |
|
||||
| `minTs` | number | Nein | Minimaler Zeitstempel (Unix-Millisekunden) |
|
||||
| `maxTs` | number | Nein | Maximaler Zeitstempel (Unix-Millisekunden) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse (1-1000, Standard: 100) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Seite |
|
||||
|
||||
#### Output
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `trades` | array | Array von Handelsobjekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Trade-Daten und Metadaten |
|
||||
|
||||
### `kalshi_get_candlesticks`
|
||||
|
||||
OHLC-Kerzendaten für einen bestimmten Markt abrufen
|
||||
Ruft OHLC-Kerzendaten für einen bestimmten Markt ab
|
||||
|
||||
#### Input
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `seriesTicker` | string | Ja | Serien-Ticker |
|
||||
| `ticker` | string | Ja | Markt-Ticker \(z.B. KXBTC-24DEC31\) |
|
||||
| `startTs` | number | Ja | Startzeitstempel \(Unix-Sekunden\) |
|
||||
| `endTs` | number | Ja | Endzeitstempel \(Unix-Sekunden\) |
|
||||
| `periodInterval` | number | Ja | Periodenintervall: 1 \(1min\), 60 \(1Stunde\) oder 1440 \(1Tag\) |
|
||||
| `ticker` | string | Ja | Markt-Ticker (z.B. KXBTC-24DEC31) |
|
||||
| `startTs` | number | Nein | Startzeitstempel (Unix-Millisekunden) |
|
||||
| `endTs` | number | Nein | Endzeitstempel (Unix-Millisekunden) |
|
||||
| `periodInterval` | number | Nein | Periodenintervall: 1 (1min), 60 (1std), oder 1440 (1tag) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `candlesticks` | array | Array von OHLC-Kerzendaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Candlestick-Daten und Metadaten |
|
||||
|
||||
### `kalshi_get_fills`
|
||||
|
||||
Ihr Portfolio abrufen
|
||||
Rufen Sie Ihr Portfolio ab
|
||||
|
||||
#### Input
|
||||
|
||||
@@ -255,7 +243,7 @@ Ihr Portfolio abrufen
|
||||
| `keyId` | string | Ja | Ihre Kalshi API-Schlüssel-ID |
|
||||
| `privateKey` | string | Ja | Ihr RSA Private Key \(PEM-Format\) |
|
||||
| `ticker` | string | Nein | Nach Markt-Ticker filtern |
|
||||
| `orderId` | string | Nein | Nach Bestell-ID filtern |
|
||||
| `orderId` | string | Nein | Nach Auftrags-ID filtern |
|
||||
| `minTs` | number | Nein | Minimaler Zeitstempel \(Unix-Millisekunden\) |
|
||||
| `maxTs` | number | Nein | Maximaler Zeitstempel \(Unix-Millisekunden\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse \(1-1000, Standard: 100\) |
|
||||
@@ -265,28 +253,29 @@ Ihr Portfolio abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `fills` | array | Array von Ausführungs-/Handelsobjekten |
|
||||
| `paging` | object | Paginierungscursor zum Abrufen weiterer Ergebnisse |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ausführungsdaten und Metadaten |
|
||||
|
||||
### `kalshi_get_series_by_ticker`
|
||||
|
||||
Details einer bestimmten Marktserie nach Ticker abrufen
|
||||
Rufen Sie Details einer bestimmten Marktserie nach Ticker ab
|
||||
|
||||
#### Eingabe
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `seriesTicker` | string | Ja | Serien-Ticker |
|
||||
|
||||
#### Ausgabe
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `series` | object | Serienobjekt mit Details |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Seriendaten und Metadaten |
|
||||
|
||||
### `kalshi_get_exchange_status`
|
||||
|
||||
Den aktuellen Status der Kalshi-Börse abrufen (Handel und Börsenaktivität)
|
||||
Ruft den aktuellen Status der Kalshi-Börse ab (Handels- und Börsenaktivität)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -297,88 +286,8 @@ Den aktuellen Status der Kalshi-Börse abrufen (Handel und Börsenaktivität)
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `status` | object | Börsenstatus mit trading_active und exchange_active Flags |
|
||||
|
||||
### `kalshi_create_order`
|
||||
|
||||
Eine neue Order auf einem Kalshi-Prognosemarkt erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `keyId` | string | Ja | Ihre Kalshi API-Schlüssel-ID |
|
||||
| `privateKey` | string | Ja | Ihr RSA Private Key \(PEM-Format\) |
|
||||
| `ticker` | string | Ja | Markt-Ticker \(z.B. KXBTC-24DEC31\) |
|
||||
| `side` | string | Ja | Seite der Order: 'yes' oder 'no' |
|
||||
| `action` | string | Ja | Aktionstyp: 'buy' oder 'sell' |
|
||||
| `count` | string | Ja | Anzahl der Kontrakte \(mindestens 1\) |
|
||||
| `type` | string | Nein | Ordertyp: 'limit' oder 'market' \(Standard: limit\) |
|
||||
| `yesPrice` | string | Nein | Yes-Preis in Cent \(1-99\) |
|
||||
| `noPrice` | string | Nein | No-Preis in Cent \(1-99\) |
|
||||
| `yesPriceDollars` | string | Nein | Yes-Preis in Dollar \(z.B. "0.56"\) |
|
||||
| `noPriceDollars` | string | Nein | No-Preis in Dollar \(z.B. "0.56"\) |
|
||||
| `clientOrderId` | string | Nein | Benutzerdefinierte Order-ID |
|
||||
| `expirationTs` | string | Nein | Unix-Zeitstempel für Order-Ablauf |
|
||||
| `timeInForce` | string | Nein | Gültigkeitsdauer: 'fill_or_kill', 'good_till_canceled', 'immediate_or_cancel' |
|
||||
| `buyMaxCost` | string | Nein | Maximale Kosten in Cent \(aktiviert automatisch fill_or_kill\) |
|
||||
| `postOnly` | string | Nein | Auf 'true' setzen für Maker-Only-Orders |
|
||||
| `reduceOnly` | string | Nein | Auf 'true' setzen für ausschließliche Positionsreduzierung |
|
||||
| `selfTradePreventionType` | string | Nein | Selbsthandel-Prävention: 'taker_at_cross' oder 'maker' |
|
||||
| `orderGroupId` | string | Nein | Zugehörige Ordergruppen-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `order` | object | Das erstellte Auftragsobjekt |
|
||||
|
||||
### `kalshi_cancel_order`
|
||||
|
||||
Einen bestehenden Auftrag auf Kalshi stornieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `keyId` | string | Ja | Ihre Kalshi API-Schlüssel-ID |
|
||||
| `privateKey` | string | Ja | Ihr RSA Private Key \(PEM-Format\) |
|
||||
| `orderId` | string | Ja | Die zu stornierende Auftrags-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `order` | object | Das stornierte Auftragsobjekt |
|
||||
| `reducedBy` | number | Anzahl der stornierten Kontrakte |
|
||||
|
||||
### `kalshi_amend_order`
|
||||
|
||||
Preis oder Menge eines bestehenden Auftrags auf Kalshi ändern
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `keyId` | string | Ja | Ihre Kalshi API-Schlüssel-ID |
|
||||
| `privateKey` | string | Ja | Ihr RSA Private Key \(PEM-Format\) |
|
||||
| `orderId` | string | Ja | Die zu ändernde Auftrags-ID |
|
||||
| `ticker` | string | Ja | Markt-Ticker |
|
||||
| `side` | string | Ja | Seite des Auftrags: 'yes' oder 'no' |
|
||||
| `action` | string | Ja | Aktionstyp: 'buy' oder 'sell' |
|
||||
| `clientOrderId` | string | Ja | Die ursprüngliche vom Kunden angegebene Auftrags-ID |
|
||||
| `updatedClientOrderId` | string | Ja | Die neue vom Kunden angegebene Auftrags-ID nach der Änderung |
|
||||
| `count` | string | Nein | Aktualisierte Menge für den Auftrag |
|
||||
| `yesPrice` | string | Nein | Aktualisierter Ja-Preis in Cent \(1-99\) |
|
||||
| `noPrice` | string | Nein | Aktualisierter Nein-Preis in Cent \(1-99\) |
|
||||
| `yesPriceDollars` | string | Nein | Aktualisierter Ja-Preis in Dollar \(z.B. "0.56"\) |
|
||||
| `noPriceDollars` | string | Nein | Aktualisierter Nein-Preis in Dollar \(z.B. "0.56"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `order` | object | Das geänderte Auftragsobjekt |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Börsenstatus-Daten und Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -91,11 +91,11 @@ Führen Sie umfassende tiefgehende Recherchen im Web mit Parallel AI durch. Synt
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `status` | string | Aufgabenstatus (abgeschlossen, fehlgeschlagen) |
|
||||
| `status` | string | Aufgabenstatus (laufend, abgeschlossen, fehlgeschlagen) |
|
||||
| `run_id` | string | Eindeutige ID für diese Rechercheaufgabe |
|
||||
| `message` | string | Statusmeldung |
|
||||
| `message` | string | Statusmeldung (für laufende Aufgaben) |
|
||||
| `content` | object | Rechercheergebnisse (strukturiert basierend auf output_schema) |
|
||||
| `basis` | array | Zitate und Quellen mit Begründung und Vertrauensstufen |
|
||||
| `basis` | array | Zitate und Quellen mit Auszügen und Vertrauensstufen |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -51,9 +51,8 @@ Generieren Sie Vervollständigungen mit Perplexity AI-Chatmodellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Generierter Textinhalt |
|
||||
| `model` | string | Für die Generierung verwendetes Modell |
|
||||
| `usage` | object | Informationen zur Token-Nutzung |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Ergebnisse der Chat-Vervollständigung |
|
||||
|
||||
### `perplexity_search`
|
||||
|
||||
@@ -77,7 +76,8 @@ Erhalte bewertete Suchergebnisse von Perplexity
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `results` | array | Array von Suchergebnissen |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -49,11 +49,10 @@ Alle Deals von Pipedrive mit optionalen Filtern abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deals` | array | Array von Deal-Objekten aus Pipedrive |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Deals-Daten und Metadaten |
|
||||
|
||||
### `pipedrive_get_deal`
|
||||
|
||||
@@ -67,11 +66,10 @@ Detaillierte Informationen über einen bestimmten Deal abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deal` | object | Deal-Objekt mit vollständigen Details |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Deal-Details |
|
||||
|
||||
### `pipedrive_create_deal`
|
||||
|
||||
@@ -95,9 +93,8 @@ Einen neuen Deal in Pipedrive erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deal` | object | Das erstellte Deal-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Details des erstellten Deals |
|
||||
|
||||
### `pipedrive_update_deal`
|
||||
|
||||
@@ -118,9 +115,8 @@ Aktualisieren eines bestehenden Deals in Pipedrive
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deal` | object | Das aktualisierte Deal-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Details des aktualisierten Deals |
|
||||
|
||||
### `pipedrive_get_files`
|
||||
|
||||
@@ -137,11 +133,10 @@ Dateien von Pipedrive mit optionalen Filtern abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `files` | array | Array von Datei-Objekten aus Pipedrive |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Dateidaten |
|
||||
|
||||
### `pipedrive_get_mail_messages`
|
||||
|
||||
@@ -156,11 +151,10 @@ E-Mail-Threads aus dem Pipedrive-Postfach abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `messages` | array | Array von E-Mail-Thread-Objekten aus der Pipedrive-Mailbox |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | E-Mail-Thread-Daten |
|
||||
|
||||
### `pipedrive_get_mail_thread`
|
||||
|
||||
@@ -174,11 +168,10 @@ Alle Nachrichten aus einem bestimmten E-Mail-Thread abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `messages` | array | Array von E-Mail-Nachrichtenobjekten aus dem Thread |
|
||||
| `metadata` | object | Operationsmetadaten einschließlich Thread-ID |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Nachrichtendaten des E-Mail-Threads |
|
||||
|
||||
### `pipedrive_get_pipelines`
|
||||
|
||||
@@ -197,9 +190,8 @@ Alle Pipelines aus Pipedrive abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `pipelines` | array | Array von Pipeline-Objekten aus Pipedrive |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Pipeline-Daten |
|
||||
|
||||
### `pipedrive_get_pipeline_deals`
|
||||
|
||||
@@ -218,9 +210,8 @@ Alle Deals in einer bestimmten Pipeline abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deals` | array | Array von Deal-Objekten aus der Pipeline |
|
||||
| `metadata` | object | Operationsmetadaten einschließlich Pipeline-ID |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Pipeline-Deals-Daten |
|
||||
|
||||
### `pipedrive_get_projects`
|
||||
|
||||
@@ -238,10 +229,8 @@ Alle Projekte oder ein bestimmtes Projekt von Pipedrive abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `projects` | array | Array von Projektobjekten (bei Auflistung aller) |
|
||||
| `project` | object | Einzelnes Projektobjekt (wenn project_id angegeben ist) |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Projektdaten oder Details eines einzelnen Projekts |
|
||||
|
||||
### `pipedrive_create_project`
|
||||
|
||||
@@ -260,9 +249,8 @@ Erstelle ein neues Projekt in Pipedrive
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `project` | object | Das erstellte Projektobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Details des erstellten Projekts |
|
||||
|
||||
### `pipedrive_get_activities`
|
||||
|
||||
@@ -283,9 +271,8 @@ Aktivitäten (Aufgaben) von Pipedrive mit optionalen Filtern abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `activities` | array | Array von Aktivitätsobjekten aus Pipedrive |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktivitätsdaten |
|
||||
|
||||
### `pipedrive_create_activity`
|
||||
|
||||
@@ -309,9 +296,8 @@ Eine neue Aktivität (Aufgabe) in Pipedrive erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `activity` | object | Das erstellte Aktivitätsobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Details der erstellten Aktivität |
|
||||
|
||||
### `pipedrive_update_activity`
|
||||
|
||||
@@ -331,11 +317,10 @@ Eine bestehende Aktivität (Aufgabe) in Pipedrive aktualisieren
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `activity` | object | Das aktualisierte Aktivitätsobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Aktivitätsdetails |
|
||||
|
||||
### `pipedrive_get_leads`
|
||||
|
||||
@@ -354,12 +339,10 @@ Alle Leads oder einen bestimmten Lead von Pipedrive abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `leads` | array | Array von Lead-Objekten (bei Auflistung aller) |
|
||||
| `lead` | object | Einzelnes Lead-Objekt (wenn lead_id angegeben ist) |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Lead-Daten oder Details eines einzelnen Leads |
|
||||
|
||||
### `pipedrive_create_lead`
|
||||
|
||||
@@ -380,11 +363,10 @@ Einen neuen Lead in Pipedrive erstellen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `lead` | object | Das erstellte Lead-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Details des erstellten Leads |
|
||||
|
||||
### `pipedrive_update_lead`
|
||||
|
||||
@@ -406,11 +388,10 @@ Einen vorhandenen Lead in Pipedrive aktualisieren
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `lead` | object | Das aktualisierte Lead-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Details des aktualisierten Leads |
|
||||
|
||||
### `pipedrive_delete_lead`
|
||||
|
||||
@@ -426,9 +407,8 @@ Einen bestimmten Lead aus Pipedrive löschen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `data` | object | Löschbestätigungsdaten |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Löschergebnis |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -41,17 +41,17 @@ Rufen Sie eine Liste von Prognosemärkten von Polymarket mit optionaler Filterun
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `closed` | string | Nein | Nach geschlossenem Status filtern \(true/false\). Verwenden Sie false für nur aktive Märkte. |
|
||||
| `order` | string | Nein | Sortierfeld \(z.B. volumeNum, liquidityNum, startDate, endDate, createdAt\) |
|
||||
| `order` | string | Nein | Sortierfeld \(z.B. id, volume, liquidity\) |
|
||||
| `ascending` | string | Nein | Sortierrichtung \(true für aufsteigend, false für absteigend\) |
|
||||
| `tagId` | string | Nein | Nach Tag-ID filtern |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe so viele Ergebnisse\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Marktdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_market`
|
||||
@@ -80,12 +80,12 @@ Ruft eine Liste von Events von Polymarket mit optionaler Filterung ab
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `closed` | string | Nein | Nach geschlossenem Status filtern \(true/false\). Verwenden Sie false für nur aktive Ereignisse. |
|
||||
| `order` | string | Nein | Sortierfeld \(z.B. volume, liquidity, startDate, endDate, createdAt\) |
|
||||
| `closed` | string | Nein | Filtern nach geschlossenem Status \(true/false\). Verwenden Sie false für nur aktive Events. |
|
||||
| `order` | string | Nein | Sortierfeld \(z.B. id, volume\) |
|
||||
| `ascending` | string | Nein | Sortierrichtung \(true für aufsteigend, false für absteigend\) |
|
||||
| `tagId` | string | Nein | Nach Tag-ID filtern |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
| `tagId` | string | Nein | Filtern nach Tag-ID |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe so viele Ergebnisse\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -107,10 +107,10 @@ Ruft Details eines bestimmten Events nach ID oder Slug ab
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Event-Daten und Metadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Ereignisdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_tags`
|
||||
|
||||
@@ -118,16 +118,16 @@ Verfügbare Tags zum Filtern von Märkten von Polymarket abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Tag-Daten und Metadaten |
|
||||
|
||||
### `polymarket_search`
|
||||
@@ -136,17 +136,17 @@ Nach Märkten, Ereignissen und Profilen auf Polymarket suchen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Ja | Suchbegriff |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse und Metadaten |
|
||||
|
||||
### `polymarket_get_series`
|
||||
@@ -155,16 +155,17 @@ Serien (verwandte Marktgruppen) von Polymarket abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `series` | array | Array von Serien-Objekten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Seriendaten und Metadaten |
|
||||
|
||||
### `polymarket_get_series_by_id`
|
||||
|
||||
@@ -178,9 +179,10 @@ Eine bestimmte Serie (zugehörige Marktgruppe) anhand der ID von Polymarket abru
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `series` | object | Serien-Objekt mit Details |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Seriendaten und Metadaten |
|
||||
|
||||
### `polymarket_get_orderbook`
|
||||
|
||||
@@ -194,9 +196,10 @@ Die Orderbuch-Zusammenfassung für einen bestimmten Token abrufen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `orderbook` | object | Orderbuch mit Geld- und Briefkurs-Arrays |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Orderbuch-Daten und Metadaten |
|
||||
|
||||
### `polymarket_get_price`
|
||||
|
||||
@@ -213,7 +216,8 @@ Den Marktpreis für einen bestimmten Token und eine bestimmte Seite abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `price` | string | Marktpreis |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Preisdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_midpoint`
|
||||
|
||||
@@ -229,7 +233,8 @@ Abrufen des Mittelpreises für einen bestimmten Token
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `midpoint` | string | Mittelkurs |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Mittelpreisdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_price_history`
|
||||
|
||||
@@ -249,7 +254,8 @@ Abrufen historischer Preisdaten für einen bestimmten Markttoken
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `history` | array | Array von Preisverlaufseinträgen mit Zeitstempel \(t\) und Preis \(p\) |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Preisverlaufsdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_last_trade_price`
|
||||
|
||||
@@ -265,7 +271,8 @@ Den letzten Handelspreis für einen bestimmten Token abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `price` | string | Letzter Handelspreis |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Letzter Handelspreis und Metadaten |
|
||||
|
||||
### `polymarket_get_spread`
|
||||
|
||||
@@ -281,7 +288,8 @@ Die Geld-Brief-Spanne für einen bestimmten Token abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `spread` | object | Geld-Brief-Spanne mit Geld- und Briefkursen |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Spread-Daten und Metadaten |
|
||||
|
||||
### `polymarket_get_tick_size`
|
||||
|
||||
@@ -297,7 +305,8 @@ Die minimale Tickgröße für einen bestimmten Token abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `tickSize` | string | Minimale Tick-Größe |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Tickgröße und Metadaten |
|
||||
|
||||
### `polymarket_get_positions`
|
||||
|
||||
@@ -314,7 +323,8 @@ Benutzerpositionen von Polymarket abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `positions` | array | Array von Positions-Objekten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Positionsdaten und Metadaten |
|
||||
|
||||
### `polymarket_get_trades`
|
||||
|
||||
@@ -326,14 +336,15 @@ Handelshistorie von Polymarket abrufen
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `user` | string | Nein | Wallet-Adresse des Benutzers zum Filtern von Trades |
|
||||
| `market` | string | Nein | Markt-ID zum Filtern von Trades |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(max 50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe diese Anzahl an Ergebnissen\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse pro Seite \(empfohlen: 25-50\) |
|
||||
| `offset` | string | Nein | Paginierungsoffset \(überspringe so viele Ergebnisse\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `trades` | array | Array von Handelsobjekten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Handelsdaten und Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
807
apps/docs/content/docs/de/tools/pylon.mdx
Normal file
807
apps/docs/content/docs/de/tools/pylon.mdx
Normal file
@@ -0,0 +1,807 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Verwalten Sie Kundensupport-Anfragen, Konten, Kontakte, Benutzer,
|
||||
Teams und Tags in Pylon
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) ist eine fortschrittliche Kundensupport- und Erfolgsplattform, die entwickelt wurde, um Ihnen bei der Verwaltung aller Aspekte Ihrer Kundenbeziehungen zu helfen – von Support-Anfragen bis hin zu Konten, Kontakten, Benutzern, Teams und darüber hinaus. Pylon ermöglicht Support- und Erfolgsteams, effizient und programmatisch mit einer umfangreichen API und umfassenden Werkzeugen zu arbeiten.
|
||||
|
||||
Mit Pylon in Sim können Sie:
|
||||
|
||||
- **Support-Anfragen verwalten:**
|
||||
- Support-Anfragen auflisten, erstellen, abrufen, aktualisieren und löschen für effizientes Falltracking.
|
||||
- Anfragen durchsuchen und zurückstellen, um Agenten zu helfen, fokussiert und organisiert zu bleiben.
|
||||
- Verwalten von Anfrage-Followern und externen Anfragen für nahtlose Zusammenarbeit mit internen und externen Stakeholdern.
|
||||
|
||||
- **Vollständige Kontoverwaltung:**
|
||||
- Kundenkonten auflisten, erstellen, abrufen, aktualisieren und löschen.
|
||||
- Massenaktualisierung von Konten programmatisch durchführen.
|
||||
- Konten durchsuchen, um schnell kundenrelevante Informationen für Support oder Outreach zu finden.
|
||||
|
||||
- **Kontaktverwaltung:**
|
||||
- Kontakte auflisten, erstellen, abrufen, aktualisieren, löschen und durchsuchen – verwalten Sie alle Personen, die mit Ihren Konten verbunden sind.
|
||||
|
||||
- **Benutzer- und Team-Operationen:**
|
||||
- Benutzer in Ihrem Pylon-Workspace auflisten, abrufen, aktualisieren und durchsuchen.
|
||||
- Teams auflisten, erstellen, abrufen und aktualisieren, um Ihre Support-Organisation und Arbeitsabläufe zu strukturieren.
|
||||
|
||||
- **Tagging und Organisation:**
|
||||
- Tags auflisten, abrufen, erstellen, aktualisieren und löschen zur Kategorisierung von Anfragen, Konten oder Kontakten.
|
||||
|
||||
- **Nachrichtenbearbeitung:**
|
||||
- Sensible Nachrichteninhalte direkt aus Ihren Workflows redigieren für Datenschutz und Compliance.
|
||||
|
||||
Durch die Integration von Pylon-Tools in Sim können Ihre Agenten jeden Aspekt der Support-Operationen automatisieren:
|
||||
- Automatisches Öffnen, Aktualisieren oder Priorisieren neuer Anfragen bei Kundenereignissen.
|
||||
- Synchronisierte Konto- und Kontaktdaten über Ihren gesamten Tech-Stack hinweg pflegen.
|
||||
- Gespräche weiterleiten, Eskalationen bearbeiten und Ihre Support-Daten mithilfe von Tags und Teams organisieren.
|
||||
- Sicherstellen, dass sensible Daten ordnungsgemäß verwaltet werden, indem Nachrichten bei Bedarf redigiert werden.
|
||||
|
||||
Die Endpunkte von Pylon bieten granulare Kontrolle für das vollständige Lifecycle-Management von Kundenanliegen und -beziehungen. Ob beim Skalieren eines Support-Desks, bei der Unterstützung proaktiver Kundenbetreuung oder bei der Integration mit anderen Systemen – Pylon in Sim ermöglicht erstklassige CRM-Automatisierung – sicher, flexibel und skalierbar.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Pylon in den Workflow. Verwalten Sie Anliegen (auflisten, erstellen, abrufen, aktualisieren, löschen, suchen, zurückstellen, Follower, externe Anliegen), Konten (auflisten, erstellen, abrufen, aktualisieren, löschen, Massenaktualisierung, suchen), Kontakte (auflisten, erstellen, abrufen, aktualisieren, löschen, suchen), Benutzer (auflisten, abrufen, aktualisieren, suchen), Teams (auflisten, abrufen, erstellen, aktualisieren), Tags (auflisten, abrufen, erstellen, aktualisieren, löschen) und Nachrichten (redigieren).
|
||||
|
||||
## Tools
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
Eine Liste von Anliegen innerhalb eines bestimmten Zeitraums abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `startTime` | string | Ja | Startzeit im RFC3339-Format \(z.B. 2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | string | Ja | Endzeit im RFC3339-Format \(z.B. 2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Anliegen |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
Ein neues Anliegen mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `title` | string | Ja | Titel des Problems |
|
||||
| `bodyHtml` | string | Ja | Inhalt des Problems im HTML-Format |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Problem verknüpft werden soll |
|
||||
| `assigneeId` | string | Nein | Benutzer-ID, der das Problem zugewiesen werden soll |
|
||||
| `teamId` | string | Nein | Team-ID, dem das Problem zugewiesen werden soll |
|
||||
| `requesterId` | string | Nein | Anforderer-Benutzer-ID \(Alternative zu requester_email\) |
|
||||
| `requesterEmail` | string | Nein | E-Mail-Adresse des Anforderers \(Alternative zu requester_id\) |
|
||||
| `priority` | string | Nein | Priorität des Problems |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `attachmentUrls` | string | Nein | Durch Komma getrennte Anhang-URLs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des erstellten Issues |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
Ruft ein bestimmtes Issue anhand der ID ab
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des abzurufenden Issues |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Issue-Daten |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
Aktualisiert ein bestehendes Issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu aktualisierenden Problems |
|
||||
| `state` | string | Nein | Status des Problems |
|
||||
| `assigneeId` | string | Nein | Benutzer-ID, der das Problem zugewiesen werden soll |
|
||||
| `teamId` | string | Nein | Team-ID, dem das Problem zugewiesen werden soll |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `customerPortalVisible` | boolean | Nein | Ob das Problem im Kundenportal sichtbar ist |
|
||||
| `requesterId` | string | Nein | Anforderer-Benutzer-ID |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Problem verknüpft werden soll |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des aktualisierten Issues |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
Problem nach ID entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu löschenden Problems |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Löschergebnis |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
Probleme mit Filtern abfragen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filterkriterien als JSON-String |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
Problemsichtbarkeit bis zu einem bestimmten Zeitpunkt verschieben
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu schlummernden Problems |
|
||||
| `snoozeUntil` | string | Ja | RFC3339-Zeitstempel, wann das Problem wieder erscheinen soll \(z.B. 2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des zurückgestellten Problems |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
Liste der Follower für ein bestimmtes Problem abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Problems |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Follower |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
Follower zu einem Problem hinzufügen oder entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Problems |
|
||||
| `userIds` | string | Nein | Durch Komma getrennte Benutzer-IDs zum Hinzufügen/Entfernen |
|
||||
| `contactIds` | string | Nein | Durch Komma getrennte Kontakt-IDs zum Hinzufügen/Entfernen |
|
||||
| `operation` | string | Nein | Auszuführende Operation: "add" oder "remove" \(Standard: "add"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Liste der Follower |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
Issue mit einem externen System-Issue verknüpfen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Pylon-Issues |
|
||||
| `externalIssueId` | string | Ja | Die ID des externen Issues |
|
||||
| `source` | string | Ja | Das Quellsystem \(z.B. "jira", "linear", "github"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des verknüpften externen Issues |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
Eine paginierte Liste von Konten abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `limit` | string | Nein | Anzahl der zurückzugebenden Konten \(1-1000, Standard 100\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Konten |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
Ein neues Konto mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Ja | Kontoname |
|
||||
| `domains` | string | Nein | Kommagetrennte Liste von Domains |
|
||||
| `primaryDomain` | string | Nein | Primäre Domain für das Konto |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Kommagetrennte Tag-IDs |
|
||||
| `channels` | string | Nein | Kommagetrennte Kanal-IDs |
|
||||
| `externalIds` | string | Nein | Kommagetrennte externe IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `logoUrl` | string | Nein | URL zum Konto-Logo |
|
||||
| `subaccountIds` | string | Nein | Kommagetrennte Unterkonto-IDs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Erstellte Kontodaten |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
Ein einzelnes Konto anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Kontodaten |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
Ein bestehendes Konto mit neuen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Kontoname |
|
||||
| `domains` | string | Nein | Kommagetrennte Liste von Domains |
|
||||
| `primaryDomain` | string | Nein | Primäre Domain für das Konto |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Kommagetrennte Tag-IDs |
|
||||
| `channels` | string | Nein | Kommagetrennte Kanal-IDs |
|
||||
| `externalIds` | string | Nein | Kommagetrennte externe IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `logoUrl` | string | Nein | URL zum Konto-Logo |
|
||||
| `subaccountIds` | string | Nein | Kommagetrennte Unterkonto-IDs |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Kontodaten |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
Ein Konto anhand der ID entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID, die gelöscht werden soll |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Löschbestätigung |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
Mehrere Konten auf einmal aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountIds` | string | Ja | Durch Komma getrennte Konto-IDs, die aktualisiert werden sollen |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `tagsApplyMode` | string | Nein | Tag-Anwendungsmodus: append_only, remove_only oder replace |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Massenhaft aktualisierte Kontodaten |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
Konten mit benutzerdefinierten Filtern durchsuchen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-String mit Feld/Operator/Wert-Struktur |
|
||||
| `limit` | string | Nein | Anzahl der zurückzugebenden Konten \(1-1000, Standard 100\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
Eine Liste von Kontakten abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Kontakte |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Kontakte |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
Einen neuen Kontakt mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Ja | Kontaktname |
|
||||
| `email` | string | Nein | E-Mail-Adresse des Kontakts |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `accountExternalId` | string | Nein | Externe Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `avatarUrl` | string | Nein | URL für das Kontakt-Avatarbild |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `portalRole` | string | Nein | Portal-Rolle für den Kontakt |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Erstellte Kontaktdaten |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
Einen bestimmten Kontakt anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Kontakt-ID zum Abrufen |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Elemente |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Kontaktdaten |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
Einen vorhandenen Kontakt mit angegebenen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Kontakt-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Kontaktname |
|
||||
| `email` | string | Nein | E-Mail-Adresse des Kontakts |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `accountExternalId` | string | Nein | Externe Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `avatarUrl` | string | Nein | URL für das Kontakt-Avatarbild |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `portalRole` | string | Nein | Portalrolle für den Kontakt |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Kontaktdaten |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
Einen bestimmten Kontakt anhand der ID löschen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Zu löschende Kontakt-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Ergebnis des Löschvorgangs |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
Nach Kontakten mit einem Filter suchen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-Objekt |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Kontakte |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
Eine Liste von Benutzern abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Benutzer |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
Einen bestimmten Benutzer anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `userId` | string | Ja | Benutzer-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Benutzerdaten |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
Einen vorhandenen Benutzer mit angegebenen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `userId` | string | Ja | Benutzer-ID zum Aktualisieren |
|
||||
| `roleId` | string | Nein | Rollen-ID, die dem Benutzer zugewiesen werden soll |
|
||||
| `status` | string | Nein | Benutzerstatus |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Benutzerdaten |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
Nach Benutzern mit einem Filter für das E-Mail-Feld suchen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-Objekt mit E-Mail-Feld |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Benutzer |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
Eine Liste von Teams abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Teams |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
Ein bestimmtes Team anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `teamId` | string | Ja | Team-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Team-Daten |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
Ein neues Team mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Nein | Team-Name |
|
||||
| `userIds` | string | Nein | Durch Kommas getrennte Benutzer-IDs, die als Teammitglieder hinzugefügt werden sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Erstellte Team-Daten |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
Aktualisieren eines vorhandenen Teams mit angegebenen Eigenschaften (userIds ersetzt die gesamte Mitgliedschaft)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `teamId` | string | Ja | Team-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Team-Name |
|
||||
| `userIds` | string | Nein | Kommagetrennte Benutzer-IDs \(ersetzt die gesamte Team-Mitgliedschaft\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Team-Daten |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
Abrufen einer Liste von Tags
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Tags |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
Abrufen eines bestimmten Tags anhand der ID
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Tag-ID zum Abrufen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Tag-Daten |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
Erstellt einen neuen Tag mit angegebenen Eigenschaften (objectType: account/issue/contact)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `objectType` | string | Ja | Objekttyp für Tag \(account, issue oder contact\) |
|
||||
| `value` | string | Ja | Tag-Wert/Name |
|
||||
| `hexColor` | string | Nein | Hex-Farbcode für Tag \(z.B. #FF5733\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des erstellten Tags |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
Aktualisiert einen vorhandenen Tag mit angegebenen Eigenschaften
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Zu aktualisierende Tag-ID |
|
||||
| `hexColor` | string | Nein | Hex-Farbcode für Tag \(z.B. #FF5733\) |
|
||||
| `value` | string | Nein | Tag-Wert/Name |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des aktualisierten Tags |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
Löschen eines bestimmten Tags anhand der ID
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Tag-ID zum Löschen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ergebnis der Löschoperation |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
Redigieren einer bestimmten Nachricht innerhalb eines Issues
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Issue-ID, die die Nachricht enthält |
|
||||
| `messageId` | string | Ja | Nachrichten-ID zum Redigieren |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ergebnis der Redigieroperation |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `pylon`
|
||||
@@ -135,684 +135,283 @@ Löschen eines Kontos aus Salesforce CRM
|
||||
|
||||
### `salesforce_get_contacts`
|
||||
|
||||
Kontakt(e) aus Salesforce abrufen - einzelner Kontakt, wenn ID angegeben, oder Liste, wenn nicht
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `contactId` | string | Nein | Kontakt-ID \(wenn angegeben, wird ein einzelner Kontakt zurückgegeben\) |
|
||||
| `limit` | string | Nein | Anzahl der Ergebnisse \(Standard: 100, max: 2000\). Nur für Listenabfrage. |
|
||||
| `fields` | string | Nein | Kommagetrennte Felder \(z.B. "Id,FirstName,LastName,Email,Phone"\) |
|
||||
| `orderBy` | string | Nein | Sortierfeld \(z.B. "LastName ASC"\). Nur für Listenabfrage. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Kontaktdaten |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_create_contact`
|
||||
|
||||
Einen neuen Kontakt im Salesforce CRM erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `lastName` | string | Ja | Nachname \(erforderlich\) |
|
||||
| `firstName` | string | Nein | Vorname |
|
||||
| `email` | string | Nein | E-Mail-Adresse |
|
||||
| `phone` | string | Nein | Telefonnummer |
|
||||
| `accountId` | string | Nein | Konto-ID, mit der der Kontakt verknüpft werden soll |
|
||||
| `title` | string | Nein | Keine Beschreibung |
|
||||
| `department` | string | Nein | Abteilung |
|
||||
| `mailingStreet` | string | Nein | Postanschrift \(Straße\) |
|
||||
| `mailingCity` | string | Nein | Postanschrift \(Stadt\) |
|
||||
| `mailingState` | string | Nein | Postanschrift \(Bundesland\) |
|
||||
| `mailingPostalCode` | string | Nein | Postanschrift \(Postleitzahl\) |
|
||||
| `mailingCountry` | string | Nein | Postanschrift \(Land\) |
|
||||
| `description` | string | Nein | Kontaktbeschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des erstellten Kontakts |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_update_contact`
|
||||
|
||||
Aktualisieren eines bestehenden Kontakts in Salesforce CRM
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `contactId` | string | Ja | Zu aktualisierende Kontakt-ID \(erforderlich\) |
|
||||
| `lastName` | string | Nein | Nachname |
|
||||
| `firstName` | string | Nein | Vorname |
|
||||
| `email` | string | Nein | E-Mail-Adresse |
|
||||
| `phone` | string | Nein | Telefonnummer |
|
||||
| `accountId` | string | Nein | Zu verknüpfende Konto-ID |
|
||||
| `title` | string | Nein | Keine Beschreibung |
|
||||
| `department` | string | Nein | Abteilung |
|
||||
| `mailingStreet` | string | Nein | Postanschrift (Straße) |
|
||||
| `mailingCity` | string | Nein | Postanschrift (Stadt) |
|
||||
| `mailingState` | string | Nein | Postanschrift (Bundesland) |
|
||||
| `mailingPostalCode` | string | Nein | Postanschrift (Postleitzahl) |
|
||||
| `mailingCountry` | string | Nein | Postanschrift (Land) |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des aktualisierten Kontakts |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_delete_contact`
|
||||
|
||||
Löschen eines Kontakts aus Salesforce CRM
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `contactId` | string | Ja | Zu löschende Kontakt-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des gelöschten Kontakts |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_get_leads`
|
||||
|
||||
Lead(s) aus Salesforce abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `leadId` | string | Nein | Lead-ID \(optional\) |
|
||||
| `limit` | string | Nein | Maximale Ergebnisse \(Standard: 100\) |
|
||||
| `fields` | string | Nein | Kommagetrennte Felder |
|
||||
| `orderBy` | string | Nein | Sortierfeld |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Lead-Daten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_create_lead`
|
||||
|
||||
Einen neuen Lead erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `lastName` | string | Ja | Nachname \(erforderlich\) |
|
||||
| `company` | string | Ja | Unternehmen \(erforderlich\) |
|
||||
| `firstName` | string | Nein | Vorname |
|
||||
| `email` | string | Nein | Keine Beschreibung |
|
||||
| `phone` | string | Nein | Keine Beschreibung |
|
||||
| `status` | string | Nein | Lead-Status |
|
||||
| `leadSource` | string | Nein | Lead-Quelle |
|
||||
| `title` | string | Nein | Keine Beschreibung |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Erstellter Lead |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_update_lead`
|
||||
|
||||
Aktualisieren eines vorhandenen Leads
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `leadId` | string | Ja | Lead-ID (erforderlich) |
|
||||
| `lastName` | string | Nein | Nachname |
|
||||
| `company` | string | Nein | Keine Beschreibung |
|
||||
| `firstName` | string | Nein | Vorname |
|
||||
| `email` | string | Nein | Keine Beschreibung |
|
||||
| `phone` | string | Nein | Keine Beschreibung |
|
||||
| `status` | string | Nein | Lead-Status |
|
||||
| `leadSource` | string | Nein | Lead-Quelle |
|
||||
| `title` | string | Nein | Keine Beschreibung |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Aktualisierter Lead |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_delete_lead`
|
||||
|
||||
Löschen eines Leads
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `leadId` | string | Ja | Lead-ID (erforderlich) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Gelöschter Lead |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_get_opportunities`
|
||||
|
||||
Verkaufschance(n) aus Salesforce abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `opportunityId` | string | Nein | Verkaufschancen-ID \(optional\) |
|
||||
| `limit` | string | Nein | Maximale Ergebnisse \(Standard: 100\) |
|
||||
| `fields` | string | Nein | Kommagetrennte Felder |
|
||||
| `orderBy` | string | Nein | Sortierfeld |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Verkaufschancendaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_create_opportunity`
|
||||
|
||||
Eine neue Verkaufschance erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `name` | string | Ja | Name der Verkaufschance \(erforderlich\) |
|
||||
| `stageName` | string | Ja | Phasenname \(erforderlich\) |
|
||||
| `closeDate` | string | Ja | Abschlussdatum JJJJ-MM-TT \(erforderlich\) |
|
||||
| `accountId` | string | Nein | Konto-ID |
|
||||
| `amount` | string | Nein | Betrag \(Zahl\) |
|
||||
| `probability` | string | Nein | Wahrscheinlichkeit \(0-100\) |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Erstellte Verkaufschance |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_update_opportunity`
|
||||
|
||||
Aktualisieren einer bestehenden Verkaufschance
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `opportunityId` | string | Ja | Verkaufschancen-ID (erforderlich) |
|
||||
| `name` | string | Nein | Name der Verkaufschance |
|
||||
| `stageName` | string | Nein | Phasenname |
|
||||
| `closeDate` | string | Nein | Abschlussdatum JJJJ-MM-TT |
|
||||
| `accountId` | string | Nein | Konto-ID |
|
||||
| `amount` | string | Nein | Keine Beschreibung |
|
||||
| `probability` | string | Nein | Wahrscheinlichkeit (0-100) |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Aktualisierte Verkaufschance |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_delete_opportunity`
|
||||
|
||||
Löschen einer Verkaufschance
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `opportunityId` | string | Ja | Verkaufschancen-ID (erforderlich) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Gelöschte Verkaufschance |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_get_cases`
|
||||
|
||||
Fall/Fälle aus Salesforce abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `caseId` | string | Nein | Fall-ID \(optional\) |
|
||||
| `limit` | string | Nein | Maximale Ergebnisse \(Standard: 100\) |
|
||||
| `fields` | string | Nein | Kommagetrennte Felder |
|
||||
| `orderBy` | string | Nein | Sortierfeld |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Falldaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_create_case`
|
||||
|
||||
Einen neuen Fall erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `subject` | string | Ja | Fallbetreff \(erforderlich\) |
|
||||
| `status` | string | Nein | Status \(z.B. Neu, In Bearbeitung, Eskaliert\) |
|
||||
| `priority` | string | Nein | Priorität \(z.B. Niedrig, Mittel, Hoch\) |
|
||||
| `origin` | string | Nein | Ursprung \(z.B. Telefon, E-Mail, Web\) |
|
||||
| `contactId` | string | Nein | Kontakt-ID |
|
||||
| `accountId` | string | Nein | Konto-ID |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Erstellter Fall |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_update_case`
|
||||
|
||||
Aktualisieren eines vorhandenen Falls
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `caseId` | string | Ja | Fall-ID \(erforderlich\) |
|
||||
| `subject` | string | Nein | Fallbetreff |
|
||||
| `status` | string | Nein | Status |
|
||||
| `priority` | string | Nein | Priorität |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Aktualisierter Fall |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_delete_case`
|
||||
|
||||
Löschen eines Falls
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `caseId` | string | Ja | Fall-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Gelöschter Fall |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_get_tasks`
|
||||
|
||||
Aufgabe(n) von Salesforce abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `taskId` | string | Nein | Aufgaben-ID \(optional\) |
|
||||
| `limit` | string | Nein | Maximale Ergebnisse \(Standard: 100\) |
|
||||
| `fields` | string | Nein | Kommagetrennte Felder |
|
||||
| `orderBy` | string | Nein | Sortierfeld |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Aufgabendaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_create_task`
|
||||
|
||||
Neue Aufgabe erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `subject` | string | Ja | Aufgabenbetreff \(erforderlich\) |
|
||||
| `status` | string | Nein | Status \(z.B. Nicht begonnen, In Bearbeitung, Abgeschlossen\) |
|
||||
| `priority` | string | Nein | Priorität \(z.B. Niedrig, Normal, Hoch\) |
|
||||
| `activityDate` | string | Nein | Fälligkeitsdatum JJJJ-MM-TT |
|
||||
| `whoId` | string | Nein | Zugehörige Kontakt-/Lead-ID |
|
||||
| `whatId` | string | Nein | Zugehörige Konto-/Opportunity-ID |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Erstellte Aufgabe |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_update_task`
|
||||
|
||||
Bestehende Aufgabe aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `taskId` | string | Ja | Aufgaben-ID \(erforderlich\) |
|
||||
| `subject` | string | Nein | Aufgabenbetreff |
|
||||
| `status` | string | Nein | Status |
|
||||
| `priority` | string | Nein | Priorität |
|
||||
| `activityDate` | string | Nein | Fälligkeitsdatum JJJJ-MM-TT |
|
||||
| `description` | string | Nein | Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Aktualisierte Aufgabe |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
### `salesforce_delete_task`
|
||||
|
||||
Aufgabe löschen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `taskId` | string | Ja | Aufgaben-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolg |
|
||||
| `output` | object | Gelöschte Aufgabe |
|
||||
|
||||
### `salesforce_list_reports`
|
||||
|
||||
Liste der für den aktuellen Benutzer zugänglichen Berichte abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `folderName` | string | Nein | Nach Ordnernamen filtern |
|
||||
| `searchTerm` | string | Nein | Suchbegriff zum Filtern von Berichten nach Namen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Berichtsdaten |
|
||||
|
||||
### `salesforce_get_report`
|
||||
|
||||
Metadaten und Beschreibungsinformationen für einen bestimmten Bericht abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `reportId` | string | Ja | Berichts-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Berichtsmetadaten |
|
||||
|
||||
### `salesforce_run_report`
|
||||
|
||||
Einen Bericht ausführen und die Ergebnisse abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `reportId` | string | Ja | Berichts-ID \(erforderlich\) |
|
||||
| `includeDetails` | string | Nein | Detailzeilen einschließen \(true/false, Standard: true\) |
|
||||
| `filters` | string | Nein | JSON-String der anzuwendenden Berichtsfilter |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Berichtsergebnisse |
|
||||
|
||||
### `salesforce_list_report_types`
|
||||
|
||||
Eine Liste der verfügbaren Berichtstypen abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Daten zu Berichtstypen |
|
||||
|
||||
### `salesforce_list_dashboards`
|
||||
|
||||
Eine Liste der für den aktuellen Benutzer zugänglichen Dashboards abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `folderName` | string | Nein | Nach Ordnernamen filtern |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Dashboard-Daten |
|
||||
|
||||
### `salesforce_get_dashboard`
|
||||
|
||||
Details und Ergebnisse für ein bestimmtes Dashboard abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `dashboardId` | string | Ja | Dashboard-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Dashboard-Daten |
|
||||
|
||||
### `salesforce_refresh_dashboard`
|
||||
|
||||
Ein Dashboard aktualisieren, um die neuesten Daten zu erhalten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `dashboardId` | string | Ja | Dashboard-ID \(erforderlich\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Aktualisierte Dashboard-Daten |
|
||||
|
||||
### `salesforce_query`
|
||||
|
||||
Eine benutzerdefinierte SOQL-Abfrage ausführen, um Daten aus Salesforce abzurufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `query` | string | Ja | SOQL-Abfrage zur Ausführung \(z.B. SELECT Id, Name FROM Account LIMIT 10\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Abfrageergebnisse |
|
||||
|
||||
### `salesforce_query_more`
|
||||
|
||||
Abrufen zusätzlicher Abfrageergebnisse mit der nextRecordsUrl aus einer vorherigen Abfrage
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `nextRecordsUrl` | string | Ja | Die nextRecordsUrl aus einer vorherigen Abfrageantwort |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Abfrageergebnisse |
|
||||
|
||||
### `salesforce_describe_object`
|
||||
|
||||
Metadaten und Feldinformationen für ein Salesforce-Objekt abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
| `objectName` | string | Ja | API-Name des Objekts \(z.B. Account, Contact, Lead, Custom_Object__c\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Objekt-Metadaten |
|
||||
|
||||
### `salesforce_list_objects`
|
||||
|
||||
Liste aller verfügbaren Salesforce-Objekte abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `idToken` | string | Nein | Keine Beschreibung |
|
||||
| `instanceUrl` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus |
|
||||
| `output` | object | Objektliste |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | json | Ergebnisdaten der Operation |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -342,30 +342,19 @@ Eine E-Mail-Vorlage von SendGrid löschen
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `message` | string | Status- oder Erfolgsmeldung |
|
||||
| `messageId` | string | E-Mail-Nachrichten-ID \(send_mail\) |
|
||||
| `to` | string | E-Mail-Adresse des Empfängers \(send_mail\) |
|
||||
| `subject` | string | E-Mail-Betreff \(send_mail, create_template_version\) |
|
||||
| `messageId` | string | E-Mail-Nachrichten-ID (send_mail) |
|
||||
| `id` | string | Ressourcen-ID |
|
||||
| `jobId` | string | Job-ID für asynchrone Operationen |
|
||||
| `email` | string | E-Mail-Adresse des Kontakts |
|
||||
| `firstName` | string | Vorname des Kontakts |
|
||||
| `lastName` | string | Nachname des Kontakts |
|
||||
| `createdAt` | string | Erstellungszeitstempel |
|
||||
| `updatedAt` | string | Zeitstempel der letzten Aktualisierung |
|
||||
| `listIds` | json | Array von Listen-IDs, zu denen der Kontakt gehört |
|
||||
| `customFields` | json | Benutzerdefinierte Feldwerte |
|
||||
| `email` | string | E-Mail-Adresse |
|
||||
| `firstName` | string | Vorname |
|
||||
| `lastName` | string | Nachname |
|
||||
| `contacts` | json | Array von Kontakten |
|
||||
| `contactCount` | number | Anzahl der Kontakte |
|
||||
| `lists` | json | Array von Listen |
|
||||
| `name` | string | Ressourcenname |
|
||||
| `templates` | json | Array von Vorlagen |
|
||||
| `message` | string | Status- oder Erfolgsmeldung |
|
||||
| `name` | string | Ressourcenname |
|
||||
| `generation` | string | Vorlagengeneration |
|
||||
| `versions` | json | Array von Vorlagenversionen |
|
||||
| `templateId` | string | Vorlagen-ID |
|
||||
| `active` | boolean | Ob die Vorlagenversion aktiv ist |
|
||||
| `htmlContent` | string | HTML-Inhalt |
|
||||
| `plainContent` | string | Nur-Text-Inhalt |
|
||||
|
||||
### `sendgrid_create_template_version`
|
||||
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
---
|
||||
title: SFTP
|
||||
description: Übertragen Sie Dateien über SFTP (SSH File Transfer Protocol)
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="sftp"
|
||||
color="#2D3748"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[SFTP (SSH File Transfer Protocol)](https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol) ist ein sicheres Netzwerkprotokoll, das es Ihnen ermöglicht, Dateien auf entfernten Servern hochzuladen, herunterzuladen und zu verwalten. SFTP arbeitet über SSH und ist damit ideal für automatisierte, verschlüsselte Dateiübertragungen und die Fernverwaltung von Dateien in modernen Arbeitsabläufen.
|
||||
|
||||
Mit den in Sim integrierten SFTP-Tools können Sie die Übertragung von Dateien zwischen Ihren KI-Agenten und externen Systemen oder Servern einfach automatisieren. Dies ermöglicht Ihren Agenten, kritische Datenaustausche, Backups, Dokumentenerstellung und die Orchestrierung entfernter Systeme – alles mit robuster Sicherheit – zu verwalten.
|
||||
|
||||
**Wichtige Funktionen, die über SFTP-Tools verfügbar sind:**
|
||||
|
||||
- **Dateien hochladen:** Übertragen Sie nahtlos Dateien jeder Art von Ihrem Workflow auf einen entfernten Server, mit Unterstützung für Passwort- und SSH-Private-Key-Authentifizierung.
|
||||
- **Dateien herunterladen:** Rufen Sie Dateien von entfernten SFTP-Servern direkt zur Verarbeitung, Archivierung oder weiteren Automatisierung ab.
|
||||
- **Dateien auflisten & verwalten:** Verzeichnisse auflisten, Dateien und Ordner löschen oder erstellen und Dateisystemberechtigungen ferngesteuert verwalten.
|
||||
- **Flexible Authentifizierung:** Verbinden Sie sich entweder mit herkömmlichen Passwörtern oder SSH-Schlüsseln, mit Unterstützung für Passphrasen und Berechtigungskontrolle.
|
||||
- **Unterstützung großer Dateien:** Verwalten Sie programmatisch große Datei-Uploads und -Downloads, mit integrierten Größenbeschränkungen für die Sicherheit.
|
||||
|
||||
Durch die Integration von SFTP in Sim können Sie sichere Dateioperationen als Teil jedes Workflows automatisieren, sei es Datenerfassung, Berichterstattung, Wartung entfernter Systeme oder dynamischer Inhaltsaustausch zwischen Plattformen.
|
||||
|
||||
Die folgenden Abschnitte beschreiben die wichtigsten verfügbaren SFTP-Tools:
|
||||
|
||||
- **sftp_upload:** Laden Sie eine oder mehrere Dateien auf einen entfernten Server hoch.
|
||||
- **sftp_download:** Laden Sie Dateien von einem entfernten Server in Ihren Workflow herunter.
|
||||
- **sftp_list:** Listen Sie Verzeichnisinhalte auf einem entfernten SFTP-Server auf.
|
||||
- **sftp_delete:** Löschen Sie Dateien oder Verzeichnisse von einem entfernten Server.
|
||||
- **sftp_create:** Erstellen Sie neue Dateien auf einem entfernten SFTP-Server.
|
||||
- **sftp_mkdir:** Erstellen Sie neue Verzeichnisse aus der Ferne.
|
||||
|
||||
Siehe die Werkzeugdokumentation unten für detaillierte Ein- und Ausgabeparameter für jede Operation.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Dateien auf Remote-Servern über SFTP hochladen, herunterladen, auflisten und verwalten. Unterstützt sowohl Passwort- als auch Private-Key-Authentifizierung für sichere Dateiübertragungen.
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
### `sftp_upload`
|
||||
|
||||
Dateien auf einen Remote-SFTP-Server hochladen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `host` | string | Ja | SFTP-Server-Hostname oder IP-Adresse |
|
||||
| `port` | number | Ja | SFTP-Server-Port \(Standard: 22\) |
|
||||
| `username` | string | Ja | SFTP-Benutzername |
|
||||
| `password` | string | Nein | Passwort für die Authentifizierung \(wenn kein Private Key verwendet wird\) |
|
||||
| `privateKey` | string | Nein | Private Key für die Authentifizierung \(OpenSSH-Format\) |
|
||||
| `passphrase` | string | Nein | Passphrase für verschlüsselten Private Key |
|
||||
| `remotePath` | string | Ja | Zielverzeichnis auf dem Remote-Server |
|
||||
| `files` | file[] | Nein | Hochzuladende Dateien |
|
||||
| `fileContent` | string | Nein | Direkter Dateiinhalt zum Hochladen \(für Textdateien\) |
|
||||
| `fileName` | string | Nein | Dateiname bei Verwendung von direktem Inhalt |
|
||||
| `overwrite` | boolean | Nein | Ob bestehende Dateien überschrieben werden sollen \(Standard: true\) |
|
||||
| `permissions` | string | Nein | Dateiberechtigungen \(z.B. 0644\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Upload erfolgreich war |
|
||||
| `uploadedFiles` | json | Array mit Details zu hochgeladenen Dateien \(Name, remotePath, Größe\) |
|
||||
| `message` | string | Statusmeldung des Vorgangs |
|
||||
|
||||
### `sftp_download`
|
||||
|
||||
Datei von einem entfernten SFTP-Server herunterladen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `host` | string | Ja | SFTP-Server-Hostname oder IP-Adresse |
|
||||
| `port` | number | Ja | SFTP-Server-Port \(Standard: 22\) |
|
||||
| `username` | string | Ja | SFTP-Benutzername |
|
||||
| `password` | string | Nein | Passwort für die Authentifizierung \(wenn kein privater Schlüssel verwendet wird\) |
|
||||
| `privateKey` | string | Nein | Privater Schlüssel für die Authentifizierung \(OpenSSH-Format\) |
|
||||
| `passphrase` | string | Nein | Passphrase für verschlüsselten privaten Schlüssel |
|
||||
| `remotePath` | string | Ja | Pfad zur Datei auf dem entfernten Server |
|
||||
| `encoding` | string | Nein | Ausgabe-Kodierung: utf-8 für Text, base64 für Binärdaten \(Standard: utf-8\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Download erfolgreich war |
|
||||
| `fileName` | string | Name der heruntergeladenen Datei |
|
||||
| `content` | string | Dateiinhalt \(Text oder base64-kodiert\) |
|
||||
| `size` | number | Dateigröße in Bytes |
|
||||
| `encoding` | string | Inhaltskodierung \(utf-8 oder base64\) |
|
||||
| `message` | string | Statusmeldung des Vorgangs |
|
||||
|
||||
### `sftp_list`
|
||||
|
||||
Dateien und Verzeichnisse auf einem entfernten SFTP-Server auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `host` | string | Ja | SFTP-Server-Hostname oder IP-Adresse |
|
||||
| `port` | number | Ja | SFTP-Server-Port \(Standard: 22\) |
|
||||
| `username` | string | Ja | SFTP-Benutzername |
|
||||
| `password` | string | Nein | Passwort für die Authentifizierung \(wenn kein privater Schlüssel verwendet wird\) |
|
||||
| `privateKey` | string | Nein | Privater Schlüssel für die Authentifizierung \(OpenSSH-Format\) |
|
||||
| `passphrase` | string | Nein | Passphrase für verschlüsselten privaten Schlüssel |
|
||||
| `remotePath` | string | Ja | Verzeichnispfad auf dem entfernten Server |
|
||||
| `detailed` | boolean | Nein | Detaillierte Dateiinformationen einschließen \(Größe, Berechtigungen, Änderungsdatum\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Vorgang erfolgreich war |
|
||||
| `path` | string | Verzeichnispfad, der aufgelistet wurde |
|
||||
| `entries` | json | Array von Verzeichniseinträgen mit Name, Typ, Größe, Berechtigungen, modifiedAt |
|
||||
| `count` | number | Anzahl der Einträge im Verzeichnis |
|
||||
| `message` | string | Statusmeldung des Vorgangs |
|
||||
|
||||
### `sftp_delete`
|
||||
|
||||
Löschen einer Datei oder eines Verzeichnisses auf einem entfernten SFTP-Server
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `host` | string | Ja | SFTP-Server-Hostname oder IP-Adresse |
|
||||
| `port` | number | Ja | SFTP-Server-Port \(Standard: 22\) |
|
||||
| `username` | string | Ja | SFTP-Benutzername |
|
||||
| `password` | string | Nein | Passwort für die Authentifizierung \(wenn kein privater Schlüssel verwendet wird\) |
|
||||
| `privateKey` | string | Nein | Privater Schlüssel für die Authentifizierung \(OpenSSH-Format\) |
|
||||
| `passphrase` | string | Nein | Passphrase für verschlüsselten privaten Schlüssel |
|
||||
| `remotePath` | string | Ja | Pfad zur Datei oder zum Verzeichnis, das gelöscht werden soll |
|
||||
| `recursive` | boolean | Nein | Verzeichnisse rekursiv löschen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob das Löschen erfolgreich war |
|
||||
| `deletedPath` | string | Pfad, der gelöscht wurde |
|
||||
| `message` | string | Statusmeldung des Vorgangs |
|
||||
|
||||
### `sftp_mkdir`
|
||||
|
||||
Ein Verzeichnis auf einem entfernten SFTP-Server erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `host` | string | Ja | SFTP-Server-Hostname oder IP-Adresse |
|
||||
| `port` | number | Ja | SFTP-Server-Port \(Standard: 22\) |
|
||||
| `username` | string | Ja | SFTP-Benutzername |
|
||||
| `password` | string | Nein | Passwort für die Authentifizierung \(wenn kein privater Schlüssel verwendet wird\) |
|
||||
| `privateKey` | string | Nein | Privater Schlüssel für die Authentifizierung \(OpenSSH-Format\) |
|
||||
| `passphrase` | string | Nein | Passphrase für verschlüsselten privaten Schlüssel |
|
||||
| `remotePath` | string | Ja | Pfad für das neue Verzeichnis |
|
||||
| `recursive` | boolean | Nein | Übergeordnete Verzeichnisse erstellen, falls sie nicht existieren |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob das Verzeichnis erfolgreich erstellt wurde |
|
||||
| `createdPath` | string | Pfad des erstellten Verzeichnisses |
|
||||
| `message` | string | Statusmeldung des Vorgangs |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `sftp`
|
||||
@@ -120,82 +120,6 @@ Lesen Sie die neuesten Nachrichten aus Slack-Kanälen. Rufen Sie den Konversatio
|
||||
| --------- | ---- | ----------- |
|
||||
| `messages` | array | Array von Nachrichtenobjekten aus dem Kanal |
|
||||
|
||||
### `slack_list_channels`
|
||||
|
||||
Listet alle Kanäle in einem Slack-Workspace auf. Gibt öffentliche und private Kanäle zurück, auf die der Bot Zugriff hat.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `includePrivate` | boolean | Nein | Private Kanäle einschließen, in denen der Bot Mitglied ist \(Standard: true\) |
|
||||
| `excludeArchived` | boolean | Nein | Archivierte Kanäle ausschließen \(Standard: true\) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kanäle \(Standard: 100, max: 200\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `channels` | array | Array von Kanalobjekten aus dem Workspace |
|
||||
|
||||
### `slack_list_members`
|
||||
|
||||
Listet alle Mitglieder (Benutzer-IDs) in einem Slack-Kanal auf. Verwenden Sie diese Funktion mit Get User Info, um IDs in Namen aufzulösen.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `channel` | string | Ja | Kanal-ID, aus der Mitglieder aufgelistet werden sollen |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Mitglieder \(Standard: 100, max: 200\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `members` | array | Array von Benutzer-IDs, die Mitglieder des Kanals sind \(z.B. U1234567890\) |
|
||||
|
||||
### `slack_list_users`
|
||||
|
||||
Listet alle Benutzer in einem Slack-Workspace auf. Gibt Benutzerprofile mit Namen und Avataren zurück.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `includeDeleted` | boolean | Nein | Deaktivierte/gelöschte Benutzer einbeziehen \(Standard: false\) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Benutzer \(Standard: 100, max: 200\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `users` | array | Array von Benutzerobjekten aus dem Workspace |
|
||||
|
||||
### `slack_get_user`
|
||||
|
||||
Ruft detaillierte Informationen über einen bestimmten Slack-Benutzer anhand seiner Benutzer-ID ab.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `userId` | string | Ja | Zu suchende Benutzer-ID \(z.B. U1234567890\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `user` | object | Detaillierte Benutzerinformationen |
|
||||
|
||||
### `slack_download`
|
||||
|
||||
Eine Datei von Slack herunterladen
|
||||
@@ -224,7 +148,7 @@ Eine zuvor vom Bot in Slack gesendete Nachricht aktualisieren
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `botToken` | string | Nein | Bot-Token für Custom Bot |
|
||||
| `channel` | string | Ja | Kanal-ID, in dem die Nachricht gepostet wurde \(z.B. C1234567890\) |
|
||||
| `timestamp` | string | Ja | Zeitstempel der zu aktualisierenden Nachricht \(z.B. 1405894322.002768\) |
|
||||
| `text` | string | Ja | Neuer Nachrichtentext \(unterstützt Slack mrkdwn-Formatierung\) |
|
||||
@@ -235,7 +159,7 @@ Eine zuvor vom Bot in Slack gesendete Nachricht aktualisieren
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | object | Vollständiges aktualisiertes Nachrichtenobjekt mit allen von Slack zurückgegebenen Eigenschaften |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | Aktualisierte Nachrichtenmetadaten |
|
||||
| `metadata` | object | Metadaten der aktualisierten Nachricht |
|
||||
|
||||
### `slack_delete_message`
|
||||
|
||||
@@ -246,7 +170,7 @@ Eine zuvor vom Bot in Slack gesendete Nachricht löschen
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
|
||||
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
|
||||
| `botToken` | string | Nein | Bot-Token für Custom Bot |
|
||||
| `channel` | string | Ja | Kanal-ID, in dem die Nachricht gepostet wurde \(z.B. C1234567890\) |
|
||||
| `timestamp` | string | Ja | Zeitstempel der zu löschenden Nachricht \(z.B. 1405894322.002768\) |
|
||||
|
||||
@@ -259,7 +183,7 @@ Eine zuvor vom Bot in Slack gesendete Nachricht löschen
|
||||
|
||||
### `slack_add_reaction`
|
||||
|
||||
Eine Emoji-Reaktion zu einer Slack-Nachricht hinzufügen
|
||||
Emoji-Reaktion zu einer Slack-Nachricht hinzufügen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="smtp"
|
||||
color="#2D3748"
|
||||
color="#4A5568"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
||||
---
|
||||
title: Amazon SQS
|
||||
description: Verbindung zu Amazon SQS
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="sqs"
|
||||
color="linear-gradient(45deg, #2E27AD 0%, #527FFF 100%)"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Amazon Simple Queue Service (SQS)](https://aws.amazon.com/sqs/) ist ein vollständig verwalteter Message-Queuing-Dienst, der es ermöglicht, Microservices, verteilte Systeme und serverlose Anwendungen zu entkoppeln und zu skalieren. SQS beseitigt die Komplexität und den Aufwand, die mit der Verwaltung und dem Betrieb von nachrichtenorientierter Middleware verbunden sind, und ermöglicht Entwicklern, sich auf differenzierende Arbeit zu konzentrieren.
|
||||
|
||||
Mit Amazon SQS können Sie:
|
||||
|
||||
- **Nachrichten senden**: Veröffentlichen Sie Nachrichten in Warteschlangen für asynchrone Verarbeitung
|
||||
- **Anwendungen entkoppeln**: Ermöglichen Sie eine lose Kopplung zwischen Komponenten Ihres Systems
|
||||
- **Workloads skalieren**: Bewältigen Sie variable Arbeitslasten ohne Bereitstellung von Infrastruktur
|
||||
- **Zuverlässigkeit gewährleisten**: Eingebaute Redundanz und hohe Verfügbarkeit
|
||||
- **FIFO-Warteschlangen unterstützen**: Strikte Nachrichtenreihenfolge und genau einmalige Verarbeitung beibehalten
|
||||
|
||||
In Sim ermöglicht die SQS-Integration Ihren Agenten, Nachrichten sicher und programmatisch an Amazon SQS-Warteschlangen zu senden. Unterstützte Operationen umfassen:
|
||||
|
||||
- **Nachricht senden**: Senden Sie Nachrichten an SQS-Warteschlangen mit optionaler Nachrichtengruppen-ID und Deduplizierungs-ID für FIFO-Warteschlangen
|
||||
|
||||
Diese Integration ermöglicht es Ihren Agenten, Workflows zum Senden von Nachrichten ohne manuelle Eingriffe zu automatisieren. Durch die Verbindung von Sim mit Amazon SQS können Sie Agenten erstellen, die Nachrichten innerhalb Ihrer Workflows in Warteschlangen veröffentlichen – alles ohne Verwaltung der Warteschlangen-Infrastruktur oder Verbindungen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integrieren Sie Amazon SQS in den Workflow. Kann Nachrichten an SQS-Warteschlangen senden.
|
||||
|
||||
## Tools
|
||||
|
||||
### `sqs_send`
|
||||
|
||||
Eine Nachricht an eine Amazon SQS-Warteschlange senden
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
|
||||
| `accessKeyId` | string | Ja | AWS-Zugriffsschlüssel-ID |
|
||||
| `secretAccessKey` | string | Ja | AWS-Geheimzugriffsschlüssel |
|
||||
| `queueUrl` | string | Ja | Queue-URL |
|
||||
| `data` | object | Ja | Zu sendender Nachrichtentext |
|
||||
| `messageGroupId` | string | Nein | Nachrichtengruppen-ID (optional) |
|
||||
| `messageDeduplicationId` | string | Nein | Nachrichtendeduplizierungs-ID (optional) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Statusmeldung der Operation |
|
||||
| `id` | string | Nachrichten-ID |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `sqs`
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Stagehand
|
||||
description: Web-Automatisierung und Datenextraktion
|
||||
title: Stagehand Extract
|
||||
description: Extract data from websites
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
@@ -11,73 +11,43 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Stagehand](https://stagehand.com) ist ein Tool, das sowohl die Extraktion strukturierter Daten aus Webseiten als auch autonome Web-Automatisierung mittels Browserbase und modernen LLMs (OpenAI oder Anthropic) ermöglicht.
|
||||
[Stagehand](https://stagehand.com) is a tool that allows you to extract structured data from webpages using Browserbase and OpenAI.
|
||||
|
||||
Stagehand bietet zwei Hauptfunktionen in Sim:
|
||||
With Stagehand, you can:
|
||||
|
||||
- **stagehand_extract**: Extrahiert strukturierte Daten von einer einzelnen Webseite. Sie geben an, was Sie möchten (ein Schema), und die KI ruft die Daten in dieser Form von der Seite ab und analysiert sie. Dies eignet sich am besten zum Extrahieren von Listen, Feldern oder Objekten, wenn Sie genau wissen, welche Informationen Sie benötigen und woher Sie diese bekommen.
|
||||
- **Extract structured data**: Extract structured data from webpages using Browserbase and OpenAI
|
||||
- **Save data to a database**: Save the extracted data to a database
|
||||
- **Automate workflows**: Automate workflows to extract data from webpages
|
||||
|
||||
- **stagehand_agent**: Führt einen autonomen Web-Agenten aus, der in der Lage ist, mehrstufige Aufgaben zu erledigen, mit Elementen zu interagieren, zwischen Seiten zu navigieren und strukturierte Ergebnisse zurückzugeben. Dies ist viel flexibler: der Agent kann Dinge wie Anmeldungen, Suchen, Ausfüllen von Formularen, Sammeln von Daten aus verschiedenen Quellen durchführen und ein Endergebnis gemäß einem angeforderten Schema ausgeben.
|
||||
|
||||
**Wesentliche Unterschiede:**
|
||||
|
||||
- *stagehand_extract* ist ein schneller “extrahiere diese Daten von dieser Seite” Vorgang. Es funktioniert am besten für direkte, einstufige Extraktionsaufgaben.
|
||||
- *stagehand_agent* führt komplexe, mehrstufige autonome Aufgaben im Web aus — wie Navigation, Suche oder sogar Transaktionen — und kann Daten dynamisch gemäß Ihren Anweisungen und einem optionalen Schema extrahieren.
|
||||
|
||||
In der Praxis verwenden Sie **stagehand_extract**, wenn Sie wissen, was Sie wollen und woher, und **stagehand_agent**, wenn Sie einen Bot benötigen, der interaktive Arbeitsabläufe durchdenkt und ausführt.
|
||||
|
||||
Durch die Integration von Stagehand können Sim-Agenten die Datenerfassung, -analyse und Workflow-Ausführung im Web automatisieren: Datenbanken aktualisieren, Informationen organisieren und benutzerdefinierte Berichte erstellen — nahtlos und autonom.
|
||||
In Sim, the Stagehand integration enables your agents to extract structured data from webpages using Browserbase and OpenAI. This allows for powerful automation scenarios such as data extraction, data analysis, and data integration. Your agents can extract structured data from webpages, save the extracted data to a database, and automate workflows to extract data from webpages. This integration bridges the gap between your AI workflows and your data management system, enabling seamless data extraction and integration. By connecting Sim with Stagehand, you can automate data extraction processes, maintain up-to-date information repositories, generate reports, and organize information intelligently - all through your intelligent agents.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Gebrauchsanweisung
|
||||
## Usage Instructions
|
||||
|
||||
Integrieren Sie Stagehand in den Workflow. Kann strukturierte Daten aus Webseiten extrahieren oder einen autonomen Agenten ausführen, um Aufgaben zu erledigen.
|
||||
Integrate Stagehand into the workflow. Can extract structured data from webpages.
|
||||
|
||||
## Tools
|
||||
|
||||
### `stagehand_extract`
|
||||
|
||||
Extrahieren Sie strukturierte Daten von einer Webseite mit Stagehand
|
||||
Extract structured data from a webpage using Stagehand
|
||||
|
||||
#### Eingabe
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `url` | string | Ja | URL der Webseite, aus der Daten extrahiert werden sollen |
|
||||
| `instruction` | string | Ja | Anweisungen für die Extraktion |
|
||||
| `provider` | string | Nein | Zu verwendender KI-Anbieter: openai oder anthropic |
|
||||
| `apiKey` | string | Ja | API-Schlüssel für den ausgewählten Anbieter |
|
||||
| `schema` | json | Ja | JSON-Schema, das die Struktur der zu extrahierenden Daten definiert |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `data` | object | Extrahierte strukturierte Daten, die dem bereitgestellten Schema entsprechen |
|
||||
|
||||
### `stagehand_agent`
|
||||
|
||||
Führen Sie einen autonomen Web-Agenten aus, um Aufgaben zu erledigen und strukturierte Daten zu extrahieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `startUrl` | string | Ja | URL der Webseite, auf der der Agent starten soll |
|
||||
| `task` | string | Ja | Die zu erledigende Aufgabe oder das zu erreichende Ziel auf der Website |
|
||||
| `variables` | json | Nein | Optionale Variablen, die in der Aufgabe ersetzt werden sollen (Format: \{key: value\}). Referenzierung in der Aufgabe mit %key% |
|
||||
| `format` | string | Nein | Keine Beschreibung |
|
||||
| `provider` | string | Nein | Zu verwendender KI-Anbieter: openai oder anthropic |
|
||||
| `apiKey` | string | Ja | API-Schlüssel für den ausgewählten Anbieter |
|
||||
| `outputSchema` | json | Nein | Optionales JSON-Schema, das die Struktur der Daten definiert, die der Agent zurückgeben soll |
|
||||
| `url` | string | Yes | URL of the webpage to extract data from |
|
||||
| `instruction` | string | Yes | Instructions for extraction |
|
||||
| `apiKey` | string | Yes | OpenAI API key for extraction \(required by Stagehand\) |
|
||||
| `schema` | json | Yes | JSON schema defining the structure of the data to extract |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `agentResult` | object | Ergebnis der Stagehand-Agent-Ausführung |
|
||||
| `data` | object | Extracted structured data matching the provided schema |
|
||||
|
||||
## Hinweise
|
||||
## Notes
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `stagehand`
|
||||
- Category: `tools`
|
||||
- Type: `stagehand`
|
||||
|
||||
59
apps/docs/content/docs/de/tools/stagehand_agent.mdx
Normal file
59
apps/docs/content/docs/de/tools/stagehand_agent.mdx
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: Stagehand Agent
|
||||
description: Autonomous web browsing agent
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="stagehand_agent"
|
||||
color="#FFC83C"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Stagehand](https://www.stagehand.dev/) is an autonomous web agent platform that enables AI systems to navigate and interact with websites just like a human would. It provides a powerful solution for automating complex web tasks without requiring custom code or browser automation scripts.
|
||||
|
||||
With Stagehand, you can:
|
||||
|
||||
- **Automate web navigation**: Enable AI to browse websites, click links, fill forms, and interact with web elements
|
||||
- **Extract structured data**: Collect specific information from websites in a structured, usable format
|
||||
- **Complete complex workflows**: Perform multi-step tasks across different websites and web applications
|
||||
- **Handle authentication**: Navigate login processes and maintain sessions across websites
|
||||
- **Process dynamic content**: Interact with JavaScript-heavy sites and single-page applications
|
||||
- **Maintain context awareness**: Keep track of the current state and history while navigating
|
||||
- **Generate detailed reports**: Receive comprehensive logs of actions taken and data collected
|
||||
|
||||
In Sim, the Stagehand integration enables your agents to seamlessly interact with web-based systems as part of their workflows. This allows for sophisticated automation scenarios that bridge the gap between your AI agents and the vast information and functionality available on the web. Your agents can search for information, interact with web applications, extract data from websites, and incorporate these capabilities into their decision-making processes. By connecting Sim with Stagehand, you can create agents that extend beyond API-based integrations to navigate the web just as a human would - filling forms, clicking buttons, reading content, and extracting valuable information to complete their tasks more effectively.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
Integrate Stagehand Agent into the workflow. Can navigate the web and perform tasks.
|
||||
|
||||
## Tools
|
||||
|
||||
### `stagehand_agent`
|
||||
|
||||
Run an autonomous web agent to complete tasks and extract structured data
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `startUrl` | string | Yes | URL of the webpage to start the agent on |
|
||||
| `task` | string | Yes | The task to complete or goal to achieve on the website |
|
||||
| `variables` | json | No | Optional variables to substitute in the task \(format: \{key: value\}\). Reference in task using %key% |
|
||||
| `format` | string | No | No description |
|
||||
| `apiKey` | string | Yes | OpenAI API key for agent execution \(required by Stagehand\) |
|
||||
| `outputSchema` | json | No | Optional JSON schema defining the structure of data the agent should return |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `agentResult` | object | Result from the Stagehand agent execution |
|
||||
|
||||
## Notes
|
||||
|
||||
- Category: `tools`
|
||||
- Type: `stagehand_agent`
|
||||
@@ -37,7 +37,7 @@ Verarbeitet einen bereitgestellten Gedanken/eine Anweisung und macht ihn für na
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `thought` | string | Ja | Ihre interne Argumentation, Analyse oder Denkprozess. Nutzen Sie dies, um das Problem Schritt für Schritt zu durchdenken, bevor Sie antworten. |
|
||||
| `thought` | string | Ja | Der vom Benutzer im Thinking Step-Block bereitgestellte Denkprozess oder die Anweisung. |
|
||||
|
||||
#### Output
|
||||
|
||||
|
||||
@@ -31,32 +31,39 @@ Integrieren Sie Übersetzen in den Workflow. Kann Text in jede Sprache übersetz
|
||||
|
||||
## Tools
|
||||
|
||||
### `llm_chat`
|
||||
|
||||
Senden Sie eine Chat-Completion-Anfrage an jeden unterstützten LLM-Anbieter
|
||||
### `openai_chat`
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `model` | string | Ja | Das zu verwendende Modell (z.B. gpt-4o, claude-sonnet-4-5, gemini-2.0-flash) |
|
||||
| `systemPrompt` | string | Nein | System-Prompt zur Festlegung des Assistentenverhaltens |
|
||||
| `context` | string | Ja | Die Benutzernachricht oder der Kontext, der an das Modell gesendet wird |
|
||||
| `apiKey` | string | Nein | API-Schlüssel für den Anbieter (verwendet den Plattformschlüssel, wenn für gehostete Modelle nicht angegeben) |
|
||||
| `temperature` | number | Nein | Temperatur für die Antwortgenerierung (0-2) |
|
||||
| `maxTokens` | number | Nein | Maximale Tokens in der Antwort |
|
||||
| `azureEndpoint` | string | Nein | Azure OpenAI-Endpunkt-URL |
|
||||
| `azureApiVersion` | string | Nein | Azure OpenAI API-Version |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Der generierte Antwortinhalt |
|
||||
| `model` | string | Das für die Generierung verwendete Modell |
|
||||
| `tokens` | object | Informationen zur Token-Nutzung |
|
||||
| `content` | string | Übersetzter Text |
|
||||
| `model` | string | Verwendetes Modell |
|
||||
| `tokens` | json | Token-Nutzung |
|
||||
|
||||
## Hinweise
|
||||
### `anthropic_chat`
|
||||
|
||||
### `google_chat`
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Übersetzter Text |
|
||||
| `model` | string | Verwendetes Modell |
|
||||
| `tokens` | json | Token-Nutzung |
|
||||
|
||||
## Notizen
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `translate`
|
||||
|
||||
@@ -45,8 +45,10 @@ Alle Listen auf einem Trello-Board auflisten
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Vorgang erfolgreich war |
|
||||
| `lists` | array | Array von Listenobjekten mit id, name, closed, pos und idBoard |
|
||||
| `count` | number | Anzahl der zurückgegebenen Listen |
|
||||
| `error` | string | Fehlermeldung, wenn der Vorgang fehlgeschlagen ist |
|
||||
|
||||
### `trello_list_cards`
|
||||
|
||||
@@ -63,8 +65,10 @@ Alle Listen eines Trello-Boards auflisten
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Ob der Vorgang erfolgreich war |
|
||||
| `cards` | array | Array von Kartenobjekten mit id, name, desc, url, Board/Listen-IDs, Labels und Fälligkeitsdatum |
|
||||
| `count` | number | Anzahl der zurückgegebenen Karten |
|
||||
| `error` | string | Fehlermeldung, wenn der Vorgang fehlgeschlagen ist |
|
||||
|
||||
### `trello_create_card`
|
||||
|
||||
@@ -86,7 +90,9 @@ Eine neue Karte auf einem Trello-Board erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `card` | object | Das erstellte Kartenobjekt mit id, name, desc, url und anderen Eigenschaften |
|
||||
| `success` | boolean | Ob die Karte erfolgreich erstellt wurde |
|
||||
| `card` | object | Das erstellte Kartenobjekt mit ID, Name, Beschreibung, URL und anderen Eigenschaften |
|
||||
| `error` | string | Fehlermeldung, falls der Vorgang fehlgeschlagen ist |
|
||||
|
||||
### `trello_update_card`
|
||||
|
||||
@@ -108,7 +114,9 @@ Eine bestehende Karte in Trello aktualisieren
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `card` | object | Das aktualisierte Kartenobjekt mit id, name, desc, url und anderen Eigenschaften |
|
||||
| `success` | boolean | Ob die Karte erfolgreich aktualisiert wurde |
|
||||
| `card` | object | Das aktualisierte Kartenobjekt mit ID, Name, Beschreibung, URL und anderen Eigenschaften |
|
||||
| `error` | string | Fehlermeldung, falls der Vorgang fehlgeschlagen ist |
|
||||
|
||||
### `trello_get_actions`
|
||||
|
||||
@@ -127,8 +135,10 @@ Aktivitäten/Aktionen von einem Board oder einer Karte abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `actions` | array | Array von Aktionsobjekten mit type, date, member und data |
|
||||
| `success` | boolean | Ob der Vorgang erfolgreich war |
|
||||
| `actions` | array | Array von Aktionsobjekten mit Typ, Datum, Mitglied und Daten |
|
||||
| `count` | number | Anzahl der zurückgegebenen Aktionen |
|
||||
| `error` | string | Fehlermeldung, falls der Vorgang fehlgeschlagen ist |
|
||||
|
||||
### `trello_add_comment`
|
||||
|
||||
@@ -145,7 +155,9 @@ Einen Kommentar zu einer Trello-Karte hinzufügen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `comment` | object | Das erstellte Kommentarobjekt mit id, text, date und member creator |
|
||||
| `success` | boolean | Ob der Kommentar erfolgreich hinzugefügt wurde |
|
||||
| `comment` | object | Das erstellte Kommentarobjekt mit ID, Text, Datum und Mitglied-Ersteller |
|
||||
| `error` | string | Fehlermeldung, falls der Vorgang fehlgeschlagen ist |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -48,9 +48,25 @@ Formularantworten von Typeform abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `total_items` | number | Gesamtanzahl der Antworten |
|
||||
| `page_count` | number | Gesamtanzahl der verfügbaren Seiten |
|
||||
| `items` | array | Array von Antwortobjekten mit response_id, submitted_at, answers und metadata |
|
||||
| `total_items` | number | Gesamtzahl der Antworten/Formulare |
|
||||
| `page_count` | number | Gesamtseitenanzahl |
|
||||
| `items` | json | Array der Antwort-/Formularelemente |
|
||||
| `id` | string | Eindeutige Formular-ID |
|
||||
| `title` | string | Formulartitel |
|
||||
| `type` | string | Formulartyp |
|
||||
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
|
||||
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
|
||||
| `settings` | json | Formulareinstellungsobjekt |
|
||||
| `theme` | json | Theme-Konfigurationsobjekt |
|
||||
| `workspace` | json | Workspace-Informationen |
|
||||
| `fields` | json | Array der Formularfelder/Fragen |
|
||||
| `thankyou_screens` | json | Array der Dankesbildschirme |
|
||||
| `_links` | json | Links zu verwandten Ressourcen |
|
||||
| `deleted` | boolean | Ob das Formular erfolgreich gelöscht wurde |
|
||||
| `message` | string | Löschbestätigungsnachricht |
|
||||
| `fileUrl` | string | URL der heruntergeladenen Datei |
|
||||
| `contentType` | string | Datei-Content-Type |
|
||||
| `filename` | string | Dateiname |
|
||||
|
||||
### `typeform_files`
|
||||
|
||||
@@ -112,7 +128,7 @@ Eine Liste aller Formulare in Ihrem Typeform-Konto abrufen
|
||||
| --------- | ---- | ----------- |
|
||||
| `total_items` | number | Gesamtanzahl der Formulare im Konto |
|
||||
| `page_count` | number | Gesamtanzahl der verfügbaren Seiten |
|
||||
| `items` | array | Array von Formularobjekten mit id, title, created_at, last_updated_at, settings, theme und _links |
|
||||
| `items` | array | Array von Formularobjekten |
|
||||
|
||||
### `typeform_get_form`
|
||||
|
||||
@@ -132,13 +148,11 @@ Vollständige Details und Struktur eines bestimmten Formulars abrufen
|
||||
| `id` | string | Eindeutige Formular-ID |
|
||||
| `title` | string | Formulartitel |
|
||||
| `type` | string | Formulartyp \(form, quiz, etc.\) |
|
||||
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
|
||||
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
|
||||
| `settings` | object | Formulareinstellungen einschließlich Sprache, Fortschrittsbalken, etc. |
|
||||
| `theme` | object | Theme-Referenz |
|
||||
| `workspace` | object | Workspace-Referenz |
|
||||
| `fields` | array | Array von Formularfeldern/Fragen |
|
||||
| `welcome_screens` | array | Array von Begrüßungsbildschirmen |
|
||||
| `thankyou_screens` | array | Array von Dankesbildschirmen |
|
||||
| `_links` | object | Links zu verwandten Ressourcen einschließlich öffentlicher Formular-URL |
|
||||
| `theme` | object | Theme-Konfiguration mit Farben, Schriftarten und Design-Einstellungen |
|
||||
| `workspace` | object | Workspace-Informationen |
|
||||
|
||||
### `typeform_create_form`
|
||||
|
||||
@@ -163,8 +177,13 @@ Ein neues Formular mit Feldern und Einstellungen erstellen
|
||||
| `id` | string | Eindeutige Kennung des erstellten Formulars |
|
||||
| `title` | string | Formulartitel |
|
||||
| `type` | string | Formulartyp |
|
||||
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
|
||||
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
|
||||
| `settings` | object | Formulareinstellungen |
|
||||
| `theme` | object | Angewandte Theme-Konfiguration |
|
||||
| `workspace` | object | Workspace-Informationen |
|
||||
| `fields` | array | Array der erstellten Formularfelder |
|
||||
| `_links` | object | Links zu verwandten Ressourcen einschließlich öffentlicher Formular-URL |
|
||||
| `_links` | object | Links zu verwandten Ressourcen |
|
||||
|
||||
### `typeform_update_form`
|
||||
|
||||
@@ -185,12 +204,13 @@ Ein bestehendes Formular mit JSON Patch-Operationen aktualisieren
|
||||
| `id` | string | Eindeutige Kennung des aktualisierten Formulars |
|
||||
| `title` | string | Formulartitel |
|
||||
| `type` | string | Formulartyp |
|
||||
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
|
||||
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
|
||||
| `settings` | object | Formulareinstellungen |
|
||||
| `theme` | object | Theme-Referenz |
|
||||
| `workspace` | object | Workspace-Referenz |
|
||||
| `fields` | array | Array von Formularfeldern |
|
||||
| `welcome_screens` | array | Array von Begrüßungsbildschirmen |
|
||||
| `thankyou_screens` | array | Array von Dankesbildschirmen |
|
||||
| `theme` | object | Theme-Konfiguration |
|
||||
| `workspace` | object | Workspace-Informationen |
|
||||
| `fields` | array | Array der Formularfelder |
|
||||
| `thankyou_screens` | array | Array der Dankesbildschirme |
|
||||
| `_links` | object | Links zu verwandten Ressourcen |
|
||||
|
||||
### `typeform_delete_form`
|
||||
|
||||
@@ -39,10 +39,9 @@ Alle Elemente aus einer Webflow CMS-Sammlung auflisten
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | ID der Webflow-Website |
|
||||
| `collectionId` | string | Ja | ID der Sammlung |
|
||||
| `offset` | number | Nein | Offset für Paginierung (optional) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Elemente (optional, Standard: 100) |
|
||||
| `offset` | number | Nein | Offset für Paginierung \(optional\) |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Elemente \(optional, Standard: 100\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -59,7 +58,6 @@ Ein einzelnes Element aus einer Webflow CMS-Sammlung abrufen
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | ID der Webflow-Website |
|
||||
| `collectionId` | string | Ja | ID der Sammlung |
|
||||
| `itemId` | string | Ja | ID des abzurufenden Elements |
|
||||
|
||||
@@ -78,9 +76,8 @@ Ein neues Element in einer Webflow CMS-Sammlung erstellen
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | ID der Webflow-Website |
|
||||
| `collectionId` | string | Ja | ID der Sammlung |
|
||||
| `fieldData` | json | Ja | Felddaten für das neue Element als JSON-Objekt. Schlüssel sollten mit den Sammlungsfeldnamen übereinstimmen. |
|
||||
| `fieldData` | json | Ja | Felddaten für das neue Element als JSON-Objekt. Die Schlüssel sollten mit den Feldnamen der Sammlung übereinstimmen. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -97,7 +94,6 @@ Ein vorhandenes Element in einer Webflow CMS-Sammlung aktualisieren
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | ID der Webflow-Website |
|
||||
| `collectionId` | string | Ja | ID der Sammlung |
|
||||
| `itemId` | string | Ja | ID des zu aktualisierenden Elements |
|
||||
| `fieldData` | json | Ja | Zu aktualisierende Felddaten als JSON-Objekt. Nur Felder einschließen, die geändert werden sollen. |
|
||||
@@ -117,7 +113,6 @@ Ein Element aus einer Webflow CMS-Sammlung löschen
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | ID der Webflow-Website |
|
||||
| `collectionId` | string | Ja | ID der Sammlung |
|
||||
| `itemId` | string | Ja | ID des zu löschenden Elements |
|
||||
|
||||
|
||||
@@ -250,9 +250,9 @@ Eine Mediendatei (Bild, Video, Dokument) zu WordPress.com hochladen
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `siteId` | string | Ja | WordPress.com-Site-ID oder Domain \(z.B. 12345678 oder mysite.wordpress.com\) |
|
||||
| `file` | file | Nein | Hochzuladende Datei \(UserFile-Objekt\) |
|
||||
| `filename` | string | Nein | Optionale Überschreibung des Dateinamens \(z.B. bild.jpg\) |
|
||||
| `siteId` | string | Ja | WordPress.com-Website-ID oder Domain \(z.B. 12345678 oder meinwebsite.wordpress.com\) |
|
||||
| `file` | string | Ja | Base64-kodierte Dateidaten oder URL, von der die Datei abgerufen werden soll |
|
||||
| `filename` | string | Ja | Dateiname mit Erweiterung \(z.B. bild.jpg\) |
|
||||
| `title` | string | Nein | Medientitel |
|
||||
| `caption` | string | Nein | Medienunterschrift |
|
||||
| `altText` | string | Nein | Alternativer Text für Barrierefreiheit |
|
||||
|
||||
@@ -170,9 +170,28 @@ Videos aus einer YouTube-Playlist abrufen.
|
||||
| --------- | ---- | ----------- |
|
||||
| `items` | array | Array von Videos in der Playlist |
|
||||
|
||||
### `youtube_related_videos`
|
||||
|
||||
Finde Videos, die mit einem bestimmten YouTube-Video verwandt sind.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `videoId` | string | Ja | YouTube-Video-ID, für die verwandte Videos gefunden werden sollen |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden verwandten Videos \(1-50\) |
|
||||
| `pageToken` | string | Nein | Page-Token für Paginierung |
|
||||
| `apiKey` | string | Ja | YouTube API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `items` | array | Array von verwandten Videos |
|
||||
|
||||
### `youtube_comments`
|
||||
|
||||
Kommentare von einem YouTube-Video abrufen.
|
||||
Rufe Kommentare von einem YouTube-Video ab.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
@@ -181,7 +200,7 @@ Kommentare von einem YouTube-Video abrufen.
|
||||
| `videoId` | string | Ja | YouTube-Video-ID |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare |
|
||||
| `order` | string | Nein | Reihenfolge der Kommentare: time oder relevance |
|
||||
| `pageToken` | string | Nein | Seitentoken für Paginierung |
|
||||
| `pageToken` | string | Nein | Page-Token für Paginierung |
|
||||
| `apiKey` | string | Ja | YouTube API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
@@ -73,9 +73,8 @@ Eine Liste von Tickets aus Zendesk mit optionaler Filterung abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `tickets` | array | Array von Ticket-Objekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ticket-Daten und Metadaten |
|
||||
|
||||
### `zendesk_get_ticket`
|
||||
|
||||
@@ -94,8 +93,8 @@ Ein einzelnes Ticket anhand der ID von Zendesk abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ticket` | object | Ticket-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ticket-Daten |
|
||||
|
||||
### `zendesk_create_ticket`
|
||||
|
||||
@@ -121,10 +120,10 @@ Ein neues Ticket in Zendesk erstellen mit Unterstützung für benutzerdefinierte
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ticket` | object | Erstelltes Ticket-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Erstellte Ticket-Daten |
|
||||
|
||||
### `zendesk_create_tickets_bulk`
|
||||
|
||||
@@ -141,10 +140,10 @@ Erstellen Sie mehrere Tickets in Zendesk auf einmal (maximal 100)
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Status-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Status des Massenerstell-Jobs |
|
||||
|
||||
### `zendesk_update_ticket`
|
||||
|
||||
@@ -172,8 +171,8 @@ Aktualisieren Sie ein bestehendes Ticket in Zendesk mit Unterstützung für benu
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ticket` | object | Aktualisiertes Ticket-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Ticket-Daten |
|
||||
|
||||
### `zendesk_update_tickets_bulk`
|
||||
|
||||
@@ -197,8 +196,8 @@ Mehrere Tickets in Zendesk auf einmal aktualisieren (max. 100)
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Status-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Status des Massenaktualisierungsauftrags |
|
||||
|
||||
### `zendesk_delete_ticket`
|
||||
|
||||
@@ -217,8 +216,8 @@ Ein Ticket aus Zendesk löschen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deleted` | boolean | Löschvorgang erfolgreich |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Löschbestätigung |
|
||||
|
||||
### `zendesk_merge_tickets`
|
||||
|
||||
@@ -239,8 +238,8 @@ Mehrere Tickets in ein Zielticket zusammenführen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Status-Objekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Status des Zusammenführungsauftrags |
|
||||
|
||||
### `zendesk_get_users`
|
||||
|
||||
@@ -262,9 +261,8 @@ Eine Liste von Benutzern aus Zendesk mit optionaler Filterung abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `users` | array | Array von Benutzerobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Benutzerdaten und Metadaten |
|
||||
|
||||
### `zendesk_get_user`
|
||||
|
||||
@@ -283,8 +281,8 @@ Einen einzelnen Benutzer anhand der ID von Zendesk abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `user` | object | Benutzerobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Benutzerdaten |
|
||||
|
||||
### `zendesk_get_current_user`
|
||||
|
||||
@@ -302,8 +300,8 @@ Den aktuell authentifizierten Benutzer von Zendesk abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `user` | object | Aktuelles Benutzerobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des aktuellen Benutzers |
|
||||
|
||||
### `zendesk_search_users`
|
||||
|
||||
@@ -325,9 +323,8 @@ Nach Benutzern in Zendesk mit einer Abfragezeichenfolge suchen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `users` | array | Array von Benutzerobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse für Benutzer |
|
||||
|
||||
### `zendesk_create_user`
|
||||
|
||||
@@ -351,10 +348,10 @@ Einen neuen Benutzer in Zendesk erstellen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `user` | object | Erstelltes Benutzerobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Erstellte Benutzerdaten |
|
||||
|
||||
### `zendesk_create_users_bulk`
|
||||
|
||||
@@ -371,10 +368,10 @@ Erstellen mehrerer Benutzer in Zendesk mittels Massenimport
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Statusobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Status des Massenimport-Jobs |
|
||||
|
||||
### `zendesk_update_user`
|
||||
|
||||
@@ -401,8 +398,8 @@ Aktualisieren eines vorhandenen Benutzers in Zendesk
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `user` | object | Aktualisiertes Benutzerobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Benutzerdaten |
|
||||
|
||||
### `zendesk_update_users_bulk`
|
||||
|
||||
@@ -421,8 +418,8 @@ Mehrere Benutzer in Zendesk über Massenaktualisierung aktualisieren
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Statusobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Status des Massenaktualisierungsauftrags |
|
||||
|
||||
### `zendesk_delete_user`
|
||||
|
||||
@@ -441,8 +438,8 @@ Einen Benutzer aus Zendesk löschen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deleted` | boolean | Löscherfolg |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des gelöschten Benutzers |
|
||||
|
||||
### `zendesk_get_organizations`
|
||||
|
||||
@@ -462,9 +459,8 @@ Eine Liste von Organisationen von Zendesk abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `organizations` | array | Array von Organisationsobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Organisationsdaten und Metadaten |
|
||||
|
||||
### `zendesk_get_organization`
|
||||
|
||||
@@ -483,8 +479,8 @@ Eine einzelne Organisation anhand der ID von Zendesk abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `organization` | object | Organisationsobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Organisationsdaten |
|
||||
|
||||
### `zendesk_autocomplete_organizations`
|
||||
|
||||
@@ -503,11 +499,10 @@ Autovervollständigung von Organisationen in Zendesk nach Namenspräfix (für Na
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `organizations` | array | Array von Organisationsobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnisse für Organisationen |
|
||||
|
||||
### `zendesk_create_organization`
|
||||
|
||||
@@ -529,10 +524,10 @@ Eine neue Organisation in Zendesk erstellen
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `organization` | object | Erstelltes Organisationsobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten der erstellten Organisation |
|
||||
|
||||
### `zendesk_create_organizations_bulk`
|
||||
|
||||
@@ -551,8 +546,8 @@ Mehrere Organisationen in Zendesk über Massenimport erstellen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `jobStatus` | object | Job-Statusobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Status des Massenerfassungsauftrags |
|
||||
|
||||
### `zendesk_update_organization`
|
||||
|
||||
@@ -577,8 +572,8 @@ Eine bestehende Organisation in Zendesk aktualisieren
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `organization` | object | Aktualisiertes Organisationsobjekt |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Organisationsdaten |
|
||||
|
||||
### `zendesk_delete_organization`
|
||||
|
||||
@@ -597,8 +592,8 @@ Eine Organisation aus Zendesk löschen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `deleted` | boolean | Löscherfolg |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Gelöschte Organisationsdaten |
|
||||
|
||||
### `zendesk_search`
|
||||
|
||||
@@ -621,9 +616,8 @@ Einheitliche Suche über Tickets, Benutzer und Organisationen in Zendesk
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `results` | array | Array von Ergebnisobjekten |
|
||||
| `paging` | object | Paginierungsinformationen |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `zendesk_search_count`
|
||||
|
||||
@@ -642,8 +636,8 @@ Zählen der Anzahl von Suchergebnissen, die einer Abfrage in Zendesk entsprechen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `count` | number | Anzahl der übereinstimmenden Ergebnisse |
|
||||
| `metadata` | object | Operationsmetadaten |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnis-Anzahl |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -94,7 +94,10 @@ Benutzerkontext aus einem Thread mit Zusammenfassungs- oder Basismodus abrufen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `context` | string | Die Kontext-Zeichenfolge \(Zusammenfassung oder Basismodus\) |
|
||||
| `context` | string | Der Kontextstring \(Zusammenfassung oder Basis\) |
|
||||
| `facts` | array | Extrahierte Fakten |
|
||||
| `entities` | array | Extrahierte Entitäten |
|
||||
| `summary` | string | Konversationszusammenfassung |
|
||||
|
||||
### `zep_get_messages`
|
||||
|
||||
@@ -134,9 +137,9 @@ Nachrichten zu einem bestehenden Thread hinzufügen
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `threadId` | string | Die Thread-ID |
|
||||
| `added` | boolean | Ob Nachrichten erfolgreich hinzugefügt wurden |
|
||||
| `context` | string | Aktualisierter Kontext nach dem Hinzufügen von Nachrichten |
|
||||
| `messageIds` | array | Array der hinzugefügten Nachrichten-UUIDs |
|
||||
| `threadId` | string | Die Thread-ID |
|
||||
|
||||
### `zep_add_user`
|
||||
|
||||
@@ -206,7 +209,7 @@ Alle Konversations-Threads für einen bestimmten Benutzer auflisten
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `threads` | array | Array von Thread-Objekten für diesen Benutzer |
|
||||
| `totalCount` | number | Gesamtanzahl der zurückgegebenen Threads |
|
||||
| `userId` | string | Die Benutzer-ID |
|
||||
|
||||
## Hinweise
|
||||
|
||||
|
||||
@@ -30,19 +30,15 @@ Verwende den Start-Block für alles, was aus dem Editor, deploy-to-API oder depl
|
||||
<Card title="Schedule" href="/triggers/schedule">
|
||||
Cron- oder intervallbasierte Ausführung
|
||||
</Card>
|
||||
<Card title="RSS Feed" href="/triggers/rss">
|
||||
RSS- und Atom-Feeds auf neue Inhalte überwachen
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Schneller Vergleich
|
||||
|
||||
| Trigger | Startbedingung |
|
||||
|---------|-----------------|
|
||||
| **Start** | Editor-Ausführungen, Deploy-to-API-Anfragen oder Chat-Nachrichten |
|
||||
| **Start** | Editor-Ausführungen, deploy-to-API Anfragen oder Chat-Nachrichten |
|
||||
| **Schedule** | Timer, der im Schedule-Block verwaltet wird |
|
||||
| **Webhook** | Bei eingehender HTTP-Anfrage |
|
||||
| **RSS Feed** | Neues Element im Feed veröffentlicht |
|
||||
|
||||
> Der Start-Block stellt immer `input`, `conversationId` und `files` Felder bereit. Füge benutzerdefinierte Felder zum Eingabeformat für zusätzliche strukturierte Daten hinzu.
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
title: RSS-Feed
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der RSS-Feed-Block überwacht RSS- und Atom-Feeds – wenn neue Einträge veröffentlicht werden, wird Ihr Workflow automatisch ausgelöst.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/rss.png"
|
||||
alt="RSS-Feed-Block"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Konfiguration
|
||||
|
||||
1. **RSS-Feed-Block hinzufügen** - Ziehen Sie den RSS-Feed-Block, um Ihren Workflow zu starten
|
||||
2. **Feed-URL eingeben** - Fügen Sie die URL eines beliebigen RSS- oder Atom-Feeds ein
|
||||
3. **Bereitstellen** - Stellen Sie Ihren Workflow bereit, um das Polling zu aktivieren
|
||||
|
||||
Nach der Bereitstellung wird der Feed jede Minute auf neue Einträge überprüft.
|
||||
|
||||
## Ausgabefelder
|
||||
|
||||
| Feld | Typ | Beschreibung |
|
||||
|-------|------|-------------|
|
||||
| `title` | string | Titel des Eintrags |
|
||||
| `link` | string | Link des Eintrags |
|
||||
| `pubDate` | string | Veröffentlichungsdatum |
|
||||
| `item` | object | Rohdaten des Eintrags mit allen Feldern |
|
||||
| `feed` | object | Rohdaten der Feed-Metadaten |
|
||||
|
||||
Greifen Sie direkt auf zugeordnete Felder zu (`<rss.title>`) oder verwenden Sie die Rohobjekte für beliebige Felder (`<rss.item.author>`, `<rss.feed.language>`).
|
||||
|
||||
## Anwendungsfälle
|
||||
|
||||
- **Inhaltsüberwachung** - Verfolgen Sie Blogs, Nachrichtenseiten oder Updates von Wettbewerbern
|
||||
- **Podcast-Automatisierung** - Lösen Sie Workflows aus, wenn neue Episoden erscheinen
|
||||
- **Release-Tracking** - Überwachen Sie GitHub-Releases, Changelogs oder Produkt-Updates
|
||||
- **Social-Media-Aggregation** - Sammeln Sie Inhalte von Plattformen, die RSS-Feeds anbieten
|
||||
|
||||
<Callout>
|
||||
RSS-Trigger werden nur für Einträge ausgelöst, die nach dem Speichern des Triggers veröffentlicht wurden. Bestehende Feed-Einträge werden nicht verarbeitet.
|
||||
</Callout>
|
||||
@@ -66,16 +66,16 @@ Um Umgebungsvariablen in Ihren Workflows zu referenzieren, verwenden Sie die `{{
|
||||
height={350}
|
||||
/>
|
||||
|
||||
## Wie Variablen aufgelöst werden
|
||||
## Variablen-Präzedenz
|
||||
|
||||
**Workspace-Variablen haben immer Vorrang** vor persönlichen Variablen, unabhängig davon, wer den Workflow ausführt.
|
||||
Wenn Sie sowohl persönliche als auch Workspace-Variablen mit demselben Namen haben:
|
||||
|
||||
Wenn keine Workspace-Variable für einen Schlüssel existiert, werden persönliche Variablen verwendet:
|
||||
- **Manuelle Ausführungen (UI)**: Ihre persönlichen Variablen
|
||||
- **Automatisierte Ausführungen (API, Webhook, Zeitplan, bereitgestellter Chat)**: Persönliche Variablen des Workflow-Besitzers
|
||||
1. **Workspace-Variablen haben Vorrang** vor persönlichen Variablen
|
||||
2. Dies verhindert Namenskonflikte und gewährleistet ein konsistentes Verhalten in Team-Workflows
|
||||
3. Wenn eine Workspace-Variable existiert, wird die persönliche Variable mit demselben Namen ignoriert
|
||||
|
||||
<Callout type="info">
|
||||
Persönliche Variablen eignen sich am besten zum Testen. Verwenden Sie Workspace-Variablen für Produktions-Workflows.
|
||||
<Callout type="warning">
|
||||
Wählen Sie Variablennamen sorgfältig, um unbeabsichtigte Überschreibungen zu vermeiden. Erwägen Sie, persönliche Variablen mit Ihren Initialen oder Workspace-Variablen mit dem Projektnamen zu versehen.
|
||||
</Callout>
|
||||
|
||||
## Sicherheits-Best-Practices
|
||||
|
||||
@@ -135,7 +135,7 @@ Function (Process) → Condition (account_type === 'enterprise') → Advanced or
|
||||
## Best Practices
|
||||
|
||||
- **Order conditions correctly**: Place more specific conditions before general ones to ensure specific logic takes precedence over fallbacks
|
||||
- **Use the else branch when needed**: If no conditions match and the else branch is not connected, the workflow branch will end gracefully. Connect the else branch if you need a fallback path for unmatched cases
|
||||
- **Include a default condition**: Add a catch-all condition (`true`) as the last condition to handle unmatched cases and prevent workflow execution from getting stuck
|
||||
- **Keep expressions simple**: Use clear, straightforward boolean expressions for better readability and easier debugging
|
||||
- **Document your conditions**: Add descriptions to explain the purpose of each condition for better team collaboration and maintenance
|
||||
- **Test edge cases**: Verify conditions handle boundary values correctly by testing with values at the edges of your condition ranges
|
||||
|
||||
@@ -27,16 +27,14 @@ All API responses include information about your workflow execution limits and u
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60, // Sustained rate limit per minute
|
||||
"maxBurst": 120, // Maximum burst capacity
|
||||
"remaining": 118, // Current tokens available (up to maxBurst)
|
||||
"resetAt": "..." // When tokens next refill
|
||||
"limit": 60, // Max sync workflow executions per minute
|
||||
"remaining": 58, // Remaining sync workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200, // Sustained rate limit per minute
|
||||
"maxBurst": 400, // Maximum burst capacity
|
||||
"remaining": 398, // Current tokens available
|
||||
"resetAt": "..." // When tokens next refill
|
||||
"limit": 60, // Max async workflow executions per minute
|
||||
"remaining": 59, // Remaining async workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
}
|
||||
},
|
||||
"usage": {
|
||||
@@ -48,7 +46,7 @@ All API responses include information about your workflow execution limits and u
|
||||
}
|
||||
```
|
||||
|
||||
**Note:** Rate limits use a token bucket algorithm. `remaining` can exceed `requestsPerMinute` up to `maxBurst` when you haven't used your full allowance recently, allowing for burst traffic. The rate limits in the response body are for workflow executions. The rate limits for calling this API endpoint are in the response headers (`X-RateLimit-*`).
|
||||
**Note:** The rate limits in the response body are for workflow executions. The rate limits for calling this API endpoint are in the response headers (`X-RateLimit-*`).
|
||||
|
||||
### Query Logs
|
||||
|
||||
@@ -110,15 +108,13 @@ Query workflow execution logs with extensive filtering options.
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60,
|
||||
"maxBurst": 120,
|
||||
"remaining": 118,
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 398,
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
@@ -188,15 +184,13 @@ Retrieve detailed information about a specific log entry.
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"requestsPerMinute": 60,
|
||||
"maxBurst": 120,
|
||||
"remaining": 118,
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 398,
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
@@ -246,78 +240,32 @@ Retrieve execution details including the workflow state snapshot.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Notifications
|
||||
## Webhook Subscriptions
|
||||
|
||||
Get real-time notifications when workflow executions complete via webhook, email, or Slack. Notifications are configured at the workspace level from the Logs page.
|
||||
Get real-time notifications when workflow executions complete. Webhooks are configured through the Sim UI in the workflow editor.
|
||||
|
||||
### Configuration
|
||||
|
||||
Configure notifications from the Logs page by clicking the menu button and selecting "Configure Notifications".
|
||||
Webhooks can be configured for each workflow through the workflow editor UI. Click the webhook icon in the control bar to set up your webhook subscriptions.
|
||||
|
||||
**Notification Channels:**
|
||||
- **Webhook**: Send HTTP POST requests to your endpoint
|
||||
- **Email**: Receive email notifications with execution details
|
||||
- **Slack**: Post messages to a Slack channel
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="configure-webhook.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
**Workflow Selection:**
|
||||
- Select specific workflows to monitor
|
||||
- Or choose "All Workflows" to include current and future workflows
|
||||
|
||||
**Filtering Options:**
|
||||
- `levelFilter`: Log levels to receive (`info`, `error`)
|
||||
- `triggerFilter`: Trigger types to receive (`api`, `webhook`, `schedule`, `manual`, `chat`)
|
||||
|
||||
**Optional Data:**
|
||||
- `includeFinalOutput`: Include the workflow's final output
|
||||
- `includeTraceSpans`: Include detailed execution trace spans
|
||||
- `includeRateLimits`: Include rate limit information (sync/async limits and remaining)
|
||||
- `includeUsageData`: Include billing period usage and limits
|
||||
|
||||
### Alert Rules
|
||||
|
||||
Instead of receiving notifications for every execution, configure alert rules to be notified only when issues are detected:
|
||||
|
||||
**Consecutive Failures**
|
||||
- Alert after X consecutive failed executions (e.g., 3 failures in a row)
|
||||
- Resets when an execution succeeds
|
||||
|
||||
**Failure Rate**
|
||||
- Alert when failure rate exceeds X% over the last Y hours
|
||||
- Requires minimum 5 executions in the window
|
||||
- Only triggers after the full time window has elapsed
|
||||
|
||||
**Latency Threshold**
|
||||
- Alert when any execution takes longer than X seconds
|
||||
- Useful for catching slow or hanging workflows
|
||||
|
||||
**Latency Spike**
|
||||
- Alert when execution is X% slower than the average
|
||||
- Compares against the average duration over the configured time window
|
||||
- Requires minimum 5 executions to establish baseline
|
||||
|
||||
**Cost Threshold**
|
||||
- Alert when a single execution costs more than $X
|
||||
- Useful for catching expensive LLM calls
|
||||
|
||||
**No Activity**
|
||||
- Alert when no executions occur within X hours
|
||||
- Useful for monitoring scheduled workflows that should run regularly
|
||||
|
||||
**Error Count**
|
||||
- Alert when error count exceeds X within a time window
|
||||
- Tracks total errors, not consecutive
|
||||
|
||||
All alert types include a 1-hour cooldown to prevent notification spam.
|
||||
|
||||
### Webhook Configuration
|
||||
|
||||
For webhooks, additional options are available:
|
||||
**Available Configuration Options:**
|
||||
- `url`: Your webhook endpoint URL
|
||||
- `secret`: Optional secret for HMAC signature verification
|
||||
- `includeFinalOutput`: Include the workflow's final output in the payload
|
||||
- `includeTraceSpans`: Include detailed execution trace spans
|
||||
- `includeRateLimits`: Include the workflow owner's rate limit information
|
||||
- `includeUsageData`: Include the workflow owner's usage and billing data
|
||||
- `levelFilter`: Array of log levels to receive (`info`, `error`)
|
||||
- `triggerFilter`: Array of trigger types to receive (`api`, `webhook`, `schedule`, `manual`, `chat`)
|
||||
- `active`: Enable/disable the webhook subscription
|
||||
|
||||
### Payload Structure
|
||||
### Webhook Payload
|
||||
|
||||
When a workflow execution completes, Sim sends the following payload (via webhook POST, email, or Slack):
|
||||
When a workflow execution completes, Sim sends a POST request to your webhook URL:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -368,7 +316,7 @@ When a workflow execution completes, Sim sends the following payload (via webhoo
|
||||
|
||||
### Webhook Headers
|
||||
|
||||
Each webhook request includes these headers (webhook channel only):
|
||||
Each webhook request includes these headers:
|
||||
|
||||
- `sim-event`: Event type (always `workflow.execution.completed`)
|
||||
- `sim-timestamp`: Unix timestamp in milliseconds
|
||||
@@ -473,25 +421,17 @@ Failed webhook deliveries are retried with exponential backoff and jitter:
|
||||
|
||||
## Rate Limiting
|
||||
|
||||
The API uses a **token bucket algorithm** for rate limiting, providing fair usage while allowing burst traffic:
|
||||
The API implements rate limiting to ensure fair usage:
|
||||
|
||||
| Plan | Requests/Minute | Burst Capacity |
|
||||
|------|-----------------|----------------|
|
||||
| Free | 10 | 20 |
|
||||
| Pro | 30 | 60 |
|
||||
| Team | 60 | 120 |
|
||||
| Enterprise | 120 | 240 |
|
||||
|
||||
**How it works:**
|
||||
- Tokens refill at `requestsPerMinute` rate
|
||||
- You can accumulate up to `maxBurst` tokens when idle
|
||||
- Each request consumes 1 token
|
||||
- Burst capacity allows handling traffic spikes
|
||||
- **Free plan**: 10 requests per minute
|
||||
- **Pro plan**: 30 requests per minute
|
||||
- **Team plan**: 60 requests per minute
|
||||
- **Enterprise plan**: Custom limits
|
||||
|
||||
Rate limit information is included in response headers:
|
||||
- `X-RateLimit-Limit`: Requests per minute (refill rate)
|
||||
- `X-RateLimit-Remaining`: Current tokens available
|
||||
- `X-RateLimit-Reset`: ISO timestamp when tokens next refill
|
||||
- `X-RateLimit-Limit`: Maximum requests per window
|
||||
- `X-RateLimit-Remaining`: Requests remaining in current window
|
||||
- `X-RateLimit-Reset`: ISO timestamp when the window resets
|
||||
|
||||
## Example: Polling for New Logs
|
||||
|
||||
|
||||
@@ -143,20 +143,8 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
|
||||
{
|
||||
"success": true,
|
||||
"rateLimit": {
|
||||
"sync": {
|
||||
"isLimited": false,
|
||||
"requestsPerMinute": 25,
|
||||
"maxBurst": 50,
|
||||
"remaining": 50,
|
||||
"resetAt": "2025-09-08T22:51:55.999Z"
|
||||
},
|
||||
"async": {
|
||||
"isLimited": false,
|
||||
"requestsPerMinute": 200,
|
||||
"maxBurst": 400,
|
||||
"remaining": 400,
|
||||
"resetAt": "2025-09-08T22:51:56.155Z"
|
||||
},
|
||||
"sync": { "isLimited": false, "limit": 10, "remaining": 10, "resetAt": "2025-09-08T22:51:55.999Z" },
|
||||
"async": { "isLimited": false, "limit": 50, "remaining": 50, "resetAt": "2025-09-08T22:51:56.155Z" },
|
||||
"authType": "api"
|
||||
},
|
||||
"usage": {
|
||||
@@ -167,11 +155,6 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
|
||||
}
|
||||
```
|
||||
|
||||
**Rate Limit Fields:**
|
||||
- `requestsPerMinute`: Sustained rate limit (tokens refill at this rate)
|
||||
- `maxBurst`: Maximum tokens you can accumulate (burst capacity)
|
||||
- `remaining`: Current tokens available (can be up to `maxBurst`)
|
||||
|
||||
**Response Fields:**
|
||||
- `currentPeriodCost` reflects usage in the current billing period
|
||||
- `limit` is derived from individual limits (Free/Pro) or pooled organization limits (Team/Enterprise)
|
||||
|
||||
@@ -147,4 +147,4 @@ The snapshot provides:
|
||||
|
||||
- Learn about [Cost Calculation](/execution/costs) to understand workflow pricing
|
||||
- Explore the [External API](/execution/api) for programmatic log access
|
||||
- Set up [Notifications](/execution/api#notifications) for real-time alerts via webhook, email, or Slack
|
||||
- Set up [Webhook notifications](/execution/api#webhook-subscriptions) for real-time alerts
|
||||
@@ -72,7 +72,7 @@ For custom integrations, leverage our [MCP (Model Context Protocol) support](/mc
|
||||
<Video src="introduction/integrations-sidebar.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Copilot
|
||||
## AI-Powered Copilot
|
||||
|
||||
**Ask Questions & Get Guidance**
|
||||
Copilot answers questions about Sim, explains your workflows, and provides suggestions for improvements. Use the `@` symbol to reference workflows, blocks, documentation, knowledge, and logs for contextual assistance.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
title: Overview
|
||||
description: Upload, process, and search through your documents with intelligent vector search and chunking
|
||||
title: Knowledgebase
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"title": "Knowledgebase",
|
||||
"pages": ["index", "tags"]
|
||||
}
|
||||
@@ -13,8 +13,7 @@
|
||||
"variables",
|
||||
"execution",
|
||||
"permissions",
|
||||
"sdks",
|
||||
"self-hosting"
|
||||
"sdks"
|
||||
],
|
||||
"defaultOpen": false
|
||||
}
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
---
|
||||
title: Docker
|
||||
description: Deploy Sim Studio with Docker Compose
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Clone and start
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000)
|
||||
|
||||
## Production Setup
|
||||
|
||||
### 1. Configure Environment
|
||||
|
||||
```bash
|
||||
# Generate secrets
|
||||
cat > .env << EOF
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
EOF
|
||||
```
|
||||
|
||||
### 2. Start Services
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### 3. Set Up SSL
|
||||
|
||||
<Tabs items={['Caddy (Recommended)', 'Nginx + Certbot']}>
|
||||
<Tab value="Caddy (Recommended)">
|
||||
Caddy automatically handles SSL certificates.
|
||||
|
||||
```bash
|
||||
# Install Caddy
|
||||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
||||
sudo apt update && sudo apt install caddy
|
||||
```
|
||||
|
||||
Create `/etc/caddy/Caddyfile`:
|
||||
```
|
||||
sim.yourdomain.com {
|
||||
reverse_proxy localhost:3000
|
||||
|
||||
handle /socket.io/* {
|
||||
reverse_proxy localhost:3002
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo systemctl restart caddy
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="Nginx + Certbot">
|
||||
```bash
|
||||
# Install
|
||||
sudo apt install nginx certbot python3-certbot-nginx -y
|
||||
|
||||
# Create /etc/nginx/sites-available/sim
|
||||
server {
|
||||
listen 80;
|
||||
server_name sim.yourdomain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location /socket.io/ {
|
||||
proxy_pass http://127.0.0.1:3002;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
}
|
||||
|
||||
# Enable and get certificate
|
||||
sudo ln -s /etc/nginx/sites-available/sim /etc/nginx/sites-enabled/
|
||||
sudo certbot --nginx -d sim.yourdomain.com
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Ollama
|
||||
|
||||
```bash
|
||||
# With GPU
|
||||
docker compose -f docker-compose.ollama.yml --profile gpu --profile setup up -d
|
||||
|
||||
# CPU only
|
||||
docker compose -f docker-compose.ollama.yml --profile cpu --profile setup up -d
|
||||
```
|
||||
|
||||
Pull additional models:
|
||||
```bash
|
||||
docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.2
|
||||
```
|
||||
|
||||
### External Ollama
|
||||
|
||||
If Ollama runs on your host machine (not in Docker):
|
||||
|
||||
```bash
|
||||
# macOS/Windows
|
||||
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Linux - use your host IP
|
||||
OLLAMA_URL=http://192.168.1.100:11434 docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
<Callout type="warning">
|
||||
Inside Docker, `localhost` refers to the container, not your host. Use `host.docker.internal` or your host's IP.
|
||||
</Callout>
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# View logs
|
||||
docker compose -f docker-compose.prod.yml logs -f simstudio
|
||||
|
||||
# Stop
|
||||
docker compose -f docker-compose.prod.yml down
|
||||
|
||||
# Update
|
||||
docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Backup database
|
||||
docker compose -f docker-compose.prod.yml exec db pg_dump -U postgres simstudio > backup.sql
|
||||
```
|
||||
@@ -1,87 +0,0 @@
|
||||
---
|
||||
title: Environment Variables
|
||||
description: Configuration reference for Sim Studio
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Required
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `DATABASE_URL` | PostgreSQL connection string |
|
||||
| `BETTER_AUTH_SECRET` | Auth secret (32 hex chars): `openssl rand -hex 32` |
|
||||
| `BETTER_AUTH_URL` | Your app URL |
|
||||
| `ENCRYPTION_KEY` | Encryption key (32 hex chars): `openssl rand -hex 32` |
|
||||
| `INTERNAL_API_SECRET` | Internal API secret (32 hex chars): `openssl rand -hex 32` |
|
||||
| `NEXT_PUBLIC_APP_URL` | Public app URL |
|
||||
| `NEXT_PUBLIC_SOCKET_URL` | WebSocket URL (default: `http://localhost:3002`) |
|
||||
|
||||
## AI Providers
|
||||
|
||||
| Variable | Provider |
|
||||
|----------|----------|
|
||||
| `OPENAI_API_KEY` | OpenAI |
|
||||
| `ANTHROPIC_API_KEY_1` | Anthropic Claude |
|
||||
| `GEMINI_API_KEY_1` | Google Gemini |
|
||||
| `MISTRAL_API_KEY` | Mistral |
|
||||
| `OLLAMA_URL` | Ollama (default: `http://localhost:11434`) |
|
||||
|
||||
<Callout type="info">
|
||||
For load balancing, add multiple keys with `_1`, `_2`, `_3` suffixes (e.g., `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`). Works with OpenAI, Anthropic, and Gemini.
|
||||
</Callout>
|
||||
|
||||
<Callout type="info">
|
||||
In Docker, use `OLLAMA_URL=http://host.docker.internal:11434` for host-machine Ollama.
|
||||
</Callout>
|
||||
|
||||
### Azure OpenAI
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `AZURE_OPENAI_API_KEY` | Azure OpenAI API key |
|
||||
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI endpoint URL |
|
||||
| `AZURE_OPENAI_API_VERSION` | API version (e.g., `2024-02-15-preview`) |
|
||||
|
||||
### vLLM (Self-Hosted)
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `VLLM_BASE_URL` | vLLM server URL (e.g., `http://localhost:8000/v1`) |
|
||||
| `VLLM_API_KEY` | Optional bearer token for vLLM |
|
||||
|
||||
## OAuth Providers
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `GOOGLE_CLIENT_ID` | Google OAuth client ID |
|
||||
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret |
|
||||
| `GITHUB_CLIENT_ID` | GitHub OAuth client ID |
|
||||
| `GITHUB_CLIENT_SECRET` | GitHub OAuth client secret |
|
||||
|
||||
## Optional
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `API_ENCRYPTION_KEY` | Encrypts stored API keys (32 hex chars): `openssl rand -hex 32` |
|
||||
| `COPILOT_API_KEY` | API key for copilot features |
|
||||
| `ADMIN_API_KEY` | Admin API key for GitOps operations |
|
||||
| `RESEND_API_KEY` | Email service for notifications |
|
||||
| `ALLOWED_LOGIN_DOMAINS` | Restrict signups to domains (comma-separated) |
|
||||
| `ALLOWED_LOGIN_EMAILS` | Restrict signups to specific emails (comma-separated) |
|
||||
| `DISABLE_REGISTRATION` | Set to `true` to disable new user signups |
|
||||
|
||||
## Example .env
|
||||
|
||||
```bash
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=<openssl rand -hex 32>
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
ENCRYPTION_KEY=<openssl rand -hex 32>
|
||||
INTERNAL_API_SECRET=<openssl rand -hex 32>
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
OPENAI_API_KEY=sk-...
|
||||
```
|
||||
|
||||
See `apps/sim/.env.example` for all options.
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
title: Self-Hosting
|
||||
description: Deploy Sim Studio on your own infrastructure
|
||||
---
|
||||
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
Deploy Sim Studio on your own infrastructure with Docker or Kubernetes.
|
||||
|
||||
## Requirements
|
||||
|
||||
| Resource | Minimum | Recommended |
|
||||
|----------|---------|-------------|
|
||||
| CPU | 2 cores | 4+ cores |
|
||||
| RAM | 12 GB | 16+ GB |
|
||||
| Storage | 20 GB SSD | 50+ GB SSD |
|
||||
| Docker | 20.10+ | Latest |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000)
|
||||
|
||||
## Deployment Options
|
||||
|
||||
<Cards>
|
||||
<Card title="Docker" href="/self-hosting/docker">
|
||||
Deploy with Docker Compose on any server
|
||||
</Card>
|
||||
<Card title="Kubernetes" href="/self-hosting/kubernetes">
|
||||
Deploy with Helm on Kubernetes clusters
|
||||
</Card>
|
||||
<Card title="Cloud Platforms" href="/self-hosting/platforms">
|
||||
Railway, DigitalOcean, AWS, Azure, GCP guides
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Architecture
|
||||
|
||||
| Component | Port | Description |
|
||||
|-----------|------|-------------|
|
||||
| simstudio | 3000 | Main application |
|
||||
| realtime | 3002 | WebSocket server |
|
||||
| db | 5432 | PostgreSQL with pgvector |
|
||||
| migrations | - | Database migrations (runs once) |
|
||||
@@ -1,127 +0,0 @@
|
||||
---
|
||||
title: Kubernetes
|
||||
description: Deploy Sim Studio with Helm
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.19+
|
||||
- Helm 3.0+
|
||||
- PV provisioner support
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# Clone repo
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
|
||||
# Generate secrets
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
|
||||
# Install
|
||||
helm install sim ./helm/sim \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
|
||||
## Cloud-Specific Values
|
||||
|
||||
<Tabs items={['AWS EKS', 'Azure AKS', 'GCP GKE']}>
|
||||
<Tab value="AWS EKS">
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-aws.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="Azure AKS">
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-azure.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="GCP GKE">
|
||||
```bash
|
||||
helm install sim ./helm/sim \
|
||||
--values ./helm/sim/examples/values-gcp.yaml \
|
||||
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
|
||||
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
|
||||
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
|
||||
--set app.env.NEXT_PUBLIC_APP_URL="https://sim.yourdomain.com" \
|
||||
--namespace simstudio --create-namespace
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Key Configuration
|
||||
|
||||
```yaml
|
||||
# Custom values.yaml
|
||||
app:
|
||||
replicaCount: 2
|
||||
env:
|
||||
NEXT_PUBLIC_APP_URL: "https://sim.yourdomain.com"
|
||||
OPENAI_API_KEY: "sk-..."
|
||||
|
||||
postgresql:
|
||||
persistence:
|
||||
size: 50Gi
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
tls:
|
||||
enabled: true
|
||||
app:
|
||||
host: sim.yourdomain.com
|
||||
```
|
||||
|
||||
See `helm/sim/values.yaml` for all options.
|
||||
|
||||
## External Database
|
||||
|
||||
```yaml
|
||||
postgresql:
|
||||
enabled: false
|
||||
|
||||
externalDatabase:
|
||||
enabled: true
|
||||
host: "your-db-host"
|
||||
port: 5432
|
||||
username: "postgres"
|
||||
password: "your-password"
|
||||
database: "simstudio"
|
||||
sslMode: "require"
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Port forward for local access
|
||||
kubectl port-forward deployment/sim-sim-app 3000:3000 -n simstudio
|
||||
|
||||
# View logs
|
||||
kubectl logs -l app.kubernetes.io/component=app -n simstudio --tail=100
|
||||
|
||||
# Upgrade
|
||||
helm upgrade sim ./helm/sim --namespace simstudio
|
||||
|
||||
# Uninstall
|
||||
helm uninstall sim --namespace simstudio
|
||||
```
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"title": "Self-Hosting",
|
||||
"pages": [
|
||||
"index",
|
||||
"docker",
|
||||
"kubernetes",
|
||||
"platforms",
|
||||
"environment-variables",
|
||||
"troubleshooting"
|
||||
],
|
||||
"defaultOpen": false
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
---
|
||||
title: Cloud Platforms
|
||||
description: Deploy Sim Studio on cloud platforms
|
||||
---
|
||||
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
## Railway
|
||||
|
||||
One-click deployment with automatic PostgreSQL provisioning.
|
||||
|
||||
[](https://railway.com/new/template/sim-studio)
|
||||
|
||||
After deployment, add environment variables in Railway dashboard:
|
||||
- `BETTER_AUTH_SECRET`, `ENCRYPTION_KEY`, `INTERNAL_API_SECRET` (auto-generated)
|
||||
- `OPENAI_API_KEY` or other AI provider keys
|
||||
- Custom domain in Settings → Networking
|
||||
|
||||
## VPS Deployment
|
||||
|
||||
For DigitalOcean, AWS EC2, Azure VMs, or any Linux server:
|
||||
|
||||
<Tabs items={['DigitalOcean', 'AWS EC2', 'Azure VM']}>
|
||||
<Tab value="DigitalOcean">
|
||||
**Recommended:** 16 GB RAM Droplet, Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
# Create Droplet via console, then SSH in
|
||||
ssh root@your-droplet-ip
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="AWS EC2">
|
||||
**Recommended:** t3.xlarge (16 GB RAM), Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
ssh -i your-key.pem ubuntu@your-ec2-ip
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="Azure VM">
|
||||
**Recommended:** Standard_D4s_v3 (16 GB RAM), Ubuntu 24.04
|
||||
|
||||
```bash
|
||||
ssh azureuser@your-vm-ip
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Install Docker
|
||||
|
||||
```bash
|
||||
# Install Docker (official method)
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Logout and reconnect, then verify
|
||||
docker --version
|
||||
```
|
||||
|
||||
### Deploy Sim Studio
|
||||
|
||||
```bash
|
||||
git clone https://github.com/simstudioai/sim.git && cd sim
|
||||
|
||||
# Create .env with secrets
|
||||
cat > .env << EOF
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
INTERNAL_API_SECRET=$(openssl rand -hex 32)
|
||||
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
|
||||
BETTER_AUTH_URL=https://sim.yourdomain.com
|
||||
NEXT_PUBLIC_SOCKET_URL=https://sim.yourdomain.com
|
||||
EOF
|
||||
|
||||
# Start
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### SSL with Caddy
|
||||
|
||||
```bash
|
||||
# Install Caddy
|
||||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
||||
sudo apt update && sudo apt install caddy
|
||||
|
||||
# Configure (replace domain)
|
||||
echo 'sim.yourdomain.com {
|
||||
reverse_proxy localhost:3000
|
||||
handle /socket.io/* {
|
||||
reverse_proxy localhost:3002
|
||||
}
|
||||
}' | sudo tee /etc/caddy/Caddyfile
|
||||
|
||||
sudo systemctl restart caddy
|
||||
```
|
||||
|
||||
Point your domain's DNS A record to your server IP.
|
||||
|
||||
## Kubernetes (EKS, AKS, GKE)
|
||||
|
||||
See the [Kubernetes guide](/self-hosting/kubernetes) for Helm deployment on managed Kubernetes.
|
||||
|
||||
## Managed Database (Optional)
|
||||
|
||||
For production, use a managed PostgreSQL service:
|
||||
|
||||
- **AWS RDS** / **Azure Database** / **Cloud SQL** - Enable pgvector extension
|
||||
- **Supabase** / **Neon** - pgvector included
|
||||
|
||||
Set `DATABASE_URL` in your environment:
|
||||
```bash
|
||||
DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require"
|
||||
```
|
||||
@@ -1,110 +0,0 @@
|
||||
---
|
||||
title: Troubleshooting
|
||||
description: Common issues and solutions
|
||||
---
|
||||
|
||||
## Database Connection Failed
|
||||
|
||||
```bash
|
||||
# Check database is running
|
||||
docker compose ps db
|
||||
|
||||
# Test connection
|
||||
docker compose exec db psql -U postgres -c "SELECT 1"
|
||||
```
|
||||
|
||||
Verify `DATABASE_URL` format: `postgresql://user:pass@host:5432/database`
|
||||
|
||||
## Ollama Models Not Showing
|
||||
|
||||
Inside Docker, `localhost` = the container, not your host machine.
|
||||
|
||||
```bash
|
||||
# For host-machine Ollama, use:
|
||||
OLLAMA_URL=http://host.docker.internal:11434 # macOS/Windows
|
||||
OLLAMA_URL=http://192.168.1.x:11434 # Linux (use actual IP)
|
||||
```
|
||||
|
||||
## WebSocket/Realtime Not Working
|
||||
|
||||
1. Check `NEXT_PUBLIC_SOCKET_URL` matches your domain
|
||||
2. Verify realtime service is running: `docker compose ps realtime`
|
||||
3. Ensure reverse proxy passes WebSocket upgrades (see [Docker guide](/self-hosting/docker))
|
||||
|
||||
## 502 Bad Gateway
|
||||
|
||||
```bash
|
||||
# Check app is running
|
||||
docker compose ps simstudio
|
||||
docker compose logs simstudio
|
||||
|
||||
# Common causes: out of memory, database not ready
|
||||
```
|
||||
|
||||
## Migration Errors
|
||||
|
||||
```bash
|
||||
# View migration logs
|
||||
docker compose logs migrations
|
||||
|
||||
# Run manually
|
||||
docker compose exec simstudio bun run db:migrate
|
||||
```
|
||||
|
||||
## pgvector Not Found
|
||||
|
||||
Use the correct PostgreSQL image:
|
||||
```yaml
|
||||
image: pgvector/pgvector:pg17 # NOT postgres:17
|
||||
```
|
||||
|
||||
## Certificate Errors (CERT_HAS_EXPIRED)
|
||||
|
||||
If you see SSL certificate errors when calling external APIs:
|
||||
|
||||
```bash
|
||||
# Update CA certificates in container
|
||||
docker compose exec simstudio apt-get update && apt-get install -y ca-certificates
|
||||
|
||||
# Or set in environment (not recommended for production)
|
||||
NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||
```
|
||||
|
||||
## Blank Page After Login
|
||||
|
||||
1. Check browser console for errors
|
||||
2. Verify `NEXT_PUBLIC_APP_URL` matches your actual domain
|
||||
3. Clear browser cookies and local storage
|
||||
4. Check that all services are running: `docker compose ps`
|
||||
|
||||
## Windows-Specific Issues
|
||||
|
||||
**Turbopack errors on Windows:**
|
||||
```bash
|
||||
# Use WSL2 for better compatibility
|
||||
wsl --install
|
||||
|
||||
# Or disable Turbopack in package.json
|
||||
# Change "next dev --turbopack" to "next dev"
|
||||
```
|
||||
|
||||
**Line ending issues:**
|
||||
```bash
|
||||
# Configure git to use LF
|
||||
git config --global core.autocrlf input
|
||||
```
|
||||
|
||||
## View Logs
|
||||
|
||||
```bash
|
||||
# All services
|
||||
docker compose logs -f
|
||||
|
||||
# Specific service
|
||||
docker compose logs -f simstudio
|
||||
```
|
||||
|
||||
## Getting Help
|
||||
|
||||
- [GitHub Issues](https://github.com/simstudioai/sim/issues)
|
||||
- [Discord](https://discord.gg/Hr4UWYEcTT)
|
||||
@@ -149,7 +149,6 @@ Get the top pages of a target domain sorted by organic traffic. Returns page URL
|
||||
| `date` | string | No | Date for historical data in YYYY-MM-DD format \(defaults to today\) |
|
||||
| `limit` | number | No | Maximum number of results to return \(default: 100\) |
|
||||
| `offset` | number | No | Number of results to skip for pagination |
|
||||
| `select` | string | No | Comma-separated list of fields to return \(e.g., url,traffic,keywords,top_keyword,value\). Default: url,traffic,keywords,top_keyword,value |
|
||||
| `apiKey` | string | Yes | Ahrefs API Key |
|
||||
|
||||
#### Output
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user