Compare commits

..

4 Commits

Author SHA1 Message Date
Waleed
2bc8c7bf39 v0.4.15: helm chart updates, telegram tools, youtube tools, file upload support for more blocks 2025-10-14 20:49:45 -07:00
Siddharth Ganesan
fb0fa1fd21 v0.4.14: canvas speedup and copilot context window 2025-10-13 20:23:49 -07:00
Vikhyath Mondreti
7f82ed381a v0.4.13: bugfixes for dev containers, posthog redirect, helm updates 2025-10-13 14:21:18 -07:00
Waleed
219a065a7c v0.4.12: guardrails, mistral models, privacy policy updates (#1608)
* improvement(performance): remove unused source/target indices, add index on snapshot id (#1603)

* fix(blog): rename building to blogs with redirect (#1604)

* improvement(privacy-policy): updated privacy policy for google (#1602)

* updated privacy policy for google

* update terms, privacy, and emails to incl address and update verbiage

* feat(guardrails): added guardrails block/tools and docs (#1605)

* Adding guardrails block

* ack PR comments

* cleanup checkbox in dark mode

* cleanup

* fix supabase tools

* fix(inference-billing): fix inference billing when stream is true via API, add drag-and-drop functionality to deployed chat (#1606)

* fix(inference): fix inference billing when stream is true via API

* add drag-and-drop to deployed chat

* feat(mistal): added mistral as a provider, updated model prices (#1607)

* feat(mistal): added mistral as a provider, updated model prices

* remove the ability for a block to reference its own outluts

* fixed order of responses for guardrails block

* feat(versions): added the ability to rename deployment versions (#1610)

* fix(vulns): fix various vulnerabilities and enhanced code security (#1611)

* fix(vulns): fix SSRF vulnerabilities

* cleanup

* cleanup

* regen docs

* remove unused deps

* fix failing tests

* cleanup

* update deps

* regen bun lock
2025-10-11 22:23:47 -07:00
2222 changed files with 70684 additions and 285898 deletions

View File

@@ -1,19 +0,0 @@
# 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.
## 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

34
.gitattributes vendored
View File

@@ -1,34 +0,0 @@
# Set default behavior to automatically normalize line endings
* text=auto eol=lf
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.jsx text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.css text eol=lf
*.scss text eol=lf
*.sh text eol=lf
*.bash text eol=lf
Dockerfile* text eol=lf
.dockerignore text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf
# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.pdf binary

View File

@@ -321,7 +321,8 @@ In addition, you will need to update the registries:
{
id: 'operation',
title: 'Operation',
type: 'dropdown'
type: 'dropdown',
layout: 'full',
required: true,
options: [
{ label: 'Generate Embeddings', id: 'generate' },
@@ -332,7 +333,8 @@ In addition, you will need to update the registries:
{
id: 'apiKey',
title: 'API Key',
type: 'short-input'
type: 'short-input',
layout: 'full',
placeholder: 'Your Pinecone API key',
password: true,
required: true,

View File

@@ -1,11 +1,13 @@
name: 'Auto-translate Documentation'
# Temporarily disabled
on:
push:
branches: [ staging ]
paths:
- 'apps/docs/content/docs/en/**'
- 'apps/docs/i18n.json'
workflow_dispatch: # Allow manual triggers only
# push:
# branches: [ staging ]
# paths:
# - 'apps/docs/content/docs/en/**'
# - 'apps/docs/i18n.json'
permissions:
contents: write

View File

@@ -26,9 +26,6 @@ jobs:
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Lint code
run: bun run lint:check
- name: Run tests with coverage
env:
NODE_OPTIONS: '--no-warnings'

2
.gitignore vendored
View File

@@ -46,7 +46,7 @@ sim-standalone.tar.gz
next-env.d.ts
# cursorrules
# .cursorrules
.cursorrules
# docs
/apps/docs/.source

View File

@@ -4,13 +4,11 @@ import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page
import { ChevronLeft, ChevronRight } from 'lucide-react'
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 { StructuredData } from '@/components/structured-data'
import { CodeBlock } from '@/components/ui/code-block'
import { CopyPageButton } from '@/components/ui/copy-page-button'
import { source } from '@/lib/source'
export const dynamic = 'force-dynamic'
export default async function Page(props: { params: Promise<{ slug?: string[]; lang: string }> }) {
const params = await props.params
const page = source.getPage(params.slug, params.lang)
@@ -24,143 +22,31 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
pageTreeRecord[params.lang] ?? pageTreeRecord.en ?? Object.values(pageTreeRecord)[0]
const neighbours = pageTree ? findNeighbour(pageTree, page.url) : null
const generateBreadcrumbs = () => {
const breadcrumbs: Array<{ name: string; url: string }> = [
{
name: 'Home',
url: baseUrl,
},
]
const urlParts = page.url.split('/').filter(Boolean)
let currentPath = ''
urlParts.forEach((part, index) => {
if (index === 0 && ['en', 'es', 'fr', 'de', 'ja', 'zh'].includes(part)) {
currentPath = `/${part}`
return
}
currentPath += `/${part}`
const name = part
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
if (index === urlParts.length - 1) {
breadcrumbs.push({
name: page.data.title,
url: `${baseUrl}${page.url}`,
})
} else {
breadcrumbs.push({
name: name,
url: `${baseUrl}${currentPath}`,
})
}
})
return breadcrumbs
}
const breadcrumbs = generateBreadcrumbs()
const CustomFooter = () => (
<div className='mt-12'>
{/* Navigation links */}
<div className='flex items-center justify-between py-8'>
{neighbours?.previous ? (
<Link
href={neighbours.previous.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<ChevronLeft className='group-hover:-translate-x-1 h-4 w-4 transition-transform' />
<span className='font-medium'>{neighbours.previous.name}</span>
</Link>
) : (
<div />
)}
{neighbours?.next ? (
<Link
href={neighbours.next.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<span className='font-medium'>{neighbours.next.name}</span>
<ChevronRight className='h-4 w-4 transition-transform group-hover:translate-x-1' />
</Link>
) : (
<div />
)}
</div>
{/* Divider line */}
<div className='border-border border-t' />
{/* Social icons */}
<div className='flex items-center gap-4 py-6'>
<div className='mt-12 flex items-center justify-between border-border border-t py-8'>
{neighbours?.previous ? (
<Link
href='https://x.com/simdotai'
target='_blank'
rel='noopener noreferrer'
aria-label='X (Twitter)'
href={neighbours.previous.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
<ChevronLeft className='group-hover:-translate-x-1 h-4 w-4 transition-transform' />
<span className='font-medium'>{neighbours.previous.name}</span>
</Link>
) : (
<div />
)}
{neighbours?.next ? (
<Link
href='https://github.com/simstudioai/sim'
target='_blank'
rel='noopener noreferrer'
aria-label='GitHub'
href={neighbours.next.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
<span className='font-medium'>{neighbours.next.name}</span>
<ChevronRight className='h-4 w-4 transition-transform group-hover:translate-x-1' />
</Link>
<Link
href='https://discord.gg/Hr4UWYEcTT'
target='_blank'
rel='noopener noreferrer'
aria-label='Discord'
>
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
</Link>
</div>
) : (
<div />
)}
</div>
)
@@ -171,19 +57,14 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
description={page.data.description || ''}
url={`${baseUrl}${page.url}`}
lang={params.lang}
breadcrumb={breadcrumbs}
/>
<DocsPage
toc={page.data.toc}
full={page.data.full}
breadcrumb={{
enabled: false,
}}
tableOfContent={{
style: 'clerk',
enabled: true,
header: <div className='mb-2 font-medium text-sm'>On this page</div>,
footer: <TOCFooter />,
single: false,
}}
article={{
@@ -198,27 +79,10 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
component: <CustomFooter />,
}}
>
<div className='relative'>
<div className='absolute top-1 right-0 flex items-center gap-2'>
<CopyPageButton
content={`# ${page.data.title}
${page.data.description || ''}
${page.data.content || ''}`}
/>
<PageNavigationArrows previous={neighbours?.previous} next={neighbours?.next} />
</div>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
</div>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<DocsBody>
<MDX
components={{
...defaultMdxComponents,
CodeBlock,
}}
/>
<MDX components={defaultMdxComponents} />
</DocsBody>
</DocsPage>
</>
@@ -264,10 +128,8 @@ export async function generateMetadata(props: {
url: fullUrl,
siteName: 'Sim Documentation',
type: 'article',
locale: params.lang === 'en' ? 'en_US' : `${params.lang}_${params.lang.toUpperCase()}`,
alternateLocale: ['en', 'es', 'fr', 'de', 'ja', 'zh']
.filter((lang) => lang !== params.lang)
.map((lang) => (lang === 'en' ? 'en_US' : `${lang}_${lang.toUpperCase()}`)),
locale: params.lang,
alternateLocale: ['en', 'fr', 'zh'].filter((lang) => lang !== params.lang),
},
twitter: {
card: 'summary',
@@ -290,12 +152,8 @@ export async function generateMetadata(props: {
alternates: {
canonical: fullUrl,
languages: {
'x-default': `${baseUrl}${page.url.replace(`/${params.lang}`, '')}`,
en: `${baseUrl}${page.url.replace(`/${params.lang}`, '')}`,
es: `${baseUrl}/es${page.url.replace(`/${params.lang}`, '')}`,
en: `${baseUrl}/en${page.url.replace(`/${params.lang}`, '')}`,
fr: `${baseUrl}/fr${page.url.replace(`/${params.lang}`, '')}`,
de: `${baseUrl}/de${page.url.replace(`/${params.lang}`, '')}`,
ja: `${baseUrl}/ja${page.url.replace(`/${params.lang}`, '')}`,
zh: `${baseUrl}/zh${page.url.replace(`/${params.lang}`, '')}`,
},
},

View File

@@ -2,14 +2,11 @@ import type { ReactNode } from 'react'
import { defineI18nUI } from 'fumadocs-ui/i18n'
import { DocsLayout } from 'fumadocs-ui/layouts/docs'
import { RootProvider } from 'fumadocs-ui/provider/next'
import { Geist_Mono, Inter } from 'next/font/google'
import { ExternalLink, GithubIcon } from 'lucide-react'
import { Inter } from 'next/font/google'
import Image from 'next/image'
import {
SidebarFolder,
SidebarItem,
SidebarSeparator,
} from '@/components/docs-layout/sidebar-components'
import { Navbar } from '@/components/navbar/navbar'
import Link from 'next/link'
import { LanguageDropdown } from '@/components/ui/language-dropdown'
import { i18n } from '@/lib/i18n'
import { source } from '@/lib/source'
import '../global.css'
@@ -17,12 +14,6 @@ import { Analytics } from '@vercel/analytics/next'
const inter = Inter({
subsets: ['latin'],
variable: '--font-geist-sans',
})
const geistMono = Geist_Mono({
subsets: ['latin'],
variable: '--font-geist-mono',
})
const { provider } = defineI18nUI(i18n, {
@@ -36,18 +27,25 @@ const { provider } = defineI18nUI(i18n, {
fr: {
displayName: 'Français',
},
de: {
displayName: 'Deutsch',
},
ja: {
displayName: '日本語',
},
zh: {
displayName: '简体中文',
},
},
})
const GitHubLink = () => (
<div className='fixed right-4 bottom-4 z-50'>
<Link
href='https://github.com/simstudioai/sim'
target='_blank'
rel='noopener noreferrer'
className='flex h-8 w-8 items-center justify-center rounded-full border border-border bg-background transition-colors hover:bg-muted'
>
<GithubIcon className='h-4 w-4' />
</Link>
</div>
)
type LayoutProps = {
children: ReactNode
params: Promise<{ lang: string }>
@@ -56,82 +54,43 @@ type LayoutProps = {
export default async function Layout({ children, params }: LayoutProps) {
const { lang } = await params
const structuredData = {
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'Sim Documentation',
description:
'Comprehensive documentation for Sim - the visual workflow builder for AI Agent Workflows.',
url: 'https://docs.sim.ai',
publisher: {
'@type': 'Organization',
name: 'Sim',
url: 'https://sim.ai',
logo: {
'@type': 'ImageObject',
url: 'https://docs.sim.ai/static/logo.png',
},
},
inLanguage: lang,
potentialAction: {
'@type': 'SearchAction',
target: {
'@type': 'EntryPoint',
urlTemplate: 'https://docs.sim.ai/api/search?q={search_term_string}',
},
'query-input': 'required name=search_term_string',
},
}
return (
<html
lang={lang}
className={`${inter.variable} ${geistMono.variable}`}
suppressHydrationWarning
>
<head>
<script
type='application/ld+json'
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
</head>
<body className='flex min-h-screen flex-col font-sans'>
<html lang={lang} className={inter.className} suppressHydrationWarning>
<body className='flex min-h-screen flex-col'>
<RootProvider i18n={provider(lang)}>
<Navbar />
<DocsLayout
tree={source.pageTree[lang]}
themeSwitch={{
enabled: false,
}}
nav={{
title: (
<Image
src='/static/logo.png'
alt='Sim'
width={72}
height={28}
className='h-7 w-auto'
priority
/>
<div className='flex items-center gap-3'>
<Image
src='/static/logo.png'
alt='Sim'
width={60}
height={24}
className='h-6 w-auto'
/>
<LanguageDropdown />
</div>
),
}}
links={[
{
text: 'Visit Sim',
url: 'https://sim.ai',
icon: <ExternalLink className='h-4 w-4' />,
},
]}
sidebar={{
defaultOpenLevel: 0,
collapsible: false,
collapsible: true,
footer: null,
banner: null,
components: {
Item: SidebarItem,
Folder: SidebarFolder,
Separator: SidebarSeparator,
},
}}
containerProps={{
className: '!pt-10',
}}
>
{children}
</DocsLayout>
<GitHubLink />
<Analytics />
</RootProvider>
</body>

View File

@@ -1,16 +1,4 @@
import { createFromSource } from 'fumadocs-core/search/server'
import { source } from '@/lib/source'
export const revalidate = 3600 // Revalidate every hour
export const { GET } = createFromSource(source, {
localeMap: {
en: { language: 'english' },
es: { language: 'spanish' },
fr: { language: 'french' },
de: { language: 'german' },
// ja and zh are not supported by the stemmer library, so we'll skip language config for them
ja: {},
zh: {},
},
})
export const { GET } = createFromSource(source)

View File

@@ -4,19 +4,6 @@
@theme {
--color-fd-primary: #802fff; /* Purple from control-bar component */
--font-geist-sans: var(--font-geist-sans);
--font-geist-mono: var(--font-geist-mono);
}
/* Font family utilities */
.font-sans {
font-family: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
.font-mono {
font-family: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
}
/* Target any potential border classes */
@@ -28,446 +15,139 @@
:root {
--fd-border: transparent !important;
--fd-border-sidebar: transparent !important;
--fd-nav-height: 64px; /* Custom navbar height (h-16 = 4rem = 64px) */
/* Content container width used to center main content */
--spacing-fd-container: 1400px;
/* Edge gutter = leftover space on each side of centered container */
--edge-gutter: max(1rem, calc((100vw - var(--spacing-fd-container)) / 2));
/* Shift the sidebar slightly left from the content edge for extra breathing room */
--sidebar-shift: 90px;
--sidebar-offset: max(0px, calc(var(--edge-gutter) - var(--sidebar-shift)));
/* Shift TOC slightly right to match sidebar spacing for symmetry */
--toc-shift: 90px;
--toc-offset: max(0px, calc(var(--edge-gutter) - var(--toc-shift)));
/* Sidebar and TOC have 20px internal padding - navbar accounts for this directly */
/* Extra gap between sidebar/TOC and the main text content */
--content-gap: 1.75rem;
}
/* Remove custom layout variable overrides to fallback to fumadocs defaults */
/* ============================================
Navbar Light Mode Styling
============================================ */
/* Light mode navbar and search styling */
:root:not(.dark) nav {
background-color: hsla(0, 0%, 96%, 0.85) !important;
/* Sidebar improvements for cleaner design */
[data-sidebar] {
--fd-sidebar-width: 280px;
background-color: rgb(255 255 255);
padding-top: 16px;
}
:root:not(.dark) nav button[type="button"] {
background-color: hsla(0, 0%, 93%, 0.85) !important;
backdrop-filter: blur(33px) saturate(180%) !important;
-webkit-backdrop-filter: blur(33px) saturate(180%) !important;
color: rgba(0, 0, 0, 0.6) !important;
/* Clean sidebar container */
[data-sidebar] > div {
padding: 0 16px;
}
:root:not(.dark) nav button[type="button"] kbd {
color: rgba(0, 0, 0, 0.6) !important;
/* Section headers/separators styling */
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
[data-sidebar] [data-separator] {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: 20px;
margin-bottom: 6px;
padding-left: 12px;
padding-right: 12px;
color: rgb(115 115 115);
border: none;
background: none;
}
/* Dark mode navbar and search styling */
:root.dark nav {
background-color: hsla(0, 0%, 7.04%, 0.92) !important;
backdrop-filter: blur(25px) saturate(180%) brightness(0.6) !important;
-webkit-backdrop-filter: blur(25px) saturate(180%) brightness(0.6) !important;
/* First separator should have less top margin */
[data-sidebar] [data-separator]:first-of-type {
margin-top: 12px;
}
/* ============================================
Custom Sidebar Styling (Turborepo-inspired)
============================================ */
/* Floating sidebar appearance - remove background */
[data-sidebar-container],
#nd-sidebar {
background: transparent !important;
background-color: transparent !important;
border: none !important;
--color-fd-muted: transparent !important;
--color-fd-card: transparent !important;
--color-fd-secondary: transparent !important;
/* Clean sidebar item styling */
[data-sidebar] a {
padding: 8px 12px;
margin: 1px 0;
border-radius: 6px;
font-size: 14px;
font-weight: 400;
line-height: 1.4;
transition: all 0.15s ease;
display: block;
color: rgb(71 85 105);
text-decoration: none;
}
aside[data-sidebar],
aside#nd-sidebar {
background: transparent !important;
background-color: transparent !important;
border: none !important;
border-right: none !important;
}
/* 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 layout alignment */
@media (min-width: 1025px) {
[data-sidebar-container] {
margin-left: var(--sidebar-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;
}
/* Alternative TOC container targeting */
[data-docs-page] > aside:last-child,
main ~ aside {
right: var(--toc-offset) !important;
}
}
/* Sidebar spacing - compact like turborepo */
[data-sidebar-viewport] {
padding: 0.5rem 20px 12px;
background: transparent !important;
background-color: transparent !important;
}
/* Override sidebar item styling to match Raindrop */
/* Target Link and button elements in sidebar - override Fumadocs itemVariants */
/* Exclude the small chevron-only toggle buttons */
#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 */
font-weight: 400 !important;
border-radius: 0.75rem !important; /* More rounded like Raindrop */
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial,
sans-serif !important;
}
/* Dark mode sidebar text */
.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 */
: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;
}
/* Make sure chevron icons are visible and properly styled */
#nd-sidebar svg {
display: inline-block !important;
opacity: 0.6 !important;
flex-shrink: 0 !important;
width: 0.75rem !important;
height: 0.75rem !important;
}
/* Ensure the small chevron toggle buttons are visible */
#nd-sidebar button[aria-label*="ollapse"],
#nd-sidebar button[aria-label*="xpand"] {
display: flex !important;
opacity: 1 !important;
padding: 0.25rem !important;
}
/* Root-level spacing now handled by [data-sidebar-viewport] > * rule below */
/* Add tiny gap between nested items */
#nd-sidebar ul li {
margin-bottom: 0.0625rem !important;
}
#nd-sidebar ul li:last-child {
margin-bottom: 0 !important;
}
/* Section headers should be slightly larger */
[data-sidebar-viewport] [data-separator] {
font-size: 0.75rem !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.05em !important;
}
/* Override active state (NO PURPLE) */
#nd-sidebar a[data-active="true"],
#nd-sidebar button[data-active="true"],
#nd-sidebar a.bg-fd-primary\/10,
#nd-sidebar a.text-fd-primary,
#nd-sidebar a[class*="bg-fd-primary"],
#nd-sidebar a[class*="text-fd-primary"],
/* Override custom sidebar purple classes */
#nd-sidebar
a.bg-purple-50\/80,
#nd-sidebar a.text-purple-600,
#nd-sidebar a[class*="bg-purple"],
#nd-sidebar a[class*="text-purple"] {
background-image: none !important;
}
/* Dark mode active state */
.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 */
: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 */
.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 */
: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 */
.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 */
: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;
}
/* Hide search, platform, and collapse button from sidebar completely */
[data-sidebar] [data-search],
[data-sidebar] .search-toggle,
#nd-sidebar [data-search],
#nd-sidebar .search-toggle,
[data-sidebar-viewport] [data-search],
[data-sidebar-viewport] button[data-search],
aside[data-sidebar] [role="button"]:has([data-search]),
aside[data-sidebar] > div > button:first-child,
#nd-sidebar > div > button:first-child,
[data-sidebar] a[href*="sim.ai"],
#nd-sidebar a[href*="sim.ai"],
[data-sidebar-viewport] a[href*="sim.ai"],
/* Hide search buttons (but NOT folder chevron buttons) */
aside[data-sidebar] > div:first-child
> button:not([aria-label="Collapse"]):not([aria-label="Expand"]),
#nd-sidebar > div:first-child > button:not([aria-label="Collapse"]):not([aria-label="Expand"]),
/* Hide sidebar collapse button (panel icon) - direct children only */
aside[data-sidebar] > button:first-of-type:not([aria-label="Collapse"]):not([aria-label="Expand"]),
[data-sidebar]
> button[type="button"]:first-of-type:not([aria-label="Collapse"]):not([aria-label="Expand"]),
button[data-collapse]:not([aria-label="Collapse"]):not([aria-label="Expand"]),
[data-sidebar-header] button,
/* Hide theme toggle from sidebar footer */
aside[data-sidebar] [data-theme-toggle],
[data-sidebar-footer],
[data-sidebar] footer,
footer button[aria-label*="heme"],
aside[data-sidebar] > div:last-child:has(button[aria-label*="heme"]),
aside[data-sidebar] button[aria-label*="heme"],
[data-sidebar] button[aria-label*="Theme"],
/* Additional theme toggle selectors */
aside[data-sidebar] > *:last-child
button,
[data-sidebar-viewport] ~ *,
aside[data-sidebar] > div:not([data-sidebar-viewport]),
/* Aggressive theme toggle hiding */
aside[data-sidebar] svg[class*="sun"],
aside[data-sidebar] svg[class*="moon"],
aside[data-sidebar] button[type="button"]:last-child,
aside button:has(svg:only-child),
[data-sidebar] div:has(> button[type="button"]:only-child:last-child),
/* Hide theme toggle and other non-content elements */
aside[data-sidebar] > *:not([data-sidebar-viewport]) {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
height: 0 !important;
max-height: 0 !important;
overflow: hidden !important;
pointer-events: none !important;
position: absolute !important;
left: -9999px !important;
}
/* Desktop only: Hide sidebar toggle buttons and nav title/logo (keep visible on mobile) */
@media (min-width: 1025px) {
[data-sidebar-container] > button,
[data-sidebar-container] [data-toggle],
aside[data-sidebar] [data-sidebar-toggle],
button[data-sidebar-toggle],
nav button[data-sidebar-toggle],
button[aria-label="Toggle Sidebar"],
button[aria-label="Collapse Sidebar"],
/* Hide nav title/logo in sidebar on desktop - target all possible locations */
aside[data-sidebar] a[href="/"],
aside[data-sidebar] a[href="/"] img,
aside[data-sidebar] > a:first-child,
aside[data-sidebar] > div > a:first-child,
aside[data-sidebar] img[alt="Sim"],
[data-sidebar-header],
[data-sidebar] [data-title],
#nd-sidebar > a:first-child,
#nd-sidebar > div:first-child > a:first-child,
#nd-sidebar img[alt="Sim"] {
display: none !important;
visibility: hidden !important;
height: 0 !important;
max-height: 0 !important;
overflow: hidden !important;
}
}
/* Extra aggressive - hide everything after the viewport */
aside[data-sidebar] [data-sidebar-viewport] ~ * {
display: none !important;
}
/* Tighter spacing for sidebar content */
[data-sidebar-viewport] > * {
margin-bottom: 0.0625rem;
}
[data-sidebar-viewport] > *:last-child {
margin-bottom: 0;
}
[data-sidebar-viewport] ul {
margin: 0;
padding: 0;
}
/* Ensure sidebar starts with content immediately */
aside[data-sidebar] > div:first-child {
padding-top: 0;
}
/* Remove all sidebar borders and backgrounds */
[data-sidebar-container],
aside[data-sidebar],
[data-sidebar],
[data-sidebar] *,
#nd-sidebar,
#nd-sidebar * {
border: none !important;
border-right: none !important;
border-left: none !important;
border-top: none !important;
border-bottom: none !important;
}
/* Override fumadocs background colors for sidebar */
.dark #nd-sidebar,
.dark [data-sidebar-container],
.dark aside[data-sidebar] {
--color-fd-muted: transparent !important;
--color-fd-secondary: transparent !important;
background: transparent !important;
background-color: transparent !important;
}
/* Force normal text flow in sidebar */
[data-sidebar],
[data-sidebar] *,
[data-sidebar-viewport],
[data-sidebar-viewport] * {
writing-mode: horizontal-tb !important;
}
/* ============================================
Code Block Styling (Improved)
============================================ */
/* Apply Geist Mono to code elements */
code,
pre,
pre code {
font-family: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
}
/* Inline code */
:not(pre) > code {
padding: 0.2em 0.4em;
border-radius: 0.25rem;
font-size: 0.875em;
[data-sidebar] a[data-active="true"] {
background-color: rgba(128, 47, 255, 0.08);
color: var(--color-fd-primary);
font-weight: 500;
}
/* Light mode inline code */
:root:not(.dark) :not(pre) > code {
background-color: rgb(243 244 246);
color: rgb(220 38 38);
border: 1px solid rgb(229 231 235);
[data-sidebar] a:hover:not([data-active="true"]) {
background-color: rgb(248 250 252);
color: rgb(51 65 85);
}
/* Dark mode inline code */
.dark :not(pre) > code {
background-color: rgb(31 41 55);
color: rgb(248 113 113);
border: 1px solid rgb(55 65 81);
/* Improve spacing between sidebar items */
[data-sidebar] nav > * + * {
margin-top: 2px;
}
/* Code block container improvements */
pre {
font-size: 0.875rem;
line-height: 1.7;
tab-size: 2;
-webkit-overflow-scrolling: touch;
/* Section group styling */
[data-sidebar] [data-folder] {
margin-bottom: 4px;
}
pre code {
display: block;
width: fit-content;
min-width: 100%;
[data-sidebar] [data-folder] > div:first-child {
font-weight: 500;
font-size: 13px;
color: rgb(15 23 42);
padding: 6px 12px;
margin-bottom: 4px;
}
/* Syntax highlighting adjustments for better readability */
pre code .line {
padding-left: 0;
padding-right: 0;
/* Clean up folder toggle buttons */
[data-sidebar] button[data-folder-toggle] {
padding: 4px 8px 4px 12px;
border-radius: 6px;
font-size: 13px;
font-weight: 500;
color: rgb(51 65 85);
}
[data-sidebar] button[data-folder-toggle]:hover {
background-color: rgb(248 250 252);
}
/* Nested item indentation */
[data-sidebar] [data-folder] a {
padding-left: 24px;
font-size: 14px;
}
/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
[data-sidebar] {
background-color: rgb(2 8 23);
}
[data-sidebar] a {
color: rgb(148 163 184);
}
[data-sidebar] a:hover:not([data-active="true"]) {
background-color: rgb(30 41 59);
color: rgb(226 232 240);
}
[data-sidebar] a[data-active="true"] {
background-color: rgba(128, 47, 255, 0.15);
color: var(--color-fd-primary);
}
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
[data-sidebar] [data-separator] {
color: rgb(148 163 184);
}
[data-sidebar] [data-folder] > div:first-child {
color: rgb(226 232 240);
}
[data-sidebar] button[data-folder-toggle] {
color: rgb(148 163 184);
}
[data-sidebar] button[data-folder-toggle]:hover {
background-color: rgb(30 41 59);
}
}
/* Custom text highlighting styles */
@@ -482,54 +162,15 @@ pre code .line {
/* Add bottom spacing to prevent abrupt page endings */
[data-content] {
padding-top: 1.5rem !important;
padding-bottom: 4rem;
}
/* Alternative fallback for different Fumadocs versions */
main article,
.docs-page main {
padding-top: 1.5rem !important;
padding-bottom: 4rem;
}
/* ============================================
Center and Constrain Main Content Width
============================================ */
/* Main content area - center and constrain like turborepo/raindrop */
main[data-main] {
max-width: var(--spacing-fd-container, 1400px);
margin-left: auto;
margin-right: auto;
padding-top: 1rem;
padding-left: calc(var(--sidebar-offset) + var(--content-gap));
padding-right: calc(var(--toc-offset) + var(--content-gap));
order: 1 !important;
}
/* Adjust for smaller screens */
@media (max-width: 768px) {
main[data-main] {
padding-left: 1rem;
padding-right: 1rem;
}
}
/* Ensure docs page content is properly constrained */
[data-docs-page] {
max-width: 1400px;
margin-left: auto;
margin-right: auto;
padding-top: 1.5rem !important;
}
/* Override Fumadocs default content padding */
article[data-content],
div[data-content] {
padding-top: 1.5rem !important;
}
/* Remove any unwanted borders/outlines from video elements */
video {
outline: none !important;

View File

@@ -22,15 +22,9 @@ export const metadata = {
'drag and drop workflows',
'AI integrations',
'workflow canvas',
'AI Agent Workflow Builder',
'workflow orchestration',
'agent builder',
'AI workflow automation',
'visual programming',
'AI development platform',
],
authors: [{ name: 'Sim Team', url: 'https://sim.ai' }],
creator: 'Sim',
publisher: 'Sim',
category: 'Developer Tools',
classification: 'Developer Documentation',
manifest: '/favicon/site.webmanifest',
@@ -50,7 +44,7 @@ export const metadata = {
openGraph: {
type: 'website',
locale: 'en_US',
alternateLocale: ['es_ES', 'fr_FR', 'de_DE', 'ja_JP', 'zh_CN'],
alternateLocale: ['fr_FR', 'zh_CN'],
url: 'https://docs.sim.ai',
siteName: 'Sim Documentation',
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
@@ -58,13 +52,11 @@ export const metadata = {
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
},
twitter: {
card: 'summary_large_image',
card: 'summary',
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
description:
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
creator: '@simdotai',
site: '@simdotai',
images: ['/og-image.png'],
creator: '@sim_ai',
},
robots: {
index: true,
@@ -80,13 +72,9 @@ export const metadata = {
alternates: {
canonical: 'https://docs.sim.ai',
languages: {
'x-default': 'https://docs.sim.ai',
en: 'https://docs.sim.ai',
es: 'https://docs.sim.ai/es',
fr: 'https://docs.sim.ai/fr',
de: 'https://docs.sim.ai/de',
ja: 'https://docs.sim.ai/ja',
zh: 'https://docs.sim.ai/zh',
en: '/en',
fr: '/fr',
zh: '/zh',
},
},
}

View File

@@ -1,31 +0,0 @@
import { getLLMText } from '@/lib/llms'
import { source } from '@/lib/source'
export const revalidate = false
export async function GET() {
try {
const pages = source.getPages().filter((page) => {
if (!page || !page.data || !page.url) return false
const pathParts = page.url.split('/').filter(Boolean)
const hasLangPrefix = pathParts[0] && ['es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
return !hasLangPrefix
})
const scan = pages.map((page) => getLLMText(page))
const scanned = await Promise.all(scan)
const filtered = scanned.filter((text) => text && text.length > 0)
return new Response(filtered.join('\n\n---\n\n'), {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
})
} catch (error) {
console.error('Error generating LLM full text:', error)
return new Response('Error generating full documentation text', { status: 500 })
}
}

View File

@@ -1,87 +1,11 @@
import { getLLMText } from '@/lib/llms'
import { source } from '@/lib/source'
export const revalidate = false
export async function GET() {
const baseUrl = 'https://docs.sim.ai'
const scan = source.getPages().map(getLLMText)
const scanned = await Promise.all(scan)
try {
const pages = source.getPages().filter((page) => {
if (!page || !page.data || !page.url) return false
const pathParts = page.url.split('/').filter(Boolean)
const hasLangPrefix = pathParts[0] && ['es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
return !hasLangPrefix
})
const sections: Record<string, Array<{ title: string; url: string; description?: string }>> = {}
pages.forEach((page) => {
const pathParts = page.url.split('/').filter(Boolean)
const section =
pathParts[0] && ['en', 'es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
? pathParts[1] || 'root'
: pathParts[0] || 'root'
if (!sections[section]) {
sections[section] = []
}
sections[section].push({
title: page.data.title || 'Untitled',
url: `${baseUrl}${page.url}`,
description: page.data.description,
})
})
const manifest = `# Sim Documentation
> Visual Workflow Builder for AI Applications
Sim is a visual workflow builder for AI applications that lets you build AI agent workflows visually. Create powerful AI agents, automation workflows, and data processing pipelines by connecting blocks on a canvas—no coding required.
## Documentation Overview
This file provides an overview of our documentation. For full content of all pages, see ${baseUrl}/llms-full.txt
## Main Sections
${Object.entries(sections)
.map(([section, items]) => {
const sectionTitle = section
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
return `### ${sectionTitle}\n\n${items.map((item) => `- ${item.title}: ${item.url}${item.description ? `\n ${item.description}` : ''}`).join('\n')}`
})
.join('\n\n')}
## Additional Resources
- Full documentation content: ${baseUrl}/llms-full.txt
- Individual page content: ${baseUrl}/llms.mdx/[page-path]
- API documentation: ${baseUrl}/sdks/
- Tool integrations: ${baseUrl}/tools/
## Statistics
- Total pages: ${pages.length} (English only)
- Other languages available at: ${baseUrl}/[lang]/ (es, fr, de, ja, zh)
---
Generated: ${new Date().toISOString()}
Format: llms.txt v0.1.0
See: https://llmstxt.org for specification`
return new Response(manifest, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
})
} catch (error) {
console.error('Error generating LLM manifest:', error)
return new Response('Error generating documentation manifest', { status: 500 })
}
return new Response(scanned.join('\n\n'))
}

View File

@@ -9,26 +9,14 @@ export async function GET() {
User-agent: *
Allow: /
# Search engine crawlers
# Allow all well-behaved crawlers
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
User-agent: Slurp
Allow: /
User-agent: DuckDuckBot
Allow: /
User-agent: Baiduspider
Allow: /
User-agent: YandexBot
Allow: /
# AI and LLM crawlers - explicitly allowed for documentation indexing
# AI and LLM crawlers
User-agent: GPTBot
Allow: /
@@ -44,21 +32,6 @@ Allow: /
User-agent: Claude-Web
Allow: /
User-agent: Applebot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Diffbot
Allow: /
User-agent: FacebookBot
Allow: /
User-agent: cohere-ai
Allow: /
# Disallow admin and internal paths (if any exist)
Disallow: /.next/
Disallow: /api/internal/
@@ -68,29 +41,14 @@ Disallow: /admin/
# Allow but don't prioritize these
Allow: /api/search
Allow: /llms.txt
Allow: /llms-full.txt
Allow: /llms.mdx/
# Sitemaps
Sitemap: ${baseUrl}/sitemap.xml
# Crawl delay for aggressive bots (optional)
# Crawl-delay: 1
# Additional resources for AI indexing
# See https://github.com/AnswerDotAI/llms-txt for more info
# LLM-friendly content:
# Manifest: ${baseUrl}/llms.txt
# Full content: ${baseUrl}/llms-full.txt
# Individual pages: ${baseUrl}/llms.mdx/[page-path]
# Multi-language documentation available at:
# ${baseUrl}/en - English
# ${baseUrl}/es - Español
# ${baseUrl}/fr - Français
# ${baseUrl}/de - Deutsch
# ${baseUrl}/ja - 日本語
# ${baseUrl}/zh - 简体中文`
# LLM-friendly content available at: ${baseUrl}/llms.txt`
return new Response(robotsTxt, {
headers: {

View File

@@ -8,14 +8,6 @@ export async function GET() {
const allPages = source.getPages()
const getPriority = (url: string): string => {
if (url === '/introduction' || url === '/') return '1.0'
if (url === '/getting-started') return '0.9'
if (url.match(/^\/[^/]+$/)) return '0.8'
if (url.includes('/sdks/') || url.includes('/tools/')) return '0.7'
return '0.6'
}
const urls = allPages
.flatMap((page) => {
const urlWithoutLang = page.url.replace(/^\/[a-z]{2}\//, '/')
@@ -30,7 +22,7 @@ export async function GET() {
<loc>${url}</loc>
<lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
<changefreq>weekly</changefreq>
<priority>${getPriority(urlWithoutLang)}</priority>
<priority>${urlWithoutLang === '/introduction' ? '1.0' : '0.8'}</priority>
${i18n.languages.length > 1 ? generateAlternateLinks(baseUrl, urlWithoutLang) : ''}
</url>`
})
@@ -45,7 +37,6 @@ ${urls}
return new Response(sitemap, {
headers: {
'Content-Type': 'application/xml',
'Cache-Control': 'public, max-age=3600, s-maxage=3600',
},
})
}

View File

@@ -1,42 +0,0 @@
'use client'
import { ChevronLeft, ChevronRight } from 'lucide-react'
import Link from 'next/link'
interface PageNavigationArrowsProps {
previous?: {
url: string
}
next?: {
url: string
}
}
export function PageNavigationArrows({ previous, next }: PageNavigationArrowsProps) {
if (!previous && !next) return null
return (
<div className='flex items-center gap-2'>
{previous && (
<Link
href={previous.url}
className='inline-flex items-center justify-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-1.5 text-muted-foreground/60 text-sm transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
aria-label='Previous page'
title='Previous page'
>
<ChevronLeft className='h-4 w-4' />
</Link>
)}
{next && (
<Link
href={next.url}
className='inline-flex items-center justify-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-1.5 text-muted-foreground/60 text-sm transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
aria-label='Next page'
title='Next page'
>
<ChevronRight className='h-4 w-4' />
</Link>
)}
</div>
)
}

View File

@@ -1,138 +0,0 @@
'use client'
import { type ReactNode, useEffect, useState } from 'react'
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'
function isActive(url: string, pathname: string, nested = true): boolean {
return url === pathname || (nested && pathname.startsWith(`${url}/`))
}
export function SidebarItem({ item }: { item: PageTree.Item }) {
const pathname = usePathname()
const active = isActive(item.url, pathname, false)
return (
<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,
level,
children,
}: {
item: PageTree.Folder
level: number
children: ReactNode
}) {
const pathname = usePathname()
const hasActiveChild = checkHasActiveChild(item, pathname)
const [open, setOpen] = useState(hasActiveChild)
useEffect(() => {
setOpen(hasActiveChild)
}, [hasActiveChild])
return (
<li className='mb-[0.0625rem] list-none'>
{item.index ? (
<div className='flex items-center gap-0.5'>
<Link
href={item.index.url}
className={cn(
'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='rounded p-1 transition-colors hover:bg-gray-100/60 dark:hover:bg-gray-800/40'
aria-label={open ? 'Collapse' : 'Expand'}
>
<ChevronRight
className={cn(
'h-3 w-3 text-gray-400 transition-transform duration-200 ease-in-out dark:text-gray-500',
open && 'rotate-90'
)}
/>
</button>
</div>
) : (
<button
onClick={() => setOpen(!open)}
className={cn(
'flex w-full 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'
)}
>
<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
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: PageTree.Separator }) {
return (
<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: PageTree.Folder, pathname: string): boolean {
if (node.index && isActive(node.index.url, pathname)) {
return true
}
for (const child of node.children) {
if (child.type === 'page' && isActive(child.url, pathname)) {
return true
}
if (child.type === 'folder' && checkHasActiveChild(child, pathname)) {
return true
}
}
return false
}

View File

@@ -1,41 +0,0 @@
'use client'
import { useState } from 'react'
import { ArrowRight, ChevronRight } from 'lucide-react'
import Link from 'next/link'
export function TOCFooter() {
const [isHovered, setIsHovered] = useState(false)
return (
<div className='sticky bottom-0 mt-6'>
<div className='flex flex-col gap-2 rounded-lg border border-border bg-secondary p-6 text-sm'>
<div className='text-balance font-semibold text-base leading-tight'>
Start building today
</div>
<div className='text-muted-foreground'>Trusted by over 60,000 builders.</div>
<div className='text-muted-foreground'>
Build Agentic workflows visually on a drag-and-drop canvas or with natural language.
</div>
<Link
href='https://sim.ai/signup'
target='_blank'
rel='noopener noreferrer'
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
className='group mt-2 inline-flex h-8 w-fit items-center justify-center gap-1 whitespace-nowrap rounded-[10px] border border-[#6F3DFA] bg-gradient-to-b from-[#8357FF] to-[#6F3DFA] px-3 pr-[10px] pl-[12px] font-medium text-sm text-white shadow-[inset_0_2px_4px_0_#9B77FF] outline-none transition-all hover:shadow-lg focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50'
aria-label='Get started with Sim - Sign up for free'
>
<span>Get started</span>
<span className='inline-flex transition-transform duration-200 group-hover:translate-x-0.5'>
{isHovered ? (
<ArrowRight className='h-4 w-4' aria-hidden='true' />
) : (
<ChevronRight className='h-4 w-4' aria-hidden='true' />
)}
</span>
</Link>
</div>
</div>
)
}

View File

@@ -1,66 +0,0 @@
'use client'
import Image from 'next/image'
import Link from 'next/link'
import { LanguageDropdown } from '@/components/ui/language-dropdown'
import { SearchTrigger } from '@/components/ui/search-trigger'
import { ThemeToggle } from '@/components/ui/theme-toggle'
export function Navbar() {
return (
<nav
className='sticky top-0 z-50 border-border/50 border-b'
style={{
backdropFilter: 'blur(25px) saturate(180%)',
WebkitBackdropFilter: 'blur(25px) saturate(180%)',
}}
>
{/* Desktop: Single row layout */}
<div className='hidden h-16 w-full items-center lg:flex'>
<div
className='relative flex w-full items-center justify-between'
style={{
paddingLeft: 'calc(var(--sidebar-offset) + 20px)',
paddingRight: 'calc(var(--toc-offset) + 60px)',
}}
>
{/* Left cluster: logo */}
<div className='flex items-center'>
<Link href='/' className='flex min-w-[100px] items-center'>
<Image
src='/static/logo.png'
alt='Sim'
width={72}
height={28}
className='h-7 w-auto'
/>
</Link>
</div>
{/* Center cluster: search - absolutely positioned to center */}
<div className='-translate-x-1/2 absolute left-1/2 flex items-center justify-center'>
<SearchTrigger />
</div>
{/* Right cluster aligns with TOC edge */}
<div className='flex items-center gap-4'>
<Link
href='https://sim.ai'
target='_blank'
rel='noopener noreferrer'
className='rounded-xl px-3 py-2 font-normal text-[0.9375rem] text-foreground/60 leading-[1.4] transition-colors hover:bg-foreground/8 hover:text-foreground'
style={{
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
}}
>
Platform
</Link>
<LanguageDropdown />
<ThemeToggle />
</div>
</div>
</div>
</nav>
)
}

View File

@@ -88,7 +88,7 @@ export function StructuredData({
},
'query-input': 'required name=search_term_string',
},
inLanguage: ['en', 'es', 'fr', 'de', 'ja', 'zh'],
inLanguage: ['en', 'fr', 'zh'],
}
const faqStructuredData = title.toLowerCase().includes('faq') && {

View File

@@ -1,50 +0,0 @@
'use client'
import { useState } from 'react'
import { CodeBlock as FumadocsCodeBlock } from 'fumadocs-ui/components/codeblock'
import { Check, Copy } from 'lucide-react'
import { cn } from '@/lib/utils'
export function CodeBlock(props: React.ComponentProps<typeof FumadocsCodeBlock>) {
const [copied, setCopied] = useState(false)
const handleCopy = async (text: string) => {
await navigator.clipboard.writeText(text)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
}
return (
<FumadocsCodeBlock
{...props}
Actions={({ children, className }) => (
<div className={cn('empty:hidden', className)}>
{/* Custom copy button */}
<button
type='button'
aria-label={copied ? 'Copied Text' : 'Copy Text'}
onClick={(e) => {
const pre = (e.currentTarget as HTMLElement)
.closest('.nd-codeblock')
?.querySelector('pre')
if (pre) handleCopy(pre.textContent || '')
}}
className={cn(
'rounded-md p-2 transition-all',
'border border-border bg-background/80 hover:bg-muted',
'backdrop-blur-sm'
)}
>
<span className='flex items-center justify-center'>
{copied ? (
<Check size={16} className='text-green-600 dark:text-green-400' />
) : (
<Copy size={16} className='text-muted-foreground' />
)}
</span>
</button>
</div>
)}
/>
)
}

View File

@@ -1,42 +0,0 @@
'use client'
import { useState } from 'react'
import { Check, Copy } from 'lucide-react'
interface CopyPageButtonProps {
content: string
}
export function CopyPageButton({ content }: CopyPageButtonProps) {
const [copied, setCopied] = useState(false)
const handleCopy = async () => {
try {
await navigator.clipboard.writeText(content)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
} catch (err) {
console.error('Failed to copy:', err)
}
}
return (
<button
onClick={handleCopy}
className='flex 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={copied ? 'Copied to clipboard' : 'Copy page content'}
>
{copied ? (
<>
<Check className='h-3.5 w-3.5' />
<span>Copied</span>
</>
) : (
<>
<Copy className='h-3.5 w-3.5' />
<span>Copy page</span>
</>
)}
</button>
)
}

View File

@@ -1,7 +1,7 @@
'use client'
import { useEffect, useState } from 'react'
import { Check, ChevronRight } from 'lucide-react'
import { Check, ChevronDown } from 'lucide-react'
import { useParams, usePathname, useRouter } from 'next/navigation'
const languages = {
@@ -82,14 +82,15 @@ export function LanguageDropdown() {
aria-haspopup='listbox'
aria-expanded={isOpen}
aria-controls='language-menu'
className='flex items-center gap-1.5 rounded-xl px-3 py-2 font-normal text-[0.9375rem] text-foreground/60 leading-[1.4] transition-colors hover:bg-foreground/8 hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring'
style={{
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
}}
className='flex items-center gap-1.5 rounded-lg border border-border/30 bg-muted/40 px-2.5 py-1.5 text-sm shadow-sm backdrop-blur-sm transition-colors hover:bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-ring'
>
<span>{languages[currentLang as keyof typeof languages]?.name}</span>
<ChevronRight className='h-3.5 w-3.5' />
<span className='text-sm'>{languages[currentLang as keyof typeof languages]?.flag}</span>
<span className='font-medium text-foreground'>
{languages[currentLang as keyof typeof languages]?.name}
</span>
<ChevronDown
className={`h-3 w-3 text-muted-foreground transition-transform ${isOpen ? 'rotate-180' : ''}`}
/>
</button>
{isOpen && (
@@ -98,7 +99,7 @@ export function LanguageDropdown() {
<div
id='language-menu'
role='listbox'
className='absolute top-full right-0 z-[1001] mt-1 max-h-[75vh] w-56 overflow-auto rounded-xl border border-border/50 bg-white shadow-2xl md:w-44 md:bg-background/95 md:backdrop-blur-md dark:bg-neutral-950 md:dark:bg-background/95'
className='absolute top-full left-0 z-[1001] mt-1 max-h-[75vh] w-56 overflow-auto rounded-xl border border-border/50 bg-white shadow-2xl md:w-44 md:bg-background/95 md:backdrop-blur-md dark:bg-neutral-950 md:dark:bg-background/95'
>
{Object.entries(languages).map(([code, lang]) => (
<button

View File

@@ -1,38 +0,0 @@
'use client'
import { Search } from 'lucide-react'
export function SearchTrigger() {
const handleClick = () => {
const event = new KeyboardEvent('keydown', {
key: 'k',
metaKey: true,
bubbles: true,
})
document.dispatchEvent(event)
}
return (
<button
type='button'
className='flex h-10 w-[460px] items-center gap-2 rounded-xl border border-border/50 px-3 py-2 text-sm backdrop-blur-xl transition-colors hover:border-border'
style={{
backgroundColor: 'hsla(0, 0%, 5%, 0.85)',
backdropFilter: 'blur(33px) saturate(180%)',
WebkitBackdropFilter: 'blur(33px) saturate(180%)',
color: 'rgba(255, 255, 255, 0.6)',
}}
onClick={handleClick}
>
<Search className='h-4 w-4' />
<span>Search...</span>
<kbd
className='ml-auto flex items-center gap-0.5 font-medium'
style={{ color: 'rgba(255, 255, 255, 0.6)' }}
>
<span style={{ fontSize: '15px', lineHeight: '1' }}></span>
<span style={{ fontSize: '13px', lineHeight: '1' }}>K</span>
</kbd>
</button>
)
}

View File

@@ -1,32 +0,0 @@
'use client'
import { useEffect, useState } from 'react'
import { Moon, Sun } from 'lucide-react'
import { useTheme } from 'next-themes'
export function ThemeToggle() {
const { theme, setTheme } = useTheme()
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return (
<button className='flex items-center justify-center rounded-md p-1 text-muted-foreground'>
<Moon className='h-4 w-4' />
</button>
)
}
return (
<button
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
className='flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:text-foreground'
aria-label='Toggle theme'
>
{theme === 'dark' ? <Moon className='h-4 w-4' /> : <Sun className='h-4 w-4' />}
</button>
)
}

View File

@@ -8,7 +8,7 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
Der Guardrails-Block validiert und schützt Ihre KI-Workflows, indem er Inhalte anhand mehrerer Validierungstypen überprüft. Stellen Sie die Datenqualität sicher, verhindern Sie Halluzinationen, erkennen Sie personenbezogene Daten und erzwingen Sie Formatanforderungen, bevor Inhalte durch Ihren Workflow fließen.
The Guardrails block validates and protects your AI workflows by checking content against multiple validation types. Ensure data quality, prevent hallucinations, detect PII, and enforce format requirements before content moves through your workflow.
<div className="flex justify-center">
<Image
@@ -20,201 +20,201 @@ Der Guardrails-Block validiert und schützt Ihre KI-Workflows, indem er Inhalte
/>
</div>
## Übersicht
## Overview
Mit dem Guardrails-Block können Sie:
The Guardrails block enables you to:
<Steps>
<Step>
<strong>JSON-Struktur validieren</strong>: Stellen Sie sicher, dass LLM-Ausgaben gültiges JSON sind, bevor sie geparst werden
<strong>Validate JSON Structure</strong>: Ensure LLM outputs are valid JSON before parsing
</Step>
<Step>
<strong>Regex-Muster abgleichen</strong>: Überprüfen Sie, ob Inhalte bestimmten Formaten entsprechen (E-Mails, Telefonnummern, URLs usw.)
<strong>Match Regex Patterns</strong>: Verify content matches specific formats (emails, phone numbers, URLs, etc.)
</Step>
<Step>
<strong>Halluzinationen erkennen</strong>: Nutzen Sie RAG + LLM-Scoring, um KI-Ausgaben anhand von Wissensdatenbankinhalten zu validieren
<strong>Detect Hallucinations</strong>: Use RAG + LLM scoring to validate AI outputs against knowledge base content
</Step>
<Step>
<strong>PII erkennen</strong>: Identifizieren und optional maskieren Sie personenbezogene Daten über mehr als 40 Entitätstypen hinweg
<strong>Detect PII</strong>: Identify and optionally mask personally identifiable information across 40+ entity types
</Step>
</Steps>
## Validierungstypen
## Validation Types
### JSON-Validierung
### JSON Validation
Überprüft, ob Inhalte korrekt formatiertes JSON sind. Perfekt, um sicherzustellen, dass strukturierte LLM-Ausgaben sicher geparst werden können.
Validates that content is properly formatted JSON. Perfect for ensuring structured LLM outputs can be safely parsed.
**Anwendungsfälle:**
- Validieren von JSON-Antworten aus Agent-Blöcken vor dem Parsen
- Sicherstellen, dass API-Payloads korrekt formatiert sind
- Überprüfen der Integrität strukturierter Daten
**Use Cases:**
- Validate JSON responses from Agent blocks before parsing
- Ensure API payloads are properly formatted
- Check structured data integrity
**Output:**
- `passed`: `true` wenn gültiges JSON, sonst `false`
- `error`: Fehlermeldung bei fehlgeschlagener Validierung (z.B. "Invalid JSON: Unexpected token...")
- `passed`: `true` if valid JSON, `false` otherwise
- `error`: Error message if validation fails (e.g., "Invalid JSON: Unexpected token...")
### Regex-Validierung
### Regex Validation
Überprüft, ob Inhalte einem bestimmten regulären Ausdrucksmuster entsprechen.
Checks if content matches a specified regular expression pattern.
**Anwendungsfälle:**
- Validieren von E-Mail-Adressen
- Überprüfen von Telefonnummernformaten
- Verifizieren von URLs oder benutzerdefinierten Kennungen
- Durchsetzen spezifischer Textmuster
**Use Cases:**
- Validate email addresses
- Check phone number formats
- Verify URLs or custom identifiers
- Enforce specific text patterns
**Konfiguration:**
- **Regex-Muster**: Der reguläre Ausdruck, der abgeglichen werden soll (z.B. `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` für E-Mails)
**Configuration:**
- **Regex Pattern**: The regular expression to match against (e.g., `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` for emails)
**Output:**
- `passed`: `true` wenn der Inhalt dem Muster entspricht, `false` andernfalls
- `error`: Fehlermeldung bei fehlgeschlagener Validierung
- `passed`: `true` if content matches pattern, `false` otherwise
- `error`: Error message if validation fails
### Halluzinationserkennung
### Hallucination Detection
Verwendet Retrieval-Augmented Generation (RAG) mit LLM-Bewertung, um zu erkennen, wann KI-generierte Inhalte im Widerspruch zu Ihrer Wissensdatenbank stehen oder nicht darin begründet sind.
Uses Retrieval-Augmented Generation (RAG) with LLM scoring to detect when AI-generated content contradicts or isn't grounded in your knowledge base.
**Funktionsweise:**
1. Durchsucht Ihre Wissensdatenbank nach relevantem Kontext
2. Sendet sowohl die KI-Ausgabe als auch den abgerufenen Kontext an ein LLM
3. LLM weist einen Konfidenzwert zu (Skala 0-10)
- **0** = Vollständige Halluzination (völlig unbegründet)
- **10** = Vollständig fundiert (komplett durch Wissensdatenbank gestützt)
4. Validierung besteht, wenn der Wert ≥ Schwellenwert (Standard: 3)
**How It Works:**
1. Queries your knowledge base for relevant context
2. Sends both the AI output and retrieved context to an LLM
3. LLM assigns a confidence score (0-10 scale)
- **0** = Full hallucination (completely ungrounded)
- **10** = Fully grounded (completely supported by knowledge base)
4. Validation passes if score ≥ threshold (default: 3)
**Konfiguration:**
- **Wissensdatenbank**: Auswahl aus Ihren vorhandenen Wissensdatenbanken
- **Modell**: LLM für die Bewertung wählen (erfordert starkes Reasoning - GPT-4o, Claude 3.7 Sonnet empfohlen)
- **API-Schlüssel**: Authentifizierung für den ausgewählten LLM-Anbieter (automatisch ausgeblendet für gehostete/Ollama-Modelle)
- **Konfidenz-Schwellenwert**: Mindestwert zum Bestehen (0-10, Standard: 3)
- **Top K** (Erweitert): Anzahl der abzurufenden Wissensdatenbank-Chunks (Standard: 10)
**Configuration:**
- **Knowledge Base**: Select from your existing knowledge bases
- **Model**: Choose LLM for scoring (requires strong reasoning - GPT-4o, Claude 3.7 Sonnet recommended)
- **API Key**: Authentication for selected LLM provider (auto-hidden for hosted/Ollama models)
- **Confidence Threshold**: Minimum score to pass (0-10, default: 3)
- **Top K** (Advanced): Number of knowledge base chunks to retrieve (default: 10)
**Output:**
- `passed`: `true` wenn Konfidenzwert ≥ Schwellenwert
- `score`: Konfidenzwert (0-10)
- `reasoning`: Erklärung des LLM für den Wert
- `error`: Fehlermeldung bei fehlgeschlagener Validierung
- `passed`: `true` if confidence score ≥ threshold
- `score`: Confidence score (0-10)
- `reasoning`: LLM's explanation for the score
- `error`: Error message if validation fails
**Anwendungsfälle:**
- Validierung von Agent-Antworten anhand der Dokumentation
- Sicherstellen, dass Kundenservice-Antworten sachlich korrekt sind
- Überprüfen, ob generierte Inhalte mit dem Quellmaterial übereinstimmen
- Qualitätskontrolle für RAG-Anwendungen
**Use Cases:**
- Validate Agent responses against documentation
- Ensure customer support answers are factually accurate
- Verify generated content matches source material
- Quality control for RAG applications
### PII-Erkennung
### PII Detection
Erkennt personenbezogene Daten mit Microsoft Presidio. Unterstützt über 40 Entitätstypen in mehreren Ländern und Sprachen.
Detects personally identifiable information using Microsoft Presidio. Supports 40+ entity types across multiple countries and languages.
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
<Video src="guardrails.mp4" width={500} height={350} />
</div>
**Funktionsweise:**
1. Scannt Inhalte nach PII-Entitäten mittels Mustererkennung und NLP
2. Gibt erkannte Entitäten mit Positionen und Konfidenzwerten zurück
3. Maskiert optional erkannte PII in der Ausgabe
**How It Works:**
1. Scans content for PII entities using pattern matching and NLP
2. Returns detected entities with locations and confidence scores
3. Optionally masks detected PII in the output
**Konfiguration:**
- **Zu erkennende PII-Typen**: Auswahl aus gruppierten Kategorien über Modal-Selektor
- **Allgemein**: Personenname, E-Mail, Telefon, Kreditkarte, IP-Adresse usw.
- **USA**: SSN, Führerschein, Reisepass usw.
- **UK**: NHS-Nummer, Sozialversicherungsnummer
- **Spanien**: NIF, NIE, CIF
- **Italien**: Steuernummer, Führerschein, Umsatzsteuer-ID
- **Polen**: PESEL, NIP, REGON
- **Singapur**: NRIC/FIN, UEN
- **Australien**: ABN, ACN, TFN, Medicare
- **Indien**: Aadhaar, PAN, Reisepass, Wählernummer
- **Modus**:
- **Erkennen**: Nur PII identifizieren (Standard)
- **Maskieren**: Erkannte PII durch maskierte Werte ersetzen
- **Sprache**: Erkennungssprache (Standard: Englisch)
**Configuration:**
- **PII Types to Detect**: Select from grouped categories via modal selector
- **Common**: Person name, Email, Phone, Credit card, IP address, etc.
- **USA**: SSN, Driver's license, Passport, etc.
- **UK**: NHS number, National insurance number
- **Spain**: NIF, NIE, CIF
- **Italy**: Fiscal code, Driver's license, VAT code
- **Poland**: PESEL, NIP, REGON
- **Singapore**: NRIC/FIN, UEN
- **Australia**: ABN, ACN, TFN, Medicare
- **India**: Aadhaar, PAN, Passport, Voter number
- **Mode**:
- **Detect**: Only identify PII (default)
- **Mask**: Replace detected PII with masked values
- **Language**: Detection language (default: English)
**Ausgabe:**
- `passed`: `false` wenn ausgewählte PII-Typen erkannt werden
- `detectedEntities`: Array erkannter PII mit Typ, Position und Konfidenz
- `maskedText`: Inhalt mit maskierter PII (nur wenn Modus = "Mask")
- `error`: Fehlermeldung, wenn die Validierung fehlschlägt
**Output:**
- `passed`: `false` if any selected PII types are detected
- `detectedEntities`: Array of detected PII with type, location, and confidence
- `maskedText`: Content with PII masked (only if mode = "Mask")
- `error`: Error message if validation fails
**Anwendungsfälle:**
- Blockieren von Inhalten mit sensiblen persönlichen Informationen
- Maskieren von PII vor der Protokollierung oder Speicherung von Daten
- Einhaltung von DSGVO, HIPAA und anderen Datenschutzbestimmungen
- Bereinigung von Benutzereingaben vor der Verarbeitung
**Use Cases:**
- Block content containing sensitive personal information
- Mask PII before logging or storing data
- Compliance with GDPR, HIPAA, and other privacy regulations
- Sanitize user inputs before processing
## Konfiguration
## Configuration
### Zu validierender Inhalt
### Content to Validate
Der zu validierende Eingabeinhalt. Dieser stammt typischerweise aus:
- Ausgaben von Agent-Blöcken: `<agent.content>`
- Ergebnisse von Funktionsblöcken: `<function.output>`
- API-Antworten: `<api.output>`
- Jede andere Blockausgabe
The input content to validate. This typically comes from:
- Agent block outputs: `<agent.content>`
- Function block results: `<function.output>`
- API responses: `<api.output>`
- Any other block output
### Validierungstyp
### Validation Type
Wählen Sie aus vier Validierungstypen:
- **Gültiges JSON**: Prüfen, ob der Inhalt korrekt formatiertes JSON ist
- **Regex-Übereinstimmung**: Überprüfen, ob der Inhalt einem Regex-Muster entspricht
- **Halluzinationsprüfung**: Validierung gegen Wissensdatenbank mit LLM-Bewertung
- **PII-Erkennung**: Erkennung und optional Maskierung personenbezogener Daten
Choose from four validation types:
- **Valid JSON**: Check if content is properly formatted JSON
- **Regex Match**: Verify content matches a regex pattern
- **Hallucination Check**: Validate against knowledge base with LLM scoring
- **PII Detection**: Detect and optionally mask personally identifiable information
## Ausgaben
## Outputs
Alle Validierungstypen liefern zurück:
All validation types return:
- **`<guardrails.passed>`**: Boolean, der angibt, ob die Validierung erfolgreich war
- **`<guardrails.validationType>`**: Die Art der durchgeführten Validierung
- **`<guardrails.input>`**: Die ursprüngliche Eingabe, die validiert wurde
- **`<guardrails.error>`**: Fehlermeldung, wenn die Validierung fehlgeschlagen ist (optional)
- **`<guardrails.passed>`**: Boolean indicating if validation passed
- **`<guardrails.validationType>`**: The type of validation performed
- **`<guardrails.input>`**: The original input that was validated
- **`<guardrails.error>`**: Error message if validation failed (optional)
Zusätzliche Ausgaben nach Typ:
Additional outputs by type:
**Halluzinationsprüfung:**
- **`<guardrails.score>`**: Konfidenzwert (0-10)
- **`<guardrails.reasoning>`**: Erklärung des LLM
**Hallucination Check:**
- **`<guardrails.score>`**: Confidence score (0-10)
- **`<guardrails.reasoning>`**: LLM's explanation
**PII-Erkennung:**
- **`<guardrails.detectedEntities>`**: Array erkannter PII-Entitäten
- **`<guardrails.maskedText>`**: Inhalt mit maskierter PII (wenn Modus = "Mask")
**PII Detection:**
- **`<guardrails.detectedEntities>`**: Array of detected PII entities
- **`<guardrails.maskedText>`**: Content with PII masked (if mode = "Mask")
## Beispielanwendungsfälle
## Example Use Cases
### JSON vor dem Parsen validieren
### Validate JSON Before Parsing
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Sicherstellen, dass die Agent-Ausgabe gültiges JSON ist</h4>
<h4 className="font-medium">Scenario: Ensure Agent output is valid JSON</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent generiert strukturierte JSON-Antwort</li>
<li>Guardrails validiert das JSON-Format</li>
<li>Bedingungsblock prüft `<guardrails.passed>`</li>
<li>Bei Erfolg → Daten parsen und verwenden, Bei FehlerWiederholen oder Fehler behandeln</li>
<li>Agent generates structured JSON response</li>
<li>Guardrails validates JSON format</li>
<li>Condition block checks `<guardrails.passed>`</li>
<li>If passed → Parse and use data, If failedRetry or handle error</li>
</ol>
</div>
### Halluzinationen verhindern
### Prevent Hallucinations
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Validierung von Kundendienstantworten</h4>
<h4 className="font-medium">Scenario: Validate customer support responses</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent generiert Antwort auf Kundenfrage</li>
<li>Guardrails prüft gegen die Wissensdatenbank der Support-Dokumentation</li>
<li>Wenn Konfidenzwert ≥ 3 → Antwort senden</li>
<li>Wenn Konfidenzwert \< 3 → Für manuelle Überprüfung markieren</li>
<li>Agent generates response to customer question</li>
<li>Guardrails checks against support documentation knowledge base</li>
<li>If confidence score ≥ 3 → Send response</li>
<li>If confidence score \< 3 → Flag for human review</li>
</ol>
</div>
### PII in Benutzereingaben blockieren
### Block PII in User Inputs
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Bereinigung von benutzergenerierten Inhalten</h4>
<h4 className="font-medium">Scenario: Sanitize user-submitted content</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Benutzer reicht Formular mit Textinhalt ein</li>
<li>Guardrails erkennt PII (E-Mails, Telefonnummern, Sozialversicherungsnummern usw.)</li>
<li>Bei erkannter PII → Einreichung ablehnen oder sensible Daten maskieren</li>
<li>Ohne PII → Normal verarbeiten</li>
<li>User submits form with text content</li>
<li>Guardrails detects PII (emails, phone numbers, SSN, etc.)</li>
<li>If PII detected → Reject submission or mask sensitive data</li>
<li>If no PII → Process normally</li>
</ol>
</div>
@@ -222,29 +222,30 @@ Zusätzliche Ausgaben nach Typ:
<Video src="guardrails-example.mp4" width={500} height={350} />
</div>
### E-Mail-Format validieren
### Validate Email Format
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: E-Mail-Adressformat überprüfen</h4>
<h4 className="font-medium">Scenario: Check email address format</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent extrahiert E-Mail aus Text</li>
<li>Guardrails validiert mit Regex-Muster</li>
<li>Bei Gültigkeit → E-Mail für Benachrichtigung verwenden</li>
<li>Bei Ungültigkeit → Korrektur anfordern</li>
<li>Agent extracts email from text</li>
<li>Guardrails validates with regex pattern</li>
<li>If valid → Use email for notification</li>
<li>If invalid → Request correction</li>
</ol>
</div>
## Best Practices
- **Verkettung mit Condition-Blöcken**: Verwende `<guardrails.passed>` um Workflow-Logik basierend auf Validierungsergebnissen zu verzweigen
- **JSON-Validierung vor dem Parsen verwenden**: Validiere immer die JSON-Struktur, bevor du versuchst, LLM-Ausgaben zu parsen
- **Passende PII-Typen auswählen**: Wähle nur die PII-Entitätstypen aus, die für deinen Anwendungsfall relevant sind, um bessere Leistung zu erzielen
- **Vernünftige Konfidenz-Schwellenwerte festlegen**: Passe für die Halluzinationserkennung den Schwellenwert basierend auf deinen Genauigkeitsanforderungen an (höher = strenger)
- **Starke Modelle für Halluzinationserkennung verwenden**: GPT-4o oder Claude 3.7 Sonnet bieten genauere Konfidenz-Bewertungen
- **PII für Logging maskieren**: Verwende den "Mask"-Modus, wenn du Inhalte protokollieren oder speichern musst, die PII enthalten könnten
- **Regex-Muster testen**: Validiere deine Regex-Muster gründlich, bevor du sie in der Produktion einsetzt
- **Validierungsfehler überwachen**: Verfolge `<guardrails.error>` Nachrichten, um häufige Validierungsprobleme zu identifizieren
- **Chain with Condition blocks**: Use `<guardrails.passed>` to branch workflow logic based on validation results
- **Use JSON validation before parsing**: Always validate JSON structure before attempting to parse LLM outputs
- **Choose appropriate PII types**: Only select the PII entity types relevant to your use case for better performance
- **Set reasonable confidence thresholds**: For hallucination detection, adjust threshold based on your accuracy requirements (higher = stricter)
- **Use strong models for hallucination detection**: GPT-4o or Claude 3.7 Sonnet provide more accurate confidence scoring
- **Mask PII for logging**: Use "Mask" mode when you need to log or store content that may contain PII
- **Test regex patterns**: Validate your regex patterns thoroughly before deploying to production
- **Monitor validation failures**: Track `<guardrails.error>` messages to identify common validation issues
<Callout type="info">
Guardrails-Validierung erfolgt synchron in deinem Workflow. Für die Halluzinationserkennung solltest du schnellere Modelle (wie GPT-4o-mini) wählen, wenn Latenz kritisch ist.
Guardrails validation happens synchronously in your workflow. For hallucination detection, choose faster models (like GPT-4o-mini) if latency is critical.
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: Übersicht
title: Blöcke
description: Die Bausteine deiner KI-Workflows
---
@@ -16,7 +16,7 @@ Blöcke sind die Bausteine, die du miteinander verbindest, um KI-Workflows zu er
## Grundlegende Blocktypen
Sim bietet wesentliche Blocktypen, die die Kernfunktionen von KI-Workflows abdecken:
Sim bietet sieben grundlegende Blocktypen, die die wesentlichen Funktionen von KI-Workflows abdecken:
### Verarbeitungsblöcke
- **[Agent](/blocks/agent)** - Chatte mit KI-Modellen (OpenAI, Anthropic, Google, lokale Modelle)
@@ -28,20 +28,16 @@ Sim bietet wesentliche Blocktypen, die die Kernfunktionen von KI-Workflows abdec
- **[Router](/blocks/router)** - Nutze KI, um Anfragen intelligent auf verschiedene Pfade zu leiten
- **[Evaluator](/blocks/evaluator)** - Bewerte und beurteile die Inhaltsqualität mit KI
### Ablaufsteuerungsblöcke
- **[Variablen](/blocks/variables)** - Workflow-bezogene Variablen setzen und verwalten
- **[Warten](/blocks/wait)** - Workflow-Ausführung für eine bestimmte Zeitverzögerung pausieren
### Ausgabeblöcke
- **[Antwort](/blocks/response)** - Formatieren und Zurückgeben der endgültigen Ergebnisse aus Ihrem Workflow
- **[Response](/blocks/response)** - Formatiere und gib endgültige Ergebnisse aus deinem Workflow zurück
## Wie Blöcke funktionieren
Jeder Block hat drei Hauptkomponenten:
**Eingaben**: Daten, die in den Block von anderen Blöcken oder Benutzereingaben kommen
**Konfiguration**: Einstellungen, die steuern, wie der Block sich verhält
**Ausgaben**: Daten, die der Block für andere Blöcke zur Verwendung erzeugt
**Konfiguration**: Einstellungen, die das Verhalten des Blocks steuern
**Ausgaben**: Daten, die der Block für andere Blöcke produziert
<Steps>
<Step>
@@ -60,7 +56,7 @@ Jeder Block hat drei Hauptkomponenten:
Sie erstellen Workflows, indem Sie Blöcke miteinander verbinden. Die Ausgabe eines Blocks wird zur Eingabe eines anderen:
- **Ziehen zum Verbinden**: Ziehen Sie von einem Ausgabeport zu einem Eingabeport
- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingaben verbunden werden
- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingängen verbunden werden
- **Verzweigende Pfade**: Einige Blöcke können basierend auf Bedingungen zu verschiedenen Pfaden weiterleiten
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
@@ -77,7 +73,7 @@ User Input → Agent → Function → Response
```
### Bedingte Verzweigung
Verwenden Sie Bedingung- oder Router-Blöcke, um verschiedene Pfade zu erstellen:
Verwenden Sie Bedingungsblöcke oder Router-Blöcke, um verschiedene Pfade zu erstellen:
```
User Input → Router → Agent A (for questions)
@@ -97,43 +93,37 @@ Agent → Evaluator → Condition → Response (if good)
Jeder Blocktyp hat spezifische Konfigurationsoptionen:
**Alle Blöcke**:
- Eingabe-/Ausgabeverbindungen
- Ein-/Ausgabeverbindungen
- Fehlerbehandlungsverhalten
- Einstellungen für Ausführungs-Timeout
- Zeitüberschreitungseinstellungen für die Ausführung
**KI-Blöcke** (Agent, Router, Evaluator):
- Modellauswahl (OpenAI, Anthropic, Google, lokal)
- API-Schlüssel und Authentifizierung
- Temperatur und andere Modellparameter
- Temperature und andere Modellparameter
- Systemaufforderungen und Anweisungen
**Logik-Blöcke** (Bedingung, Funktion):
**Logikblöcke** (Bedingung, Funktion):
- Benutzerdefinierte Ausdrücke oder Code
- Variablenreferenzen
- Einstellungen für Ausführungsumgebung
- Einstellungen für die Ausführungsumgebung
**Integrations-Blöcke** (API, Response):
**Integrationsblöcke** (API, Antwort):
- Endpunktkonfiguration
- Header und Authentifizierung
- Anfrage-/Antwortformatierung
<Cards>
<Card title="Agent-Block" href="/blocks/agent">
Verbindung zu KI-Modellen herstellen und intelligente Antworten erstellen
<Card title="Agent Block" href="/blocks/agent">
Verbindung zu KI-Modellen herstellen und intelligente Antworten erzeugen
</Card>
<Card title="Funktions-Block" href="/blocks/function">
<Card title="Function Block" href="/blocks/function">
Benutzerdefinierten Code ausführen, um Daten zu verarbeiten und zu transformieren
</Card>
<Card title="API-Block" href="/blocks/api">
<Card title="API Block" href="/blocks/api">
Integration mit externen Diensten und APIs
</Card>
<Card title="Bedingungs-Block" href="/blocks/condition">
<Card title="Condition Block" href="/blocks/condition">
Verzweigende Logik basierend auf Datenbewertung erstellen
</Card>
<Card title="Variablen-Block" href="/blocks/variables">
Workflow-bezogene Variablen setzen und verwalten
</Card>
<Card title="Warte-Block" href="/blocks/wait">
Workflow-Ausführung für bestimmte Zeitverzögerungen pausieren
</Card>
</Cards>

View File

@@ -9,7 +9,7 @@ import { Image } from '@/components/ui/image'
Der Loop-Block ist ein Container-Block in Sim, der es ermöglicht, iterative Workflows zu erstellen, indem eine Gruppe von Blöcken wiederholt ausgeführt wird. Loops ermöglichen iterative Verarbeitung in deinen Workflows.
Der Schleifenblock unterstützt vier Arten der Iteration:
Der Loop-Block unterstützt zwei Arten der Iteration:
<Callout type="info">
Loop-Blöcke sind Container-Knoten, die andere Blöcke enthalten können. Die Blöcke innerhalb einer Schleife werden basierend auf deiner Konfiguration mehrfach ausgeführt.
@@ -27,10 +27,10 @@ Der Loop-Block ermöglicht dir:
<strong>Operationen wiederholen</strong>: Blöcke eine festgelegte Anzahl von Malen ausführen
</Step>
<Step>
<strong>Auf Bedingungen basierte Schleifen</strong>: Ausführung fortsetzen, während oder bis eine Bedingung erfüllt ist
<strong>Sequentielle Verarbeitung</strong>: Datentransformation in geordneten Iterationen durchführen
</Step>
<Step>
<strong>Ergebnisse aggregieren</strong>: Ausgaben aus allen Schleifendurchläufen sammeln
<strong>Ergebnisse aggregieren</strong>: Ausgaben aus allen Schleifeniterationen sammeln
</Step>
</Steps>
@@ -47,23 +47,23 @@ Der Loop-Block führt enthaltene Blöcke durch sequentielle Iteration aus:
### Schleifentyp
Wähle zwischen vier Arten von Schleifen:
Wähle zwischen zwei Arten von Schleifen:
<Tabs items={['For-Schleife', 'ForEach-Schleife', 'While-Schleife', 'Do-While-Schleife']}>
<Tabs items={['For Loop', 'ForEach Loop']}>
<Tab>
**For-Schleife (Iterationen)** - Eine numerische Schleife, die eine festgelegte Anzahl von Malen ausgeführt wird:
**For Loop (Iterationen)** - Eine numerische Schleife, die eine feste Anzahl von Malen ausgeführt wird:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-1.png"
alt="For-Schleife mit Iterationen"
alt="For Loop mit Iterationen"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst.
Verwende diese Option, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst.
```
@@ -100,58 +100,6 @@ Wähle zwischen vier Arten von Schleifen:
```
</Tab>
<Tab>
**While-Schleife (Bedingungsbasiert)** - Wird weiter ausgeführt, solange eine Bedingung als wahr ausgewertet wird:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="While-Schleife mit Bedingung"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese, wenn du eine Schleife benötigst, die läuft, bis eine bestimmte Bedingung erfüllt ist. Die Bedingung wird **vor** jeder Iteration überprüft.
```
Example: While <variable.i> < 10
- Check condition → Execute if true
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Execute if true
- Check condition → Exit if false
```
</Tab>
<Tab>
**Do-While-Schleife (Bedingungsbasiert)** - Wird mindestens einmal ausgeführt und dann fortgesetzt, solange eine Bedingung wahr ist:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="Do-While-Schleife mit Bedingung"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese, wenn du mindestens eine Ausführung benötigst und dann eine Schleife, bis eine Bedingung erfüllt ist. Die Bedingung wird **nach** jeder Iteration überprüft.
```
Example: Do-while <variable.i> < 10
- Execute blocks
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Continue if true
- Check condition → Exit if false
```
</Tab>
</Tabs>
## Wie man Schleifen verwendet
@@ -165,9 +113,9 @@ Wähle zwischen vier Arten von Schleifen:
### Auf Ergebnisse zugreifen
Nach Abschluss einer Schleife können Sie auf die aggregierten Ergebnisse zugreifen:
Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
- **`<loop.results>`**: Array mit Ergebnissen aus allen Schleifendurchläufen
- **`<loop.results>`**: Array von Ergebnissen aus allen Schleifendurchläufen
## Beispielanwendungsfälle
@@ -195,30 +143,17 @@ Nach Abschluss einer Schleife können Sie auf die aggregierten Ergebnisse zugrei
</ol>
</div>
### Zähler mit While-Schleife
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Elemente mit zählerbasierter Schleife verarbeiten</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Workflow-Variable initialisieren: `i = 0`</li>
<li>While-Schleife mit Bedingung: `<variable.i>` \< 10</li>
<li>Innerhalb der Schleife: Agent verarbeitet Element am Index `<variable.i>`</li>
<li>Innerhalb der Schleife: Variable erhöht `i = <variable.i> + 1`</li>
<li>Schleife wird fortgesetzt, solange i kleiner als 10 ist</li>
</ol>
</div>
## Erweiterte Funktionen
### Einschränkungen
<Callout type="warning">
Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet:
- Sie können keinen Schleifenblock in einem anderen Schleifenblock platzieren
- Sie können keinen Parallelblock in einem Schleifenblock platzieren
- Sie können keinen Container-Block in einem anderen Container-Block platzieren
- Du kannst keinen Schleifenblock in einen anderen Schleifenblock platzieren
- Du kannst keinen Parallelblock in einen Schleifenblock platzieren
- Du kannst keinen Container-Block in einen anderen Container-Block platzieren
Wenn Sie mehrdimensionale Iterationen benötigen, sollten Sie Ihren Workflow umstrukturieren, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten.
Wenn du mehrdimensionale Iterationen benötigst, erwäge eine Umstrukturierung deines Workflows, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten.
</Callout>
<Callout type="info">
@@ -227,20 +162,17 @@ Nach Abschluss einer Schleife können Sie auf die aggregierten Ergebnisse zugrei
## Eingaben und Ausgaben
<Tabs items={['Configuration', 'Variables', 'Results']}>
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Schleifentyp</strong>: Wählen Sie zwischen 'for', 'forEach', 'while' oder 'doWhile'
<strong>Schleifentyp</strong>: Wählen Sie zwischen 'for' oder 'forEach'
</li>
<li>
<strong>Iterationen</strong>: Anzahl der Ausführungen (für for-Schleifen)
</li>
<li>
<strong>Sammlung</strong>: Array oder Objekt, über das iteriert werden soll (forEach-Schleifen)
</li>
<li>
<strong>Bedingung</strong>: Boolescher Ausdruck zur Auswertung (while/do-while-Schleifen)
<strong>Sammlung</strong>: Array oder Objekt zum Durchlaufen (für forEach-Schleifen)
</li>
</ul>
</Tab>
@@ -272,8 +204,8 @@ Nach Abschluss einer Schleife können Sie auf die aggregierten Ergebnisse zugrei
</Tab>
</Tabs>
## Bewährte Praktiken
## Best Practices
- **Vernünftige Grenzen setzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden
- **ForEach für Sammlungen verwenden**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten
- **Fehler elegant behandeln**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten
- **Setzen Sie vernünftige Grenzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden
- **Verwenden Sie ForEach für Sammlungen**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten
- **Behandeln Sie Fehler angemessen**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten

View File

@@ -1,123 +0,0 @@
---
title: Variablen
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
Der Variablen-Block aktualisiert Workflow-Variablen während der Ausführung. Variablen müssen zuerst im Variablen-Bereich deines Workflows initialisiert werden, dann kannst du diesen Block verwenden, um ihre Werte während der Ausführung deines Workflows zu aktualisieren.
<div className="flex justify-center">
<Image
src="/static/blocks/variables.png"
alt="Variablen-Block"
width={500}
height={350}
className="my-6"
/>
</div>
<Callout>
Greife überall in deinem Workflow auf Variablen zu, indem du die `<variable.variableName>` Syntax verwendest.
</Callout>
## Überblick
Der Variablen-Block ermöglicht dir:
<Steps>
<Step>
<strong>Workflow-Variablen aktualisieren</strong>: Ändere Variablenwerte während der Ausführung
</Step>
<Step>
<strong>Dynamische Daten speichern</strong>: Erfasse Block-Ausgaben in Variablen
</Step>
<Step>
<strong>Zustand beibehalten</strong>: Verfolge Zähler, Flags und Zwischenergebnisse
</Step>
</Steps>
## Wie man Variablen verwendet
### 1. Im Workflow-Variablenbereich initialisieren
Erstelle zunächst deine Variablen im Variablen-Bereich des Workflows (zugänglich über die Workflow-Einstellungen):
```
customerEmail = ""
retryCount = 0
currentStatus = "pending"
```
### 2. Mit dem Variablen-Block aktualisieren
Verwende den Variablen-Block, um diese Werte während der Ausführung zu aktualisieren:
```
customerEmail = <api.email>
retryCount = <variable.retryCount> + 1
currentStatus = "processing"
```
### 3. Überall zugreifen
Referenziere Variablen in jedem Block:
```
Agent prompt: "Send email to <variable.customerEmail>"
Condition: <variable.retryCount> < 5
API body: {"status": "<variable.currentStatus>"}
```
## Beispielanwendungsfälle
### Schleifenzähler und Zustand
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Fortschritt durch Schleifeniterationen verfolgen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `itemsProcessed = 0`, `lastResult = ""`</li>
<li>Schleife iteriert über Elemente</li>
<li>Innerhalb der Schleife: Agent verarbeitet aktuelles Element</li>
<li>Innerhalb der Schleife: Variablen aktualisieren `itemsProcessed = <variable.itemsProcessed> + 1`</li>
<li>Innerhalb der Schleife: Variablen aktualisieren `lastResult = <agent.content>`</li>
<li>Nächste Iteration: Auf `<variable.lastResult>` zugreifen, um mit aktuellem Ergebnis zu vergleichen</li>
</ol>
</div>
### Wiederholungslogik
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: API-Wiederholungsversuche verfolgen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `retryCount = 0`</li>
<li>API-Block versucht Anfrage</li>
<li>Bei Fehlschlag erhöht Variablen: `retryCount = <variable.retryCount> + 1`</li>
<li>Bedingung prüft, ob `<variable.retryCount>` \< 3 ist, um zu wiederholen oder abzubrechen</li>
</ol>
</div>
### Dynamische Konfiguration
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Benutzerkontext für Workflow speichern</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `userId = ""`, `userTier = ""`</li>
<li>API ruft Benutzerprofil ab</li>
<li>Variablen speichern: `userId = <api.id>`, `userTier = <api.tier>`</li>
<li>Agent personalisiert Antwort mit `<variable.userTier>`</li>
<li>API verwendet `<variable.userId>` für Logging</li>
</ol>
</div>
## Ausgaben
- **`<variables.assignments>`**: JSON-Objekt mit allen Variablenzuweisungen aus diesem Block
## Bewährte Praktiken
- **Im Workflow-Einstellungen initialisieren**: Erstellen Sie Variablen immer im Workflow-Variablenbereich, bevor Sie sie verwenden
- **Dynamisch aktualisieren**: Verwenden Sie Variablenblöcke, um Werte basierend auf Blockausgaben oder Berechnungen zu aktualisieren
- **In Schleifen verwenden**: Perfekt für die Zustandsverfolgung über Iterationen hinweg
- **Beschreibend benennen**: Verwenden Sie klare Namen wie `currentIndex`, `totalProcessed` oder `lastError`

View File

@@ -1,99 +0,0 @@
---
title: Warten
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
Der Warten-Block pausiert deinen Workflow für eine bestimmte Zeit, bevor er mit dem nächsten Block fortfährt. Verwende ihn, um Verzögerungen zwischen Aktionen einzufügen, API-Ratenbegrenzungen einzuhalten oder Operationen zeitlich zu verteilen.
<div className="flex justify-center">
<Image
src="/static/blocks/wait.png"
alt="Warten-Block"
width={500}
height={350}
className="my-6"
/>
</div>
## Übersicht
Mit dem Warten-Block kannst du:
<Steps>
<Step>
<strong>Zeitverzögerungen hinzufügen</strong>: Ausführung zwischen Workflow-Schritten pausieren
</Step>
<Step>
<strong>Ratenbegrenzungen einhalten</strong>: API-Aufrufe zeitlich verteilen, um innerhalb der Limits zu bleiben
</Step>
<Step>
<strong>Sequenzen planen</strong>: Zeitgesteuerte Workflows mit Verzögerungen zwischen Aktionen erstellen
</Step>
</Steps>
## Konfiguration
### Wartezeit
Gib die Dauer der Ausführungspause ein:
- **Eingabe**: Positive Zahl
- **Maximum**: 600 Sekunden (10 Minuten) oder 10 Minuten
### Einheit
Wähle die Zeiteinheit:
- **Sekunden**: Für kurze, präzise Verzögerungen
- **Minuten**: Für längere Pausen
<Callout type="info">
Warten-Blöcke können durch Stoppen des Workflows abgebrochen werden. Die maximale Wartezeit beträgt 10 Minuten.
</Callout>
## Ausgaben
- **`<wait.waitDuration>`**: Die Wartezeit in Millisekunden
- **`<wait.status>`**: Status des Wartens ('waiting', 'completed' oder 'cancelled')
## Beispielanwendungsfälle
### API-Ratenbegrenzung
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Innerhalb der API-Ratenbegrenzungen bleiben</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API-Block macht erste Anfrage</li>
<li>Warten-Block pausiert für 2 Sekunden</li>
<li>API-Block macht zweite Anfrage</li>
<li>Prozess läuft weiter, ohne Ratenbegrenzungen zu überschreiten</li>
</ol>
</div>
### Zeitgesteuerte Benachrichtigungen
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Folgenachrichten senden</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Funktion sendet erste E-Mail</li>
<li>Warten-Block pausiert für 5 Minuten</li>
<li>Funktion sendet Folge-E-Mail</li>
</ol>
</div>
### Verarbeitungsverzögerungen
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Warten auf externes System</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API-Block löst Job im externen System aus</li>
<li>Warte-Block pausiert für 30 Sekunden</li>
<li>API-Block prüft den Abschlussstatus des Jobs</li>
</ol>
</div>
## Bewährte Praktiken
- **Halte Wartezeiten angemessen**: Verwende Warten für Verzögerungen bis zu 10 Minuten. Für längere Verzögerungen solltest du geplante Workflows in Betracht ziehen
- **Überwache die Ausführungszeit**: Denke daran, dass Wartezeiten die Gesamtdauer des Workflows verlängern

View File

@@ -1,5 +1,5 @@
---
title: Grundlagen
title: Verbindungsgrundlagen
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Datenstruktur
title: Verbindungsdatenstruktur
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Übersicht
title: Verbindungen
description: Verbinde deine Blöcke miteinander.
---

View File

@@ -1,5 +1,5 @@
---
title: Tags
title: Verbindungs-Tags
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -535,7 +535,7 @@ app.post('/sim-webhook', (req, res) => {
// Handle error...
} else {
console.log(`Workflow ${workflowId} completed: ${executionId}`);
console.log(`Cost: $${cost.total}`);
console.log(`Cost: ${cost.total}`);
// Process successful execution...
}
break;

View File

@@ -1,5 +1,5 @@
---
title: Grundlagen
title: Ausführungsgrundlagen
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Übersicht
title: Ausführung
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Python
title: Python SDK
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -284,6 +284,7 @@ class AsyncExecutionResult:
class WorkflowStatus:
is_deployed: bool
deployed_at: Optional[str] = None
is_published: bool = False
needs_redeployment: bool = False
```
@@ -747,6 +748,10 @@ Konfiguriere den Client mit Umgebungsvariablen:
</Step>
</Steps>
<Callout type="warning">
Halte deinen API-Schlüssel sicher und committe ihn niemals in die Versionskontrolle. Verwende Umgebungsvariablen oder sicheres Konfigurationsmanagement.
</Callout>
## Anforderungen
- Python 3.8+

View File

@@ -1,5 +1,5 @@
---
title: TypeScript
title: TypeScript/JavaScript SDK
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -81,7 +81,7 @@ new SimStudioClient(config: SimStudioConfig)
##### executeWorkflow()
Führt einen Workflow mit optionalen Eingabedaten aus.
Führen Sie einen Workflow mit optionalen Eingabedaten aus.
```typescript
const result = await client.executeWorkflow('workflow-id', {
@@ -99,7 +99,7 @@ const result = await client.executeWorkflow('workflow-id', {
- `selectedOutputs` (string[]): Block-Ausgaben, die im `blockName.attribute`Format gestreamt werden sollen (z.B. `["agent1.content"]`)
- `async` (boolean): Asynchron ausführen (Standard: false)
**Rückgabewert:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
**Rückgabe:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
Wenn `async: true`, wird sofort mit einer Task-ID zum Abfragen zurückgegeben. Andernfalls wird auf den Abschluss gewartet.
@@ -115,7 +115,7 @@ console.log('Is deployed:', status.isDeployed);
**Parameter:**
- `workflowId` (string): Die ID des Workflows
**Rückgabewert:** `Promise<WorkflowStatus>`
**Rückgabe:** `Promise<WorkflowStatus>`
##### validateWorkflow()
@@ -131,7 +131,7 @@ if (isReady) {
**Parameter:**
- `workflowId` (string): Die ID des Workflows
**Rückgabewert:** `Promise<boolean>`
**Rückgabe:** `Promise<boolean>`
##### getJobStatus()
@@ -148,7 +148,7 @@ if (status.status === 'completed') {
**Parameter:**
- `taskId` (string): Die Task-ID, die von der asynchronen Ausführung zurückgegeben wurde
**Rückgabewert:** `Promise<JobStatus>`
**Rückgabe:** `Promise<JobStatus>`
**Antwortfelder:**
- `success` (boolean): Ob die Anfrage erfolgreich war
@@ -161,7 +161,7 @@ if (status.status === 'completed') {
##### executeWithRetry()
Einen Workflow mit automatischer Wiederholung bei Rate-Limit-Fehlern unter Verwendung von exponentiellem Backoff ausführen.
Führt einen Workflow mit automatischer Wiederholung bei Ratenlimitfehlern unter Verwendung von exponentiellem Backoff aus.
```typescript
const result = await client.executeWithRetry('workflow-id', {
@@ -184,13 +184,13 @@ const result = await client.executeWithRetry('workflow-id', {
- `maxDelay` (number): Maximale Verzögerung in ms (Standard: 30000)
- `backoffMultiplier` (number): Backoff-Multiplikator (Standard: 2)
**Rückgabe:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
**Rückgabewert:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
Die Wiederholungslogik verwendet exponentielles Backoff (1s → 2s → 4s → 8s...) mit ±25% Jitter, um den Thundering-Herd-Effekt zu vermeiden. Wenn die API einen `retry-after` Header bereitstellt, wird dieser stattdessen verwendet.
Die Wiederholungslogik verwendet exponentiellen Backoff (1s → 2s → 4s → 8s...) mit ±25% Jitter, um den Thundering-Herd-Effekt zu vermeiden. Wenn die API einen `retry-after`Header bereitstellt, wird dieser stattdessen verwendet.
##### getRateLimitInfo()
Ruft die aktuellen Rate-Limit-Informationen aus der letzten API-Antwort ab.
Ruft die aktuellen Ratenlimit-Informationen aus der letzten API-Antwort ab.
```typescript
const rateLimitInfo = client.getRateLimitInfo();
@@ -201,7 +201,7 @@ if (rateLimitInfo) {
}
```
**Rückgabe:** `RateLimitInfo | null`
**Rückgabewert:** `RateLimitInfo | null`
##### getUsageLimits()
@@ -215,7 +215,7 @@ console.log('Current period cost:', limits.usage.currentPeriodCost);
console.log('Plan:', limits.usage.plan);
```
**Rückgabe:** `Promise<UsageLimits>`
**Rückgabewert:** `Promise<UsageLimits>`
**Antwortstruktur:**
@@ -301,6 +301,7 @@ interface AsyncExecutionResult {
interface WorkflowStatus {
isDeployed: boolean;
deployedAt?: string;
isPublished: boolean;
needsRedeployment: boolean;
}
```
@@ -356,8 +357,8 @@ class SimStudioError extends Error {
**Häufige Fehlercodes:**
- `UNAUTHORIZED`: Ungültiger API-Schlüssel
- `TIMEOUT`: Zeitüberschreitung der Anfrage
- `RATE_LIMIT_EXCEEDED`: Rate-Limit überschritten
- `USAGE_LIMIT_EXCEEDED`: Nutzungslimit überschritten
- `RATE_LIMIT_EXCEEDED`: Ratengrenze überschritten
- `USAGE_LIMIT_EXCEEDED`: Nutzungsgrenze überschritten
- `EXECUTION_ERROR`: Workflow-Ausführung fehlgeschlagen
## Beispiele
@@ -603,105 +604,26 @@ async function executeClientSideWorkflow() {
});
console.log('Workflow result:', result);
// Update UI with result
document.getElementById('result')!.textContent =
document.getElementById('result')!.textContent =
JSON.stringify(result.output, null, 2);
} catch (error) {
console.error('Error:', error);
}
}
// Attach to button click
document.getElementById('executeBtn')?.addEventListener('click', executeClientSideWorkflow);
```
### Datei-Upload
Datei-Objekte werden automatisch erkannt und in das Base64-Format konvertiert. Fügen Sie sie in Ihrem Input unter dem Feldnamen ein, der dem API-Trigger-Inputformat Ihres Workflows entspricht.
Das SDK konvertiert Datei-Objekte in dieses Format:
```typescript
{
type: 'file',
data: 'data:mime/type;base64,base64data',
name: 'filename',
mime: 'mime/type'
}
```
Alternativ können Sie Dateien manuell im URL-Format bereitstellen:
```typescript
{
type: 'url',
data: 'https://example.com/file.pdf',
name: 'file.pdf',
mime: 'application/pdf'
}
```
<Tabs items={['Browser', 'Node.js']}>
<Tab value="Browser">
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
const client = new SimStudioClient({
apiKey: process.env.NEXT_PUBLIC_SIM_API_KEY!
});
// From file input
async function handleFileUpload(event: Event) {
const input = event.target as HTMLInputElement;
const files = Array.from(input.files || []);
// Include files under the field name from your API trigger's input format
const result = await client.executeWorkflow('workflow-id', {
input: {
documents: files, // Must match your workflow's "files" field name
instructions: 'Analyze these documents'
}
});
console.log('Result:', result);
}
```
</Tab>
<Tab value="Node.js">
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
import fs from 'fs';
const client = new SimStudioClient({
apiKey: process.env.SIM_API_KEY!
});
// Read file and create File object
const fileBuffer = fs.readFileSync('./document.pdf');
const file = new File([fileBuffer], 'document.pdf', {
type: 'application/pdf'
});
// Include files under the field name from your API trigger's input format
const result = await client.executeWorkflow('workflow-id', {
input: {
documents: [file], // Must match your workflow's "files" field name
query: 'Summarize this document'
}
});
```
</Tab>
</Tabs>
<Callout type="warning">
Bei der Verwendung des SDK im Browser sollten Sie darauf achten, keine sensiblen API-Schlüssel offenzulegen. Erwägen Sie die Verwendung eines Backend-Proxys oder öffentlicher API-Schlüssel mit eingeschränkten Berechtigungen.
</Callout>
### React Hook Beispiel
### React Hook-Beispiel
Erstellen Sie einen benutzerdefinierten React-Hook für die Workflow-Ausführung:
Erstellen eines benutzerdefinierten React-Hooks für die Workflow-Ausführung:
```typescript
import { useState, useCallback } from 'react';
@@ -893,27 +815,11 @@ async function checkUsage() {
console.log(' Is limited:', limits.rateLimit.async.isLimited);
console.log('\n=== Usage ===');
console.log('Current period cost: $' + limits.usage.currentPeriodCost.toFixed(2));
console.log('Limit: $' + limits.usage.limit.toFixed(2));
console.log('Plan:', limits.usage.plan);
console.log('Current period cost:
const percentUsed = (limits.usage.currentPeriodCost / limits.usage.limit) * 100;
console.log('Usage: ' + percentUsed.toFixed(1) + '%');
### Streaming Workflow Execution
if (percentUsed > 80) {
console.warn('⚠️ Warning: You are approaching your usage limit!');
}
} catch (error) {
console.error('Error checking usage:', error);
}
}
checkUsage();
```
### Streaming-Workflow-Ausführung
Führen Sie Workflows mit Echtzeit-Streaming-Antworten aus:
Execute workflows with real-time streaming responses:
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
@@ -924,33 +830,33 @@ const client = new SimStudioClient({
async function executeWithStreaming() {
try {
// Enable streaming for specific block outputs
// Streaming für bestimmte Block-Ausgaben aktivieren
const result = await client.executeWorkflow('workflow-id', {
input: { message: 'Count to five' },
stream: true,
selectedOutputs: ['agent1.content'] // Use blockName.attribute format
selectedOutputs: ['agent1.content'] // Format blockName.attribute verwenden
});
console.log('Workflow result:', result);
console.log('Workflow-Ergebnis:', result);
} catch (error) {
console.error('Error:', error);
console.error('Fehler:', error);
}
}
```
Die Streaming-Antwort folgt dem Server-Sent Events (SSE) Format:
The streaming response follows the Server-Sent Events (SSE) format:
```
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", two"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", zwei"}
data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}
data: [DONE]
```
**React Streaming Beispiel:**
**React Streaming Example:**
```typescript
import { useState, useEffect } from 'react';
@@ -963,13 +869,13 @@ function StreamingWorkflow() {
setLoading(true);
setOutput('');
// IMPORTANT: Make this API call from your backend server, not the browser
// Never expose your API key in client-side code
// WICHTIG: Führen Sie diesen API-Aufruf von Ihrem Backend-Server aus, nicht vom Browser
// Setzen Sie niemals Ihren API-Schlüssel im Client-seitigen Code frei
const response = await fetch('https://sim.ai/api/workflows/WORKFLOW_ID/execute', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.SIM_API_KEY! // Server-side environment variable only
'X-API-Key': process.env.SIM_API_KEY! // Nur serverseitige Umgebungsvariable
},
body: JSON.stringify({
message: 'Generate a story',
@@ -1001,10 +907,10 @@ function StreamingWorkflow() {
if (parsed.chunk) {
setOutput(prev => prev + parsed.chunk);
} else if (parsed.event === 'done') {
console.log('Execution complete:', parsed.metadata);
console.log('Ausführung abgeschlossen:', parsed.metadata);
}
} catch (e) {
// Skip invalid JSON
// Ungültiges JSON überspringen
}
}
}
@@ -1014,7 +920,7 @@ function StreamingWorkflow() {
return (
<div>
<button onClick={executeStreaming} disabled={loading}>
{loading ? 'Generating...' : 'Start Streaming'}
{loading ? 'Generiere...' : 'Streaming starten'}
</button>
<div style={{ whiteSpace: 'pre-wrap' }}>{output}</div>
</div>
@@ -1022,31 +928,35 @@ function StreamingWorkflow() {
}
```
## API-Schlüssel erhalten
## Getting Your API Key
<Steps>
<Step title="Bei Sim anmelden">
Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an.
<Step title="Log in to Sim">
Navigate to [Sim](https://sim.ai) and log in to your account.
</Step>
<Step title="Öffnen Sie Ihren Workflow">
Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten.
<Step title="Open your workflow">
Navigate to the workflow you want to execute programmatically.
</Step>
<Step title="Deployen Sie Ihren Workflow">
Klicken Sie auf "Deploy", um Ihren Workflow zu deployen, falls dies noch nicht geschehen ist.
<Step title="Deploy your workflow">
Click on "Deploy" to deploy your workflow if it hasn't been deployed yet.
</Step>
<Step title="API-Schlüssel erstellen oder auswählen">
Wählen Sie während des Deployment-Prozesses einen API-Schlüssel aus oder erstellen Sie einen neuen.
<Step title="Create or select an API key">
During the deployment process, select or create an API key.
</Step>
<Step title="API-Schlüssel kopieren">
Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer TypeScript/JavaScript-Anwendung.
<Step title="Copy the API key">
Copy the API key to use in your TypeScript/JavaScript application.
</Step>
</Steps>
## Anforderungen
<Callout type="warning">
Keep your API key secure and never commit it to version control. Use environment variables or secure configuration management.
</Callout>
## Requirements
- Node.js 16+
- TypeScript 5.0+ (für TypeScript-Projekte)
- TypeScript 5.0+ (for TypeScript projects)
## Lizenz
## License
Apache-2.0

View File

@@ -207,18 +207,18 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
#### Input
| Parameter | Typ | Erforderlich | Beschreibung |
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `webhookURL` | string | Ja | Die Webhook-URL, die befüllt werden soll |
| `data` | json | Ja | Die Daten, die befüllt werden sollen |
| `authToken` | string | Nein | Optionaler Auth-Token für die Clay-Webhook-Authentifizierung \(die meisten Webhooks benötigen dies nicht\) |
| `webhookURL` | string | Yes | The webhook URL to populate |
| `data` | json | Yes | The data to populate |
| `authToken` | string | Yes | Auth token for Clay webhook authentication |
#### Output
| Parameter | Typ | Beschreibung |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Antwortdaten vom Clay-Webhook |
| `metadata` | object | Webhook-Antwort-Metadaten |
| `success` | boolean | Operation success status |
| `output` | json | Clay populate operation results including response data from Clay webhook |
## Notes

View File

@@ -42,7 +42,7 @@ In Sim ermöglicht die Confluence-Integration Ihren Agenten den Zugriff auf die
## Nutzungsanweisungen
Integrieren Sie Confluence in den Workflow. Kann Seiten lesen, erstellen, aktualisieren, löschen, Kommentare verwalten, Anhänge hinzufügen, Labels vergeben und Inhalte durchsuchen.
Integriert Confluence in den Workflow. Kann Seiten lesen und aktualisieren. Erfordert OAuth.
## Tools
@@ -91,254 +91,6 @@ Aktualisiert eine Confluence-Seite über die Confluence-API.
| `title` | string | Aktualisierter Seitentitel |
| `success` | boolean | Erfolgsstatus der Aktualisierungsoperation |
### `confluence_create_page`
Erstellen Sie eine neue Seite in einem Confluence-Space.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `spaceId` | string | Ja | Confluence-Space-ID, in dem die Seite erstellt wird |
| `title` | string | Ja | Titel der neuen Seite |
| `content` | string | Ja | Seiteninhalt im Confluence-Speicherformat (HTML) |
| `parentId` | string | Nein | Übergeordnete Seiten-ID, wenn eine Unterseite erstellt wird |
| `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 der Erstellung |
| `pageId` | string | Erstellte Seiten-ID |
| `title` | string | Seitentitel |
| `url` | string | Seiten-URL |
### `confluence_delete_page`
Löschen einer Confluence-Seite (verschiebt sie in den Papierkorb, wo sie wiederhergestellt werden kann).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID zum Löschen |
| `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 der Löschung |
| `pageId` | string | Gelöschte Seiten-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_search`
Suche nach Inhalten in Confluence-Seiten, Blog-Beiträgen und anderen Inhalten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `query` | string | Ja | Suchabfragestring |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse (Standard: 25) |
| `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 der Suche |
| `results` | array | Suchergebnisse |
### `confluence_create_comment`
Einen Kommentar zu einer Confluence-Seite hinzufügen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, zu der ein Kommentar hinzugefügt werden soll |
| `comment` | string | Ja | Kommentartext im Confluence-Speicherformat |
| `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 der Erstellung |
| `commentId` | string | Erstellte Kommentar-ID |
| `pageId` | string | Seiten-ID |
### `confluence_list_comments`
Listet alle Kommentare auf einer Confluence-Seite auf.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Kommentare aufgelistet werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare (Standard: 25) |
| `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 Abrufs |
| `comments` | array | Liste der Kommentare |
### `confluence_update_comment`
Aktualisiert einen vorhandenen Kommentar auf einer Confluence-Seite.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `commentId` | string | Ja | Confluence-Kommentar-ID zum Aktualisieren |
| `comment` | string | Ja | Aktualisierter Kommentartext im Confluence-Speicherformat |
| `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 der Aktualisierung |
| `commentId` | string | Aktualisierte Kommentar-ID |
| `updated` | boolean | Aktualisierungsstatus |
### `confluence_delete_comment`
Löscht einen Kommentar von einer Confluence-Seite.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `commentId` | string | Ja | Confluence-Kommentar-ID zum Löschen |
| `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 der Löschung |
| `commentId` | string | Gelöschte Kommentar-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_list_attachments`
Listet alle Anhänge einer Confluence-Seite auf.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Anhänge aufgelistet werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Anhänge (Standard: 25) |
| `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 Abrufs |
| `attachments` | array | Liste der Anhänge |
### `confluence_delete_attachment`
Löscht einen Anhang von einer Confluence-Seite (wird in den Papierkorb verschoben).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `attachmentId` | string | Ja | Confluence-Anhangs-ID zum Löschen |
| `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 der Löschung |
| `attachmentId` | string | Gelöschte Anhangs-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_list_labels`
Alle Labels einer Confluence-Seite auflisten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Labels aufgelistet werden sollen |
| `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 Abrufs |
| `labels` | array | Liste der Labels |
### `confluence_get_space`
Details zu einem bestimmten Confluence-Space abrufen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `spaceId` | string | Ja | Confluence-Space-ID zum Abrufen |
| `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 Abrufs |
| `spaceId` | string | Space-ID |
| `name` | string | Space-Name |
| `key` | string | Space-Schlüssel |
| `type` | string | Space-Typ |
| `status` | string | Space-Status |
| `url` | string | Space-URL |
### `confluence_list_spaces`
Alle für den Benutzer zugänglichen Confluence-Spaces auflisten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Spaces (Standard: 25) |
| `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 Abrufs |
| `spaces` | array | Liste der Spaces |
## Hinweise
- Kategorie: `tools`

View File

@@ -7,7 +7,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="discord"
color="#5865F2"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
@@ -56,7 +56,7 @@ Discord-Komponenten in Sim verwenden effizientes Lazy Loading und rufen Daten nu
## Nutzungsanleitung
Umfassende Discord-Integration: Nachrichten, Threads, Kanäle, Rollen, Mitglieder, Einladungen und Webhooks.
Integriert Discord in den Workflow. Kann Nachrichten senden und empfangen, Server-Informationen abrufen und Benutzerinformationen erhalten. Erfordert einen Bot-API-Schlüssel.
## Tools
@@ -72,7 +72,6 @@ Eine Nachricht an einen Discord-Kanal senden
| `channelId` | string | Ja | Die Discord-Kanal-ID, an die die Nachricht gesendet werden soll |
| `content` | string | Nein | Der Textinhalt der Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `files` | file[] | Nein | Dateien, die an die Nachricht angehängt werden sollen |
#### Ausgabe
@@ -98,7 +97,7 @@ Nachrichten aus einem Discord-Kanal abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Container für Nachrichtendaten |
| `messages` | array | Array von Discord-Nachrichten mit vollständigen Metadaten |
### `discord_get_server`
@@ -136,620 +135,6 @@ Informationen über einen Discord-Benutzer abrufen
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Discord-Benutzerinformationen |
### `discord_edit_message`
Eine bestehende Nachricht in einem Discord-Kanal bearbeiten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu bearbeitenden Nachricht |
| `content` | string | Nein | Der neue Textinhalt für die Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Discord-Nachrichtendaten |
### `discord_delete_message`
Eine Nachricht aus einem Discord-Kanal löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_add_reaction`
Füge eine Reaktions-Emoji zu einer Discord-Nachricht hinzu
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der Nachricht, auf die reagiert werden soll |
| `emoji` | string | Ja | Das Emoji für die Reaktion \(Unicode-Emoji oder benutzerdefiniertes Emoji im Format name:id\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_remove_reaction`
Entferne eine Reaktion von einer Discord-Nachricht
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der Nachricht mit der Reaktion |
| `emoji` | string | Ja | Das zu entfernende Emoji \(Unicode-Emoji oder benutzerdefiniertes Emoji im Format name:id\) |
| `userId` | string | Nein | Die Benutzer-ID, deren Reaktion entfernt werden soll \(weglassen, um die eigene Reaktion des Bots zu entfernen\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_pin_message`
Eine Nachricht in einem Discord-Kanal anpinnen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der anzupinnenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_unpin_message`
Eine Nachricht in einem Discord-Kanal lösen (Unpin)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu lösenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_create_thread`
Einen Thread in einem Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, in der der Thread erstellt werden soll |
| `name` | string | Ja | Der Name des Threads \(1-100 Zeichen\) |
| `messageId` | string | Nein | Die Nachrichten-ID, aus der ein Thread erstellt werden soll \(falls aus einer bestehenden Nachricht erstellt wird\) |
| `autoArchiveDuration` | number | Nein | Dauer in Minuten bis zur automatischen Archivierung des Threads \(60, 1440, 4320, 10080\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Thread-Daten |
### `discord_join_thread`
Einem Thread in Discord beitreten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID, der beigetreten werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_leave_thread`
Einen Thread in Discord verlassen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID, die verlassen werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_archive_thread`
Einen Thread in Discord archivieren oder dearchivieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID zum Archivieren/Dearchivieren |
| `archived` | boolean | Ja | Ob der Thread archiviert \(true\) oder dearchiviert \(false\) werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Thread-Daten |
### `discord_create_channel`
Einen neuen Kanal in einem Discord-Server erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `name` | string | Ja | Der Name des Kanals \(1-100 Zeichen\) |
| `type` | number | Nein | Kanaltyp \(0=Text, 2=Sprache, 4=Kategorie, 5=Ankündigung, 13=Bühne\) |
| `topic` | string | Nein | Kanalthema \(0-1024 Zeichen\) |
| `parentId` | string | Nein | Übergeordnete Kategorie-ID für den Kanal |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten des erstellten Kanals |
### `discord_update_channel`
Discord-Kanal aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die aktualisiert werden soll |
| `name` | string | Nein | Der neue Name für den Kanal |
| `topic` | string | Nein | Das neue Thema für den Kanal |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten des aktualisierten Kanals |
### `discord_delete_channel`
Discord-Kanal löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die gelöscht werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_get_channel`
Informationen über einen Discord-Kanal abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die abgerufen werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Kanaldaten |
### `discord_create_role`
Eine neue Rolle in einem Discord-Server erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `name` | string | Ja | Der Name der Rolle |
| `color` | number | Nein | RGB-Farbwert als Ganzzahl \(z.B. 0xFF0000 für rot\) |
| `hoist` | boolean | Nein | Ob Rollenmitglieder getrennt von Online-Mitgliedern angezeigt werden sollen |
| `mentionable` | boolean | Nein | Ob die Rolle erwähnt werden kann |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten der erstellten Rolle |
### `discord_update_role`
Eine Rolle in einem Discord-Server aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `roleId` | string | Ja | Die zu aktualisierende Rollen-ID |
| `name` | string | Nein | Der neue Name für die Rolle |
| `color` | number | Nein | RGB-Farbwert als Ganzzahl |
| `hoist` | boolean | Nein | Ob Rollenmitglieder separat angezeigt werden sollen |
| `mentionable` | boolean | Nein | Ob die Rolle erwähnt werden kann |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Rollendaten |
### `discord_delete_role`
Eine Rolle aus einem Discord-Server löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `roleId` | string | Ja | Die zu löschende Rollen-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_assign_role`
Eine Rolle einem Mitglied auf einem Discord-Server zuweisen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, der die Rolle zugewiesen werden soll |
| `roleId` | string | Ja | Die Rollen-ID, die zugewiesen werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_remove_role`
Eine Rolle von einem Mitglied auf einem Discord-Server entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, von der die Rolle entfernt werden soll |
| `roleId` | string | Ja | Die Rollen-ID, die entfernt werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_kick_member`
Ein Mitglied von einem Discord-Server entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID des zu entfernenden Benutzers |
| `reason` | string | Nein | Grund für die Entfernung des Mitglieds |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_ban_member`
Ein Mitglied von einem Discord-Server sperren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, die gesperrt werden soll |
| `reason` | string | Nein | Grund für die Sperrung des Mitglieds |
| `deleteMessageDays` | number | Nein | Anzahl der Tage, für die Nachrichten gelöscht werden sollen \(0-7\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_unban_member`
Die Sperrung eines Mitglieds auf einem Discord-Server aufheben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, deren Sperrung aufgehoben werden soll |
| `reason` | string | Nein | Grund für die Aufhebung der Sperrung des Mitglieds |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_get_member`
Informationen über ein Mitglied in einem Discord-Server abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die abzurufende Benutzer-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Mitgliedsdaten |
### `discord_update_member`
Ein Mitglied in einem Discord-Server aktualisieren (z.B. Nickname ändern)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die zu aktualisierende Benutzer-ID |
| `nick` | string | Nein | Neuer Nickname für das Mitglied \(null zum Entfernen\) |
| `mute` | boolean | Nein | Ob das Mitglied in Sprachkanälen stummgeschaltet werden soll |
| `deaf` | boolean | Nein | Ob das Mitglied in Sprachkanälen taub geschaltet werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Mitgliedsdaten |
### `discord_create_invite`
Einen Einladungslink für einen Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, für die eine Einladung erstellt werden soll |
| `maxAge` | number | Nein | Dauer der Einladung in Sekunden \(0 = läuft nie ab, Standard 86400\) |
| `maxUses` | number | Nein | Maximale Anzahl der Verwendungen \(0 = unbegrenzt, Standard 0\) |
| `temporary` | boolean | Nein | Ob die Einladung temporäre Mitgliedschaft gewährt |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Einladungsdaten |
### `discord_get_invite`
Informationen über eine Discord-Einladung abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `inviteCode` | string | Ja | Der abzurufende Einladungscode |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Einladungsdaten |
### `discord_delete_invite`
Discord-Einladung löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `inviteCode` | string | Ja | Der zu löschende Einladungscode |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_create_webhook`
Webhook in einem Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, in der der Webhook erstellt werden soll |
| `name` | string | Ja | Name des Webhooks \(1-80 Zeichen\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Webhook-Daten |
### `discord_execute_webhook`
Discord-Webhook ausführen, um eine Nachricht zu senden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `webhookId` | string | Ja | Die Webhook-ID |
| `webhookToken` | string | Ja | Der Webhook-Token |
| `content` | string | Ja | Der zu sendende Nachrichteninhalt |
| `username` | string | Nein | Überschreibt den Standardbenutzernamen des Webhooks |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Über Webhook gesendete Nachricht |
### `discord_get_webhook`
Informationen über einen Discord-Webhook abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `webhookId` | string | Ja | Die abzurufende Webhook-ID |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Webhook-Daten |
### `discord_delete_webhook`
Einen Discord-Webhook löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `webhookId` | string | Ja | Die zu löschende Webhook-ID |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
## Hinweise
- Kategorie: `tools`

View File

@@ -60,7 +60,6 @@ TTS mit ElevenLabs-Stimmen konvertieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `audioUrl` | string | Die URL der generierten Audiodatei |
| `audioFile` | file | Die generierte Audiodatei |
## Hinweise

View File

@@ -59,13 +59,6 @@ Durchsuchen Sie das Web mit Exa AI. Liefert relevante Suchergebnisse mit Titeln,
| `numResults` | number | Nein | Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 25\) |
| `useAutoprompt` | boolean | Nein | Ob Autoprompt zur Verbesserung der Anfrage verwendet werden soll \(Standard: false\) |
| `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_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: always, fallback oder never \(Standard: never\) |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -85,10 +78,6 @@ 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 | 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: always, fallback oder never \(Standard: never\) |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -107,14 +96,7 @@ Finde Webseiten, die einer bestimmten URL ähnlich sind, mit Exa AI. Gibt eine L
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die URL, für die ähnliche Links gefunden werden sollen |
| `numResults` | number | Nein | Anzahl der zurückzugebenden ähnlichen Links \(Standard: 10, max: 25\) |
| `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 | 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: always, fallback oder never \(Standard: never\) |
| `text` | boolean | Nein | Ob der vollständige Text der ähnlichen Seiten einbezogen werden soll |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -151,7 +133,7 @@ Führe umfassende Recherchen mit KI durch, um detaillierte Berichte mit Quellena
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Rechercheabfrage oder Thema |
| `model` | string | Nein | Recherchemodell: exa-research-fast, exa-research (Standard) oder exa-research-pro |
| `includeText` | boolean | Nein | Vollständigen Textinhalt in Ergebnissen einschließen |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: Firecrawl
description: Scrapen, suchen, crawlen, mappen und extrahieren von Webdaten
description: Durchsuche oder durchforste das Web
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -58,7 +58,7 @@ Dies ermöglicht Ihren Agenten, Informationen von Websites zu sammeln, strukturi
## Nutzungsanweisungen
Integrieren Sie Firecrawl in den Workflow. Scrapen Sie Seiten, durchsuchen Sie das Web, crawlen Sie ganze Websites, erfassen Sie URL-Strukturen und extrahieren Sie strukturierte Daten mit KI.
Integrieren Sie Firecrawl in den Workflow. Kann Websites durchsuchen, scrapen oder crawlen. Benötigt API-Schlüssel.
## Tools
@@ -70,7 +70,7 @@ Extrahieren Sie strukturierte Inhalte von Webseiten mit umfassender Metadaten-Un
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die URL, von der Inhalte gescrapt werden sollen |
| `url` | string | Ja | Die URL, von der Inhalte extrahiert werden sollen |
| `scrapeOptions` | json | Nein | Optionen für das Content-Scraping |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
@@ -107,7 +107,7 @@ Crawlen Sie ganze Websites und extrahieren Sie strukturierte Inhalte von allen z
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die zu crawlende Website-URL |
| `url` | string | Ja | Die Website-URL zum Crawlen |
| `limit` | number | Nein | Maximale Anzahl der zu crawlenden Seiten \(Standard: 100\) |
| `onlyMainContent` | boolean | Nein | Nur Hauptinhalt von Seiten extrahieren |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
@@ -118,58 +118,6 @@ Crawlen Sie ganze Websites und extrahieren Sie strukturierte Inhalte von allen z
| --------- | ---- | ----------- |
| `pages` | array | Array von gecrawlten Seiten mit ihrem Inhalt und Metadaten |
### `firecrawl_map`
Erhalten Sie schnell und zuverlässig eine vollständige Liste aller URLs einer Website. Nützlich, um alle Seiten einer Website zu entdecken, ohne sie zu crawlen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Basis-URL, von der Links erfasst und entdeckt werden sollen |
| `search` | string | Nein | Filtert Ergebnisse nach Relevanz zu einem Suchbegriff \(z.B. "blog"\) |
| `sitemap` | string | Nein | Steuert die Sitemap-Nutzung: "skip", "include" \(Standard\) oder "only" |
| `includeSubdomains` | boolean | Nein | Ob URLs von Subdomains einbezogen werden sollen \(Standard: true\) |
| `ignoreQueryParameters` | boolean | Nein | URLs mit Query-Strings ausschließen \(Standard: true\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Links \(max: 100.000, Standard: 5.000\) |
| `timeout` | number | Nein | Timeout der Anfrage in Millisekunden |
| `location` | json | Nein | Geografischer Kontext für Proxying \(Land, Sprachen\) |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Mapping-Vorgang erfolgreich war |
| `links` | array | Array der entdeckten URLs von der Website |
### `firecrawl_extract`
Extrahieren Sie strukturierte Daten aus vollständigen Webseiten mithilfe von natürlichsprachlichen Anweisungen und JSON-Schema. Leistungsstarke Agenten-Funktion für intelligente Datenextraktion.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | json | Ja | Array von URLs, aus denen Daten extrahiert werden sollen \(unterstützt Glob-Format\) |
| `prompt` | string | Nein | Natürlichsprachliche Anleitung für den Extraktionsprozess |
| `schema` | json | Nein | JSON-Schema, das die Struktur der zu extrahierenden Daten definiert |
| `enableWebSearch` | boolean | Nein | Websuche aktivieren, um ergänzende Informationen zu finden \(Standard: false\) |
| `ignoreSitemap` | boolean | Nein | Sitemap.xml-Dateien beim Scannen ignorieren \(Standard: false\) |
| `includeSubdomains` | boolean | Nein | Scanning auf Subdomains erweitern \(Standard: true\) |
| `showSources` | boolean | Nein | Datenquellen in der Antwort zurückgeben \(Standard: false\) |
| `ignoreInvalidURLs` | boolean | Nein | Ungültige URLs im Array überspringen \(Standard: true\) |
| `scrapeOptions` | json | Nein | Erweiterte Scraping-Konfigurationsoptionen |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Extraktionsvorgang erfolgreich war |
| `data` | object | Extrahierte strukturierte Daten gemäß dem Schema oder Prompt |
| `sources` | array | Datenquellen \(nur wenn showSources aktiviert ist\) |
## Hinweise
- Kategorie: `tools`

View File

@@ -23,210 +23,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
</svg>`}
/>
## Übersicht
Der Generic Webhook-Block ermöglicht es Ihnen, Webhooks von jedem externen Dienst zu empfangen. Dies ist ein flexibler Auslöser, der jede JSON-Nutzlast verarbeiten kann und sich daher ideal für die Integration mit Diensten eignet, die keinen dedizierten Sim-Block haben.
## Grundlegende Verwendung
### Einfacher Durchleitungsmodus
Ohne ein Eingabeformat zu definieren, leitet der Webhook den gesamten Anforderungstext unverändert weiter:
```bash
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"message": "Test webhook trigger",
"data": {
"key": "value"
}
}'
```
Greifen Sie in nachgelagerten Blöcken auf die Daten zu mit:
- `<webhook1.message>` → "Test webhook trigger"
- `<webhook1.data.key>` → "value"
### Strukturiertes Eingabeformat (Optional)
Definieren Sie ein Eingabeschema, um typisierte Felder zu erhalten und erweiterte Funktionen wie Datei-Uploads zu aktivieren:
**Konfiguration des Eingabeformats:**
```json
[
{ "name": "message", "type": "string" },
{ "name": "priority", "type": "number" },
{ "name": "documents", "type": "files" }
]
```
**Webhook-Anfrage:**
```bash
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"message": "Invoice submission",
"priority": 1,
"documents": [
{
"type": "file",
"data": "data:application/pdf;base64,JVBERi0xLjQK...",
"name": "invoice.pdf",
"mime": "application/pdf"
}
]
}'
```
## Datei-Uploads
### Unterstützte Dateiformate
Der Webhook unterstützt zwei Dateieingabeformate:
#### 1. Base64-kodierte Dateien
Zum direkten Hochladen von Dateiinhalten:
```json
{
"documents": [
{
"type": "file",
"data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...",
"name": "screenshot.png",
"mime": "image/png"
}
]
}
```
- **Maximale Größe**: 20MB pro Datei
- **Format**: Standard-Daten-URL mit Base64-Kodierung
- **Speicherung**: Dateien werden in sicheren Ausführungsspeicher hochgeladen
#### 2. URL-Referenzen
Zum Übergeben vorhandener Datei-URLs:
```json
{
"documents": [
{
"type": "url",
"data": "https://example.com/files/document.pdf",
"name": "document.pdf",
"mime": "application/pdf"
}
]
}
```
### Zugriff auf Dateien in nachgelagerten Blöcken
Dateien werden in `UserFile`Objekte mit folgenden Eigenschaften verarbeitet:
```typescript
{
id: string, // Unique file identifier
name: string, // Original filename
url: string, // Presigned URL (valid for 5 minutes)
size: number, // File size in bytes
type: string, // MIME type
key: string, // Storage key
uploadedAt: string, // ISO timestamp
expiresAt: string // ISO timestamp (5 minutes)
}
```
**Zugriff in Blöcken:**
- `<webhook1.documents[0].url>` → Download-URL
- `<webhook1.documents[0].name>` → "invoice.pdf"
- `<webhook1.documents[0].size>` → 524288
- `<webhook1.documents[0].type>` → "application/pdf"
### Vollständiges Beispiel für Datei-Upload
```bash
# Create a base64-encoded file
echo "Hello World" | base64
# SGVsbG8gV29ybGQK
# Send webhook with file
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"subject": "Document for review",
"attachments": [
{
"type": "file",
"data": "data:text/plain;base64,SGVsbG8gV29ybGQK",
"name": "sample.txt",
"mime": "text/plain"
}
]
}'
```
## Authentifizierung
### Authentifizierung konfigurieren (optional)
In der Webhook-Konfiguration:
1. Aktiviere "Authentifizierung erforderlich"
2. Setze einen geheimen Token
3. Wähle den Header-Typ:
- **Benutzerdefinierter Header**: `X-Sim-Secret: your-token`
- **Authorization Bearer**: `Authorization: Bearer your-token`
### Verwendung der Authentifizierung
```bash
# With custom header
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret-token" \
-d '{"message": "Authenticated request"}'
# With bearer token
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-secret-token" \
-d '{"message": "Authenticated request"}'
```
## Best Practices
1. **Eingabeformat für Struktur verwenden**: Definiere ein Eingabeformat, wenn du das erwartete Schema kennst. Dies bietet:
- Typvalidierung
- Bessere Autovervollständigung im Editor
- Datei-Upload-Funktionen
2. **Authentifizierung**: Aktiviere immer die Authentifizierung für Produktions-Webhooks, um unbefugten Zugriff zu verhindern.
3. **Dateigrößenbeschränkungen**: Halte Dateien unter 20 MB. Verwende für größere Dateien stattdessen URL-Referenzen.
4. **Dateiablauf**: Heruntergeladene Dateien haben URLs mit einer Gültigkeit von 5 Minuten. Verarbeite sie umgehend oder speichere sie an anderer Stelle, wenn sie länger benötigt werden.
5. **Fehlerbehandlung**: Die Webhook-Verarbeitung erfolgt asynchron. Überprüfe die Ausführungsprotokolle auf Fehler.
6. **Testen**: Verwende die Schaltfläche "Webhook testen" im Editor, um deine Konfiguration vor der Bereitstellung zu validieren.
## Anwendungsfälle
- **Formularübermittlungen**: Empfange Daten von benutzerdefinierten Formularen mit Datei-Uploads
- **Drittanbieter-Integrationen**: Verbinde mit Diensten, die Webhooks senden (Stripe, GitHub usw.)
- **Dokumentenverarbeitung**: Akzeptiere Dokumente von externen Systemen zur Verarbeitung
- **Ereignisbenachrichtigungen**: Empfange Ereignisdaten aus verschiedenen Quellen
- **Benutzerdefinierte APIs**: Erstelle benutzerdefinierte API-Endpunkte für deine Anwendungen
## Hinweise
- Kategorie: `triggers`
- Typ: `generic_webhook`
- **Dateiunterstützung**: Verfügbar über Eingabeformat-Konfiguration
- **Maximale Dateigröße**: 20 MB pro Datei

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,6 @@
---
title: Gmail
description: Gmail-Nachrichten senden, lesen, suchen und verschieben oder
Workflows durch Gmail-Ereignisse auslösen
description: Gmail senden oder Workflows von Gmail-Ereignissen auslösen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -46,40 +45,28 @@ Mit Gmail können Sie:
- **Von überall zugreifen**: Nutzen Sie Gmail geräteübergreifend mit synchronisierten Inhalten und Einstellungen
- **Mit anderen Diensten integrieren**: Verbinden Sie sich mit Google Kalender, Drive und anderen Produktivitätstools
In Sim ermöglicht die Gmail-Integration Ihren Agenten, E-Mails programmgesteuert mit umfassenden Automatisierungsfunktionen zu verwalten. Dies erlaubt leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, die Verarbeitung eingehender Nachrichten, das Extrahieren von Informationen aus E-Mails und die Verwaltung von Kommunikationsabläufen im großen Maßstab. Ihre Agenten können:
- **Verfassen und senden**: Personalisierte E-Mails mit Anhängen erstellen und an Empfänger senden
- **Lesen und suchen**: Bestimmte Nachrichten mit Gmails Abfragesyntax finden und Inhalte extrahieren
- **Intelligent organisieren**: Nachrichten als gelesen/ungelesen markieren, E-Mails archivieren oder aus dem Archiv holen und Labels verwalten
- **Posteingang aufräumen**: Nachrichten löschen, E-Mails zwischen Labels verschieben und einen leeren Posteingang pflegen
- **Workflows auslösen**: In Echtzeit auf neue E-Mails hören und reaktionsfähige Workflows ermöglichen, die auf eingehende Nachrichten reagieren
Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und E-Mail-Kommunikationen und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Kommunikationsplattformen. Ob Sie Kundenservice-Antworten automatisieren, Belege verarbeiten, Abonnements verwalten oder Teamkommunikation koordinieren - die Gmail-Integration bietet alle Werkzeuge, die Sie für eine umfassende E-Mail-Automatisierung benötigen.
In Sim ermöglicht die Gmail-Integration Ihren Agenten, E-Mails programmatisch zu senden, zu lesen und zu durchsuchen. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, die Verarbeitung eingehender Nachrichten, das Extrahieren von Informationen aus E-Mails und das Verwalten von Kommunikationsabläufen. Ihre Agenten können personalisierte E-Mails verfassen und senden, nach bestimmten Nachrichten mit Gmails Abfragesyntax suchen und Inhalte aus E-Mails extrahieren, um sie in anderen Teilen Ihres Workflows zu verwenden. In Kürze werden Agenten auch in der Lage sein, in Echtzeit auf neue E-Mails zu achten, was reaktionsschnelle Workflows ermöglicht, die Aktionen basierend auf eingehenden Nachrichten auslösen können. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und E-Mail-Kommunikationen und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Kommunikationsplattformen.
{/* MANUAL-CONTENT-END */}
## Nutzungsanleitung
Integrieren Sie Gmail in den Workflow. Kann E-Mails senden, lesen, suchen und verschieben. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
Gmail in den Workflow integrieren. Kann E-Mails senden, lesen und durchsuchen. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
## Tools
### `gmail_send`
E-Mails mit Gmail senden
E-Mails über Gmail versenden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Nein | Betreff der E-Mail |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `threadId` | string | Nein | Thread-ID für Antworten (für Threading) |
| `replyToMessageId` | string | Nein | Gmail-Nachrichten-ID für Antworten - verwenden Sie das "id"-Feld aus den Gmail-Leseergebnissen (nicht die RFC "messageId") |
| `cc` | string | Nein | CC-Empfänger (durch Kommas getrennt) |
| `bcc` | string | Nein | BCC-Empfänger (durch Kommas getrennt) |
| `attachments` | file[] | Nein | Dateien, die an die E-Mail angehängt werden sollen |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
#### Ausgabe
@@ -97,14 +84,10 @@ E-Mail-Entwürfe in Gmail erstellen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Nein | Betreff der E-Mail |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `threadId` | string | Nein | Thread-ID für Antworten (für Threading) |
| `replyToMessageId` | string | Nein | Gmail-Nachrichten-ID für Antworten - verwenden Sie das "id"-Feld aus den Gmail-Leseergebnissen (nicht die RFC "messageId") |
| `cc` | string | Nein | CC-Empfänger (durch Kommas getrennt) |
| `bcc` | string | Nein | BCC-Empfänger (durch Kommas getrennt) |
| `attachments` | file[] | Nein | Dateien, die an den E-Mail-Entwurf angehängt werden sollen |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
#### Ausgabe
@@ -115,7 +98,7 @@ E-Mail-Entwürfe in Gmail erstellen
### `gmail_read`
E-Mails aus Gmail lesen
E-Mails von Gmail lesen
#### Eingabe
@@ -144,7 +127,7 @@ E-Mails in Gmail durchsuchen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Suchanfrage für E-Mails |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse |
| `maxResults` | number | Nein | Maximale Anzahl zurückzugebender Ergebnisse |
#### Ausgabe
@@ -153,146 +136,6 @@ E-Mails in Gmail durchsuchen
| `content` | string | Zusammenfassung der Suchergebnisse |
| `metadata` | object | Such-Metadaten |
### `gmail_move`
E-Mails zwischen Gmail-Labels/Ordnern verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu verschiebenden Nachricht |
| `addLabelIds` | string | Ja | Kommagetrennte Label-IDs zum Hinzufügen \(z.B. INBOX, Label_123\) |
| `removeLabelIds` | string | Nein | Kommagetrennte Label-IDs zum Entfernen \(z.B. INBOX, SPAM\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_mark_read`
Eine Gmail-Nachricht als gelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der als gelesen zu markierenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_mark_unread`
Eine Gmail-Nachricht als ungelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als ungelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_archive`
Eine Gmail-Nachricht archivieren (aus dem Posteingang entfernen)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu archivierenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_unarchive`
Eine Gmail-Nachricht aus dem Archiv holen (zurück in den Posteingang verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die aus dem Archiv geholt werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_delete`
Eine Gmail-Nachricht löschen (in den Papierkorb verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_add_label`
Label(s) zu einer Gmail-Nachricht hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, zu der Labels hinzugefügt werden sollen |
| `labelIds` | string | Ja | Durch Kommas getrennte Label-IDs zum Hinzufügen \(z.B. INBOX, Label_123\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_remove_label`
Label(s) von einer Gmail-Nachricht entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, von der Labels entfernt werden sollen |
| `labelIds` | string | Ja | Durch Kommas getrennte Label-IDs zum Entfernen \(z.B. INBOX, Label_123\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
## Hinweise
- Kategorie: `tools`

View File

@@ -85,11 +85,10 @@ Eine Datei zu Google Drive hochladen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileName` | string | Ja | Der Name der hochzuladenden Datei |
| `file` | file | Nein | Binärdatei zum Hochladen (UserFile-Objekt) |
| `content` | string | Nein | Textinhalt zum Hochladen (verwenden Sie entweder diesen ODER file, nicht beides) |
| `mimeType` | string | Nein | Der MIME-Typ der hochzuladenden Datei (wird automatisch aus der Datei erkannt, wenn nicht angegeben) |
| `content` | string | Ja | Der Inhalt der hochzuladenden Datei |
| `mimeType` | string | Nein | Der MIME-Typ der hochzuladenden Datei |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in den die Datei hochgeladen werden soll |
| `folderId` | string | Nein | Die ID des Ordners, in den die Datei hochgeladen werden soll (interne Verwendung) |
| `folderId` | string | Nein | Die ID des Ordners, in den die Datei hochgeladen werden soll \(interne Verwendung\) |
#### Ausgabe
@@ -115,24 +114,6 @@ Einen neuen Ordner in Google Drive erstellen
| --------- | ---- | ----------- |
| `file` | json | Metadaten des erstellten Ordners einschließlich ID, Name und Informationen zum übergeordneten Ordner |
### `google_drive_download`
Eine Datei von Google Drive herunterladen (exportiert Google Workspace-Dateien automatisch)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `mimeType` | string | Nein | Der MIME-Typ, in den Google Workspace-Dateien exportiert werden sollen (optional) |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, die in den Ausführungsdateien gespeichert ist |
### `google_drive_list`
Dateien und Ordner in Google Drive auflisten
@@ -141,8 +122,8 @@ Dateien und Ordner in Google Drive auflisten
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `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) |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
| `folderId` | string | Nein | Die ID des Ordners, aus dem Dateien aufgelistet werden sollen \(interne Verwendung\) |
| `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 |

View File

@@ -1,5 +1,5 @@
---
title: Übersicht
title: Tools
description: Leistungsstarke tools zur verbesserung ihrer agentischen workflows
---

View File

@@ -1,6 +1,6 @@
---
title: Jina
description: Durchsuche das Web oder extrahiere Inhalte aus URLs
description: Konvertiere Website-Inhalte in Text
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -62,7 +62,7 @@ Diese Integration ist besonders wertvoll für die Erstellung von Agenten, die In
## Gebrauchsanweisung
Integriere Jina AI in den Workflow. Durchsuche das Web und erhalte LLM-freundliche Ergebnisse oder extrahiere saubere Inhalte aus bestimmten URLs mit erweiterten Parsing-Optionen.
Integrieren Sie Jina in den Workflow. Extrahiert Inhalte von Websites. Erfordert API-Schlüssel.
## Tools
@@ -72,58 +72,19 @@ Extrahieren und verarbeiten Sie Webinhalte in sauberen, LLM-freundlichen Text mi
#### Eingabe
| Parameter | Type | Required | Description |
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | Die URL, die gelesen und in Markdown konvertiert werden soll |
| `useReaderLMv2` | boolean | No | Ob ReaderLM-v2 für bessere Qualität verwendet werden soll \(3-fache Token-Kosten\) |
| `gatherLinks` | boolean | No | Ob alle Links am Ende gesammelt werden sollen |
| `jsonResponse` | boolean | No | Ob die Antwort im JSON-Format zurückgegeben werden soll |
| `apiKey` | string | Yes | Ihr Jina AI API-Schlüssel |
| `withImagesummary` | boolean | No | Alle Bilder von der Seite mit Metadaten sammeln |
| `retainImages` | string | No | Steuerung der Bildeinbindung: "none" entfernt alle, "all" behält alle bei |
| `returnFormat` | string | No | Ausgabeformat: markdown, html, text, screenshot oder pageshot |
| `withIframe` | boolean | No | Iframe-Inhalte in die Extraktion einbeziehen |
| `withShadowDom` | boolean | No | Shadow-DOM-Inhalte extrahieren |
| `noCache` | boolean | No | Zwischengespeicherte Inhalte umgehen für Echtzeit-Abruf |
| `withGeneratedAlt` | boolean | No | Alt-Text für Bilder mit VLM generieren |
| `robotsTxt` | string | No | Bot User-Agent für robots.txt-Prüfung |
| `dnt` | boolean | No | Do Not Track - verhindert Caching/Tracking |
| `noGfm` | boolean | No | GitHub Flavored Markdown deaktivieren |
| `url` | string | Ja | Die URL, die gelesen und in Markdown konvertiert werden soll |
| `useReaderLMv2` | boolean | Nein | Ob ReaderLM-v2 für bessere Qualität verwendet werden soll |
| `gatherLinks` | boolean | Nein | Ob alle Links am Ende gesammelt werden sollen |
| `jsonResponse` | boolean | Nein | Ob die Antwort im JSON-Format zurückgegeben werden soll |
| `apiKey` | string | Ja | Ihr Jina AI API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Der extrahierte Inhalt von der URL, verarbeitet zu sauberem, LLM-freundlichem Text |
| `links` | array | Liste der auf der Seite gefundenen Links (wenn gatherLinks oder withLinksummary aktiviert ist) |
| `images` | array | Liste der auf der Seite gefundenen Bilder (wenn withImagesummary aktiviert ist) |
### `jina_search`
Durchsucht das Web und gibt die Top 5 Ergebnisse mit LLM-freundlichem Inhalt zurück. Jedes Ergebnis wird automatisch über die Jina Reader API verarbeitet. Unterstützt geografische Filterung, Website-Einschränkungen und Paginierung.
#### Eingabe
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `q` | string | Yes | Suchanfrage-String |
| `apiKey` | string | Yes | Ihr Jina AI API-Schlüssel |
| `num` | number | No | Maximale Anzahl von Ergebnissen pro Seite \(Standard: 5\) |
| `site` | string | No | Ergebnisse auf bestimmte Domain\(s\) beschränken. Kann durch Kommas getrennt für mehrere Seiten sein \(z.B. "jina.ai,github.com"\) |
| `withFavicon` | boolean | No | Website-Favicons in Ergebnissen einbeziehen |
| `withImagesummary` | boolean | No | Alle Bilder von Ergebnisseiten mit Metadaten sammeln |
| `withLinksummary` | boolean | No | Alle Links von Ergebnisseiten sammeln |
| `retainImages` | string | No | Steuerung der Bildeinbindung: "none" entfernt alle, "all" behält alle bei |
| `noCache` | boolean | No | Zwischengespeicherte Inhalte umgehen für Echtzeit-Abruf |
| `withGeneratedAlt` | boolean | No | Alt-Text für Bilder mit VLM generieren |
| `respondWith` | string | No | Auf "no-content" setzen, um nur Metadaten ohne Seiteninhalt zu erhalten |
| `returnFormat` | string | No | Ausgabeformat: markdown, html, text, screenshot oder pageshot |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `results` | array | Array von Suchergebnissen, die jeweils Titel, Beschreibung, URL und LLM-freundlichen Inhalt enthalten |
| `content` | string | Der extrahierte Inhalt von der URL, verarbeitet in sauberen, LLM-freundlichen Text |
## Hinweise

View File

@@ -42,7 +42,7 @@ In Sim ermöglicht die Jira-Integration Ihren Agenten eine nahtlose Interaktion
## Nutzungsanweisungen
Integrieren Sie Jira in den Workflow. Kann Issues lesen, schreiben und aktualisieren. Kann auch Workflows basierend auf Jira-Webhook-Ereignissen auslösen.
Integriert Jira in den Workflow. Kann Issues lesen, schreiben und aktualisieren. Erfordert OAuth.
## Tools
@@ -134,376 +134,6 @@ Mehrere Jira-Issues in Masse abrufen
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | array | Array von Jira-Issues mit Zusammenfassung, Beschreibung, Erstellungs- und Aktualisierungszeitstempeln |
### `jira_delete_issue`
Ein Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key zum Löschen \(z.B. PROJ-123\) |
| `deleteSubtasks` | boolean | Nein | Ob Unteraufgaben gelöscht werden sollen. Wenn false, können übergeordnete Issues mit Unteraufgaben nicht gelöscht werden. |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Details zum gelöschten Issue mit Zeitstempel, Issue-Key und Erfolgsstatus |
### `jira_assign_issue`
Ein Jira-Issue einem Benutzer zuweisen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key zum Zuweisen \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, dem das Issue zugewiesen werden soll. Verwenden Sie "-1" für automatische Zuweisung oder null, um die Zuweisung aufzuheben. |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Zuweisungsdetails mit Zeitstempel, Issue-Key, Bearbeiter-ID und Erfolgsstatus |
### `jira_transition_issue`
Ein Jira-Issue zwischen Workflow-Status verschieben (z.B. To Do -> In Progress)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key für den Übergang \(z.B. PROJ-123\) |
| `transitionId` | string | Ja | ID des auszuführenden Übergangs \(z.B. "11" für "To Do", "21" für "In Progress"\) |
| `comment` | string | Nein | Optionaler Kommentar, der beim Übergang des Issues hinzugefügt werden soll |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Übergangsdetails mit Zeitstempel, Issue-Key, Übergangs-ID und Erfolgsstatus |
### `jira_search_issues`
Nach Jira-Issues mit JQL (Jira Query Language) suchen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `jql` | string | Ja | JQL-Abfragestring zur Suche nach Issues \(z.B. "project = PROJ AND status = Open"\) |
| `startAt` | number | Nein | Der Index des ersten zurückzugebenden Ergebnisses \(für Paginierung\) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 50\) |
| `fields` | array | Nein | Array von Feldnamen, die zurückgegeben werden sollen \(Standard: \['summary', 'status', 'assignee', 'created', 'updated'\]\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Suchergebnisse mit Zeitstempel, Gesamtanzahl, Paginierungsdetails und Array der übereinstimmenden Issues |
### `jira_add_comment`
Einen Kommentar zu einem Jira-Issue hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem ein Kommentar hinzugefügt werden soll \(z.B. PROJ-123\) |
| `body` | string | Ja | Text des Kommentars |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Kommentardetails mit Zeitstempel, Issue-Key, Kommentar-ID, Inhalt und Erfolgsstatus |
### `jira_get_comments`
Alle Kommentare eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Kommentare abgerufen werden sollen \(z.B. PROJ-123\) |
| `startAt` | number | Nein | Index des ersten zurückzugebenden Kommentars \(Standard: 0\) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare \(Standard: 50\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Kommentardaten mit Zeitstempel, Issue-Key, Gesamtanzahl und Array von Kommentaren |
### `jira_update_comment`
Einen bestehenden Kommentar zu einem Jira-Issue aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Kommentar enthält \(z.B. PROJ-123\) |
| `commentId` | string | Ja | ID des zu aktualisierenden Kommentars |
| `body` | string | Ja | Aktualisierter Kommentartext |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Aktualisierte Kommentardetails mit Zeitstempel, Issue-Key, Kommentar-ID, Textinhalt und Erfolgsstatus |
### `jira_delete_comment`
Einen Kommentar aus einem Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Kommentar enthält \(z.B. PROJ-123\) |
| `commentId` | string | Ja | ID des zu löschenden Kommentars |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Issue-Key, Kommentar-ID und Erfolgsstatus |
### `jira_get_attachments`
Alle Anhänge eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Anhänge abgerufen werden sollen \(z.B. PROJ-123\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Anhangsdaten mit Zeitstempel, Issue-Key und Array von Anhängen |
### `jira_delete_attachment`
Einen Anhang von einem Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `attachmentId` | string | Ja | ID des zu löschenden Anhangs |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Anhangs-ID und Erfolgsstatus |
### `jira_add_worklog`
Einen Zeiterfassungseintrag zu einem Jira-Issue hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain (z.B. ihrfirma.atlassian.net) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem der Worklog hinzugefügt werden soll (z.B. PROJ-123) |
| `timeSpentSeconds` | number | Ja | Aufgewendete Zeit in Sekunden |
| `comment` | string | Nein | Optionaler Kommentar für den Worklog-Eintrag |
| `started` | string | Nein | Optionale Startzeit im ISO-Format (standardmäßig aktuelle Zeit) |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Details mit Zeitstempel, Issue-Key, Worklog-ID, aufgewendeter Zeit in Sekunden und Erfolgsstatus |
### `jira_get_worklogs`
Alle Worklog-Einträge eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain (z.B. ihrfirma.atlassian.net) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Worklogs abgerufen werden sollen (z.B. PROJ-123) |
| `startAt` | number | Nein | Index des ersten zurückzugebenden Worklogs (Standard: 0) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Worklogs (Standard: 50) |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Daten mit Zeitstempel, Issue-Key, Gesamtanzahl und Array von Worklogs |
### `jira_update_worklog`
Aktualisieren eines vorhandenen Worklog-Eintrags in einem Jira-Issue
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Worklog enthält \(z.B. PROJ-123\) |
| `worklogId` | string | Ja | ID des zu aktualisierenden Worklog-Eintrags |
| `timeSpentSeconds` | number | Nein | Aufgewendete Zeit in Sekunden |
| `comment` | string | Nein | Optionaler Kommentar für den Worklog-Eintrag |
| `started` | string | Nein | Optionale Startzeit im ISO-Format |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Aktualisierungsdetails mit Zeitstempel, Issue-Key, Worklog-ID und Erfolgsstatus |
### `jira_delete_worklog`
Löschen eines Worklog-Eintrags aus einem Jira-Issue
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Worklog enthält \(z.B. PROJ-123\) |
| `worklogId` | string | Ja | ID des zu löschenden Worklog-Eintrags |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Issue-Key, Worklog-ID und Erfolgsstatus |
### `jira_create_issue_link`
Eine Verknüpfungsbeziehung zwischen zwei Jira-Issues erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `inwardIssueKey` | string | Ja | Jira-Issue-Key für das eingehende Issue \(z.B. PROJ-123\) |
| `outwardIssueKey` | string | Ja | Jira-Issue-Key für das ausgehende Issue \(z.B. PROJ-456\) |
| `linkType` | string | Ja | Die Art der Verknüpfungsbeziehung \(z.B. "Blocks", "Relates to", "Duplicates"\) |
| `comment` | string | Nein | Optionaler Kommentar zur Issue-Verknüpfung |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Issue-Verknüpfungsdetails mit Zeitstempel, eingehendem Issue-Key, ausgehendem Issue-Key, Verknüpfungstyp und Erfolgsstatus |
### `jira_delete_issue_link`
Eine Verknüpfung zwischen zwei Jira-Issues löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `linkId` | string | Ja | ID der zu löschenden Issue-Verknüpfung |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Link-ID und Erfolgsstatus |
### `jira_add_watcher`
Einen Beobachter zu einem Jira-Issue hinzufügen, um Benachrichtigungen über Aktualisierungen zu erhalten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem ein Beobachter hinzugefügt werden soll \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, der als Beobachter hinzugefügt werden soll |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Beobachterdetails mit Zeitstempel, Issue-Key, Beobachter-Account-ID und Erfolgsstatus |
### `jira_remove_watcher`
Einen Beobachter von einem Jira-Issue entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem ein Beobachter entfernt werden soll \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, der als Beobachter entfernt werden soll |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Entfernungsdetails mit Zeitstempel, Issue-Key, Beobachter-Konto-ID und Erfolgsstatus |
## Hinweise
- Kategorie: `tools`

File diff suppressed because it is too large Load Diff

View File

@@ -56,15 +56,8 @@ Durchsuche das Web nach Informationen mit Linkup
| --------- | ---- | -------- | ----------- |
| `q` | string | Ja | Die Suchanfrage |
| `depth` | string | Ja | Suchtiefe (muss entweder "standard" oder "deep" sein) |
| `outputType` | string | Ja | Art der zurückzugebenden Ausgabe (muss "sourcedAnswer" oder "searchResults" sein) |
| `apiKey` | string | Ja | Geben Sie Ihren Linkup API-Schlüssel ein |
| `includeImages` | boolean | Nein | Ob Bilder in Suchergebnissen enthalten sein sollen |
| `fromDate` | string | Nein | Startdatum für die Filterung von Ergebnissen (Format JJJJ-MM-TT) |
| `toDate` | string | Nein | Enddatum für die Filterung von Ergebnissen (Format JJJJ-MM-TT) |
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domainnamen, die von Suchergebnissen ausgeschlossen werden sollen |
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domainnamen, auf die Suchergebnisse beschränkt werden sollen |
| `includeInlineCitations` | boolean | Nein | Inline-Zitate zu Antworten hinzufügen (gilt nur, wenn outputType "sourcedAnswer" ist) |
| `includeSources` | boolean | Nein | Quellen in die Antwort einbeziehen |
| `outputType` | string | Ja | Art der zurückzugebenden Ausgabe (muss entweder "sourcedAnswer" oder "searchResults" sein) |
| `apiKey` | string | Ja | Gib deinen Linkup API-Schlüssel ein |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: Microsoft Planner
description: Verwalten von Aufgaben, Plänen und Buckets in Microsoft Planner
description: Aufgaben in Microsoft Planner lesen und erstellen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -121,7 +121,7 @@ In Sim ermöglicht die Microsoft Planner-Integration Ihren Agenten, Aufgaben pro
## Gebrauchsanweisungen
Integrieren Sie Microsoft Planner in den Workflow. Verwalten Sie Aufgaben, Pläne, Buckets und Aufgabendetails einschließlich Checklisten und Referenzen.
Integrieren Sie Microsoft Planner in den Workflow. Kann Aufgaben lesen und erstellen. Erfordert OAuth.
## Tools
@@ -167,225 +167,6 @@ Eine neue Aufgabe in Microsoft Planner erstellen
| `task` | object | Das erstellte Aufgabenobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich planId, taskId und taskUrl |
### `microsoft_planner_update_task`
Eine Aufgabe in Microsoft Planner aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der zu aktualisierenden Aufgabe |
| `etag` | string | Ja | Der ETag-Wert der zu aktualisierenden Aufgabe \(If-Match-Header\) |
| `title` | string | Nein | Der neue Titel der Aufgabe |
| `bucketId` | string | Nein | Die Bucket-ID, in die die Aufgabe verschoben werden soll |
| `dueDateTime` | string | Nein | Das Fälligkeitsdatum und die Uhrzeit für die Aufgabe \(ISO 8601-Format\) |
| `startDateTime` | string | Nein | Das Startdatum und die Uhrzeit für die Aufgabe \(ISO 8601-Format\) |
| `percentComplete` | number | Nein | Der Prozentsatz der Aufgabenfertigstellung \(0-100\) |
| `priority` | number | Nein | Die Priorität der Aufgabe \(0-10\) |
| `assigneeUserId` | string | Nein | Die Benutzer-ID, der die Aufgabe zugewiesen werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabe erfolgreich aktualisiert wurde |
| `message` | string | Erfolgsmeldung bei Aktualisierung der Aufgabe |
| `task` | object | Das aktualisierte Aufgabenobjekt mit allen Eigenschaften |
| `taskId` | string | ID der aktualisierten Aufgabe |
| `etag` | string | Neuer ETag nach der Aktualisierung - verwenden Sie diesen für nachfolgende Operationen |
| `metadata` | object | Metadaten einschließlich taskId, planId und taskUrl |
### `microsoft_planner_delete_task`
Eine Aufgabe aus Microsoft Planner löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der zu löschenden Aufgabe |
| `etag` | string | Ja | Der ETag-Wert der zu löschenden Aufgabe \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabe erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung der Löschung |
| `metadata` | object | Zusätzliche Metadaten |
### `microsoft_planner_list_plans`
Alle Pläne auflisten, die mit dem aktuellen Benutzer geteilt wurden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob Pläne erfolgreich abgerufen wurden |
| `plans` | array | Array von Planobjekten, die mit dem aktuellen Benutzer geteilt wurden |
| `metadata` | object | Metadaten einschließlich userId und Anzahl |
### `microsoft_planner_read_plan`
Details eines bestimmten Microsoft Planner-Plans abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des abzurufenden Plans |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Plan erfolgreich abgerufen wurde |
| `plan` | object | Das Planobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich planId und planUrl |
### `microsoft_planner_list_buckets`
Alle Buckets in einem Microsoft Planner-Plan auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des Plans |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob Buckets erfolgreich abgerufen wurden |
| `buckets` | array | Array von Bucket-Objekten |
| `metadata` | object | Metadaten einschließlich planId und Anzahl |
### `microsoft_planner_read_bucket`
Details eines bestimmten Buckets abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des abzurufenden Buckets |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich abgerufen wurde |
| `bucket` | object | Das Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_create_bucket`
Einen neuen Bucket in einem Microsoft Planner-Plan erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des Plans, in dem der Bucket erstellt wird |
| `name` | string | Ja | Der Name des Buckets |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich erstellt wurde |
| `bucket` | object | Das erstellte Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_update_bucket`
Einen Bucket in Microsoft Planner aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des zu aktualisierenden Buckets |
| `name` | string | Nein | Der neue Name des Buckets |
| `etag` | string | Ja | Der ETag-Wert des zu aktualisierenden Buckets \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich aktualisiert wurde |
| `bucket` | object | Das aktualisierte Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_delete_bucket`
Einen Bucket aus Microsoft Planner löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des zu löschenden Buckets |
| `etag` | string | Ja | Der ETag-Wert des zu löschenden Buckets \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung der Löschung |
| `metadata` | object | Zusätzliche Metadaten |
### `microsoft_planner_get_task_details`
Detaillierte Informationen über eine Aufgabe abrufen, einschließlich Checkliste und Referenzen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der Aufgabe |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabendetails erfolgreich abgerufen wurden |
| `taskDetails` | object | Die Aufgabendetails einschließlich Beschreibung, Checkliste und Referenzen |
| `etag` | string | Der ETag-Wert für diese Aufgabendetails - verwenden Sie diesen für Aktualisierungsoperationen |
| `metadata` | object | Metadaten einschließlich taskId |
### `microsoft_planner_update_task_details`
Aktualisieren von Aufgabendetails einschließlich Beschreibung, Checklistenelementen und Referenzen in Microsoft Planner
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der Aufgabe |
| `etag` | string | Ja | Der ETag-Wert aus den zu aktualisierenden Aufgabendetails \(If-Match-Header\) |
| `description` | string | Nein | Die Beschreibung der Aufgabe |
| `checklist` | object | Nein | Checklistenelemente als JSON-Objekt |
| `references` | object | Nein | Referenzen als JSON-Objekt |
| `previewType` | string | Nein | Vorschautyp: automatic, noPreview, checklist, description oder reference |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabendetails erfolgreich aktualisiert wurden |
| `taskDetails` | object | Das aktualisierte Aufgabendetailobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich taskId |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Microsoft Teams
description: Nachrichten, Reaktionen und Mitglieder in Teams verwalten
description: Nachrichten lesen, schreiben und erstellen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -97,7 +97,7 @@ In Sim ermöglicht die Microsoft Teams-Integration Ihren Agenten, direkt program
## Gebrauchsanweisung
Microsoft Teams in den Workflow integrieren. Chat- und Kanalnachrichten lesen, schreiben, aktualisieren und löschen. Auf Nachrichten antworten, Reaktionen hinzufügen und Team-/Kanalmitglieder auflisten. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Chat oder Kanal gesendet wird. Um Benutzer in Nachrichten zu erwähnen, umschließen Sie ihren Namen mit `<at>` Tags: `<at>userName</at>`
Integrieren Sie Microsoft Teams in den Workflow. Kann Chat-Nachrichten lesen und schreiben sowie Kanal-Nachrichten lesen und schreiben. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Chat oder Kanal gesendet wird.
## Tools
@@ -110,7 +110,6 @@ Inhalte aus einem Microsoft Teams-Chat lesen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, aus dem gelesen werden soll |
| `includeAttachments` | boolean | Nein | Nachrichtenanhänge \(gehostete Inhalte\) herunterladen und in den Speicher aufnehmen |
#### Ausgabe
@@ -120,10 +119,9 @@ Inhalte aus einem Microsoft Teams-Chat lesen
| `messageCount` | number | Anzahl der aus dem Chat abgerufenen Nachrichten |
| `chatId` | string | ID des Chats, aus dem gelesen wurde |
| `messages` | array | Array von Chat-Nachrichtenobjekten |
| `attachmentCount` | number | Gesamtanzahl der gefundenen Anhänge |
| `attachmentCount` | number | Gesamtzahl der gefundenen Anhänge |
| `attachmentTypes` | array | Arten der gefundenen Anhänge |
| `content` | string | Formatierter Inhalt der Chat-Nachrichten |
| `attachments` | file[] | Hochgeladene Anhänge zur Vereinfachung \(abgeflacht\) |
### `microsoft_teams_write_chat`
@@ -135,7 +133,6 @@ Inhalte in einem Microsoft Teams-Chat schreiben oder aktualisieren
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, in den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der in die Nachricht geschrieben werden soll |
| `files` | file[] | Nein | Dateien, die der Nachricht angehängt werden sollen |
#### Ausgabe
@@ -158,21 +155,19 @@ Inhalte aus einem Microsoft Teams-Kanal lesen
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams, aus dem gelesen werden soll |
| `channelId` | string | Ja | Die ID des Kanals, aus dem gelesen werden soll |
| `includeAttachments` | boolean | Nein | Nachrichtenanhänge \(gehostete Inhalte\) herunterladen und in den Speicher aufnehmen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus des Teams-Kanal-Lesevorgangs |
| `success` | boolean | Erfolgsstatus des Lesevorgangs im Teams-Kanal |
| `messageCount` | number | Anzahl der aus dem Kanal abgerufenen Nachrichten |
| `teamId` | string | ID des Teams, aus dem gelesen wurde |
| `channelId` | string | ID des Kanals, aus dem gelesen wurde |
| `messages` | array | Array von Kanal-Nachrichtenobjekten |
| `messages` | array | Array von Kanalnachrichtenobjekten |
| `attachmentCount` | number | Gesamtanzahl der gefundenen Anhänge |
| `attachmentTypes` | array | Arten der gefundenen Anhänge |
| `content` | string | Formatierter Inhalt der Kanal-Nachrichten |
| `attachments` | file[] | Hochgeladene Anhänge zur Vereinfachung \(abgeflacht\) |
| `content` | string | Formatierter Inhalt der Kanalnachrichten |
### `microsoft_teams_write_channel`
@@ -182,10 +177,9 @@ Schreiben oder senden einer Nachricht an einen Microsoft Teams-Kanal
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams, in das geschrieben werden soll |
| `channelId` | string | Ja | Die ID des Kanals, in den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der in den Kanal geschrieben werden soll |
| `files` | file[] | Nein | Dateien, die der Nachricht angehängt werden sollen |
| `teamId` | string | Ja | Die ID des Teams, an das geschrieben werden soll |
| `channelId` | string | Ja | Die ID des Kanals, an den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der an den Kanal gesendet werden soll |
#### Ausgabe
@@ -199,209 +193,6 @@ Schreiben oder senden einer Nachricht an einen Microsoft Teams-Kanal
| `url` | string | Web-URL zur Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_update_chat_message`
Eine bestehende Nachricht in einem Microsoft Teams-Chat aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu aktualisierenden Nachricht |
| `content` | string | Ja | Der neue Inhalt für die Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aktualisierung erfolgreich war |
| `messageId` | string | ID der aktualisierten Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_update_channel_message`
Eine bestehende Nachricht in einem Microsoft Teams-Kanal aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu aktualisierenden Nachricht |
| `content` | string | Ja | Der neue Inhalt für die Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aktualisierung erfolgreich war |
| `messageId` | string | ID der aktualisierten Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_delete_chat_message`
Soft-Delete einer Nachricht in einem Microsoft Teams-Chat
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Löschen erfolgreich war |
| `deleted` | boolean | Bestätigung des Löschvorgangs |
| `messageId` | string | ID der gelöschten Nachricht |
### `microsoft_teams_delete_channel_message`
Soft-Delete einer Nachricht in einem Microsoft Teams-Kanal
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Löschen erfolgreich war |
| `deleted` | boolean | Bestätigung des Löschvorgangs |
| `messageId` | string | ID der gelöschten Nachricht |
### `microsoft_teams_reply_to_message`
Auf eine bestehende Nachricht in einem Microsoft Teams-Kanal antworten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals |
| `messageId` | string | Ja | Die ID der Nachricht, auf die geantwortet werden soll |
| `content` | string | Ja | Der Antwortinhalt |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Antwort erfolgreich war |
| `messageId` | string | ID der Antwortnachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich gesendet wurde |
### `microsoft_teams_get_message`
Eine bestimmte Nachricht aus einem Microsoft Teams-Chat oder -Kanal abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams \(für Kanalnachrichten\) |
| `channelId` | string | Nein | Die ID des Kanals \(für Kanalnachrichten\) |
| `chatId` | string | Nein | Die ID des Chats \(für Chatnachrichten\) |
| `messageId` | string | Ja | Die ID der abzurufenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Abruf erfolgreich war |
| `content` | string | Der Nachrichteninhalt |
| `metadata` | object | Nachrichtenmetadaten einschließlich Absender, Zeitstempel usw. |
### `microsoft_teams_set_reaction`
Eine Emoji-Reaktion zu einer Nachricht in Microsoft Teams hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams (für Kanalnachrichten) |
| `channelId` | string | Nein | Die ID des Kanals (für Kanalnachrichten) |
| `chatId` | string | Nein | Die ID des Chats (für Chatnachrichten) |
| `messageId` | string | Ja | Die ID der Nachricht, auf die reagiert werden soll |
| `reactionType` | string | Ja | Die Emoji-Reaktion (z.B. ❤️, 👍, 😊) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Reaktion erfolgreich hinzugefügt wurde |
| `reactionType` | string | Das Emoji, das hinzugefügt wurde |
| `messageId` | string | ID der Nachricht |
### `microsoft_teams_unset_reaction`
Eine Emoji-Reaktion von einer Nachricht in Microsoft Teams entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams (für Kanalnachrichten) |
| `channelId` | string | Nein | Die ID des Kanals (für Kanalnachrichten) |
| `chatId` | string | Nein | Die ID des Chats (für Chatnachrichten) |
| `messageId` | string | Ja | Die ID der Nachricht |
| `reactionType` | string | Ja | Die zu entfernende Emoji-Reaktion (z.B. ❤️, 👍, 😊) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Reaktion erfolgreich entfernt wurde |
| `reactionType` | string | Das Emoji, das entfernt wurde |
| `messageId` | string | ID der Nachricht |
### `microsoft_teams_list_team_members`
Alle Mitglieder eines Microsoft Teams-Teams auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Auflistung erfolgreich war |
| `members` | array | Array der Teammitglieder |
| `memberCount` | number | Gesamtzahl der Mitglieder |
### `microsoft_teams_list_channel_members`
Alle Mitglieder eines Microsoft Teams-Kanals auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Auflistung erfolgreich war |
| `members` | array | Array der Kanalmitglieder |
| `memberCount` | number | Gesamtzahl der Mitglieder |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: OneDrive
description: Dateien erstellen, hochladen, herunterladen, auflisten und löschen
description: Dateien erstellen, hochladen und auflisten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -50,7 +50,7 @@ In Sim ermöglicht die OneDrive-Integration Ihren Agenten die direkte Interaktio
## Nutzungsanweisungen
Integriert OneDrive in den Workflow. Kann Text- und Excel-Dateien erstellen, Dateien hochladen, Dateien herunterladen, Dateien auflisten und Dateien oder Ordner löschen.
Integriert OneDrive in den Workflow. Kann Dateien erstellen, hochladen und auflisten. Erfordert OAuth.
## Tools
@@ -63,10 +63,8 @@ Eine Datei auf OneDrive hochladen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileName` | string | Ja | Der Name der hochzuladenden Datei |
| `file` | file | Nein | Die hochzuladende Datei \(binär\) |
| `content` | string | Nein | Der hochzuladende Textinhalt \(falls keine Datei bereitgestellt wird\) |
| `mimeType` | string | Nein | Der MIME-Typ der zu erstellenden Datei \(z.B. text/plain für .txt, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet für .xlsx\) |
| `folderSelector` | string | Nein | Ordner auswählen, in den die Datei hochgeladen werden soll |
| `content` | string | Ja | Der Inhalt der hochzuladenden Datei |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in den die Datei hochgeladen werden soll |
| `manualFolderId` | string | Nein | Manuell eingegebene Ordner-ID \(erweiterter Modus\) |
#### Ausgabe
@@ -95,23 +93,6 @@ Einen neuen Ordner in OneDrive erstellen
| `success` | boolean | Ob der Ordner erfolgreich erstellt wurde |
| `file` | object | Das erstellte Ordnerobjekt mit Metadaten einschließlich ID, Name, webViewLink und Zeitstempeln |
### `onedrive_download`
Eine Datei von OneDrive herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in Ausführungsdateien |
### `onedrive_list`
Dateien und Ordner in OneDrive auflisten
@@ -120,7 +101,7 @@ Dateien und Ordner in OneDrive auflisten
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `folderSelector` | string | Nein | Ordner auswählen, aus dem Dateien aufgelistet werden sollen |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
| `manualFolderId` | string | Nein | Die manuell eingegebene Ordner-ID (erweiterter Modus) |
| `query` | string | Nein | Eine Abfrage zum Filtern der Dateien |
| `pageSize` | number | Nein | Die Anzahl der zurückzugebenden Dateien |
@@ -133,24 +114,6 @@ Dateien und Ordner in OneDrive auflisten
| `files` | array | Array von Datei- und Ordnerobjekten mit Metadaten |
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite (optional) |
### `onedrive_delete`
Eine Datei oder einen Ordner von OneDrive löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der zu löschenden Datei oder des zu löschenden Ordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Datei erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung, dass die Datei gelöscht wurde |
| `fileId` | string | Die ID der gelöschten Datei |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,7 +1,6 @@
---
title: Outlook
description: Outlook-E-Mail-Nachrichten senden, lesen, entwerfen, weiterleiten
und verschieben
description: Zugriff auf Outlook
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -135,26 +134,18 @@ Mit Microsoft Outlook können Sie:
- **Geräteübergreifender Zugriff**: Nutzen Sie Outlook auf Desktop, Web und Mobilgeräten mit Echtzeit-Synchronisation
- **Datenschutz und Sicherheit gewährleisten**: Nutzen Sie Verschlüsselung und Compliance-Kontrollen auf Unternehmensebene
In Sim ermöglicht die Microsoft Outlook-Integration Ihren Agenten, direkt und programmgesteuert mit E-Mail- und Kalenderdaten zu interagieren, mit vollständigen E-Mail-Verwaltungsfunktionen. Dies ermöglicht leistungsstarke Automatisierungsszenarien für Ihren gesamten E-Mail-Workflow. Ihre Agenten können:
- **Senden und entwerfen**: Professionelle E-Mails mit Anhängen verfassen und Entwürfe für später speichern
- **Lesen und weiterleiten**: Auf Posteingang-Nachrichten zugreifen und wichtige Mitteilungen an Teammitglieder weiterleiten
- **Effizient organisieren**: E-Mails als gelesen oder ungelesen markieren, Nachrichten zwischen Ordnern verschieben und E-Mails zur Referenz kopieren
- **Posteingang aufräumen**: Unerwünschte Nachrichten löschen und organisierte Ordnerstrukturen pflegen
- **Workflows auslösen**: In Echtzeit auf neue E-Mails reagieren und reaktionsschnelle Automatisierung basierend auf eingehenden Nachrichten ermöglichen
Durch die Verbindung von Sim mit Microsoft Outlook ermöglichen Sie intelligenten Agenten, Kommunikation zu automatisieren, Terminplanung zu optimieren, Überblick über die Organisationskorrespondenz zu behalten und Posteingänge zu organisieren alles innerhalb Ihres Workflow-Ökosystems. Ob Sie Kundenkommunikation verwalten, Rechnungen bearbeiten, Team-Updates koordinieren oder Nachfassaktionen automatisieren die Outlook-Integration bietet E-Mail-Automatisierungsfunktionen auf Unternehmensniveau.
In Sim ermöglicht die Microsoft Outlook-Integration Ihren Agenten, direkt programmatisch mit E-Mail- und Kalenderdaten zu interagieren. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden benutzerdefinierter E-Mail-Updates, das Analysieren eingehender Nachrichten für Workflow-Trigger, das Erstellen von Kalenderereignissen und das Verwalten von Aufgabenerinnerungen. Durch die Verbindung von Sim mit Microsoft Outlook können intelligente Agenten Kommunikation automatisieren, Terminplanung optimieren und die Übersicht über die Organisationskorrespondenz behalten alles innerhalb Ihres Workflow-Ökosystems.
{/* MANUAL-CONTENT-END */}
## Nutzungsanweisungen
## Nutzungsanleitung
Integrieren Sie Outlook in den Workflow. Kann E-Mail-Nachrichten lesen, entwerfen, senden, weiterleiten und verschieben. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
Integrieren Sie Outlook in den Workflow. Kann E-Mail-Nachrichten lesen, entwerfen und senden. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
## Tools
### `outlook_send`
E-Mails mit Outlook senden
E-Mails über Outlook versenden
#### Eingabe
@@ -163,12 +154,10 @@ E-Mails mit Outlook senden
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | E-Mail-Betreff |
| `body` | string | Ja | E-Mail-Inhalt |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text \(text oder html\) |
| `replyToMessageId` | string | Nein | Nachrichten-ID, auf die geantwortet wird \(für Threading\) |
| `replyToMessageId` | string | Nein | Nachrichten-ID für Antworten \(für Threading\) |
| `conversationId` | string | Nein | Konversations-ID für Threading |
| `cc` | string | Nein | CC-Empfänger \(durch Kommas getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Kommas getrennt\) |
| `attachments` | file[] | Nein | Dateien, die an die E-Mail angehängt werden sollen |
#### Ausgabe
@@ -181,19 +170,17 @@ E-Mails mit Outlook senden
### `outlook_draft`
E-Mails mit Outlook entwerfen
E-Mails mit Outlook erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | E-Mail-Betreff |
| `body` | string | Ja | E-Mail-Inhalt |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text \(text oder html\) |
| `cc` | string | Nein | CC-Empfänger \(durch Kommas getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Kommas getrennt\) |
| `attachments` | file[] | Nein | Dateien, die an den E-Mail-Entwurf angehängt werden sollen |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
#### Ausgabe
@@ -216,7 +203,6 @@ E-Mails aus Outlook lesen
| --------- | ---- | -------- | ----------- |
| `folder` | string | Nein | Ordner-ID, aus der E-Mails gelesen werden sollen \(Standard: Posteingang\) |
| `maxResults` | number | Nein | Maximale Anzahl der abzurufenden E-Mails \(Standard: 1, max: 10\) |
| `includeAttachments` | boolean | Nein | E-Mail-Anhänge herunterladen und einbeziehen |
#### Ausgabe
@@ -224,7 +210,6 @@ E-Mails aus Outlook lesen
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Statusmeldung |
| `results` | array | Array von E-Mail-Nachrichtenobjekten |
| `attachments` | file[] | Alle E-Mail-Anhänge aus allen E-Mails zusammengefasst |
### `outlook_forward`
@@ -245,104 +230,6 @@ Eine bestehende Outlook-Nachricht an bestimmte Empfänger weiterleiten
| `message` | string | Erfolgs- oder Fehlermeldung |
| `results` | object | Details zum Zustellungsergebnis |
### `outlook_move`
E-Mails zwischen Outlook-Ordnern verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu verschiebenden Nachricht |
| `destinationId` | string | Ja | ID des Zielordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des erfolgreichen E-Mail-Verschiebens |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der verschobenen Nachricht |
| `newFolderId` | string | ID des Zielordners |
### `outlook_mark_read`
Outlook-Nachricht als gelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als gelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der Nachricht |
| `isRead` | boolean | Lesestatus der Nachricht |
### `outlook_mark_unread`
Outlook-Nachricht als ungelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als ungelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der Nachricht |
| `isRead` | boolean | Lesestatus der Nachricht |
### `outlook_delete`
Outlook-Nachricht löschen (in den Ordner "Gelöschte Elemente" verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der gelöschten Nachricht |
| `status` | string | Löschstatus |
### `outlook_copy`
Eine Outlook-Nachricht in einen anderen Ordner kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu kopierenden Nachricht |
| `destinationId` | string | Ja | ID des Zielordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des erfolgreichen Kopierens der E-Mail |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `originalMessageId` | string | ID der ursprünglichen Nachricht |
| `copiedMessageId` | string | ID der kopierten Nachricht |
| `destinationFolderId` | string | ID des Zielordners |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Parallel AI
description: Webrecherche mit Parallel AI
description: Suche mit Parallel AI
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -70,7 +70,7 @@ In Sim ermöglicht die Parallel AI-Integration Ihren Agenten, Websuchen durchzuf
## Gebrauchsanweisung
Integrieren Sie Parallel AI in den Workflow. Kann im Web suchen, Informationen aus URLs extrahieren und tiefgehende Recherchen durchführen.
Integrieren Sie Parallel AI in den Workflow. Kann im Web suchen. Benötigt API-Schlüssel.
## Tools
@@ -95,50 +95,6 @@ Durchsuchen Sie das Web mit Parallel AI. Bietet umfassende Suchergebnisse mit in
| --------- | ---- | ----------- |
| `results` | array | Suchergebnisse mit Auszügen aus relevanten Seiten |
### `parallel_extract`
Extrahieren Sie gezielte Informationen aus bestimmten URLs mit Parallel AI. Verarbeitet bereitgestellte URLs, um relevante Inhalte basierend auf Ihrem Ziel zu extrahieren.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | string | Ja | Durch Kommas getrennte Liste von URLs, aus denen Informationen extrahiert werden sollen |
| `objective` | string | Ja | Welche Informationen aus den bereitgestellten URLs extrahiert werden sollen |
| `excerpts` | boolean | Ja | Relevante Auszüge aus dem Inhalt einschließen |
| `full_content` | boolean | Ja | Vollständigen Seiteninhalt einschließen |
| `apiKey` | string | Ja | Parallel AI API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `results` | array | Extrahierte Informationen aus den bereitgestellten URLs |
### `parallel_deep_research`
Führen Sie umfassende tiefgehende Recherchen im Web mit Parallel AI durch. Synthetisiert Informationen aus mehreren Quellen mit Zitaten. Kann bis zu 15 Minuten dauern.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `input` | string | Ja | Rechercheabfrage oder Frage \(bis zu 15.000 Zeichen\) |
| `processor` | string | Nein | Rechenleistungsstufe: base, lite, pro, ultra, ultra2x, ultra4x, ultra8x \(Standard: base\) |
| `include_domains` | string | Nein | Durch Kommas getrennte Liste von Domains, auf die die Recherche beschränkt werden soll \(Quellenrichtlinie\) |
| `exclude_domains` | string | Nein | Durch Kommas getrennte Liste von Domains, die von der Recherche ausgeschlossen werden sollen \(Quellenrichtlinie\) |
| `apiKey` | string | Ja | Parallel AI API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `status` | string | Aufgabenstatus (laufend, abgeschlossen, fehlgeschlagen) |
| `run_id` | string | Eindeutige ID für diese Rechercheaufgabe |
| `message` | string | Statusmeldung (für laufende Aufgaben) |
| `content` | object | Rechercheergebnisse (strukturiert basierend auf output_schema) |
| `basis` | array | Zitate und Quellen mit Auszügen und Vertrauensstufen |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Perplexity
description: Nutze Perplexity AI für Chat und Suche
description: Verwende Perplexity AI-Chatmodelle
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -36,7 +36,7 @@ In Sim ermöglicht die Perplexity-Integration deinen Agenten, diese leistungssta
## Gebrauchsanweisung
Integriere Perplexity in den Workflow. Kann Vervollständigungen mit Perplexity AI Chat-Modellen generieren oder Websuchen mit erweiterter Filterung durchführen.
Integrieren Sie Perplexity in den Workflow. Kann Vervollständigungen mit Perplexity AI-Chatmodellen generieren. Erfordert API-Schlüssel.
## Tools
@@ -62,31 +62,6 @@ Generieren Sie Vervollständigungen mit Perplexity AI-Chatmodellen
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Ergebnisse der Chat-Vervollständigung |
### `perplexity_search`
Erhalte bewertete Suchergebnisse von Perplexity
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Eine Suchanfrage oder ein Array von Anfragen \(maximal 5 für Multi-Anfrage-Suche\) |
| `max_results` | number | Nein | Maximale Anzahl der zurückzugebenden Suchergebnisse \(1-20, Standard: 10\) |
| `search_domain_filter` | array | Nein | Liste der Domains/URLs, auf die die Suchergebnisse beschränkt werden sollen \(max. 20\) |
| `max_tokens_per_page` | number | Nein | Maximale Anzahl der von jeder Webseite abgerufenen Tokens \(Standard: 1024\) |
| `country` | string | Nein | Ländercode zur Filterung der Suchergebnisse \(z.B. US, GB, DE\) |
| `search_recency_filter` | string | Nein | Filtere Ergebnisse nach Aktualität: Stunde, Tag, Woche, Monat oder Jahr |
| `search_after_date` | string | Nein | Nur Inhalte einbeziehen, die nach diesem Datum veröffentlicht wurden \(Format: MM/TT/JJJJ\) |
| `search_before_date` | string | Nein | Nur Inhalte einbeziehen, die vor diesem Datum veröffentlicht wurden \(Format: MM/TT/JJJJ\) |
| `apiKey` | string | Ja | Perplexity API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Suchergebnisse |
## Hinweise
- Kategorie: `tools`

View File

@@ -139,8 +139,7 @@ Suche nach ähnlichen Vektoren in einer Qdrant-Sammlung
| `collection` | string | Ja | Sammlungsname |
| `vector` | array | Ja | Zu suchender Vektor |
| `limit` | number | Nein | Anzahl der zurückzugebenden Ergebnisse |
| `filter` | object | Nein | Auf die Suche anzuwendender Filter |
| `search_return_data` | string | Nein | Aus der Suche zurückzugebende Daten |
| `filter` | object | Nein | Filter für die Suche |
| `with_payload` | boolean | Nein | Payload in Antwort einschließen |
| `with_vector` | boolean | Nein | Vektor in Antwort einschließen |
@@ -162,8 +161,7 @@ Punkte anhand der ID aus einer Qdrant-Sammlung abrufen
| `url` | string | Ja | Qdrant-Basis-URL |
| `apiKey` | string | Nein | Qdrant-API-Schlüssel \(optional\) |
| `collection` | string | Ja | Sammlungsname |
| `ids` | array | Ja | Array von Punkt-IDs zum Abrufen |
| `fetch_return_data` | string | Nein | Aus dem Abruf zurückzugebende Daten |
| `ids` | array | Ja | Array von abzurufenden Punkt-IDs |
| `with_payload` | boolean | Nein | Payload in Antwort einschließen |
| `with_vector` | boolean | Nein | Vektor in Antwort einschließen |

View File

@@ -38,7 +38,7 @@ Diese Operationen ermöglichen es Ihren Agenten, auf Reddit-Inhalte zuzugreifen
## Nutzungsanleitung
Integriere Reddit in Workflows. Lese Beiträge, Kommentare und durchsuche Inhalte. Veröffentliche Beiträge, stimme ab, antworte, bearbeite und verwalte dein Reddit-Konto.
Integrieren Sie Reddit in den Workflow. Kann Beiträge und Kommentare aus einem Subreddit abrufen. Erfordert OAuth.
## Tools
@@ -54,11 +54,6 @@ Beiträge aus einem Subreddit mit verschiedenen Sortieroptionen abrufen
| `sort` | string | Nein | Sortiermethode für Beiträge: "hot", "new", "top" oder "rising" \(Standard: "hot"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `time` | string | Nein | Zeitfilter für nach "top" sortierte Beiträge: "day", "week", "month", "year" oder "all" \(Standard: "day"\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeige Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
| `sr_detail` | boolean | Nein | Erweitere Subreddit-Details in der Antwort |
#### Ausgabe
@@ -75,20 +70,10 @@ Kommentare von einem bestimmten Reddit-Beitrag abrufen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `postId` | string | Ja | Die ID des Reddit-Beitrags, aus dem Kommentare abgerufen werden sollen |
| `subreddit` | string | Ja | Das Subreddit, in dem sich der Beitrag befindet \(ohne das r/ Präfix\) |
| `sort` | string | Nein | Sortiermethode für Kommentare: "confidence", "top", "new", "controversial", "old", "random", "qa" \(Standard: "confidence"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare \(Standard: 50, max: 100\) |
| `depth` | number | Nein | Maximale Tiefe von Unterbäumen im Thread \(steuert verschachtelte Kommentarebenen\) |
| `context` | number | Nein | Anzahl der einzubeziehenden übergeordneten Kommentare |
| `showedits` | boolean | Nein | Bearbeitungsinformationen für Kommentare anzeigen |
| `showmore` | boolean | Nein | "Mehr Kommentare laden"-Elemente in die Antwort einbeziehen |
| `showtitle` | boolean | Nein | Beitragstitel in die Antwort einbeziehen |
| `threaded` | boolean | Nein | Kommentare im verschachtelten Format zurückgeben |
| `truncate` | number | Nein | Ganzzahl zur Kürzung der Kommentartiefe |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `postId` | string | Ja | Die ID des Reddit-Beitrags, von dem Kommentare abgerufen werden sollen |
| `subreddit` | string | Ja | Das Subreddit, in dem sich der Beitrag befindet (ohne das r/-Präfix) |
| `sort` | string | Nein | Sortiermethode für Kommentare: "confidence", "top", "new", "controversial", "old", "random", "qa" (Standard: "confidence") |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare (Standard: 50, max: 100) |
#### Ausgabe
@@ -96,205 +81,6 @@ Kommentare von einem bestimmten Reddit-Beitrag abrufen
| --------- | ---- | ----------- |
| `post` | object | Beitragsinformationen einschließlich ID, Titel, Autor, Inhalt und Metadaten |
### `reddit_get_controversial`
Kontroverse Beiträge aus einem Subreddit abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, aus dem Beiträge abgerufen werden sollen \(ohne das r/ Präfix\) |
| `time` | string | Nein | Zeitfilter für kontroverse Beiträge: "hour", "day", "week", "month", "year" oder "all" \(Standard: "all"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeigt Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
| `sr_detail` | boolean | Nein | Erweitert Subreddit-Details in der Antwort |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Name des Subreddits, aus dem Beiträge abgerufen wurden |
| `posts` | array | Array von kontroversen Beiträgen mit Titel, Autor, URL, Punktzahl, Kommentaranzahl und Metadaten |
### `reddit_search`
Nach Beiträgen innerhalb eines Subreddits suchen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, in dem gesucht werden soll \(ohne das r/ Präfix\) |
| `query` | string | Ja | Suchanfragentext |
| `sort` | string | Nein | Sortiermethode für Suchergebnisse: "relevance", "hot", "top", "new" oder "comments" \(Standard: "relevance"\) |
| `time` | string | Nein | Zeitfilter für Suchergebnisse: "hour", "day", "week", "month", "year" oder "all" \(Standard: "all"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `restrict_sr` | boolean | Nein | Suche nur auf das angegebene Subreddit beschränken \(Standard: true\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeigt Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Name des Subreddits, in dem die Suche durchgeführt wurde |
| `posts` | array | Array von Suchergebnisbeiträgen mit Titel, Autor, URL, Punktzahl, Kommentaranzahl und Metadaten |
### `reddit_submit_post`
Einen neuen Beitrag in einem Subreddit einreichen (Text oder Link)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, in dem gepostet werden soll \(ohne das r/ Präfix\) |
| `title` | string | Ja | Titel der Einreichung \(maximal 300 Zeichen\) |
| `text` | string | Nein | Textinhalt für einen Selbstbeitrag \(Markdown wird unterstützt\) |
| `url` | string | Nein | URL für einen Link-Beitrag \(kann nicht zusammen mit Text verwendet werden\) |
| `nsfw` | boolean | Nein | Beitrag als NSFW markieren |
| `spoiler` | boolean | Nein | Beitrag als Spoiler markieren |
| `send_replies` | boolean | Nein | Antwortbenachrichtigungen an den Posteingang senden \(Standard: true\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Beitrag erfolgreich eingereicht wurde |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Beitragsdaten einschließlich ID, Name, URL und Permalink |
### `reddit_vote`
Upvote, Downvote oder Zurücknahme einer Stimme für einen Reddit-Beitrag oder -Kommentar
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des Elements, für das abgestimmt werden soll \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `dir` | number | Ja | Abstimmungsrichtung: 1 \(Upvote\), 0 \(Zurücknahme\), oder -1 \(Downvote\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Abstimmung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_save`
Einen Reddit-Beitrag oder Kommentar in deinen gespeicherten Elementen speichern
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des zu speichernden Elements \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `category` | string | Nein | Kategorie, unter der gespeichert werden soll \(Reddit Gold-Funktion\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Speichern erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_unsave`
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Subreddit-Name |
| `posts` | json | Beitragsdaten |
| `post` | json | Daten eines einzelnen Beitrags |
| `comments` | json | Kommentardaten |
### `reddit_reply`
Einen Kommentar zu einem Reddit-Beitrag oder Kommentar hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `parent_id` | string | Ja | Vollständiger Name des Elements, auf das geantwortet werden soll \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `text` | string | Ja | Kommentartext im Markdown-Format |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Antwort erfolgreich gepostet wurde |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Kommentardaten einschließlich ID, Name, Permalink und Inhalt |
### `reddit_edit`
Bearbeite den Text deines eigenen Reddit-Beitrags oder -Kommentars
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `thing_id` | string | Ja | Vollständiger Name des zu bearbeitenden Elements \(z.B. t3_xxxxx für Beiträge, t1_xxxxx für Kommentare\) |
| `text` | string | Ja | Neuer Textinhalt im Markdown-Format |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Bearbeitung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Inhaltsdaten |
### `reddit_delete`
Lösche deinen eigenen Reddit-Beitrag oder -Kommentar
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des zu löschenden Elements \(z.B. t3_xxxxx für Beiträge, t1_xxxxx für Kommentare\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Löschung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_subscribe`
Subreddit abonnieren oder Abonnement kündigen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits \(ohne das r/ Präfix\) |
| `action` | string | Ja | Auszuführende Aktion: "sub" zum Abonnieren oder "unsub" zum Kündigen des Abonnements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Abonnementaktion erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
## Hinweise
- Kategorie: `tools`

View File

@@ -56,8 +56,7 @@ Senden Sie eine E-Mail mit Ihrem eigenen Resend API-Schlüssel und Absenderadres
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `resendApiKey` | string | Ja | Resend API-Schlüssel zum Senden von E-Mails |
| `resendApiKey` | string | Ja | Resend API-Schlüssel zum Versenden von E-Mails |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: S3
description: S3-Dateien hochladen, herunterladen, auflisten und verwalten
description: S3-Dateien anzeigen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -61,35 +61,10 @@ In Sim ermöglicht die S3-Integration Ihren Agenten das Abrufen und Zugreifen au
## Gebrauchsanweisung
S3 in den Workflow integrieren. Dateien hochladen, Objekte herunterladen, Bucket-Inhalte auflisten, Objekte löschen und Objekte zwischen Buckets kopieren. Erfordert AWS-Zugriffsschlüssel und geheimen Zugriffsschlüssel.
S3 in den Workflow integrieren. Kann vorsignierte URLs für S3-Objekte erhalten. Erfordert Zugriffsschlüssel und geheimen Zugriffsschlüssel.
## Tools
### `s3_put_object`
Eine Datei in einen AWS S3-Bucket hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS-Zugriffsschlüssel-ID |
| `secretAccessKey` | string | Ja | Ihr AWS-geheimer Zugriffsschlüssel |
| `region` | string | Ja | AWS-Region (z. B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `objectKey` | string | Ja | Objektschlüssel/Pfad in S3 (z. B. ordner/dateiname.ext) |
| `file` | file | Nein | Hochzuladende Datei |
| `content` | string | Nein | Hochzuladender Textinhalt (Alternative zur Datei) |
| `contentType` | string | Nein | Content-Type-Header (wird automatisch aus der Datei erkannt, wenn nicht angegeben) |
| `acl` | string | Nein | Zugriffskontrollliste (z. B. private, public-read) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `url` | string | URL des hochgeladenen S3-Objekts |
| `metadata` | object | Upload-Metadaten einschließlich ETag und Speicherort |
### `s3_get_object`
Ein Objekt aus einem AWS S3-Bucket abrufen
@@ -98,8 +73,8 @@ Ein Objekt aus einem AWS S3-Bucket abrufen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS-Zugriffsschlüssel-ID |
| `secretAccessKey` | string | Ja | Ihr AWS-geheimer Zugriffsschlüssel |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `s3Uri` | string | Ja | S3-Objekt-URL |
#### Ausgabe
@@ -109,73 +84,6 @@ Ein Objekt aus einem AWS S3-Bucket abrufen
| `url` | string | Vorsignierte URL zum Herunterladen des S3-Objekts |
| `metadata` | object | Dateimetadaten einschließlich Typ, Größe, Name und Datum der letzten Änderung |
### `s3_list_objects`
Objekte in einem AWS S3-Bucket auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `prefix` | string | Nein | Präfix zum Filtern von Objekten (z.B. ordner/) |
| `maxKeys` | number | Nein | Maximale Anzahl zurückzugebender Objekte (Standard: 1000) |
| `continuationToken` | string | Nein | Token für Paginierung |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `objects` | array | Liste der S3-Objekte |
### `s3_delete_object`
Ein Objekt aus einem AWS S3-Bucket löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `objectKey` | string | Ja | Objekt-Schlüssel/Pfad zum Löschen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob das Objekt erfolgreich gelöscht wurde |
| `metadata` | object | Löschmetadaten |
### `s3_copy_object`
Ein Objekt innerhalb von oder zwischen AWS S3-Buckets kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `sourceBucket` | string | Ja | Name des Quell-Buckets |
| `sourceKey` | string | Ja | Quell-Objektschlüssel/-pfad |
| `destinationBucket` | string | Ja | Name des Ziel-Buckets |
| `destinationKey` | string | Ja | Ziel-Objektschlüssel/-pfad |
| `acl` | string | Nein | Zugriffskontrollliste für das kopierte Objekt (z.B. private, public-read) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `url` | string | URL des kopierten S3-Objekts |
| `metadata` | object | Metadaten des Kopiervorgangs |
## Hinweise
- Kategorie: `tools`

View File

@@ -199,26 +199,6 @@ Ein neues Element zu einer SharePoint-Liste hinzufügen
| --------- | ---- | ----------- |
| `item` | object | Erstelltes SharePoint-Listenelement |
### `sharepoint_upload_file`
Dateien in eine SharePoint-Dokumentenbibliothek hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `siteId` | string | Nein | Die ID der SharePoint-Website |
| `driveId` | string | Nein | Die ID der Dokumentenbibliothek (Laufwerk). Wenn nicht angegeben, wird das Standardlaufwerk verwendet. |
| `folderPath` | string | Nein | Optionaler Ordnerpfad innerhalb der Dokumentenbibliothek (z.B. /Documents/Subfolder) |
| `fileName` | string | Nein | Optional: Überschreiben des hochgeladenen Dateinamens |
| `files` | file[] | Nein | Dateien, die nach SharePoint hochgeladen werden sollen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `uploadedFiles` | array | Array von hochgeladenen Dateiobjekten |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,7 +1,6 @@
---
title: Slack
description: Nachrichten senden, aktualisieren, löschen, Reaktionen in Slack
hinzufügen oder Workflows von Slack-Ereignissen auslösen
description: Sende Nachrichten an Slack oder löse Workflows durch Slack-Ereignisse aus
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -47,29 +46,24 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
Mit Slack kannst du:
- **Automatisieren Sie Agenten-Benachrichtigungen**: Senden Sie Echtzeit-Updates von Ihren Sim-Agenten an jeden Slack-Kanal
- **Erstellen Sie Webhook-Endpunkte**: Konfigurieren Sie Slack-Bots als Webhooks, um Sim-Workflows aus Slack-Aktivitäten auszulösen
- **Verbessern Sie Agenten-Workflows**: Integrieren Sie Slack-Messaging in Ihre Agenten, um Ergebnisse, Warnungen und Statusaktualisierungen zu liefern
- **Erstellen und teilen Sie Slack-Canvases**: Erstellen Sie programmatisch kollaborative Dokumente (Canvases) in Slack-Kanälen
- **Lesen Sie Nachrichten aus Kanälen**: Rufen Sie aktuelle Nachrichten aus jedem Slack-Kanal ab und verarbeiten Sie diese für Überwachungs- oder Workflow-Auslöser
- **Verwalten Sie Bot-Nachrichten**: Aktualisieren, löschen und fügen Sie Reaktionen zu Nachrichten hinzu, die von Ihrem Bot gesendet wurden
- **Agent-Benachrichtigungen automatisieren**: Sende Echtzeit-Updates von deinen Sim-Agenten an jeden Slack-Kanal
- **Webhook-Endpunkte erstellen**: Konfiguriere Slack-Bots als Webhooks, um Sim-Workflows durch Slack-Aktivitäten auszulösen
- **Agent-Workflows verbessern**: Integriere Slack-Messaging in deine Agenten, um Ergebnisse, Warnungen und Statusupdates zu liefern
- **Slack-Canvases erstellen und teilen**: Erstelle programmatisch kollaborative Dokumente (Canvases) in Slack-Kanälen
- **Nachrichten aus Kanälen lesen**: Rufe aktuelle Nachrichten aus jedem Slack-Kanal ab und verarbeite sie für Monitoring oder Workflow-Auslöser
In Sim ermöglicht die Slack-Integration Ihren Agenten, programmatisch mit Slack zu interagieren, mit vollständigen Nachrichtenverwaltungsfunktionen als Teil ihrer Workflows:
In Sim ermöglicht die Slack-Integration Ihren Agenten, im Rahmen ihrer Workflows auf verschiedene Weise programmatisch mit Slack zu interagieren:
- **Nachrichten senden**: Agenten können formatierte Nachrichten an jeden Slack-Kanal oder Benutzer senden und unterstützen dabei Slacks mrkdwn-Syntax für umfangreiche Formatierung
- **Nachrichten aktualisieren**: Bearbeiten Sie zuvor gesendete Bot-Nachrichten, um Informationen zu korrigieren oder Statusaktualisierungen bereitzustellen
- **Nachrichten löschen**: Entfernen Sie Bot-Nachrichten, wenn sie nicht mehr benötigt werden oder Fehler enthalten
- **Reaktionen hinzufügen**: Drücken Sie Stimmungen oder Bestätigungen aus, indem Sie Emoji-Reaktionen zu jeder Nachricht hinzufügen
- **Canvases erstellen**: Erstellen und teilen Sie Slack-Canvases (kollaborative Dokumente) direkt in Kanälen, um reichhaltigere Inhalte zu teilen und zu dokumentieren
- **Nachrichten lesen**: Lesen Sie aktuelle Nachrichten aus Kanälen, um Überwachung, Berichterstattung oder das Auslösen weiterer Aktionen basierend auf Kanalaktivitäten zu ermöglichen
- **Dateien herunterladen**: Rufen Sie in Slack-Kanälen geteilte Dateien zur Verarbeitung oder Archivierung ab
- **Nachrichten senden**: Agenten können formatierte Nachrichten an jeden Slack-Kanal oder Benutzer senden und unterstützen dabei Slacks mrkdwn-Syntax für umfangreiche Formatierung.
- **Canvases erstellen**: Agenten können Slack-Canvases (kollaborative Dokumente) direkt in Kanälen erstellen und teilen, was den Austausch von umfangreicheren Inhalten und Dokumentationen ermöglicht.
- **Nachrichten lesen**: Agenten können aktuelle Nachrichten aus Kanälen lesen, was Überwachung, Berichterstattung oder das Auslösen weiterer Aktionen basierend auf Kanalaktivitäten ermöglicht.
Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen mit dynamischen Updates, das Verwalten von Gesprächsabläufen mit bearbeitbaren Statusnachrichten, das Bestätigen wichtiger Nachrichten mit Reaktionen und das Sauberhalten von Kanälen durch Entfernen veralteter Bot-Nachrichten. Ihre Agenten können zeitnahe Informationen liefern, Nachrichten aktualisieren, während Workflows fortschreiten, kollaborative Dokumente erstellen oder Teammitglieder benachrichtigen, wenn Aufmerksamkeit benötigt wird. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Kommunikation Ihres Teams und stellt sicher, dass jeder mit genauen, aktuellen Informationen auf dem Laufenden bleibt. Durch die Verbindung von Sim mit Slack können Sie Agenten erstellen, die Ihr Team mit relevanten Informationen zur richtigen Zeit auf dem Laufenden halten, die Zusammenarbeit verbessern, indem sie Erkenntnisse automatisch teilen und aktualisieren, und die Notwendigkeit manueller Statusaktualisierungen reduzieren alles während Sie Ihren bestehenden Slack-Workspace nutzen, in dem Ihr Team bereits kommuniziert.
Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, Warnungen, Updates und Berichten direkt an die Kommunikationszentrale Ihres Teams, das Teilen strukturierter Dokumente oder die Überwachung von Gesprächen für Workflow-Auslöser. Ihre Agenten können zeitnahe Informationen liefern, Ergebnisse aus abgeschlossenen Prozessen teilen, kollaborative Dokumente erstellen oder Teammitglieder benachrichtigen, wenn Aufmerksamkeit erforderlich ist. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Kommunikation Ihres Teams und stellt sicher, dass alle ohne manuelles Eingreifen informiert bleiben. Durch die Verbindung von Sim mit Slack können Sie Agenten erstellen, die Ihr Team automatisch mit relevanten Informationen zur richtigen Zeit auf dem Laufenden halten, die Zusammenarbeit durch automatisches Teilen von Erkenntnissen verbessern und den Bedarf an manuellen Statusaktualisierungen reduzieren alles unter Nutzung Ihres bestehenden Slack-Arbeitsbereichs, in dem Ihr Team bereits kommuniziert.
{/* MANUAL-CONTENT-END */}
## Nutzungsanweisungen
Integriert Slack in den Workflow. Kann Nachrichten senden, aktualisieren und löschen, Canvases erstellen, Nachrichten lesen und Reaktionen hinzufügen. Erfordert im erweiterten Modus ein Bot-Token anstelle von OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Kanal gesendet wird.
Integrieren Sie Slack in den Workflow. Kann Nachrichten senden, Canvases erstellen und Nachrichten lesen. Erfordert OAuth. Kann im Auslösemodus verwendet werden, um einen Workflow zu starten, wenn eine Nachricht an einen Kanal gesendet wird.
## Tools
@@ -82,11 +76,9 @@ Senden Sie Nachrichten an Slack-Kanäle oder Benutzer über die Slack-API. Unter
| 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 | Ziel-Slack-Kanal \(z.B. #general\) |
| `text` | string | Ja | Nachrichtentext zum Senden \(unterstützt Slack mrkdwn-Formatierung\) |
| `thread_ts` | string | Nein | Thread-Zeitstempel für Antworten \(erstellt Thread-Antwort\) |
| `files` | file[] | Nein | Dateien, die an die Nachricht angehängt werden sollen |
| `text` | string | Ja | Zu sendender Nachrichtentext \(unterstützt Slack mrkdwn-Formatierung\) |
#### Ausgabe
@@ -139,87 +131,6 @@ Lesen Sie die neuesten Nachrichten aus Slack-Kanälen. Rufen Sie den Konversatio
| --------- | ---- | ----------- |
| `messages` | array | Array von Nachrichtenobjekten aus dem Kanal |
### `slack_download`
Eine Datei von Slack herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in den Ausführungsdateien |
### `slack_update_message`
Eine zuvor vom Bot in Slack gesendete Nachricht aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `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\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Metadaten der aktualisierten Nachricht |
### `slack_delete_message`
Eine zuvor vom Bot in Slack gesendete Nachricht löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `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\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Metadaten der gelöschten Nachricht |
### `slack_add_reaction`
Emoji-Reaktion zu einer Slack-Nachricht hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `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 Nachricht, auf die reagiert werden soll \(z.B. 1405894322.002768\) |
| `name` | string | Ja | Name der Emoji-Reaktion \(ohne Doppelpunkte, z.B. thumbsup, heart, eyes\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Reaktions-Metadaten |
## Hinweise
- Kategorie: `tools`

File diff suppressed because it is too large Load Diff

View File

@@ -75,7 +75,7 @@ Ob Sie interne Tools erstellen, Geschäftsprozesse automatisieren oder Produktio
## Gebrauchsanweisung
Integrieren Sie Supabase in den Workflow. Unterstützt Datenbankoperationen (Abfrage, Einfügen, Aktualisieren, Löschen, Upsert), Volltextsuche, RPC-Funktionen, Zeilenzählung, Vektorsuche und komplettes Speichermanagement (Hochladen, Herunterladen, Auflisten, Verschieben, Kopieren, Löschen von Dateien und Buckets).
Integrieren Sie Supabase in den Workflow. Kann viele Zeilen abrufen, eine Zeile abrufen, erstellen, aktualisieren, löschen und upserten.
## Tools
@@ -202,324 +202,6 @@ Daten in eine Supabase-Tabelle einfügen oder aktualisieren (Upsert-Operation)
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array der eingefügten/aktualisierten Datensätze |
### `supabase_count`
Zeilen in einer Supabase-Tabelle zählen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `table` | string | Ja | Der Name der Supabase-Tabelle, deren Zeilen gezählt werden sollen |
| `filter` | string | Nein | PostgREST-Filter \(z.B. "status=eq.active"\) |
| `countType` | string | Nein | Zähltyp: exact, planned oder estimated \(Standard: exact\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `count` | number | Anzahl der Zeilen, die dem Filter entsprechen |
### `supabase_text_search`
Volltextsuche in einer Supabase-Tabelle durchführen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `table` | string | Ja | Der Name der Supabase-Tabelle für die Suche |
| `column` | string | Ja | Die Spalte, in der gesucht werden soll |
| `query` | string | Ja | Die Suchanfrage |
| `searchType` | string | Nein | Suchtyp: plain, phrase oder websearch \(Standard: websearch\) |
| `language` | string | Nein | Sprache für die Textsuchkonfiguration \(Standard: english\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Zeilen |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Datensätzen, die der Suchabfrage entsprechen |
### `supabase_vector_search`
Ähnlichkeitssuche mit pgvector in einer Supabase-Tabelle durchführen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `functionName` | string | Ja | Der Name der PostgreSQL-Funktion, die die Vektorsuche durchführt \(z.B. match_documents\) |
| `queryEmbedding` | array | Ja | Der Abfragevektor/Embedding, nach dem ähnliche Elemente gesucht werden sollen |
| `matchThreshold` | number | Nein | Minimaler Ähnlichkeitsschwellenwert \(0-1\), typischerweise 0,7-0,9 |
| `matchCount` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Datensätzen mit Ähnlichkeitswerten aus der Vektorsuche. Jeder Datensatz enthält ein Ähnlichkeitsfeld \(0-1\), das angibt, wie ähnlich er dem Abfragevektor ist. |
### `supabase_rpc`
Eine PostgreSQL-Funktion in Supabase aufrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `functionName` | string | Ja | Der Name der aufzurufenden PostgreSQL-Funktion |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | json | Von der Funktion zurückgegebenes Ergebnis |
### `supabase_storage_upload`
Eine Datei in einen Supabase-Speicher-Bucket hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad, unter dem die Datei gespeichert wird \(z.B. "ordner/datei.jpg"\) |
| `fileContent` | string | Ja | Der Dateiinhalt \(base64-kodiert für Binärdateien oder Klartext\) |
| `contentType` | string | Nein | MIME-Typ der Datei \(z.B. "image/jpeg", "text/plain"\) |
| `upsert` | boolean | Nein | Wenn true, überschreibt vorhandene Datei \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Upload-Ergebnis einschließlich Dateipfad und Metadaten |
### `supabase_storage_download`
Eine Datei aus einem Supabase-Speicher-Bucket herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur herunterzuladenden Datei \(z.B. "ordner/datei.jpg"\) |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in Ausführungsdateien |
### `supabase_storage_list`
Dateien in einem Supabase-Speicher-Bucket auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Nein | Der Ordnerpfad, aus dem Dateien aufgelistet werden sollen \(Standard: Root\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Dateien \(Standard: 100\) |
| `offset` | number | Nein | Anzahl der zu überspringenden Dateien \(für Paginierung\) |
| `sortBy` | string | Nein | Spalte zum Sortieren: name, created_at, updated_at \(Standard: name\) |
| `sortOrder` | string | Nein | Sortierreihenfolge: asc oder desc \(Standard: asc\) |
| `search` | string | Nein | Suchbegriff zum Filtern von Dateien nach Namen |
| `apiKey` | string | Ja | Ihr Supabase Service-Rolle-Secret-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Dateiobjekten mit Metadaten |
### `supabase_storage_delete`
Dateien aus einem Supabase-Speicher-Bucket löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `paths` | array | Ja | Array von Dateipfaden zum Löschen \(z.B. \["ordner/datei1.jpg", "ordner/datei2.jpg"\]\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array der gelöschten Dateiobjekte |
### `supabase_storage_move`
Eine Datei innerhalb eines Supabase-Speicher-Buckets verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `fromPath` | string | Ja | Der aktuelle Pfad der Datei \(z.B. "ordner/alt.jpg"\) |
| `toPath` | string | Ja | Der neue Pfad für die Datei \(z.B. "neuerordner/neu.jpg"\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Verschiebeaktion |
### `supabase_storage_copy`
Eine Datei innerhalb eines Supabase-Speicher-Buckets kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `fromPath` | string | Ja | Der Pfad der Quelldatei \(z.B. "folder/source.jpg"\) |
| `toPath` | string | Ja | Der Pfad für die kopierte Datei \(z.B. "folder/copy.jpg"\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Kopieroperation |
### `supabase_storage_create_bucket`
Einen neuen Speicher-Bucket in Supabase erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des zu erstellenden Buckets |
| `isPublic` | boolean | Nein | Ob der Bucket öffentlich zugänglich sein soll \(Standard: false\) |
| `fileSizeLimit` | number | Nein | Maximale Dateigröße in Bytes \(optional\) |
| `allowedMimeTypes` | array | Nein | Array erlaubter MIME-Typen \(z.B. \["image/png", "image/jpeg"\]\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Informationen zum erstellten Bucket |
### `supabase_storage_list_buckets`
Alle Speicher-Buckets in Supabase auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Bucket-Objekten |
### `supabase_storage_delete_bucket`
Einen Speicher-Bucket in Supabase löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des zu löschenden Buckets |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Löschoperation |
### `supabase_storage_get_public_url`
Die öffentliche URL für eine Datei in einem Supabase-Speicher-Bucket abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur Datei \(z.B. "ordner/datei.jpg"\) |
| `download` | boolean | Nein | Wenn true, wird der Download erzwungen anstatt der Inline-Anzeige \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `publicUrl` | string | Die öffentliche URL für den Zugriff auf die Datei |
### `supabase_storage_create_signed_url`
Erstellt eine temporäre signierte URL für eine Datei in einem Supabase-Speicher-Bucket
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur Datei \(z.B. "ordner/datei.jpg"\) |
| `expiresIn` | number | Ja | Anzahl der Sekunden bis zum Ablauf der URL \(z.B. 3600 für 1 Stunde\) |
| `download` | boolean | Nein | Wenn true, wird der Download erzwungen anstatt der Inline-Anzeige \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `signedUrl` | string | Die temporäre signierte URL für den Zugriff auf die Datei |
## Hinweise
- Kategorie: `tools`

View File

@@ -71,21 +71,6 @@ KI-gestützte Websuchen mit Tavily durchführen
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Die auszuführende Suchanfrage |
| `max_results` | number | Nein | Maximale Anzahl an Ergebnissen \(1-20\) |
| `topic` | string | Nein | Kategorie-Typ: general, news oder finance \(Standard: general\) |
| `search_depth` | string | Nein | Suchbereich: basic \(1 Kredit\) oder advanced \(2 Kredite\) \(Standard: basic\) |
| `include_answer` | string | Nein | LLM-generierte Antwort: true/basic für schnelle Antwort oder advanced für detaillierte |
| `include_raw_content` | string | Nein | Geparster HTML-Inhalt: true/markdown oder text-Format |
| `include_images` | boolean | Nein | Bildsuchergebnisse einbeziehen |
| `include_image_descriptions` | boolean | Nein | Beschreibenden Text für Bilder hinzufügen |
| `include_favicon` | boolean | Nein | Favicon-URLs einbeziehen |
| `chunks_per_source` | number | Nein | Maximale Anzahl relevanter Abschnitte pro Quelle \(1-3, Standard: 3\) |
| `time_range` | string | Nein | Nach Aktualität filtern: day/d, week/w, month/m, year/y |
| `start_date` | string | Nein | Frühestes Veröffentlichungsdatum \(Format JJJJ-MM-TT\) |
| `end_date` | string | Nein | Spätestes Veröffentlichungsdatum \(Format JJJJ-MM-TT\) |
| `include_domains` | string | Nein | Kommagetrennte Liste von Domains auf der Whitelist \(max. 300\) |
| `exclude_domains` | string | Nein | Kommagetrennte Liste von Domains auf der Blacklist \(max. 150\) |
| `country` | string | Nein | Ergebnisse aus bestimmtem Land bevorzugen \(nur für allgemeine Themen\) |
| `auto_parameters` | boolean | Nein | Automatische Parameterkonfiguration basierend auf der Abfrageabsicht |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
@@ -103,11 +88,8 @@ Extrahieren Sie Rohinhalt von mehreren Webseiten gleichzeitig mit Tavily
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | string | Ja | URL oder Array von URLs, aus denen Inhalte extrahiert werden sollen |
| `extract_depth` | string | Nein | Die Tiefe der Extraktion \(basic=1 Kredit/5 URLs, advanced=2 Kredite/5 URLs\) |
| `format` | string | Nein | Ausgabeformat: markdown oder text \(Standard: markdown\) |
| `include_images` | boolean | Nein | Bilder in die Extraktionsausgabe einbeziehen |
| `include_favicon` | boolean | Nein | Favicon-URL für jedes Ergebnis hinzufügen |
| `urls` | string | Ja | URL oder Array von URLs, von denen Inhalte extrahiert werden sollen |
| `extract_depth` | string | Nein | Die Extraktionstiefe \(basic=1 Kredit/5 URLs, advanced=2 Kredite/5 URLs\) |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
@@ -116,64 +98,6 @@ Extrahieren Sie Rohinhalt von mehreren Webseiten gleichzeitig mit Tavily
| --------- | ---- | ----------- |
| `results` | array | Die URL, die extrahiert wurde |
### `tavily_crawl`
Systematisches Crawlen und Extrahieren von Inhalten aus Websites mit Tavily
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Stamm-URL, bei der der Crawl beginnen soll |
| `instructions` | string | Nein | Anweisungen in natürlicher Sprache für den Crawler \(kostet 2 Kredite pro 10 Seiten\) |
| `max_depth` | number | Nein | Wie weit von der Basis-URL aus erkundet werden soll \(1-5, Standard: 1\) |
| `max_breadth` | number | Nein | Links, die pro Seitenebene verfolgt werden \(≥1, Standard: 20\) |
| `limit` | number | Nein | Gesamtzahl der verarbeiteten Links vor dem Stopp \(≥1, Standard: 50\) |
| `select_paths` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte URL-Pfade einzuschließen \(z.B. /docs/.*\) |
| `select_domains` | string | Nein | Kommagetrennte Regex-Muster, um das Crawlen auf bestimmte Domains zu beschränken |
| `exclude_paths` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte URL-Pfade zu überspringen |
| `exclude_domains` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte Domains zu blockieren |
| `allow_external` | boolean | Nein | Links zu externen Domains in die Ergebnisse einbeziehen \(Standard: true\) |
| `include_images` | boolean | Nein | Bilder in die Crawl-Ausgabe einbeziehen |
| `extract_depth` | string | Nein | Extraktionstiefe: basic \(1 Kredit/5 Seiten\) oder advanced \(2 Kredite/5 Seiten\) |
| `format` | string | Nein | Ausgabeformat: markdown oder text \(Standard: markdown\) |
| `include_favicon` | boolean | Nein | Favicon-URL für jedes Ergebnis hinzufügen |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `base_url` | string | Die Basis-URL, die durchsucht wurde |
| `results` | array | Die durchsuchte Seiten-URL |
### `tavily_map`
Entdecken und visualisieren der Website-Struktur mit Tavily
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Root-URL, bei der die Kartierung beginnen soll |
| `instructions` | string | Nein | Natürlichsprachliche Anleitung für das Kartierungsverhalten \(kostet 2 Kredite pro 10 Seiten\) |
| `max_depth` | number | Nein | Wie weit von der Basis-URL aus erkundet werden soll \(1-5, Standard: 1\) |
| `max_breadth` | number | Nein | Links, die pro Ebene verfolgt werden sollen \(Standard: 20\) |
| `limit` | number | Nein | Gesamtzahl der zu verarbeitenden Links \(Standard: 50\) |
| `select_paths` | string | Nein | Durch Kommas getrennte Regex-Muster für URL-Pfadfilterung \(z.B. /docs/.*\) |
| `select_domains` | string | Nein | Durch Kommas getrennte Regex-Muster, um die Kartierung auf bestimmte Domains zu beschränken |
| `exclude_paths` | string | Nein | Durch Kommas getrennte Regex-Muster, um bestimmte URL-Pfade auszuschließen |
| `exclude_domains` | string | Nein | Durch Kommas getrennte Regex-Muster, um Domains auszuschließen |
| `allow_external` | boolean | Nein | Externe Domain-Links in Ergebnisse einbeziehen \(Standard: true\) |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `base_url` | string | Die Basis-URL, die kartiert wurde |
| `results` | array | Entdeckte URL |
## Hinweise
- Kategorie: `tools`

View File

@@ -190,26 +190,6 @@ Senden Sie Animationen (GIFs) an Telegram-Kanäle oder Benutzer über die Telegr
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Telegram-Nachrichtendaten einschließlich optionaler Medien |
### `telegram_send_document`
Senden Sie Dokumente (PDF, ZIP, DOC, etc.) an Telegram-Kanäle oder -Nutzer über die Telegram Bot API.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
| `files` | file[] | Nein | Zu sendende Dokumentdatei \(PDF, ZIP, DOC, etc.\). Maximale Größe: 50MB |
| `caption` | string | Nein | Dokumentbeschreibung \(optional\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Telegram-Nachrichtendaten einschließlich Dokument |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,141 +0,0 @@
---
title: Twilio Voice
description: Telefonate tätigen und verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="twilio_voice"
color="#F22F46"
icon={true}
iconSvg={`<svg className="block-icon" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'>
<path
fill='currentColor'
d='M128 0c70.656 0 128 57.344 128 128s-57.344 128-128 128S0 198.656 0 128 57.344 0 128 0zm0 33.792c-52.224 0-94.208 41.984-94.208 94.208S75.776 222.208 128 222.208s94.208-41.984 94.208-94.208S180.224 33.792 128 33.792zm31.744 99.328c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm-63.488 0c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm63.488-63.488c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm-63.488 0c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624z'
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Twilio Voice](https://www.twilio.com/en-us/voice) ist eine leistungsstarke Cloud-Kommunikationsplattform, die es Unternehmen ermöglicht, Telefonate programmgesteuert über eine einfache API zu tätigen, zu empfangen und zu verwalten.
Twilio Voice bietet eine robuste API zum Erstellen anspruchsvoller Sprachanwendungen mit globaler Reichweite. Mit Abdeckung in über 100 Ländern, Carrier-Grade-Zuverlässigkeit und einer 99,95% Verfügbarkeits-SLA hat sich Twilio als Branchenführer im Bereich programmierbarer Sprachkommunikation etabliert.
Zu den wichtigsten Funktionen von Twilio Voice gehören:
- **Globales Sprachnetzwerk**: Weltweit Anrufe tätigen und empfangen mit lokalen Telefonnummern in mehreren Ländern
- **Programmierbare Anrufsteuerung**: Verwendung von TwiML zur Steuerung des Anrufablaufs, Aufzeichnung von Gesprächen, Erfassung von DTMF-Eingaben und Implementierung von IVR-Systemen
- **Erweiterte Funktionen**: Spracherkennung, Text-to-Speech, Anrufweiterleitung, Konferenzschaltung und Anrufbeantworter-Erkennung
- **Echtzeit-Analytik**: Überwachung von Anrufqualität, -dauer, -kosten und Optimierung Ihrer Sprachanwendungen
In Sim ermöglicht die Twilio Voice-Integration Ihren Agenten, diese leistungsstarken Sprachfunktionen als Teil ihrer Workflows zu nutzen. Dies schafft Möglichkeiten für anspruchsvolle Kundenbindungsszenarien wie Terminerinnerungen, Verifizierungsanrufe, automatisierte Support-Hotlines und interaktive Sprachdialogsysteme. Die Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Sprachkommunikationskanälen und ermöglicht es Ihren Agenten, zeitnahe, relevante Informationen direkt über Telefonanrufe zu liefern. Durch die Verbindung von Sim mit Twilio Voice können Sie intelligente Agenten erstellen, die Kunden über ihren bevorzugten Kommunikationskanal ansprechen, die Benutzererfahrung verbessern und gleichzeitig routinemäßige Anrufaufgaben automatisieren.
{/* MANUAL-CONTENT-END */}
## Gebrauchsanweisung
Integrieren Sie Twilio Voice in den Workflow. Tätigen Sie ausgehende Anrufe und rufen Sie Anrufaufzeichnungen ab.
## Tools
### `twilio_voice_make_call`
Tätigen Sie einen ausgehenden Anruf mit der Twilio Voice API.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | Anzurufende Telefonnummer \(E.164-Format, z.B. +14155551234\) |
| `from` | string | Ja | Ihre Twilio-Telefonnummer, von der aus angerufen wird \(E.164-Format\) |
| `url` | string | Nein | URL, die TwiML-Anweisungen für den Anruf zurückgibt |
| `twiml` | string | Nein | TwiML-Anweisungen zur Ausführung \(Alternative zur URL\). Verwenden Sie eckige Klammern anstelle von spitzen Klammern, z.B. \[Response\]\[Say\]Hello\[/Say\]\[/Response\] |
| `statusCallback` | string | Nein | Webhook-URL für Anrufstatus-Updates |
| `statusCallbackMethod` | string | Nein | HTTP-Methode für Status-Callback \(GET oder POST\) |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
| `record` | boolean | Nein | Ob der Anruf aufgezeichnet werden soll |
| `recordingStatusCallback` | string | Nein | Webhook-URL für Aufzeichnungsstatus-Updates |
| `timeout` | number | Nein | Wartezeit auf Antwort bevor aufgegeben wird \(Sekunden, Standard: 60\) |
| `machineDetection` | string | Nein | Anrufbeantworter-Erkennung: Enable oder DetectMessageEnd |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Anruf erfolgreich eingeleitet wurde |
| `callSid` | string | Eindeutige Kennung für den Anruf |
| `status` | string | Anrufstatus \(queued, ringing, in-progress, completed, usw.\) |
| `direction` | string | Anrufrichtung \(outbound-api\) |
| `from` | string | Telefonnummer, von der aus angerufen wird |
| `to` | string | Telefonnummer, die angerufen wird |
| `duration` | number | Anrufdauer in Sekunden |
| `price` | string | Kosten des Anrufs |
| `priceUnit` | string | Währung des Preises |
| `error` | string | Fehlermeldung, wenn der Anruf fehlgeschlagen ist |
### `twilio_voice_list_calls`
Rufen Sie eine Liste der Anrufe ab, die zu und von einem Konto getätigt wurden.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
| `to` | string | Nein | Nach Anrufen zu dieser Telefonnummer filtern |
| `from` | string | Nein | Nach Anrufen von dieser Telefonnummer filtern |
| `status` | string | Nein | Nach Anrufstatus filtern \(queued, ringing, in-progress, completed, etc.\) |
| `startTimeAfter` | string | Nein | Anrufe filtern, die an oder nach diesem Datum begonnen haben \(JJJJ-MM-TT\) |
| `startTimeBefore` | string | Nein | Anrufe filtern, die an oder vor diesem Datum begonnen haben \(JJJJ-MM-TT\) |
| `pageSize` | number | Nein | Anzahl der zurückzugebenden Datensätze \(max. 1000, Standard 50\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Anrufe erfolgreich abgerufen wurden |
| `calls` | array | Array von Anrufobjekten |
| `total` | number | Gesamtanzahl der zurückgegebenen Anrufe |
| `page` | number | Aktuelle Seitennummer |
| `pageSize` | number | Anzahl der Anrufe pro Seite |
| `error` | string | Fehlermeldung, wenn der Abruf fehlgeschlagen ist |
### `twilio_voice_get_recording`
Rufen Sie Anrufaufzeichnungsinformationen und Transkription ab (falls über TwiML aktiviert).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `recordingSid` | string | Ja | Abzurufende Recording SID |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
#### Output
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aufnahme erfolgreich abgerufen wurde |
| `recordingSid` | string | Eindeutige Kennung für die Aufnahme |
| `callSid` | string | Call SID, zu der diese Aufnahme gehört |
| `duration` | number | Dauer der Aufnahme in Sekunden |
| `status` | string | Aufnahmestatus \(completed, processing, usw.\) |
| `channels` | number | Anzahl der Kanäle \(1 für Mono, 2 für Dual\) |
| `source` | string | Wie die Aufnahme erstellt wurde |
| `mediaUrl` | string | URL zum Herunterladen der Aufnahmedatei |
| `price` | string | Kosten der Aufnahme |
| `priceUnit` | string | Währung des Preises |
| `uri` | string | Relativer URI der Aufnahmeressource |
| `transcriptionText` | string | Transkribierter Text aus der Aufnahme \(falls verfügbar\) |
| `transcriptionStatus` | string | Transkriptionsstatus \(completed, in-progress, failed\) |
| `transcriptionPrice` | string | Kosten der Transkription |
| `transcriptionPriceUnit` | string | Währung des Transkriptionspreises |
| `error` | string | Fehlermeldung, falls der Abruf fehlgeschlagen ist |
## Hinweise
- Kategorie: `tools`
- Typ: `twilio_voice`

View File

@@ -46,7 +46,7 @@ In Sim ermöglicht die Typeform-Integration Ihren Agenten, programmatisch mit Ih
## Nutzungsanleitung
Integriert Typeform in den Workflow. Kann Antworten abrufen, Dateien herunterladen und Formularstatistiken erhalten. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn ein Formular abgesendet wird. Erfordert API-Schlüssel.
Integrieren Sie Typeform in den Workflow. Kann Antworten abrufen, Dateien herunterladen und Formulareinblicke gewinnen. API-Schlüssel erforderlich.
## Tools
@@ -69,25 +69,9 @@ Formularantworten von Typeform abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `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 |
| `total_items` | number | Gesamtanzahl der Antworten |
| `page_count` | number | Gesamtanzahl der Seiten |
| `items` | json | Antwortelemente |
### `typeform_files`
@@ -129,129 +113,6 @@ Einblicke und Analysen für Typeform-Formulare abrufen
| --------- | ---- | ----------- |
| `fields` | array | Anzahl der Benutzer, die bei diesem Feld abgebrochen haben |
### `typeform_list_forms`
Eine Liste aller Formulare in Ihrem Typeform-Konto abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `search` | string | Nein | Suchanfrage zum Filtern von Formularen nach Titel |
| `page` | number | Nein | Seitennummer \(Standard: 1\) |
| `pageSize` | number | Nein | Anzahl der Formulare pro Seite \(Standard: 10, max: 200\) |
| `workspaceId` | string | Nein | Formulare nach Workspace-ID filtern |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `total_items` | number | Gesamtanzahl der Formulare im Konto |
| `page_count` | number | Gesamtanzahl der verfügbaren Seiten |
| `items` | array | Array von Formularobjekten |
### `typeform_get_form`
Vollständige Details und Struktur eines bestimmten Formulars abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Formular-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `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-Konfiguration mit Farben, Schriftarten und Design-Einstellungen |
| `workspace` | object | Workspace-Informationen |
### `typeform_create_form`
Ein neues Formular mit Feldern und Einstellungen erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `title` | string | Ja | Formulartitel |
| `type` | string | Nein | Formulartyp \(Standard: "form"\). Optionen: "form", "quiz" |
| `workspaceId` | string | Nein | Workspace-ID, in der das Formular erstellt werden soll |
| `fields` | json | Nein | Array von Feldobjekten, die die Formularstruktur definieren. Jedes Feld benötigt: Typ, Titel und optionale Eigenschaften/Validierungen |
| `settings` | json | Nein | Formulareinstellungsobjekt \(Sprache, Fortschrittsbalken, etc.\) |
| `themeId` | string | Nein | Theme-ID, die auf das Formular angewendet werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `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 |
### `typeform_update_form`
Ein bestehendes Formular mit JSON Patch-Operationen aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Kennung des zu aktualisierenden Formulars |
| `operations` | json | Ja | Array von JSON Patch-Operationen \(RFC 6902\). Jede Operation benötigt: op \(add/remove/replace\), path und value \(für add/replace\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `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-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`
Ein Formular und alle seine Antworten dauerhaft löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Kennung des zu löschenden Formulars |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob das Formular erfolgreich gelöscht wurde |
| `message` | string | Löschbestätigungsnachricht |
## Hinweise
- Kategorie: `tools`

View File

@@ -59,9 +59,8 @@ Verarbeiten und analysieren Sie Bilder mit fortschrittlichen Vision-Modellen. F
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | API-Schlüssel für den ausgewählten Modellanbieter |
| `imageUrl` | string | Nein | Öffentlich zugängliche Bild-URL |
| `imageFile` | file | Nein | Zu analysierende Bilddatei |
| `model` | string | Nein | Zu verwendendes Vision-Modell \(gpt-4o, claude-3-opus-20240229, usw.\) |
| `imageUrl` | string | Ja | Öffentlich zugängliche Bild-URL |
| `model` | string | Nein | Zu verwendendes Vision-Modell \(gpt-4o, claude-3-opus-20240229, etc\) |
| `prompt` | string | Nein | Benutzerdefinierte Eingabeaufforderung für die Bildanalyse |
#### Ausgabe

View File

@@ -1,145 +0,0 @@
---
title: Webflow
description: Webflow CMS-Sammlungen verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="webflow"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
viewBox='0 0 1080 674'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M1080 0L735.386 673.684H411.695L555.916 394.481H549.445C430.464 548.934 252.942 650.61 -0.000488281 673.684V398.344C-0.000488281 398.344 161.813 388.787 256.938 288.776H-0.000488281V0.0053214H288.771V237.515L295.252 237.489L413.254 0.0053214H631.644V236.009L638.126 235.999L760.555 0H1080Z'
fill='#146EF5'
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Webflow](https://webflow.com/) ist eine leistungsstarke visuelle Webdesign-Plattform, mit der Sie responsive Websites ohne Programmierung erstellen können. Sie kombiniert eine visuelle Design-Oberfläche mit einem robusten CMS (Content Management System), das es Ihnen ermöglicht, dynamische Inhalte für Ihre Websites zu erstellen, zu verwalten und zu veröffentlichen.
Mit Webflow können Sie:
- **Visuell gestalten**: Erstellen Sie benutzerdefinierte Websites mit einem visuellen Editor, der sauberen, semantischen HTML/CSS-Code generiert
- **Inhalte dynamisch verwalten**: Nutzen Sie das CMS, um Sammlungen strukturierter Inhalte wie Blogbeiträge, Produkte, Teammitglieder oder beliebige benutzerdefinierte Daten zu erstellen
- **Sofort veröffentlichen**: Stellen Sie Ihre Websites auf Webflows Hosting bereit oder exportieren Sie den Code für benutzerdefiniertes Hosting
- **Responsive Designs erstellen**: Bauen Sie Websites, die nahtlos auf Desktop, Tablet und Mobilgeräten funktionieren
- **Sammlungen anpassen**: Definieren Sie benutzerdefinierte Felder und Datenstrukturen für Ihre Inhaltstypen
- **Inhaltsaktualisierungen automatisieren**: Verwalten Sie Ihre CMS-Inhalte programmgesteuert über APIs
In Sim ermöglicht die Webflow-Integration Ihren Agenten, nahtlos mit Ihren Webflow-CMS-Sammlungen über API-Authentifizierung zu interagieren. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das automatische Erstellen von Blogbeiträgen aus KI-generierten Inhalten, das Aktualisieren von Produktinformationen, das Verwalten von Teammitgliederprofilen und das Abrufen von CMS-Elementen für die dynamische Inhaltsgenerierung. Ihre Agenten können vorhandene Elemente auflisten, um Ihre Inhalte zu durchsuchen, bestimmte Elemente nach ID abrufen, neue Einträge erstellen, um frische Inhalte hinzuzufügen, bestehende Elemente aktualisieren, um Informationen aktuell zu halten, und veraltete Inhalte löschen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Ihrem Webflow-CMS und ermöglicht automatisierte Inhaltsverwaltung, dynamische Website-Aktualisierungen und optimierte Inhalts-Workflows, die Ihre Websites ohne manuelles Eingreifen frisch und aktuell halten.
{/* MANUAL-CONTENT-END */}
## Gebrauchsanweisung
Integriert Webflow CMS in den Workflow. Kann Elemente in Webflow CMS-Sammlungen erstellen, abrufen, auflisten, aktualisieren oder löschen. Verwalten Sie Ihre Webflow-Inhalte programmatisch. Kann im Trigger-Modus verwendet werden, um Workflows auszulösen, wenn sich Sammlungselemente ändern oder Formulare übermittelt werden.
## Tools
### `webflow_list_items`
Alle Elemente aus einer Webflow CMS-Sammlung auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `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\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | json | Array von Sammlungselementen |
| `metadata` | json | Metadaten über die Abfrage |
### `webflow_get_item`
Ein einzelnes Element aus einer Webflow CMS-Sammlung abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `itemId` | string | Ja | ID des abzurufenden Elements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das abgerufene Elementobjekt |
| `metadata` | json | Metadaten über das abgerufene Element |
### `webflow_create_item`
Ein neues Element in einer Webflow CMS-Sammlung erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `fieldData` | json | Ja | Felddaten für das neue Element als JSON-Objekt. Die Schlüssel sollten mit den Feldnamen der Sammlung übereinstimmen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das erstellte Element-Objekt |
| `metadata` | json | Metadaten über das erstellte Element |
### `webflow_update_item`
Ein vorhandenes Element in einer Webflow CMS-Sammlung aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `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. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das aktualisierte Element-Objekt |
| `metadata` | json | Metadaten über das aktualisierte Element |
### `webflow_delete_item`
Ein Element aus einer Webflow CMS-Sammlung löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `itemId` | string | Ja | ID des zu löschenden Elements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Löschung erfolgreich war |
| `metadata` | json | Metadaten über die Löschung |
## Hinweise
- Kategorie: `tools`
- Typ: `webflow`

View File

@@ -39,32 +39,21 @@ In Sim ermöglicht die YouTube-Integration Ihren Agenten, YouTube-Inhalte progra
## Gebrauchsanweisung
Integrieren Sie YouTube in den Workflow. Kann Videos suchen, Videodetails abrufen, Kanalinformationen abrufen, alle Videos eines Kanals abrufen, Kanal-Playlists abrufen, Playlist-Elemente abrufen, verwandte Videos finden und Videokommentare abrufen.
Integriere YouTube in den Workflow. Kann nach Videos suchen, Videodetails abrufen, Kanalinformationen abrufen, Playlist-Elemente abrufen und Videokommentare abrufen.
## Tools
### `youtube_search`
Suchen Sie nach Videos auf YouTube mit der YouTube Data API. Unterstützt erweiterte Filterung nach Kanal, Datumsbereich, Dauer, Kategorie, Qualität, Untertiteln und mehr.
Suche nach Videos auf YouTube mit der YouTube Data API.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Suchanfrage für YouTube-Videos |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos (1-50) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
| `channelId` | string | Nein | Filtert Ergebnisse nach einer bestimmten YouTube-Kanal-ID |
| `publishedAfter` | string | Nein | Nur Videos zurückgeben, die nach diesem Datum veröffentlicht wurden (RFC 3339-Format: "2024-01-01T00:00:00Z") |
| `publishedBefore` | string | Nein | Nur Videos zurückgeben, die vor diesem Datum veröffentlicht wurden (RFC 3339-Format: "2024-01-01T00:00:00Z") |
| `videoDuration` | string | Nein | Nach Videolänge filtern: "short" (weniger als 4 Minuten), "medium" (4-20 Minuten), "long" (mehr als 20 Minuten), "any" |
| `order` | string | Nein | Ergebnisse sortieren nach: "date", "rating", "relevance" (Standard), "title", "videoCount", "viewCount" |
| `videoCategoryId` | string | Nein | Nach YouTube-Kategorie-ID filtern (z.B. "10" für Musik, "20" für Gaming) |
| `videoDefinition` | string | Nein | Nach Videoqualität filtern: "high" (HD), "standard", "any" |
| `videoCaption` | string | Nein | Nach Untertitelverfügbarkeit filtern: "closedCaption" (hat Untertitel), "none" (keine Untertitel), "any" |
| `regionCode` | string | Nein | Ergebnisse zurückgeben, die für eine bestimmte Region relevant sind (ISO 3166-1 alpha-2 Ländercode, z.B. "US", "GB") |
| `relevanceLanguage` | string | Nein | Ergebnisse zurückgeben, die für eine Sprache am relevantesten sind (ISO 639-1 Code, z.B. "en", "es") |
| `safeSearch` | string | Nein | Inhaltsfilterungsstufe: "moderate" (Standard), "none", "strict" |
#### Ausgabe
@@ -126,45 +115,6 @@ Erhalte detaillierte Informationen über einen YouTube-Kanal.
| `thumbnail` | string | URL des Kanal-Thumbnails |
| `customUrl` | string | Benutzerdefinierte Kanal-URL |
### `youtube_channel_videos`
Alle Videos von einem bestimmten YouTube-Kanal abrufen, mit Sortieroptionen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `channelId` | string | Ja | YouTube-Kanal-ID, von der Videos abgerufen werden sollen |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos \(1-50\) |
| `order` | string | Nein | Sortierreihenfolge: "date" \(neueste zuerst\), "rating", "relevance", "title", "viewCount" |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | array | Array von Videos des Kanals |
### `youtube_channel_playlists`
Alle Playlists von einem bestimmten YouTube-Kanal abrufen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `channelId` | string | Ja | YouTube-Kanal-ID, von der Playlists abgerufen werden sollen |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Playlists \(1-50\) |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | array | Array von Playlists des Kanals |
### `youtube_playlist_items`
Videos aus einer YouTube-Playlist abrufen.
@@ -175,7 +125,7 @@ Videos aus einer YouTube-Playlist abrufen.
| --------- | ---- | -------- | ----------- |
| `playlistId` | string | Ja | YouTube-Playlist-ID |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `pageToken` | string | Nein | Page-Token für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
@@ -184,28 +134,9 @@ 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`
Rufe Kommentare von einem YouTube-Video ab.
Kommentare von einem YouTube-Video abrufen.
#### Eingabe

View File

@@ -1,242 +0,0 @@
---
title: Zep
description: Langzeitgedächtnis für KI-Agenten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="zep"
color="#E8E8E8"
icon={true}
iconSvg={`<svg className="block-icon"
xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 233 196'
>
<path
d='m231.34,108.7l-1.48-1.55h-10.26l3.59-75.86-14.8-.45-2.77,49.31c-59.6-3.24-119.33-3.24-178.92-.02l-1.73-64.96-14.8.45,2.5,91.53H2.16l-1.41,1.47c-1.55,16.23-.66,32.68,2.26,48.89h10.83l.18,1.27c.67,19.34,16.1,34.68,35.9,34.68s44.86-.92,66.12-.92,46.56.92,65.95.92,35.19-15.29,35.9-34.61l.16-1.34h11.02c2.91-16.19,3.81-32.61,2.26-48.81Zm-158.23,58.01c-17.27,0-30.25-13.78-30.25-29.78s12.99-29.78,30.25-29.78,29.62,13.94,29.62,29.94-12.35,29.62-29.62,29.62Zm86.51,0c-17.27,0-30.25-13.78-30.25-29.78s12.99-29.78,30.25-29.78,29.62,13.94,29.62,29.94-12.35,29.62-29.62,29.62Z'
fill='#FF1493'
/>
<polygon
points='111.77 22.4 93.39 49.97 93.52 50.48 185.88 38.51 190.95 27.68 114.32 36.55 117.7 31.48 117.7 31.47 138.38 .49 138.25 0 47.67 11.6 42.85 22.27 118.34 12.61 111.77 22.4'
fill='#FF1493'
/>
<path
d='m72.97,121.47c-8.67,0-15.73,6.93-15.73,15.46s7.06,15.46,15.73,15.46,15.37-6.75,15.37-15.37-6.75-15.55-15.37-15.55Z'
fill='#FF1493'
/>
<path
d='m159.48,121.47c-8.67,0-15.73,6.93-15.73,15.46s7.06,15.46,15.73,15.46,15.37-6.75,15.37-15.37-6.75-15.55-15.37-15.55Z'
fill='#FF1493'
/>
</svg>`}
/>
## Nutzungsanleitung
Integriere Zep für Langzeitgedächtnisverwaltung. Erstelle Threads, füge Nachrichten hinzu, rufe Kontext mit KI-gestützten Zusammenfassungen und Faktenextraktion ab.
## Tools
### `zep_create_thread`
Starte einen neuen Konversations-Thread in Zep
#### Input
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Eindeutige Kennung für den Thread |
| `userId` | string | Ja | Benutzer-ID, die mit dem Thread verknüpft ist |
| `apiKey` | string | Ja | Dein Zep API-Schlüssel |
#### Output
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threadId` | string | Die Thread-ID |
| `userId` | string | Die Benutzer-ID |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `projectUuid` | string | Projekt-UUID |
### `zep_get_threads`
Liste alle Konversations-Threads auf
#### Input
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `pageSize` | number | Nein | Anzahl der Threads, die pro Seite abgerufen werden sollen |
| `pageNumber` | number | Nein | Seitennummer für Paginierung |
| `orderBy` | string | Nein | Feld, nach dem die Ergebnisse sortiert werden sollen \(created_at, updated_at, user_id, thread_id\) |
| `asc` | boolean | Nein | Sortierrichtung: true für aufsteigend, false für absteigend |
| `apiKey` | string | Ja | Dein Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threads` | array | Array von Thread-Objekten |
| `responseCount` | number | Anzahl der Threads in dieser Antwort |
| `totalCount` | number | Gesamtanzahl der verfügbaren Threads |
### `zep_delete_thread`
Einen Konversations-Thread aus Zep löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID zum Löschen |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob der Thread gelöscht wurde |
### `zep_get_context`
Benutzerkontext aus einem Thread mit Zusammenfassungs- oder Basismodus abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, aus der der Kontext abgerufen werden soll |
| `mode` | string | Nein | Kontextmodus: "summary" \(natürliche Sprache\) oder "basic" \(rohe Fakten\) |
| `minRating` | number | Nein | Mindestbewertung, nach der relevante Fakten gefiltert werden |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `context` | string | Der Kontextstring \(Zusammenfassung oder Basis\) |
| `facts` | array | Extrahierte Fakten |
| `entities` | array | Extrahierte Entitäten |
| `summary` | string | Konversationszusammenfassung |
### `zep_get_messages`
Nachrichten aus einem Thread abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, aus der Nachrichten abgerufen werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Nachrichten |
| `cursor` | string | Nein | Cursor für Paginierung |
| `lastn` | number | Nein | Anzahl der neuesten Nachrichten, die zurückgegeben werden sollen \(überschreibt Limit und Cursor\) |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `messages` | array | Array von Nachrichtenobjekten |
| `rowCount` | number | Anzahl der Nachrichten in dieser Antwort |
| `totalCount` | number | Gesamtanzahl der Nachrichten im Thread |
### `zep_add_messages`
Nachrichten zu einem bestehenden Thread hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, zu der Nachrichten hinzugefügt werden sollen |
| `messages` | json | Ja | Array von Nachrichtenobjekten mit Rolle und Inhalt |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `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`
Einen neuen Benutzer in Zep erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Eindeutige Kennung für den Benutzer |
| `email` | string | Nein | E-Mail-Adresse des Benutzers |
| `firstName` | string | Nein | Vorname des Benutzers |
| `lastName` | string | Nein | Nachname des Benutzers |
| `metadata` | json | Nein | Zusätzliche Metadaten als JSON-Objekt |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `userId` | string | Die Benutzer-ID |
| `email` | string | E-Mail des Benutzers |
| `firstName` | string | Vorname des Benutzers |
| `lastName` | string | Nachname des Benutzers |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `metadata` | object | Benutzermetadaten |
### `zep_get_user`
Benutzerinformationen von Zep abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Zu abzurufende Benutzer-ID |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `userId` | string | Die Benutzer-ID |
| `email` | string | E-Mail des Benutzers |
| `firstName` | string | Vorname des Benutzers |
| `lastName` | string | Nachname des Benutzers |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `updatedAt` | string | Zeitstempel der letzten Aktualisierung |
| `metadata` | object | Benutzermetadaten |
### `zep_get_user_threads`
Alle Konversations-Threads für einen bestimmten Benutzer auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Benutzer-ID, für die Threads abgerufen werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Threads |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threads` | array | Array von Thread-Objekten für diesen Benutzer |
| `userId` | string | Die Benutzer-ID |
## Hinweise
- Kategorie: `tools`
- Typ: `zep`

View File

@@ -0,0 +1,187 @@
---
title: API-Trigger
description: Starten Sie einen Workflow über eine authentifizierte HTTP-Anfrage
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der API-Trigger stellt Ihren Workflow als sicheren HTTP-Endpunkt bereit. Senden Sie JSON-Daten an den Endpunkt und Ihr Workflow verarbeitet diese sofort. API-Aufrufe werden immer gegen Ihre neueste Bereitstellung ausgeführt.
## Eingabeformat konfigurieren
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='API-Trigger Eingabeformat'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Fügen Sie für jeden Parameter ein Feld **Eingabeformat** hinzu. Die Ausgabeschlüssel zur Laufzeit spiegeln das Schema wider und sind auch unter `<api.input>` verfügbar.
Manuelle Ausführungen im Editor verwenden die Spalte `value`, damit Sie testen können, ohne eine Anfrage zu senden. Während der Ausführung füllt der Resolver sowohl `<api.userId>` als auch `<api.input.userId>` aus.
## Anfrage-Beispiel
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
Erfolgreiche Antworten geben das serialisierte Ausführungsergebnis vom Executor zurück. Fehler zeigen Validierungs-, Authentifizierungs- oder Workflow-Fehler an.
## Streaming-Antworten
Aktivieren Sie Echtzeit-Streaming, um Workflow-Ausgaben zu erhalten, während sie zeichen-für-zeichen generiert werden. Dies ist nützlich, um KI-Antworten progressiv für Benutzer anzuzeigen.
### Anfrageparameter
Fügen Sie diese Parameter hinzu, um Streaming zu aktivieren:
- `stream` - Auf `true` setzen, um Server-Sent Events (SSE) Streaming zu aktivieren
- `selectedOutputs` - Array von Block-Ausgaben zum Streamen (z.B. `["agent1.content"]`)
### Block-Ausgabeformat
Verwenden Sie das `blockName.attribute` Format, um anzugeben, welche Block-Ausgaben gestreamt werden sollen:
- Format: `"blockName.attribute"` (z.B. Wenn Sie den Inhalt des Agent 1-Blocks streamen möchten, würden Sie `"agent1.content"` verwenden)
- Blocknamen sind nicht case-sensitive und Leerzeichen werden ignoriert
### Beispielanfrage
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{
"message": "Count to five",
"stream": true,
"selectedOutputs": ["agent1.content"]
}'
```
### Antwortformat
Streaming-Antworten verwenden das Server-Sent Events (SSE) Format:
```
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", two"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", three"}
data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}
data: [DONE]
```
Jedes Ereignis enthält:
- **Streaming-Chunks**: `{"blockId": "...", "chunk": "text"}` - Echtzeit-Text während er generiert wird
- **Abschlussereignis**: `{"event": "done", ...}` - Ausführungsmetadaten und vollständige Ergebnisse
- **Terminator**: `[DONE]` - Signalisiert das Ende des Streams
### Streaming mehrerer Blöcke
Wenn `selectedOutputs` mehrere Blöcke enthält, zeigt jeder Chunk an, welcher Block ihn erzeugt hat:
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{
"message": "Process this request",
"stream": true,
"selectedOutputs": ["agent1.content", "agent2.content"]
}'
```
Das Feld `blockId` in jedem Chunk ermöglicht es Ihnen, die Ausgabe zum richtigen UI-Element zu leiten:
```
data: {"blockId":"agent1-uuid","chunk":"Processing..."}
data: {"blockId":"agent2-uuid","chunk":"Analyzing..."}
data: {"blockId":"agent1-uuid","chunk":" complete"}
```
## Ausgabereferenz
| Referenz | Beschreibung |
|-----------|-------------|
| `<api.field>` | Im Eingabeformat definiertes Feld |
| `<api.input>` | Gesamter strukturierter Anfragekörper |
Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `<api.input>` zur Verfügung.
<Callout type="warning">
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
</Callout>
### Datei-Upload-Format
Die API akzeptiert Dateien in zwei Formaten:
**1. Base64-kodierte Dateien** (empfohlen für SDKs):
```json
{
"documents": [{
"type": "file",
"data": "data:application/pdf;base64,JVBERi0xLjQK...",
"name": "document.pdf",
"mime": "application/pdf"
}]
}
```
- Maximale Dateigröße: 20MB pro Datei
- Dateien werden in den Cloud-Speicher hochgeladen und in UserFile-Objekte mit allen Eigenschaften umgewandelt
**2. Direkte URL-Referenzen**:
```json
{
"documents": [{
"type": "url",
"data": "https://example.com/document.pdf",
"name": "document.pdf",
"mime": "application/pdf"
}]
}
```
- Die Datei wird nicht hochgeladen, die URL wird direkt weitergegeben
- Nützlich für die Referenzierung bestehender Dateien
### Dateieigenschaften
Für Dateien können alle Eigenschaften abgerufen werden:
| Eigenschaft | Beschreibung | Typ |
|----------|-------------|------|
| `<api.fieldName[0].url>` | Signierte Download-URL | string |
| `<api.fieldName[0].name>` | Ursprünglicher Dateiname | string |
| `<api.fieldName[0].size>` | Dateigröße in Bytes | number |
| `<api.fieldName[0].type>` | MIME-Typ | string |
| `<api.fieldName[0].uploadedAt>` | Upload-Zeitstempel (ISO 8601) | string |
| `<api.fieldName[0].expiresAt>` | URL-Ablaufzeitstempel (ISO 8601) | string |
Für URL-referenzierte Dateien sind dieselben Eigenschaften verfügbar, außer `uploadedAt` und `expiresAt`, da die Datei nicht in unseren Speicher hochgeladen wird.
Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `<api.input>` zur Verfügung.
<Callout type="warning">
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
</Callout>

View File

@@ -0,0 +1,51 @@
---
title: Chat-Auslöser
description: Starten Sie einen Workflow aus einer Chat-Bereitstellung
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der Chat-Auslöser erstellt eine Konversationsschnittstelle für Ihren Workflow. Stellen Sie Ihren Workflow als Chat bereit, und Benutzer können über eine teilbare URL damit interagieren. Jede Nachricht startet eine neue Workflow-Ausführung mit Ihrer neuesten Bereitstellung.
## Laufzeit-Ausgaben
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='Chat-Bereitstellungskonversation'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Der Auslöser schreibt drei Felder, auf die nachfolgende Blöcke verweisen können:
| Referenz | Beschreibung |
|-----------|-------------|
| `<chat.input>` | Neueste Benutzernachricht |
| `<chat.conversationId>` | Konversations-Thread-ID |
| `<chat.files>` | Optionale hochgeladene Dateien |
Dateien enthalten `name`, `mimeType` und einen signierten Download `url`.
## Nutzungshinweise
1. Fügen Sie einen Chat-Auslöser-Block pro Workflow hinzu.
2. Stellen Sie den Workflow im Chat-Modus bereit.
3. Teilen Sie den Bereitstellungslink jede Antwort verwendet die Konversations-ID wieder, sodass der Workflow den Kontext beibehalten kann.
<Callout type="info">
Der Builder blockiert mehrere Chat-Auslöser-Blöcke im selben Workflow.
</Callout>
1. Fügen Sie einen Chat-Trigger-Block pro Workflow hinzu.
2. Stellen Sie den Workflow im Chat-Modus bereit.
3. Teilen Sie den Bereitstellungslink jede Antwort verwendet die Konversations-ID wieder, damit der Workflow den Kontext beibehalten kann.
<Callout type="info">
Der Builder blockiert mehrere Chat-Trigger-Blöcke im selben Workflow.
</Callout>

View File

@@ -1,40 +1,52 @@
---
title: Übersicht
description: Trigger sind die grundlegenden Möglichkeiten, um Sim-Workflows zu starten
title: Auslöser
description: Grundlegende Möglichkeiten, Sim-Workflows zu starten
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## Kern-Auslöser
Verwende den Start-Block für alles, was vom Editor, von Deploy-to-API oder von Deploy-to-Chat-Erfahrungen ausgeht. Andere Trigger bleiben für ereignisgesteuerte Workflows verfügbar:
Wähle einen Auslöser pro Workflow, um zu definieren, wie er startet:
<Cards>
<Card title="Start" href="/triggers/start">
Einheitlicher Einstiegspunkt, der Editor-Ausführungen, API-Bereitstellungen und Chat-Bereitstellungen unterstützt
<Card title="API" href="/triggers/api">
HTTP-Endpunkt, der JSON-Bodies in Workflow-Eingaben umwandelt
</Card>
<Card title="Chat" href="/triggers/chat">
Bereitgestellte Chat-Oberfläche mit Streaming-Antworten
</Card>
<Card title="Eingabeformular" href="/triggers/input-form">
Typisierte manuelle Eingabe für Editor-Ausführungen und Unterworkflows
</Card>
<Card title="Manuell" href="/triggers/manual">
Bedarfsgesteuerte Ausführungen ohne zusätzliche Daten
</Card>
<Card title="Zeitplan" href="/triggers/schedule">
Cron- oder intervallbasierte Ausführung
</Card>
<Card title="Webhook" href="/triggers/webhook">
Externe Webhook-Payloads empfangen
</Card>
<Card title="Schedule" href="/triggers/schedule">
Cron- oder intervallbasierte Ausführung
</Card>
</Cards>
## Schneller Vergleich
| Auslöser | Startbedingung |
|---------|-----------------|
| **Start** | Editor läuft, Deploy-to-API-Anfragen oder Chat-Nachrichten |
| **Schedule** | Timer, der im Zeitplanblock verwaltet wird |
| **Webhook** | Bei eingehender HTTP-Anfrage |
| **API** | Authentifizierter HTTP POST |
| **Chat** | Chat-Deployment-Nachricht |
| **Eingabeformular** | Bei manueller Übermittlung im Editor oder übergeordneten Workflow |
| **Manuell** | Ausführen-Schaltfläche im Editor |
| **Zeitplan** | Timer, der im Zeitplan-Modal verwaltet wird |
| **Webhook** | Bei eingehendem HTTP-Request |
> Der Start-Block stellt immer `input`, `conversationId` und `files`Felder bereit. Füge benutzerdefinierte Felder zum Eingabeformat für zusätzliche strukturierte Daten hinzu.
## Verwendung von Auslösern
## Verwendung von Triggern
1. Platziere den Start-Block im Startslot (oder einen alternativen Trigger wie Webhook/Schedule).
2. Konfiguriere alle erforderlichen Schema- oder Authentifizierungseinstellungen.
1. Platziere den Auslöser-Block im Startslot.
2. Konfiguriere alle erforderlichen Schemas oder Authentifizierungen.
3. Verbinde den Block mit dem Rest des Workflows.
> Bereitstellungen unterstützen jeden Trigger. Aktualisiere den Workflow, stelle ihn erneut bereit, und alle Trigger-Einstiegspunkte übernehmen den neuen Snapshot. Erfahre mehr unter [Ausführung → Bereitstellungs-Snapshots](/execution).
> Deployments unterstützen jeden Auslöser. Aktualisiere den Workflow, stelle ihn neu bereit, und alle Auslöser-Einstiegspunkte übernehmen den neuen Snapshot. Erfahre mehr unter [Ausführung → Deployment-Snapshots](/execution).
Legacy-Starter-Blöcke bleiben für bestehende Flows erhalten, erscheinen aber nicht mehr in neuen Builds.

View File

@@ -0,0 +1,52 @@
---
title: Eingabeformular-Trigger
description: Manueller Trigger mit einem strukturierten Eingabeschema
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Verwenden Sie einen Eingabeformular-Trigger, wenn ein Workflow vom Editor aus mit typisierten Feldern gestartet werden soll. Das Ausführungspanel zeigt genau die Felder an, die Sie definieren, sodass der Workflow immer saubere Daten erhält.
## Was Sie definieren
Fügen Sie Felder im Eingabeformat-Builder hinzu (Text, Zahl, Boolean, JSON usw.). Für jedes Feld:
- Der Wert erscheint als `<blockName.field>` im Workflow.
- Die vollständige Nutzlast wird zur Vereinfachung unter `<blockName.input>` gespiegelt.
Wenn Sie das Formular leer lassen, hat der Trigger keine Ausgaben.
## Manuelle Ausführungen
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='Eingabeformular-Ausführungspanel'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Wenn Sie im Editor auf Ausführen drücken, rendert das Panel das Formular. Übermittelte Werte fließen direkt in die Trigger-Ausgabe ein, sodass nachgelagerte Blöcke darauf verweisen können, ohne zusätzliches Parsing. Zahlen werden in Zahlentypen umgewandelt, Booleans werden zu true/false, und JSON-Felder werden geparst, bevor der Workflow sie verarbeitet.
## Untergeordnete Workflows
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='Workflow-Eingabezuordnung'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Eingabeformular-Trigger steuern auch den Workflow-Block. Wenn Sie einen untergeordneten Workflow einbetten, zeigt der Zuordnungsschritt die Formularfelder des untergeordneten Workflows an, sodass Sie Variablen aus dem übergeordneten Workflow verbinden können. Was auch immer Sie zuordnen, wird zur Eingabeformular-Übermittlung des untergeordneten Workflows.
<Callout>
Benötigen Sie eine schnelle Ausführungsschaltfläche ohne Felder? Verwenden Sie einen manuellen Trigger. Wählen Sie Eingabeformular, wenn Sie Validierung und eine vorhersehbare Struktur wünschen.
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: Manueller Auslöser
description: Führen Sie einen Workflow auf Anforderung ohne Eingaben aus
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der manuelle Auslöser fügt einen einfachen Ausführen-Button am Anfang Ihres Workflows hinzu. Verwenden Sie ihn, wenn Sie den Workflow sofort ausführen möchten, ohne zusätzliche Daten zu sammeln.
## Funktionsweise
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='Ausführen-Button für manuellen Auslöser'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- Startet den Workflow mit dem aktiven Deployment-Snapshot
- Sendet keine Nutzlast nachgelagerte Blöcke sehen nur, was sie bereits konfiguriert haben
- Perfekt für schnelle Plausibilitätsprüfungen, Smoke-Tests oder Abläufe, die nur auf internen Variablen basieren
## Anwendungsfälle
- Starten Sie einen Workflow nach der Veröffentlichung eines neuen Deployments, um zu bestätigen, dass alles noch funktioniert
- Führen Sie Wartungsaufgaben aus, die keine externe Eingabe erfordern
- Lösen Sie untergeordnete Workflows aus, die nur Status- oder Umgebungsvariablen lesen
## Vergleich mit Eingabeformular
Benötigen Sie strukturierte Werte oder Typvalidierung zur Laufzeit? Wechseln Sie stattdessen zu einem Eingabeformular-Auslöser das Ausführungspanel sammelt diese Felder, bevor der Workflow startet.
<Callout>
Manuelle Auslöser-Ausführungen überschreiben nicht Ihren Deployment-Verlauf. Aktualisieren und stellen Sie neu bereit, wenn Canvas-Änderungen live gehen sollen.
</Callout>

View File

@@ -1,97 +0,0 @@
---
title: Start
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
Der Start-Block ist der Standard-Auslöser für Workflows, die in Sim erstellt werden. Er sammelt strukturierte Eingaben und verteilt sie an den Rest deines Graphen für Editor-Tests, API-Bereitstellungen und Chat-Erlebnisse.
<div className="flex justify-center">
<Image
src="/static/start.png"
alt="Start-Block mit Eingabeformat-Feldern"
width={360}
height={380}
className="my-6"
/>
</div>
<Callout type="info">
Der Start-Block befindet sich in der Startposition, wenn du einen Workflow erstellst. Behalte ihn dort, wenn du denselben Einstiegspunkt für Editor-Ausführungen, Deploy-to-API-Anfragen und Chat-Sitzungen verwenden möchtest. Tausche ihn mit Webhook- oder Schedule-Triggern aus, wenn du nur ereignisgesteuerte Ausführung benötigst.
</Callout>
## Von Start bereitgestellte Felder
Der Start-Block gibt je nach Ausführungsumgebung unterschiedliche Daten aus:
- **Eingabeformat-Felder** — Jedes Feld, das du hinzufügst, wird als <code>&lt;start.fieldName&gt;</code> verfügbar. Zum Beispiel erscheint ein `customerId`Feld als <code>&lt;start.customerId&gt;</code> in nachgelagerten Blöcken und Vorlagen.
- **Nur-Chat-Felder** — Wenn der Workflow über das Chat-Seitenfeld oder ein bereitgestelltes Chat-Erlebnis ausgeführt wird, stellt Sim auch <code>&lt;start.input&gt;</code> (neueste Benutzernachricht), <code>&lt;start.conversationId&gt;</code> (aktive Sitzungs-ID) und <code>&lt;start.files&gt;</code> (Chat-Anhänge) bereit.
Halte die Eingabeformat-Felder auf die Namen beschränkt, auf die du später verweisen möchtest diese Werte sind die einzigen strukturierten Felder, die über Editor-, API- und Chat-Ausführungen hinweg geteilt werden.
## Konfiguriere das Eingabeformat
Verwende den Eingabeformat-Unterblock, um das Schema zu definieren, das für alle Ausführungsmodi gilt:
1. Füge ein Feld für jeden Wert hinzu, den du sammeln möchtest.
2. Wähle einen Typ (`string`, `number`, `boolean`, `object`, `array` oder `files`). Dateifelder akzeptieren Uploads von Chat- und API-Aufrufern.
3. Gib Standardwerte an, wenn du möchtest, dass das manuelle Ausführungsmodal automatisch Testdaten einfügt. Diese Standardwerte werden für bereitgestellte Ausführungen ignoriert.
4. Ordne Felder neu an, um zu steuern, wie sie im Editor-Formular erscheinen.
Referenzieren Sie strukturierte Werte nachgelagert mit Ausdrücken wie <code>&lt;start.customerId&gt;</code> abhängig vom Block, den Sie verbinden.
## Wie es sich je nach Einstiegspunkt verhält
<Tabs items={['Editor-Ausführung', 'Bereitstellung als API', 'Bereitstellung für Chat']}>
<Tab>
<div className="space-y-3">
<p>
Wenn Sie im Editor auf <strong>Ausführen</strong> klicken, rendert der Start-Block das Eingabeformat als Formular. Standardwerte erleichtern das erneute Testen ohne erneute Dateneingabe. Durch das Absenden des Formulars wird der Workflow sofort ausgelöst und die Werte werden unter <code>&lt;start.feldName&gt;</code> (zum Beispiel <code>&lt;start.sampleField&gt;</code>) verfügbar.
</p>
<p>
Dateifelder im Formular werden direkt in die entsprechenden{' '}
<code>&lt;start.fieldName&gt;</code> hochgeladen; verwenden Sie diese Werte,
um nachgelagerte Tools oder Speicherschritte zu versorgen.
</p>
</div>
</Tab>
<Tab>
<div className="space-y-3">
<p>
Die Bereitstellung als API verwandelt das Eingabeformat in einen JSON-Vertrag für Clients. Jedes Feld wird Teil des Anforderungskörpers, und Sim erzwingt primitive Typen bei der Aufnahme. Dateifelder erwarten Objekte, die auf hochgeladene Dateien verweisen; verwenden Sie den Ausführungs-Datei-Upload-Endpunkt, bevor Sie den Workflow aufrufen.
</p>
<p>
API-Aufrufer können zusätzliche optionale Eigenschaften einbeziehen. Diese
werden in den <code>&lt;start.fieldName&gt;</code>Ausgaben beibehalten, sodass
Sie experimentieren können, ohne sofort neu bereitzustellen.
</p>
</div>
</Tab>
<Tab>
<div className="space-y-3">
<p>
Bei Chat-Bereitstellungen bindet sich der Start-Block an die aktive Konversation. Die neueste Nachricht füllt <code>&lt;start.input&gt;</code>, die Sitzungskennung ist unter <code>&lt;start.conversationId&gt;</code> verfügbar, und Benutzeranhänge erscheinen unter <code>&lt;start.files&gt;</code>, zusammen mit allen Eingabeformatfeldern, die als <code>&lt;start.fieldName&gt;</code> definiert sind.
</p>
<p>
Wenn Sie den Chat mit zusätzlichem strukturiertem Kontext starten (zum
Beispiel aus einer Einbettung), wird dieser mit den entsprechenden{' '}
<code>&lt;start.fieldName&gt;</code>Ausgaben zusammengeführt, wodurch
nachgelagerte Blöcke konsistent mit API- und manuellen Ausführungen bleiben.
</p>
</div>
</Tab>
</Tabs>
## Referenzierung von Start-Daten in nachgelagerten Komponenten
- Verbinde <code>&lt;start.fieldName&gt;</code> direkt mit Agenten, Tools oder Funktionen, die strukturierte Daten erwarten.
- Verwende Template-Syntax wie <code>&lt;start.sampleField&gt;</code> oder <code>&lt;start.files[0].url&gt;</code> (nur für Chat) in Prompt-Feldern.
- Halte <code>&lt;start.conversationId&gt;</code> bereit, wenn du Ausgaben gruppieren, den Gesprächsverlauf aktualisieren oder die Chat-API erneut aufrufen musst.
## Best Practices
- Behandle den Start-Block als einzigen Einstiegspunkt, wenn du sowohl API- als auch Chat-Aufrufer unterstützen möchtest.
- Bevorzuge benannte Eingabeformat-Felder gegenüber dem Parsen von rohem JSON in nachgelagerten Knoten; Typumwandlung erfolgt automatisch.
- Füge unmittelbar nach dem Start Validierung oder Routing hinzu, wenn bestimmte Felder für den Erfolg deines Workflows erforderlich sind.

View File

@@ -0,0 +1,67 @@
---
title: Starter (Veraltet)
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
<Callout type="warning">
Der Starter-Block ist veraltet und wurde durch spezialisierte Core-Trigger ersetzt. Bitte beachten Sie die [Core-Trigger-Dokumentation](/triggers) für die neuen API-, Chat-, Eingabeformular-, Manuell-, Zeitplan- und Webhook-Trigger.
</Callout>
Der Starter-Block ermöglicht es Ihnen, die Workflow-Ausführung manuell mit Eingabeparametern zu starten und bietet zwei Eingabemodi: strukturierte Parameter oder konversationellen Chat.
<div className="flex justify-center">
<Image
src="/static/starter.png"
alt="Starter-Block mit manuellen und Chat-Modus-Optionen"
width={500}
height={400}
className="my-6"
/>
</div>
## Ausführungsmodi
Wählen Sie Ihre Eingabemethode aus dem Dropdown-Menü:
<Tabs items={['Manueller Modus', 'Chat-Modus']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>API-freundliche strukturierte Eingaben</strong>: Definieren Sie spezifische Parameter (Text, Zahl, Boolean, JSON, Datei, Datum)</li>
<li><strong>Testen während der Workflow-Erstellung</strong>: Schnelle Iteration beim Debuggen von Workflows</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
<Video src="input-format.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Konfigurieren Sie Eingabeparameter, die beim Bereitstellen als API-Endpunkt verfügbar sein werden.</p>
</div>
</Tab>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>Natürliche Sprache</strong>: Benutzer geben Fragen oder Anfragen ein</li>
<li><strong>Konversationell</strong>: Ideal für KI-gestützte Workflows</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
<Video src="chat-input.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Chatten Sie mit Ihrem Workflow und greifen Sie auf Eingabetext, Konversations-ID und hochgeladene Dateien für kontextbezogene Antworten zu.</p>
</div>
</Tab>
</Tabs>
## Verwendung von Chat-Variablen
Im Chat-Modus können Sie über spezielle Variablen auf Benutzereingaben und Konversationskontext zugreifen:
- **`<start.input>`** - Enthält den Nachrichtentext des Benutzers
- **`<start.conversationId>`** - Eindeutige Kennung für den Konversationsverlauf
- **`<start.files>`** - Array von Dateien, die vom Benutzer hochgeladen wurden (falls vorhanden)

View File

@@ -0,0 +1,357 @@
---
title: Loop Block YAML Schema
description: YAML-Konfigurationsreferenz für Loop-Blöcke
---
## Schema-Definition
```yaml
type: object
required:
- type
- name
- connections
properties:
type:
type: string
enum: [loop]
description: Block type identifier
name:
type: string
description: Display name for this loop block
inputs:
type: object
description: Optional. If omitted, defaults will be applied.
properties:
loopType:
type: string
enum: [for, forEach]
description: Type of loop to execute
default: for
iterations:
type: number
description: Number of iterations (for 'for' loops)
default: 5
minimum: 1
maximum: 1000
collection:
type: string
description: Collection to iterate over (for 'forEach' loops)
default: ""
maxConcurrency:
type: number
description: Maximum concurrent executions
default: 1
minimum: 1
maximum: 10
connections:
type: object
properties:
# Nested format (recommended)
loop:
type: object
properties:
start:
type: string
description: Target block ID to execute inside the loop
end:
type: string
description: Target block ID for loop completion (optional)
# Direct handle format (alternative)
loop-start-source:
type: string | string[]
description: Target block ID to execute inside the loop (direct format)
loop-end-source:
type: string | string[]
description: Target block ID for loop completion (direct format, optional)
error:
type: string
description: Target block ID for error handling
note: Use either the nested 'loop' format OR the direct 'loop-start-source' format, not both
```
## Verbindungskonfiguration
Loop-Blöcke unterstützen zwei Verbindungsformate:
### Direktes Handle-Format (Alternative)
```yaml
connections:
loop-start-source: <string> # Target block ID to execute inside the loop
loop-end-source: <string> # Target block ID after loop completion (optional)
error: <string> # Target block ID for error handling (optional)
```
Beide Formate funktionieren identisch. Verwenden Sie das Format, das Ihnen besser gefällt.
## Konfiguration von untergeordneten Blöcken
Blöcke innerhalb einer Schleife müssen ihre `parentId` auf die Loop-Block-ID gesetzt haben. Die Eigenschaft `extent` wird automatisch auf `'parent'` gesetzt und muss nicht angegeben werden:
```yaml
loop-1:
type: loop
name: "Process Items"
inputs:
loopType: forEach
collection: <start.items>
connections:
loop:
start: process-item
end: final-results
# Child block inside the loop
process-item:
type: agent
name: "Process Item"
parentId: loop-1 # References the loop block
inputs:
systemPrompt: "Process this item"
userPrompt: <loop.currentItem>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
## Beispiele
### For-Schleife (feste Anzahl von Iterationen)
```yaml
countdown-loop:
type: loop
name: "Countdown Loop"
inputs:
loopType: for
iterations: 5
connections:
loop:
start: countdown-agent
end: countdown-complete
countdown-agent:
type: agent
name: "Countdown Agent"
parentId: countdown-loop
inputs:
systemPrompt: "Generate a countdown message"
userPrompt: "Count down from 5. Current number: <loop.index>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### ForEach-Schleife (Verarbeitung von Sammlungen)
```yaml
email-processor-loop:
type: loop
name: "Email Processor Loop"
inputs:
loopType: forEach
collection: <start.emails>
connections:
loop:
start: process-single-email
end: all-emails-processed
process-single-email:
type: agent
name: "Process Single Email"
parentId: email-processor-loop
inputs:
systemPrompt: "Classify and respond to this email"
userPrompt: "Email content: <loop.currentItem>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### Schleife mit mehreren untergeordneten Blöcken
```yaml
data-analysis-loop:
type: loop
name: "Data Analysis Loop"
inputs:
loopType: forEach
collection: <data-fetcher.records>
maxConcurrency: 3
connections:
loop:
start: validate-record
end: generate-report
error: handle-loop-error
validate-record:
type: function
name: "Validate Record"
parentId: data-analysis-loop
inputs:
code: |
const record = <loop.currentItem>;
const index = <loop.index>;
// Validate the record
if (!record.id || !record.data) {
throw new Error(`Invalid record at index ${index}`);
}
return {
valid: true,
recordId: record.id,
processedAt: new Date().toISOString()
};
connections:
success: analyze-record
error: record-error
analyze-record:
type: agent
name: "Analyze Record"
parentId: data-analysis-loop
inputs:
systemPrompt: "Analyze this data record and extract insights"
userPrompt: |
Record ID: <validaterecord.recordId>
Data: <loop.currentItem.data>
Position in collection: <loop.index>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
connections:
success: store-analysis
store-analysis:
type: function
name: "Store Analysis"
parentId: data-analysis-loop
inputs:
code: |
const analysis = <analyzerecord.content>;
const recordId = <validaterecord.recordId>;
// Store analysis result
return {
recordId,
analysis,
completedAt: new Date().toISOString()
};
```
### Schleife für parallele Verarbeitung
```yaml
parallel-processing-loop:
type: loop
name: "Parallel Processing Loop"
inputs:
loopType: forEach
collection: <start.tasks>
maxConcurrency: 5
connections:
loop:
start: process-task
end: aggregate-results
process-task:
type: api
name: "Process Task"
parentId: parallel-processing-loop
inputs:
url: "https://api.example.com/process"
method: POST
headers:
- key: "Authorization"
value: "Bearer {{API_TOKEN}}"
body: |
{
"taskId": "<loop.currentItem.id>",
"data": "<loop.currentItem.data>"
}
connections:
success: task-completed
```
### Beispiel für direktes Handle-Format
Dieselbe Schleife kann mit dem direkten Handle-Format geschrieben werden:
```yaml
my-loop:
type: loop
name: "Process Items"
inputs:
loopType: forEach
collection: <start.items>
connections:
loop-start-source: process-item # Direct handle format
loop-end-source: final-results # Direct handle format
error: handle-error
process-item:
type: agent
name: "Process Item"
parentId: my-loop
inputs:
systemPrompt: "Process this item"
userPrompt: <loop.currentItem>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### Minimales Schleifenbeispiel (mit Standardwerten)
Sie können den Abschnitt `inputs` vollständig weglassen, dann werden Standardwerte angewendet:
```yaml
simple-loop:
type: loop
name: "Simple Loop"
# No inputs section - defaults to loopType: 'for', iterations: 5
connections:
loop-start-source: process-step
loop-end-source: complete
process-step:
type: agent
name: "Process Step"
parentId: simple-loop
inputs:
systemPrompt: "Execute step"
userPrompt: "Step <loop.index>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
Diese Schleife führt standardmäßig 5 Iterationen aus.
## Schleifenvariablen
Innerhalb von Schleifenunterblöcken sind diese speziellen Variablen verfügbar:
```yaml
# Available in all child blocks of the loop
<loop.index> # Current iteration number (0-based)
<loop.currentItem> # Current item being processed (forEach loops)
<loop.items> # Full collection (forEach loops)
```
## Ausgabereferenzen
Nach Abschluss einer Schleife können Sie auf ihre aggregierten Ergebnisse verweisen:
```yaml
# In blocks after the loop
final-processor:
inputs:
all-results: <loop-name.results> # Array of all iteration results
total-count: <loop-name.count> # Number of iterations completed
```
## Bewährte Praktiken
- Setzen Sie angemessene Iterationsgrenzen, um lange Ausführungszeiten zu vermeiden
- Verwenden Sie forEach für die Verarbeitung von Sammlungen, for-Schleifen für feste Iterationen
- Erwägen Sie die Verwendung von maxConcurrency für I/O-gebundene Operationen
- Integrieren Sie Fehlerbehandlung für eine robuste Schleifenausführung
- Verwenden Sie aussagekräftige Namen für Schleifenunterblöcke
- Testen Sie zuerst mit kleinen Sammlungen
- Überwachen Sie die Ausführungszeit für große Sammlungen

View File

@@ -1,5 +1,5 @@
---
title: Overview
title: Blocks
description: The building components of your AI workflows
---
@@ -16,7 +16,7 @@ Blocks are the building components you connect together to create AI workflows.
## Core Block Types
Sim provides essential block types that handle the core functions of AI workflows:
Sim provides seven core block types that handle the essential functions of AI workflows:
### Processing Blocks
- **[Agent](/blocks/agent)** - Chat with AI models (OpenAI, Anthropic, Google, local models)
@@ -28,10 +28,6 @@ Sim provides essential block types that handle the core functions of AI workflow
- **[Router](/blocks/router)** - Use AI to intelligently route requests to different paths
- **[Evaluator](/blocks/evaluator)** - Score and assess content quality using AI
### Control Flow Blocks
- **[Variables](/blocks/variables)** - Set and manage workflow-scoped variables
- **[Wait](/blocks/wait)** - Pause workflow execution for a specified time delay
### Output Blocks
- **[Response](/blocks/response)** - Format and return final results from your workflow
@@ -127,10 +123,4 @@ Each block type has specific configuration options:
<Card title="Condition Block" href="/blocks/condition">
Create branching logic based on data evaluation
</Card>
<Card title="Variables Block" href="/blocks/variables">
Set and manage workflow-scoped variables
</Card>
<Card title="Wait Block" href="/blocks/wait">
Pause workflow execution for specified time delays
</Card>
</Cards>

View File

@@ -9,7 +9,7 @@ import { Image } from '@/components/ui/image'
The Loop block is a container block in Sim that allows you to create iterative workflows by executing a group of blocks repeatedly. Loops enable iterative processing in your workflows.
The Loop block supports four types of iteration:
The Loop block supports two types of iteration:
<Callout type="info">
Loop blocks are container nodes that can hold other blocks inside them. The blocks inside a loop will execute multiple times based on your configuration.
@@ -27,7 +27,7 @@ The Loop block enables you to:
<strong>Repeat operations</strong>: Execute blocks a fixed number of times
</Step>
<Step>
<strong>Loop on conditions</strong>: Continue executing while or until a condition is met
<strong>Sequential processing</strong>: Handle data transformation in ordered iterations
</Step>
<Step>
<strong>Aggregate results</strong>: Collect outputs from all loop iterations
@@ -47,9 +47,9 @@ The Loop block executes contained blocks through sequential iteration:
### Loop Type
Choose between four types of loops:
Choose between two types of loops:
<Tabs items={['For Loop', 'ForEach Loop', 'While Loop', 'Do-While Loop']}>
<Tabs items={['For Loop', 'ForEach Loop']}>
<Tab>
**For Loop (Iterations)** - A numeric loop that executes a fixed number of times:
@@ -96,54 +96,6 @@ Choose between four types of loops:
- Iteration 3: Process "orange"
```
</Tab>
<Tab>
**While Loop (Condition-based)** - Continues executing while a condition evaluates to true:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="While Loop with condition"
width={500}
height={400}
className="my-6"
/>
</div>
Use this when you need to loop until a specific condition is met. The condition is checked **before** each iteration.
```
Example: While <variable.i> < 10
- Check condition → Execute if true
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Execute if true
- Check condition → Exit if false
```
</Tab>
<Tab>
**Do-While Loop (Condition-based)** - Executes at least once, then continues while a condition is true:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="Do-While Loop with condition"
width={500}
height={400}
className="my-6"
/>
</div>
Use this when you need to execute at least once, then loop until a condition is met. The condition is checked **after** each iteration.
```
Example: Do-while <variable.i> < 10
- Execute blocks
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Continue if true
- Check condition → Exit if false
```
</Tab>
</Tabs>
## How to Use Loops
@@ -187,19 +139,6 @@ After a loop completes, you can access aggregated results:
</ol>
</div>
### Counter with While Loop
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Process items with counter-based loop</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize workflow variable: `i = 0`</li>
<li>While loop with condition: `<variable.i>` \< 10</li>
<li>Inside loop: Agent processes item at index `<variable.i>`</li>
<li>Inside loop: Variables increments `i = <variable.i> + 1`</li>
<li>Loop continues while i is less than 10</li>
</ol>
</div>
## Advanced Features
### Limitations
@@ -223,7 +162,7 @@ After a loop completes, you can access aggregated results:
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Loop Type</strong>: Choose between 'for', 'forEach', 'while', or 'doWhile'
<strong>Loop Type</strong>: Choose between 'for' or 'forEach'
</li>
<li>
<strong>Iterations</strong>: Number of times to execute (for loops)
@@ -231,9 +170,6 @@ After a loop completes, you can access aggregated results:
<li>
<strong>Collection</strong>: Array or object to iterate over (forEach loops)
</li>
<li>
<strong>Condition</strong>: Boolean expression to evaluate (while/do-while loops)
</li>
</ul>
</Tab>
<Tab>

View File

@@ -1,18 +0,0 @@
{
"pages": [
"index",
"agent",
"api",
"condition",
"evaluator",
"function",
"guardrails",
"loop",
"parallel",
"response",
"router",
"variables",
"wait",
"workflow"
]
}

View File

@@ -1,123 +0,0 @@
---
title: Variables
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
The Variables block updates workflow variables during execution. Variables must first be initialized in your workflow's Variables section, then you can use this block to update their values as your workflow runs.
<div className="flex justify-center">
<Image
src="/static/blocks/variables.png"
alt="Variables Block"
width={500}
height={350}
className="my-6"
/>
</div>
<Callout>
Access variables anywhere in your workflow using `<variable.variableName>` syntax.
</Callout>
## Overview
The Variables block enables you to:
<Steps>
<Step>
<strong>Update workflow variables</strong>: Change variable values during execution
</Step>
<Step>
<strong>Store dynamic data</strong>: Capture block outputs into variables
</Step>
<Step>
<strong>Maintain state</strong>: Track counters, flags, and intermediate results
</Step>
</Steps>
## How to Use Variables
### 1. Initialize in Workflow Variables
First, create your variables in the workflow's Variables section (accessible from the workflow settings):
```
customerEmail = ""
retryCount = 0
currentStatus = "pending"
```
### 2. Update with Variables Block
Use the Variables block to update these values during execution:
```
customerEmail = <api.email>
retryCount = <variable.retryCount> + 1
currentStatus = "processing"
```
### 3. Access Anywhere
Reference variables in any block:
```
Agent prompt: "Send email to <variable.customerEmail>"
Condition: <variable.retryCount> < 5
API body: {"status": "<variable.currentStatus>"}
```
## Example Use Cases
### Loop Counter and State
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Track progress through loop iterations</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `itemsProcessed = 0`, `lastResult = ""`</li>
<li>Loop iterates over items</li>
<li>Inside loop: Agent processes current item</li>
<li>Inside loop: Variables updates `itemsProcessed = <variable.itemsProcessed> + 1`</li>
<li>Inside loop: Variables updates `lastResult = <agent.content>`</li>
<li>Next iteration: Access `<variable.lastResult>` to compare with current result</li>
</ol>
</div>
### Retry Logic
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Track API retry attempts</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `retryCount = 0`</li>
<li>API block attempts request</li>
<li>If failed, Variables increments: `retryCount = <variable.retryCount> + 1`</li>
<li>Condition checks if `<variable.retryCount>` \< 3 to retry or fail</li>
</ol>
</div>
### Dynamic Configuration
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Store user context for workflow</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `userId = ""`, `userTier = ""`</li>
<li>API fetches user profile</li>
<li>Variables stores: `userId = <api.id>`, `userTier = <api.tier>`</li>
<li>Agent personalizes response using `<variable.userTier>`</li>
<li>API uses `<variable.userId>` for logging</li>
</ol>
</div>
## Outputs
- **`<variables.assignments>`**: JSON object with all variable assignments from this block
## Best Practices
- **Initialize in workflow settings**: Always create variables in the workflow Variables section before using them
- **Update dynamically**: Use Variables blocks to update values based on block outputs or calculations
- **Use in loops**: Perfect for tracking state across iterations
- **Name descriptively**: Use clear names like `currentIndex`, `totalProcessed`, or `lastError`

View File

@@ -1,99 +0,0 @@
---
title: Wait
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
The Wait block pauses your workflow for a specified amount of time before continuing to the next block. Use it to add delays between actions, respect API rate limits, or space out operations.
<div className="flex justify-center">
<Image
src="/static/blocks/wait.png"
alt="Wait Block"
width={500}
height={350}
className="my-6"
/>
</div>
## Overview
The Wait block enables you to:
<Steps>
<Step>
<strong>Add time delays</strong>: Pause execution between workflow steps
</Step>
<Step>
<strong>Respect rate limits</strong>: Space out API calls to stay within limits
</Step>
<Step>
<strong>Schedule sequences</strong>: Create timed workflows with delays between actions
</Step>
</Steps>
## Configuration
### Wait Amount
Enter the duration to pause execution:
- **Input**: Positive number
- **Maximum**: 600 seconds (10 minutes) or 10 minutes
### Unit
Choose the time unit:
- **Seconds**: For short, precise delays
- **Minutes**: For longer pauses
<Callout type="info">
Wait blocks can be cancelled by stopping the workflow. The maximum wait time is 10 minutes.
</Callout>
## Outputs
- **`<wait.waitDuration>`**: The wait duration in milliseconds
- **`<wait.status>`**: Status of the wait ('waiting', 'completed', or 'cancelled')
## Example Use Cases
### API Rate Limiting
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Stay within API rate limits</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API block makes first request</li>
<li>Wait block pauses for 2 seconds</li>
<li>API block makes second request</li>
<li>Process continues without hitting rate limits</li>
</ol>
</div>
### Timed Notifications
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Send follow-up messages</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Function sends initial email</li>
<li>Wait block pauses for 5 minutes</li>
<li>Function sends follow-up email</li>
</ol>
</div>
### Processing Delays
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Wait for external system</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API block triggers job in external system</li>
<li>Wait block pauses for 30 seconds</li>
<li>API block checks job completion status</li>
</ol>
</div>
## Best Practices
- **Keep waits reasonable**: Use Wait for delays up to 10 minutes. For longer delays, consider scheduled workflows
- **Monitor execution time**: Remember that waits extend total workflow duration

View File

@@ -1,5 +1,5 @@
---
title: Basics
title: Connection Basics
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Data Structure
title: Connection Data Structure
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Overview
title: Connections
description: Connect your blocks to one another.
---

View File

@@ -1,3 +0,0 @@
{
"pages": ["index", "basics", "data-structure", "tags"]
}

View File

@@ -1,5 +1,5 @@
---
title: Tags
title: Connection Tags
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Basics
title: Execution Basics
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Overview
title: Execution
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,3 +0,0 @@
{
"pages": ["index", "basics", "api", "logging", "costs"]
}

View File

@@ -3,6 +3,7 @@
"pages": [
"./introduction/index",
"./getting-started/index",
"---Building Workflows---",
"triggers",
"blocks",
"tools",
@@ -10,9 +11,14 @@
"mcp",
"copilot",
"knowledgebase",
"---Configuration---",
"variables",
"---Execution---",
"execution",
"---Advanced---",
"permissions",
"yaml",
"---SDKs---",
"sdks"
],
"defaultOpen": false

View File

@@ -1,4 +0,0 @@
{
"title": "SDKs",
"pages": ["python", "typescript"]
}

View File

@@ -1,5 +1,5 @@
---
title: Python
title: Python SDK
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -283,6 +283,7 @@ class AsyncExecutionResult:
class WorkflowStatus:
is_deployed: bool
deployed_at: Optional[str] = None
is_published: bool = False
needs_redeployment: bool = False
```
@@ -751,6 +752,10 @@ Configure the client using environment variables:
</Step>
</Steps>
<Callout type="warning">
Keep your API key secure and never commit it to version control. Use environment variables or secure configuration management.
</Callout>
## Requirements
- Python 3.8+

Some files were not shown because too many files have changed in this diff Show More