Okidači
Okidač pokreće sesiju po rasporedu, putem webhooka, događaja u aplikaciji ili nadzornika.
Окидач покреће сесију без присуства особе. Користите окидач да бисте аутоматизовали понављајуће послове или послове покренуте догађајем.
Да бисте се касније вратили на задатак из неке сесије — „провери сутра да ли су одговорили“ — користите подсетник. Подсетник је окидач ограничен на ту сесију. Чува се у бази података, а не у beeuni.yaml.
Типови окидача
Beeuni подржава четири типа окидача.
- cron — покреће се по распореду који подесите.
- webhook — покреће се када спољна услуга пошаље потписан захтев на URL веб-куке пројекта.
- event — покреће се када се нешто догоди у повезаној апликацији, на пример када се отвори нови захтев за повлачење или стигне нова порука е-поште. Погледајте Окидачи догађаја у апликацијама.
- monitor — непрекидно, 24/7, покреће команду из вашег спремишта. Сваки ред који команда испише на stdout покреће окидач. Експериментално: погледајте Монитори.
Окидаче дефинишете у манифесту пројекта, beeuni.yaml. Сваки окидач садржи упит који се приказује као прва порука покренуте сесије. Стање током извршавања — као што су време последњег покретања и статус — чува се изван манифеста, у бази података. Покретање окидача не прави коммит.
Када окидач направите, ажурирате или обришете преко контролне табле, промене се уписују директно у подразумевану грану. Не пролазе кроз захтев за измену (CR). Измена датотеке beeuni.yaml унутар сесије и покретање beeuni ship прате уобичајени ток рада са граном и CR-ом.
Подесите cron окидач
Додајте окидач
beeuni triggers add daily-digest --type cron \
--cron "0 0 9 * * 1-5" --timezone America/Los_Angeles \
--prompt "Summarize yesterday's activity and save it as a daily note."cron је израз са 6 поља: секунда, минут, сат, дан, месец, дан у недељи. Окидач се покреће највише једном у минуту: 0 */30 * * * * значи сваких 30 минута, а */30 * * * * * (сваких 30 секунди) се одбија. Ова команда мења само ваш локални beeuni.yaml.
Објавите
beeuni shipbeeuni ship комитује beeuni.yaml и шаље га. Распоред ступа на снагу када се ово обједини у подразумевану грану пројекта.
Потврдите да ради
beeuni triggers lsНа листи су приказани назив, стање и време последњег покретања сваког окидача. Да бисте га покренули одмах, уместо да чекате заказано време, покрените beeuni triggers fire daily-digest. Команда чека исход покретања и, ако оно не успе, завршава се ненултим кодом и исписује текст грешке; --wait <dur> ограничава време чекања (подразумевано 90s).
Подесите окидач веб-куке
Окидачу веб-куке потребна је тајна. Beeuni је користи за проверу потписа сваког долазног захтева.
Додајте тајну
beeuni secrets set WEBHOOK_SECRET=<a-random-value>Више о тајнама потражите у одељку Тајне.
Додајте окидач
beeuni triggers add new-lead --type webhook \
--secret-env WEBHOOK_SECRET \
--prompt "A new lead arrived: {{ body.name }} ({{ body.email }}). Add it to the CRM."--secret-env задаје тајну којом се потписују захтеви за овај окидач.
Објавите
beeuni shipПошаљите му захтев
Beeuni прави URL веб-куке на основу ID-а пројекта и назива окидача:
POST /v1/webhooks/projects/<project-id>/<slug>Пошаљите потписан захтев POST на овај URL из спољне услуге. Beeuni проверава потпис помоћу WEBHOOK_SECRET, а затим покреће сесију чији је упит доступан у телу захтева. Тачно заглавље и формат потражите у одељку Потпис веб-куке испод.
Подразумевано, свако покретање започиње нову сесију у новој грани. Окидач може уместо тога поново да користи или да буде везан за одређену сесију, а окидач веб-куке може да филтрира које корисне терете ће покренути сесију — погледајте одељке Стратегија сесије и Шаблонисање корисног терета испод.
Окидачи догађаја у апликацијама
Окидач догађаја покреће агента када се у апликацији догоди догађај: отвори се захтев за повлачење, стигне порука е-поште, промени се статус проблема. Не морате да подешавате веб-куку, тајну ни потпис. Beeuni се претплаћује на догађај уместо вас и не морате ручно ништа да потписујете.
Догађај потиче од извора догађаја: адаптера који испоручује догађаје апликације. ID-ови као што је GITHUB_PULL_REQUEST_CREATED означавају догађаје које тај извор подржава. Изаберите догађај за свој конектор у каталогу догађаја.
Подешавање у веб-апликацији
- Отворите пројекат, па изаберите Triggers и New trigger.
- Изаберите App event.
- Изаберите апликацију. Испод ње изаберите конектор и један од његових заједничких налога или повежите други налог. Користи се налог означен као Default, осим ако изаберете други.
- Изаберите догађај. Испод њега ће се појавити образац са подешавањима догађаја, као што је спремиште.
- Напишите упит и сачувајте га.
Окидач је активан чим на ознаци пише Live. Остале ознаке су Activating, Needs connection и Error. Оне одговарају статусима pending, needs_connection и error у наставку.
Прегледајте све окидаче догађаја у апликацијама
У веб-апликацији отворите Triggers и изаберите App events. У реду са филтерима налазе се All, Schedules, App events и Webhooks, сваки са бројем. Избор се чува у адреси као ?type=event, тако да можете да поставите везу до њега. Редови су груписани по апликацији. Испод њих, одељак Apps with events наводи све апликације које могу да покрену агента, а најпре приказује апликације које ваш пројекат већ користи. Изаберите апликацију да бисте отворили образац за нови окидач за ту апликацију.
Прозор конектора има картицу Triggers са догађајима апликације на том конектору. Картица се приказује само за апликације које имају догађаје.
Помоћу CLI-ја:
beeuni triggers ls --type event # every app event trigger, grouped by app
beeuni triggers ls --connector github-work # the app events on one connector
beeuni triggers ls --type event --json # the same list as JSON
--type прихвата и cron, webhook и monitor. --connector и --type могу да се комбинују.
Подешавање помоћу CLI-ја
Агент или особа обављају ове кораке редом. Сваки корак исписује оно што је потребно за следећи.
beeuni triggers events --apps
beeuni triggers events --app github
beeuni connectors add github --provider composio --app github --apply
beeuni connectors connect github --owner project
beeuni triggers events --connector github
beeuni triggers events --connector github --event GITHUB_PULL_REQUEST_CREATED
beeuni triggers add pr-review --type event \
--connector github --event GITHUB_PULL_REQUEST_CREATED \
--config repo=hekmat/api \
--prompt "Review {{ event.data.html_url }}" --apply
beeuni triggers info pr-review
triggers events --appsприказује апликације које могу да покрећу догађаје. Апликације су груписане према извору догађаја (source: composio). За сваку апликацију приказани су њени конектори (профили) и њихови заједнички налози. У колониSTATEпишеconnectedилиneeds account; апликације без конектора приказују се у одељкуNo connector yet.connectors addдодаје конектор ако га апликација нема. Прескочите овај корак ако је подешеноCONNECTOR.connectors connect <slug> --owner projectисписује везу. Особа је отвара да би повезала заједнички налог. Приватни налог члана се не рачуна. Покрените команду поново да бисте додали други заједнички налог, па му доделите ознаку помоћуconnectors rename <id> <label>.triggers events --connector <slug>приказује догађаје. Додајте--event <TYPE>да бисте видели подешавања догађаја и његове променљиве{{ event.data.* }}. Прочитајте опис сваког подешавања: неки догађаји захтевају пуно име у једном подешавању, као што јеrepo: hekmat/api, и одбијају исту вредност подељену измеђуownerиrepo.triggers add --applyодмах прави окидач и исписује његов статус и следећи корак. Ако подешавање недостаје или није важеће, команда се завршава кодом 2 и наводи све проблеме. Без--apply, CLI уписује блок у локалниbeeuni.yaml; покренитеbeeuni shipда бисте га применили.triggers info <slug>приказује статус. Понављајте док не буде писалоlive.
--source <adapter> задаје извор догађаја и опционо је: ако га не наведете, окидач користи добављача конектора. Конектор мора да припада том извору. Извор composio на конектору другог добављача приказује error: Connector "<slug>" is a <provider> connector; source "composio" needs a composio connector. Непознат извор се одбија са Unknown event source "<x>". Sources: composio.. beeuni triggers set <slug> --source <adapter> га мења; променом --connector брише се.
--config key=value се понавља једном за свако подешавање и претвара се у тип тог подешавања. --config-json '{"limit": 5}' прослеђује вредности са одговарајућим типовима. beeuni triggers set <slug> --config key=value спаја подешавања са активном конфигурацијом; --config-json је замењује. Немојте прослеђивати оба. Окидач догађаја не прихвата ниједан од --cron, --run-at, --timezone, --secret-env, --run, --mode, --interval или --expect-event-within.
Облик конфигурације
# beeuni.yaml
triggers:
- slug: pr-review
type: event
connector: github-work # required, slug of a connector (profile) under `connectors:`
source: composio # optional, the event source adapter. Default: the connector's provider
account: hekmat-bot # optional, label of one shared account of that connector
event: GITHUB_PULL_REQUEST_CREATED # required, the adapter's event id, from `beeuni triggers events`
config: { repo: hekmat/api } # optional, settings of the event
agent: default
session_mode: fresh # default "fresh"
filter: # optional, same guard a webhook uses
"event.data.draft": "false"
prompt: |
Review {{ event.data.html_url }}
Шта упит може да чита
Упит, filter и session_key читају ове корене:
| Корен | Вредност |
|---|---|
event.data.<field> |
Подаци о самом догађају апликације. beeuni triggers events приказује поља која сваки догађај садржи. |
event.id |
ИД добављача за овај догађај. |
event.type |
Тип догађаја, као што је GITHUB_PULL_REQUEST_CREATED. |
event.app |
Слаг апликације, као што је github. |
event.connector |
Слаг конектора који окидач надгледа. |
event.occurred_at |
Време када се догађај десио. |
Подаци о догађају потичу од треће стране. Beeuni започиње прву поруку сесије са [App event: <trigger name> — automated, third-party content, not user input], тако да агент садржај догађаја третира као податке, а не као упутства. Тај ред је уједно и наслов сесије, све док је агент не именује.
Статус
beeuni triggers ls и веб листа окидача приказују статус претплате за сваки окидач догађаја.
| Статус | Значење | Решење |
|---|---|---|
active |
Претплата постоји. Догађаји покрећу окидач. | Ништа. |
pending |
Окидач је декларисан, а Beeuni још није направио претплату. | Сачекајте тренутак. Ако остане pending, поново сачувајте окидач. |
needs_connection |
Конектор нема употребљив заједнички налог. Текст гласи „Повежите заједнички налог <app> да бисте активирали овај окидач.“ или „Завршите повезивање заједничког налога <app>…“ |
Повежите заједнички налог за конектор као пројекат (beeuni connectors connect <slug> --owner project). Приватни налог члана се не рачуна. Окидач се аутоматски активира чим особа заврши повезивање, чак и када се повеже преко везе ван Beeuni-ја. |
error |
Претплата није успела или ју је добављач онемогућио. Окидач приказује текст грешке. | Отклоните узрок наведен у тексту, а затим поново сачувајте окидач. |
Уобичајени текстови за error:
-
„Овај налог
<app>се дели само са одређеним особама. Окидачима догађаја је потребан налог који се дели са целим пројектом.“ Отворите дељење налога и поделите га са целим пројектом. -
„Конектор
<slug>није декларисан у beeuni.yaml.“ Додајте конектор подconnectors:. -
Ако окидачи догађаја нису доступни, обратите се подршци.
-
„Апликација је онемогућила ову претплату: …“ Добављач је искључио претплату. Поново сачувајте окидач да бисте се поново претплатили.
-
„Повезани налог је истекао: …“ Апликација је опозвала или је налог истекао. Поново повежите апликацију да бисте наставили окидач.
Правила
- Конектор и налог. Апликација је услуга, као што је GitHub. Конектор је профил у
beeuni.yaml; више конектора може да дели једну апликацију. Налог је једна повезана пријава у оквиру конектора. Окидач именује конектор. Он користи подразумевани заједнички налог тог конектора, осим ако не поставиaccount: <label>. Поставитеaccountсамо када конектор садржи више заједничких налога. У CLI-ју га поставља--account <label>, а--default-account(наtriggers set) га уклања. Ознака која се не подудара ни са једним заједничким налогом дајеneeds_connectionса текстом „Повежите заједнички налог<app>са ознаком „<label>“ на<connector>.“ - Један доводни налог. Окидач може да напаја само налог који се дели са пројектом и доступан је целом пројекту. Окидач се извршава без присутних корисника, а подаци о догађају стижу у упит сесије. Налог који се дели само са именованим особама, или приватни налог, никада га не напаја.
- Сваки догађај се покреће једном. Окидач се покреће једном по догађају добављача. Поново испоручени догађај не покреће другу сесију. Два окидача за исти догађај покрећу се сваки по једном.
- Паузирање га зауставља. Паузирани окидач или паузирани пројекат прескаче догађаје. Прескочени догађаји се не стављају у ред.
- Измене поново успостављају претплату. Промена
connector,source,account,eventилиconfigзамењује претплату. Брисањем окидача он се уклања.
Монитори
Експериментално. Монитори се извршавају само тамо где је укључена заставица функције monitors. Заставица је подразумевано искључена. Док је искључена, платформа не обезбеђује мониторску кутију и не покреће догађаје монитора.
Монитор надгледа нешто што ни не шаље вебхукове ни одговара распореду: активни дневник, дубину реда, страницу која се мења или цену. Beeuni покреће вашу команду 24/7 у мониторској кутији пројекта — један трајни microVM по пројекту, са истом границом изолације и истим тајнама пројекта које добија сесијски sandbox. Детерминистички код надгледа; агент се буди само када команда испише ред.
Уговор дефинишу четири правила:
- Редови стандардног излаза су догађаји. Ништа друго није. Стандардни излаз за грешке служи за дијагностику: видљив је у дневницима монитора, али никада не покреће окидач.
- Сваки ред покреће окидач тачно једном, путем путање коју вебхук већ користи:
filter→ шаблон упита →session_mode. - Монитор не може нечујно да откаже. Излазак процеса, исцрпљивање буџета поновних покретања и тишина дужа од
expect_event_withinсваки покрећу догађај животног циклуса који платформа уписује у исти ток. session_modeје на монитору подразумеваноreuse, а неfresh. Монитор се намерно покреће више пута, па биfreshнаправио по једну сесију за сваки догађај.
Додајте монитор
beeuni triggers add checkout-errors --type monitor \
--run "./monitors/checkout-errors.ts" \
--mode poll --interval 60s --expect-event-within 24h \
--prompt "Checkout monitor emitted: {{ line }}"--mode poll поново покреће команду сваких --interval и очекује да се она заврши. --mode stream је покреће једном и одржава је активном; ток не прихвата --interval. Оба облика производе редове и ништа низводно не може да их разликује. cron, run_at, timezone и secret_env нису дозвољени на монитору.
Објавите
beeuni shipПлатформа покреће мониторску кутију када се ово нађе на подразумеваној грани.
Потврдите да се извршава
beeuni triggers ls
beeuni triggers info checkout-errorsls приказује режим и интервал монитора тамо где cron приказује свој распоред. info приказује run, mode, interval и expect_event_within.
Ограничења монитора
Платформа примењује свако ограничење наведено у наставку.
| Ограничење | Вредност |
|---|---|
| Монитори по пројекту | 10 омогућених |
| Интервал анкетирања | најмање 30 s |
expect_event_within |
најмање 5 min |
| Стопа догађаја по монитору | 60/сат током дужег периода, налет 30. Прекорачење потискује монитор на 10 минута; 3 потискивања у 24 часа га онемогућавају. |
| Дужина реда | 8 KiB, скраћено уз ознаку truncated: true |
| Буџет поновних покретања | 5 поновних покретања / 10 минута, затим догађај животног циклуса restart_budget_exhausted и пауза од 15 минута |
| Задржавање догађаја | 30 дана |
| Месечни буџет кутије | 75 $ подразумевано. Након тога кутија се зауставља и покреће се један догађај животног циклуса budget_exceeded. |
Мониторској кутији је потребан добављач који подржава трајни sandbox. Тамо где добављач пројекта не може да одржава такав sandbox, заставица monitors пријављује да није доступна.
Облик конфигурације
# beeuni.yaml
triggers:
- slug: daily-digest # required, lowercase + dashes, unique per project
name: Daily digest # optional, defaults to slug
type: cron # "cron" | "webhook" | "event" | "monitor", required
agent: beeuni # optional, defaults to "default"
model: anthropic/claude-sonnet-4-5 # optional, resolves at fire time if unset
enabled: true # optional, default true
cron: "0 0 9 * * 1-5" # 6-field expression, mutually exclusive with run_at
timezone: America/Los_Angeles # IANA name, default UTC
session_mode: reuse # "fresh" | "reuse" | "pinned" | "keyed", default "fresh"
filter: # optional, webhook payload guard
"body.data.direction": "inbound"
prompt: "Summarize {{ body.text }}" # required, template string
Монитор замењује поља распореда својом командом и обликом:
# beeuni.yaml
triggers:
- slug: checkout-errors
type: monitor
run: ./monitors/checkout-errors.ts # required, repo-relative command
mode: poll # "poll" | "stream", required
interval: 60s # required on poll, invalid on stream
expect_event_within: 24h # optional silence watchdog
agent: oncall
session_mode: reuse # the monitor default
filter: # optional, same guard a webhook uses
"line.severity": "error"
prompt: "Checkout monitor emitted: {{ line }}"
Окидач догађаја замењује поља распореда апликацијом и догађајем који надгледа. Погледајте Окидачи догађаја апликације.
Застарели beeuni.toml користи иста поља у другом контејнеру; погледајте застарели TOML.
Поља
| Поље | Обавезно | Подразумевано | Напомене |
|---|---|---|---|
slug |
да | — | [a-z0-9][a-z0-9_-]{0,127}, јединствено за сваки пројекат. |
type |
да | — | cron, webhook или monitor. |
prompt |
да | — | Предложак. Приказује се као прва порука сесије. |
name |
не | slug |
Ознака за људе. |
agent |
не | default_agent |
Мора да буде назив кључа у agents:. Изоставите га да бисте користили default_agent; немојте уписивати дословно default. |
model |
не | разрешава се у тренутку покретања | Облик на жици provider/model, на пример anthropic/claude-sonnet-4-5. |
enabled |
не | true |
Када је false, планер и пријемник веб-кука прескачу ставку. |
session_mode |
не | fresh или reuse на монитору |
Погледајте Стратегија сесије. |
session_id |
обавезно за pinned |
— | Тачна сесија за поновно слање упита. |
session_key |
обавезно за keyed |
— | Предложак. Само његово подешавање подразумева session_mode: keyed. |
filter |
не | — | Тачкаста путања → очекивани стринг. Испорука веб-кука која се не подудара враћа 200 и не покреће сесију. |
cron |
једно од cron/run_at, на type: cron |
— | Израз са 6 поља: секунда, минут, сат, дан, месец, дан у недељи. Покреће се највише једном у 60 секунди; бржи израз не пролази beeuni validate и API. |
run_at |
једно од cron/run_at, на type: cron |
— | Временска ознака ISO-8601. Покреће се једном, а затим мирује. |
timezone |
не, само за cron | UTC |
Назив IANA. |
secret_env |
обавезно, само за веб-кук | — | Назив тајне пројекта у којој се чува кључ за потписивање. Тајна мора да користи испоруку broker са потрошачем connector. |
run |
обавезно, само за монитор | — | Команда релативна у односу на спремиште чији су редови стандардног излаза догађаји. Један ред, највише 1024 знака. |
mode |
обавезно, само за монитор | — | poll поново покреће run сваких interval; stream покреће га једном и одржава активним. |
interval |
обавезно за mode: poll |
— | Литерал трајања (30s, 5m, 24h, 7d), најмање 30s. Неважеће за mode: stream. |
expect_event_within |
не, само за монитор | — | Литерал трајања, најмање 5m. Дужи период без активности покреће догађај животног циклуса. |
Окидач cron захтева cron или run_at, никад оба. Веб-кук окидач без secret_env се одбија — не постоји неаутентификовани веб-кук. Монитору су потребни run и mode, а cron, run_at, timezone и secret_env одбија безусловно — манифест који наводи распоред који извршилац монитора никад не чита је лажан.
Подесите тајну за потписивање пре него што направите или ажурирате окидач веб-кука:
beeuni secrets set WEBHOOK_SECRET=-
beeuni secrets delivery WEBHOOK_SECRET broker --consumer connector
Проследите вредност првој команди преко стандардног улаза. Ако је тајна раније коришћена за испоруку у окружењу sandbox, промените је након промене испоруке јер постојећи sandbox може да задржи претходну вредност.
Стратегија сесије
session_mode одређује коју сесију ће покретање поново упутити. Beeuni испробава наведене режиме редом и прелази на следећи ако сваки од њих не успе.
pinned— поново упути тачну сесијуsession_id. Ако сесија више не постоји или није успела, пређи на следећи режим.keyed— прикажиsession_keyна основу садржаја, па потражи најновију сесију која није неуспела и која је раније означена том тачном кључном вредношћу. Ако кључна вредност буде празна или нема одговарајуће сесије, пређи на нову сесију. Никад не прелази на сесију са другом кључном вредношћу.reuse— поново упути најновију сесију која није неуспела и коју је овај окидач претходно направио. И окидач са закаченом сесијом прво се враћа на овај режим, па тек онда прелази даље.fresh— направи нови sandbox и грану. Ово је подразумевани режим и последња могућност за све режиме. Нова сесија постаје сесија окидача за будућа покретањаreuseиkeyed.
Сесија reuse или keyed чија историја више не стаје у модел, чак ни након аутоматског сажимања, повлачи се из употребе. Следеће покретање започиње нову сесију. У случају било ког другог неуспеха, сесија се задржава за следеће покретање.
Окидач cron који се често покреће и не треба стално да шаље све дужу историју може да ротира сесију на граници календарског периода: session_key: "merge-{{ cron.scheduled_date }}" задржава једну серијализовану сесију за сваки дан по UTC времену, а {{ cron.scheduled_hour }} једну за сваки сат по UTC времену.
Неуспела покретања
Када се покретање које је започео окидач заврши грешком, Beeuni бележи то на окидачу:
last_statusпостајеfailed, аlast_errorсадржи разлог, на примерOut of credits: Payment Required: Insufficient credits.- Страница Schedule означава окидач са „Последње покретање није завршено“ и приказује разлог у панелу.
- Власник налога добија једно мобилно пусх обавештење када прво покретање не успе. Неуспело касније покретање ажурира разлог без слања новог обавештења.
- Окидач остаје
failedдок наставља да се покреће. Ново покретање не доказује да ради.
Следеће покретање које се успешно заврши уклања евиденцију неуспеха. Покретање које сами зауставите, подагент и поновљени позив модела не рачунају се као исходи покретања. Неуспело покретање пре почетка рада, на пример када сесија не може да се направи, уклања се при следећем успешном покретању.
Приступ сесији
Сесије које направи окидач подразумевано користе приватну политику. Налог услуге агента окидача је њихов власник — идентитет агента је принципал service_account, па може да буде власник сесије и да има додељене приступе као и сваки други принципал. Менаџер пројекта увек може да их отвори. Власник налога и администратор налога имају приступ еквивалентан менаџерском у свим пројектима, па то важи и за њих. Особа која је подесила окидач или га ручно покренула не добија приступ том радњом, осим ако има једну од тих улога.
Подешавања окидача нуде три политике:
- Агент окидача и менаџери пројекта — ниједан обичан члан пројекта не може да отвори сесију.
- Изабрани чланови тима — агент окидача, менаџери пројекта и изабрани чланови пројекта или групе налога.
- Цео пројекат — сви чланови пројекта.
Ова политика је поставка видљивости по ресурсу, која допуњује модел улога; она није улога. Одређује ко може да отвори сесије једног окидача. Не даје никакве дозволе које одлука заснована на улози одбија. Погледајте Налози и приступ.
Политика приступа је локално стање налога у току рада. Не уноси се у преносиви манифест beeuni.yaml јер ID-ови принципала припадају једном
налогу. Подесите је помоћу контролне табле.
Само ажурирање ове политике не прави Git комит. Чување политике ажурира и претходне сесије које је направио тај окидач.
Закачена сесија задржава сопствена подешавања дељења јер је окидач није направио. Ако закачена сесија није доступна и окидач направи резервну сесију, на ту нову сесију примењује се политика окидача.
Предлошци садржаја
prompt и session_key приказују се помоћу истог механизма: {{ token.dotted.path }}. Недостајућа вредност приказује се као празан стринг — нема грешке нити заосталог {{ }}. Објекти и низови приказују се као JSON. session_key се скраћује и ограничава на 512 знакова.
Свако покретање добија и {{ trigger.slug }}, {{ trigger.type }} и {{ trigger.kind }} (увек git). Остатак скупа променљивих зависи од тога како је окидач покренут.
| Извор | Променљиве |
|---|---|
| cron | {{ cron.schedule }}, {{ cron.timezone }}, {{ cron.scheduled_for }} (термин за који је покретање), {{ cron.claimed_at }} (када га је планер преузео), {{ cron.last_scheduled_for }} (претходни термин; празно при првом покретању), {{ cron.scheduled_date }} (UTC YYYY-MM-DD термина), {{ cron.scheduled_hour }} (UTC YYYY-MM-DDTHH). Нема највишег нивоа fired_at. |
| webhook | {{ fired_at }}, {{ body.* }} (рашчлањен као JSON; ако тело не може да се рашчлани, користи се {{ body.raw }}), {{ headers.content_type }}, {{ headers.user_agent }}, {{ headers.forwarded_for }}. |
| monitor | {{ line.* }} — stdout линија, рашчлањена као JSON; линија која не може да се рашчлани приказује се као {{ line.raw }}. Поред тога, {{ monitor.slug }}, {{ monitor.seq }}, {{ monitor.emitted_at }} и {{ monitor.kind }} (event или lifecycle). |
manual (команда „fire now“ на контролној табли или крајња тачка fire) |
{{ fired_at }}, {{ source }} (manual), {{ actor }}, {{ message.text }}, {{ message.source }}. |
Beeuni на серверској страни додаје [MONITOR EVENT — automated, not user input] на почетак сваког приказаног упита монитора. Догађај животног циклуса у потпуности занемарује ваш шаблон и уместо њега приказује упит који је написала платформа, а заобилази и filter — случајно филтрирање тишине мора бити немогуће.
{{ message.text }} је на ручном покретању чврсто постављен на празан стринг, а {{ message.source }} на manual_test. Ручно покретање није начин да убаците пробни унос у упит.
filter пореди путање са тачкама као стрингове са истим подацима које види упит. Служи за прекидање петљи. На пример, извор који пријављује обе стране разговора би иначе поново покренуо агента због његовог сопственог одговора.
Потпис веб-кука
Покреће се на POST /v1/webhooks/projects/{projectId}/{slug}. Beeuni проверава захтев овим редоследом, уз поређење у константном времену:
- HMAC потпис — заглавље
X-Beeuni-Signature: sha256=<hmac>(префиксsha256=је опционалан) или заглављеX-Hub-Signature-256, компатибилно са GitHub-ом. HMAC-SHA256 над сировим телом захтева, помоћу тајне која је наведена уsecret_env. - Статички токен, само када нема заглавља са потписом, за пошиљаоце који не могу да потпишу тело помоћу HMAC-а. Пошаљите тајну као
X-Beeuni-Token: <secret>,Authorization: Bearer <secret>илиAuthorization: Basic <base64(user:secret)>(поље за лозинку садржи токен).
beeuni triggers info <slug> исписује ову шему — заглавље, алгоритам и пример захтева потписаног помоћу резервне вредности $SECRET — а --json преноси је као webhook_signing. Исти пример захтева приказан је на листу окидача контролне табле.
| Статус | Значење |
|---|---|
| 202 | Потпис или токен су важећи. Тело је { status: "fired" | "queued" | "deduped", session_id, ... }. |
| 200 | Важеће, али прескочено — пројекат је паузиран или испорука не одговара filter. |
| 400 | Неисправан ID пројекта или slug у URL-у. |
| 401 | Потпис и токен недостају или су погрешни. |
| 404 | Окидач није пронађен, онемогућен је, није веб-кука или пројекат није активан. |
| 409 | Тајна за потпис недостаје, неактивна је, недоступна или не овлашћује потрошача connector. Одговор садржи код webhook_secret_* и упутства за решавање проблема. |
| 500 | Аутентификација је прошла, али покретање сесије није успело. |
Крајње тачке
| Метод + путања | Потребно | Напомене |
|---|---|---|
GET /v1/projects/{projectId}/triggers |
project.trigger.read |
Наводи окидаче, стање током извршавања (last_fired_at, last_status, last_error, last_attempt_at) и грешке при рашчлањивању манифеста. Неисправна ставка се приказује у errors[]; не утиче на остале окидаче. |
POST /v1/projects/{projectId}/triggers |
project.trigger.create |
Креира окидач. Директно уписује измене у манифест. |
PATCH /v1/projects/{projectId}/triggers/{slug} |
project.trigger.update |
Делимично ажурирање, спојено са тренутном ставком. |
DELETE /v1/projects/{projectId}/triggers/{slug} |
project.trigger.delete |
Такође брише стање окидача током извршавања. |
PATCH /v1/projects/{projectId}/triggers/activation |
project.trigger.update |
Тело { paused: boolean }. Погледајте Паузирање и наставак. |
POST /v1/projects/{projectId}/triggers/{slug}/fire |
project.trigger.fire |
Ручно покретање. Уграђена улога пројекта member има project.trigger.fire, па обичан члан може да покрене окидач. |
POST /v1/webhooks/projects/{projectId}/{slug} |
потпис или токен | Јавни URL, заштићен тајном веб-куке. |
Паузирање и наставак
Прекидач на нивоу пројекта истовремено зауставља сваки окидач у пројекту, независно од поља enabled појединачног окидача. Док је пројекат паузиран, планер га прескаче, а долазне веб-куке враћају 200 са { status: "skipped" } — ниједна сесија се не покреће. Ручно покретање и даље функционише. Користите ову опцију када се исто спремиште покреће на две контролне равни (на пример, у развојном и продукционом окружењу), да се cron не би покренуо двапут. CLI: beeuni triggers pause и beeuni triggers resume. Погледајте CLI за целу групу команди beeuni triggers.
Ограничења и поузданост
- Планер проверава стање отприлике сваке секунде (подразумевано 1.000 ms; може да се подеси преко
BEEUNI_TRIGGER_SCHEDULER_INTERVAL_MS). Извршавање cron-а не почиње тачно у предвиђеном термину: сваки окидач добија фиксно одлагање до четвртине свог периода, а највише 30 минута, како се многи окидачи заказани за исти минут не би покренули истовремено. Детаљи окидача иGET /triggers(next_fire_at) приказују време почетка следећег покретања. - Ако покретање не успе, последњи статус окидача се поставља на „неуспешно“, уз приказ грешке. Ово важи за све изворе: cron, ручно покретање, веб-куку, догађај апликације и монитор. Следеће успешно покретање брише статус неуспелог покретања. Неуспело покретање се брише као што је описано у одељку Неуспела покретања.
- Сваки пројекат подразумевано дозвољава да се истовремено припремају 3 покренуте сесије. Покретање преко тог ограничења враћа
queued(202) уместо да не успе и извршава се када се заврши припрема једне од њих. Нема ограничења броја сесија које могу истовремено да раде. - Ручно покретање или покретање путем веб-куке има временско ограничење од 45 секунди. Учитавање манифеста има временско ограничење од 30 секунди.
- Cron покретање се идентификује према доспелом термину распореда, тако да се покретање које је истекло, али је заправо почело, не дуплира при поновном покушају.
- Испорука путем веб-куке се извршава једном по догађају. Beeuni чита ID догађаја из
X-Beeuni-Delivery-Id,X-GitHub-Delivery,X-Gitlab-Event-UUID,Linear-Delivery,webhook-idилиsvix-id, тим редоследом; поновни покушај са истим ID-ом враћа202 { status: "deduped" }и ништа не покреће.X-Request-Idније ID догађаја. Ако нема ID-а догађаја, идентично тело и потпис у року од 10 минута сматрају се истим догађајем; после тога се догађај поново извршава, тако да се задатак који при сваком објављивању шаље исто статичко тело извршава при сваком објављивању. ШаљитеX-Beeuni-Delivery-Idса новом вредношћу за сваки догађај (у примеру захтева користи се$(uuidgen)). - Испорука чији је ранији покушај коначно неуспео (на пример, зато што је на налогу понестало кредита) или чија је сесија обрисана, поново се извршава када се понови испорука са истим ID-ом. Дупликат не мења
last_fired_at.