SuperAPI AI 工具集

triggers

部署与运维

查看项目

更新于 10-16 08:31

技能介绍

Windmill Triggers 用于让外部事件调用你的脚本和流程。触发器配置文件使用如下命名模式:{path}.{trigger_type}_trigger.yaml。示例包括:u/user/webhook.http_trigger.yaml、f/data/kafka_consumer.kafka_trigger.yaml、f/sync/postgres_cdc.postgres_trigger.yaml、f/inbound/orders.email_trigger.yaml。

一、Email 触发器 Email 触发器将收到的邮件路由到脚本或流程。每个触发器会保留一个 local-part:发送到 <local_part>@<windmill_email_domain> 的邮件会被投递到配置的可运行对象。设置 workspaced_local_part: true 可按工作区命名空间化(实际收件人变为 <workspace_id>-<local_part>@…);在 Windmill Cloud 上这是必需的。发送方可以在 local-part 后使用 + 追加 URL 风格的额外参数:mytrigger+foo=bar+baz=qux@…。这些参数会作为 email_extra_args 传递给脚本。

Payload:可运行对象会收到 parsed_email(包含 headers、text_body、html_body、attachments[],每个附件有 headers、body)、raw_email(原始 RFC 822 消息字符串;若超过 1 MiB 则为 S3 对象 { s3: "windmill_emails/<job_id>/raw.eml" }),以及可选的 email_extra_args(仅当发送方追加了 +key=value 额外参数时存在,为解析后的扁平对象)。若使用预处理器,以上内容会嵌套在 event 下,并带有 event.kind = "email" 和 event.trigger_path(触发器的路径)。不使用预处理器时不会暴露 trigger_path,如需该字段请添加预处理器。

附件为 S3 对象:二进制附件会上传到工作区 S3 存储桶,并在 parsed_email.attachments[i].body 中表现为 { "s3": "windmill_emails/<job_id>/attachments/<filename>" }。在脚本中读取字节可使用 wmill SDK:

// TypeScript import * as wmill from "windmill-client" const file = await wmill.loadS3File(parsed_email.attachments[0].body)

Python

import wmill data = wmill.load_s3_file(parsed_email["attachments"][0]["body"])

如果工作区未配置 S3 资源(Workspace Settings → Object storage),body 会回退为字符串 "configure s3 in the workspace settings to handle attachments"。大型 raw_email 正文同理。邮件附件存储要求服务器以 parquet 特性构建。文本/HTML/内联部分会以字符串形式内联放在 body 中。

二、CLI 命令 将本地更改部署到工作区可能破坏远程状态——仅在用户明确要求部署/发布/推送时建议或运行部署,不要在用户说“运行”“尝试”或“测试”时部署。根据仓库接线方式,通过 git push 或 wmill sync push 部署(参见 AGENTS.wmill.md 的 Deploying 部分)。sync pull 可以自行安全运行——它从不改变远程状态,但会覆盖本地文件以匹配远程(使用 sync pull --dry-run 仅预览)。

推送触发器配置——仅在用户明确要求部署时

wmill sync push

从 Windmill 拉取触发器

wmill sync pull

三、HttpTrigger (*.http_trigger.yaml) 必须是符合给定 schema 的 YAML 文件。主要字段包括:script_path(触发时执行的脚本或流程路径)、is_flow(script_path 指向流程则为 true,指向脚本则为 false)、labels、draft_only、is_draft、route_path(触发此端点的 URL 路由路径,例如 'api/myendpoint',不能以 / 开头)、static_asset_config(含 s3、storage、filename)、http_method(get/post/put/delete/patch)、authentication_resource_path、summary、description、request_type(sync/async/sync_sse)、authentication_method(none/windmill/api_key/basic_http/custom_script/signature)、is_static_website、workspaced_route、wrap_body、raw_string、error_handler_path、error_handler_args、retry(constant 或 exponential,含 attempts、seconds、multiplier、random_factor,以及 retry_if)。必填字段:script_path、is_flow、route_path、request_type、authentication_method、http_method、is_static_website、workspaced_route、wrap_body、raw_string。

四、WebsocketTrigger (*.websocket_trigger.yaml) 必须是符合给定 schema 的 YAML 文件。主要字段包括:script_path、is_flow、labels、draft_only、is_draft、url(要连接的 WebSocket URL,可为静态 URL 或由可运行对象计算)、filters(匹配传入消息的过滤器,支持 {key, value}、{path, value} 以及 any_of/all_of/none_of 嵌套组)、filter_logic(and/or)、initial_messages(连接后立即发送的消息,可为原始字符串或由可运行对象计算)、url_runnable_args、can_return_message、can_return_error_result、heartbeat(interval_secs、message、state_field)、error_handler_path、error_handler_args、retry。必填字段:script_path、is_flow、url、filters、can_return_message、can_return_error_result。

五、KafkaTrigger (*.kafka_trigger.yaml) 必须是符合给定 schema 的 YAML 文件。主要字段包括:script_path、is_flow、labels、draft_only、is_draft、kafka_resource_path(包含连接配置的 Kafka 资源路径)、group_id(此触发器的 Kafka 消费者组 ID)、topics(要订阅的 Kafka 主题名数组)、filters、filter_logic、auto_offset_reset(latest/earliest)等。资料在 auto_offset_reset 处截断,后续字段暂未提供。

适用场景:需要由外部事件(邮件、HTTP 请求、WebSocket 消息、Kafka 消息等)驱动脚本或流程执行的自动化场景。限制:部署操作可能破坏远程状态,需用户明确要求;Email 附件与大正文依赖工作区 S3 配置及服务器 parquet 特性;部分 Kafka 触发器字段资料未完整提供。