Pobieranie subskrypcji cyklu życia aplikacji
Dostępne tylko w wersji 2026-04 i nowszych
Subskrypcje zdarzeń cyklu życia na poziomie funkcji pozwalają twórcom aplikacji otrzymywać powiadomienia webhook, gdy użytkownicy wchodzą w interakcję z konkretnymi instancjami funkcji aplikacji (na przykład gdy widok tablicy zostaje zduplikowany, obiekt utworzony lub rozszerzenie kolumny usunięte). Te subskrypcje dają twórcom szczegółową kontrolę nad tym, jak i gdzie dostarczane są zdarzenia.
- Subskrypcje na poziomie funkcji: Subskrybuj tylko te zdarzenia na poziomie funkcji, które Cię interesują
- Osobne kierowanie zdarzeń: Kieruj różne typy zdarzeń do różnych endpointów webhook
- Obsługa synchroniczna lub asynchroniczna: Wybierz sposób obsługi dla każdego zdarzenia
- Czytelne identyfikatory: Zarządzaj subskrypcjami za pomocą czytelnych identyfikatorów funkcji
Obsługiwane typy zdarzeń
| Typ zdarzenia | Opis |
|---|---|
| AppFeatureBoardColumnExtension:delete | Gdy rozszerzenie kolumny zostanie usunięte |
| AppFeatureBoardColumnExtension:duplicate | Gdy rozszerzenie kolumny zostanie zduplikowane |
| AppFeatureBoardColumnExtension:export | Gdy rozszerzenie kolumny zostanie wyeksportowane |
| AppFeatureBoardView:delete | Gdy widok tablicy zawierający funkcję aplikacji zostanie usunięty |
| AppFeatureBoardView:duplicate | Gdy widok tablicy zawierający funkcję aplikacji zostanie zduplikowany |
| AppFeatureBoardView:restore | Gdy widok tablicy zawierający funkcję aplikacji zostanie przywrócony |
| AppFeatureColumn:create | Gdy zostanie utworzona kolumna niestandardowa |
| AppFeatureColumn:delete | Gdy kolumna niestandardowa zostanie usunięta |
| AppFeatureObject:archive | Gdy instancja obiektu niestandardowego zostanie zarchiwizowana |
| AppFeatureObject:create | Gdy zostanie utworzona instancja obiektu niestandardowego |
| AppFeatureObject:delete | Gdy instancja obiektu niestandardowego zostanie usunięta |
| AppFeatureObject:duplicate | Gdy instancja obiektu niestandardowego zostanie zduplikowana |
| AppFeatureObject:import | Gdy obiekty niestandardowe zostaną zaimportowane |
| AppFeatureObject:publish | Gdy obiekt niestandardowy zostanie opublikowany |
| AppFeatureObject:restore | Gdy instancja obiektu niestandardowego zostanie przywrócona z archiwum |
| AppFeatureObject:unpublish | Gdy obiekt niestandardowy przestanie być opublikowany |
| AppFeatureObject:update\_attributes | Gdy atrybuty obiektu niestandardowego zostaną zaktualizowane |
Zapytania
Pobieranie subskrypcji cyklu życia aplikacji
- Działa tylko w przypadku współpracowników aplikacji
- Zwraca tablicę zawierającą metadane subskrypcji zdarzeń cyklu życia na poziomie funkcji aplikacji
- Można je wykonać tylko bezpośrednio na poziomie głównym; nie można zagnieżdżać go w innym zapytaniu
query {
get_app_lifecycle_subscriptions(app_id: "123", version_id: "456") {
id
entity_id
event_type
webhook_url
is_sync
}
}
Argumenty
| Argument | Typ | Opis |
|---|---|---|
| app_id | ID! |
Unikatowy identyfikator aplikacji. |
| version_id | ID |
Unikatowy identyfikator wersji aplikacji. Jeśli go nie podasz, zostanie zwrócona aktywna wersja. |
Pola
| Pole | Typ | Opis |
|---|---|---|
| created_at | Date |
Data utworzenia subskrypcji. |
| entity_id | ID |
Unikatowy identyfikator encji lub jej pełny slug. |
| entity_type | String |
Typ encji (np. "appFeature"). |
| event_type | String |
Typ zdarzenia cyklu życia (np. "AppFeatureColumn:create"). Pełną listę obsługiwanych typów zdarzeń znajdziesz powyżej. |
| id | ID |
Unikatowy identyfikator subskrypcji. |
| is_sync | Boolean |
Informacja, czy obsługa zdarzenia przez aplikację jest synchroniczna. |
| updated_at | Date |
Data ostatniej aktualizacji subskrypcji. |
| webhook_url | String |
Adres URL webhooka, na który wysyłane są powiadomienia. |
Mutacje
- Typy zdarzeń muszą pasować do typu funkcji aplikacji. Na przykład nie możesz subskrybować zdarzeń
AppFeatureObject:createdla funkcji aplikacji będącej widokiem tablicy. - :construction: Nie możesz usuwać subskrypcji dla aktywnych wersji aplikacji.
Aktualizowanie subskrypcji cyklu życia aplikacji
Aktualizuje konfiguracje wszystkich istniejących subskrypcji. Zwraca [LifecycleSubscriptionKind!].
mutation {
update_app_lifecycle_subscription(
entity_identifier: "my-app::my-object-feature"
entity_type: "appFeature"
input: {
lifecycle_events: [
{
event_type: "AppFeatureObject:create"
webhook_url: "https://myapp.com/webhooks/lifecycle"
is_sync: false
}
{
event_type: "AppFeatureObject:delete"
webhook_url: "https://myapp.com/webhooks/lifecycle"
is_sync: false
}
{
event_type: "AppFeatureObject:update_attributes"
webhook_url: "https://myapp.com/webhooks/lifecycle"
is_sync: true
}
]
}
) {
id
event_type
webhook_url
is_sync
}
}
Argumenty
| Argument | Typ | Opis |
|---|---|---|
| entity_identifier | ID! |
Unikatowy identyfikator encji lub jej pełny slug (np. app_slug::feature_slug). Jeśli użyjesz sluga, żądanie zostanie zastosowane do rozpoznanej aktywnej wersji aplikacji. |
| entity_type | String! |
Typ encji. Obecnie obsługiwana jest tylko wartość appFeature. |
| input | UpdateLifecycleSubscriptionsInput! |
Dane wejściowe konfiguracji zdarzeń cyklu życia encji. |
Gdy używasz pełnego sluga aplikacji, API automatycznie ustala, której wersji aplikacji dotyczy żądanie.
- Jeśli aktywna wersja jest wersją roboczą, żądanie zostanie zastosowane do tej wersji.
- Jeśli aktywna wersja nie jest włączona do edycji (czyli nie jest wersją roboczą), żądanie zostanie zastosowane do aktywnej wersji.
- Jeśli nie ma aktywnej wersji, żądanie zostanie zastosowane do najnowszej wersji roboczej.
Usuwanie subskrypcji cyklu życia aplikacji
Usuwa wszystkie subskrypcje cyklu życia aplikacji. Zwraca wartość Boolean informującą, czy usunięcie się powiodło, czy też nie istnieją żadne subskrypcje.
mutation {
delete_app_lifecycle_subscription(
entity_identifier: "my-app::my-object-feature"
entity_type: "appFeature"
)
}
Argumenty
| Argument | Typ | Opis |
|---|---|---|
| entity_identifier | String |
Unikatowy identyfikator encji lub jej pełny slug (np. app_slug::feature_slug). Jeśli użyjesz sluga, usunięta zostanie aktywna wersja. |
| entity_type | String |
Typ encji. Obecnie obsługiwana jest tylko wartość appFeature. |
Przepływ zdarzeń
Po skonfigurowaniu subskrypcji zdarzeń cyklu życia na poziomie funkcji za pomocą API poniższy przepływ odbywa się za każdym razem, gdy zostanie wywołane subskrybowane zdarzenie.
sequenceDiagram
participant MondayPlatform as monday platform
participant MondayAppsService as monday app service
participant YourApp as Your app
MondayPlatform->>MondayAppsService: Lifecycle event triggered
MondayAppsService->>MondayAppsService: Look up subscription
MondayAppsService->>YourApp: POST to webhook URL
alt Sync Mode (is_sync: true)
YourApp-->>MondayAppsService: HTTP 200 (success) or 4XX (failure)
MondayAppsService->>MondayPlatform: Notify result
Note right of MondayPlatform: Update UI
else Async Mode (is_sync: false)
YourApp-->>MondayAppsService: HTTP 202 (acknowledged)
Note right of YourApp: Process event...
YourApp->>MondayAppsService: POST to back_to_url with result
MondayAppsService->>MondayPlatform: Notify result
Note right of MondayPlatform: Update UI
end
Zabezpieczenia webhooka
Wszystkie żądania webhook związane ze zdarzeniami cyklu życia na poziomie funkcji są uwierzytelniane za pomocą tokenu JWT podpisanego tajnym kluczem aplikacji.
Twój serwer musi zweryfikować token JWT w każdym żądaniu, aby potwierdzić, że zostało wysłane przez monday.com. Otrzymanie danych bez weryfikacji podpisu nie gwarantuje, że żądanie jest autentyczne.
Żądanie webhook
Gdy zostanie wywołane subskrybowane zdarzenie na poziomie funkcji, monday.com wysyła żądanie POST na skonfigurowany adres URL webhooka.
Nagłówki
- Authorization: JWT podpisany tajnym kluczem aplikacji (służy do potwierdzenia, że żądanie pochodzi od monday)
- Content-Type: application/json
- X-Apps-Event-Id: Unikatowy identyfikator zdarzenia do śledzenia
Treść żądania
json
{
"type": "AppFeatureObject:create",
"payload": {
// Event-specific data
},
"accountId": 12345,
"userId": 67890,
"back_to_url": "https://monday-apps-ms.monday.com/api/webhooks/response/{jobId}"
}
Weryfikowanie żądania webhook
Aby upewnić się, że żądanie zostało wysłane przez monday.com:
- Pobierz token JWT z nagłówka
Authorization. - Zweryfikuj podpis tokenu JWT za pomocą tajnego klucza aplikacji.
- Odrzuć żądanie, jeśli weryfikacja się nie powiedzie.
Więcej informacji o nagłówku Authorization znajdziesz tutaj.
Tryb synchroniczny i asynchroniczny
Każde zdarzenie cyklu życia na poziomie funkcji można obsługiwać niezależnie, synchronicznie lub asynchronicznie.
Tryb asynchroniczny
- Odpowiedz kodem HTTP 202, aby potwierdzić otrzymanie żądania
- Przetwórz zdarzenie w tle
- Wywołaj
back\_to\_urlpo zakończeniu przetwarzania
<p><strong>Przykład odpowiedzi asynchronicznej</strong></p>
```bash
curl -X POST "{back_to_url}" \
-H "Content-Type: application/json" \
-d '{"success": true}'
```
<p><strong>Najlepszy wybór w przypadku:</strong> złożonych obliczeń, wywołań zewnętrznych interfejsów API, operacji na bazach danych i przetwarzania plików</p>
Tryb synchroniczny
- Odpowiedz od razu kodem HTTP 200 (sukces) lub 4XX (błąd)
- Wybierz ten tryb, gdy przetwarzanie jest szybkie i wymaga natychmiastowej informacji zwrotnej
<p>
<strong>Najlepszy wybór w przypadku:</strong> prostych walidacji, szybkich przekształceń danych i natychmiastowych odpowiedzi o błędach
</p>
Tryb asynchroniczny
- Odpowiedz kodem HTTP 202, aby potwierdzić otrzymanie żądania
- Przetwórz zdarzenie w tle
- Wywołaj
back\_to\_urlpo zakończeniu przetwarzania
<p><strong>Przykład odpowiedzi asynchronicznej</strong></p>
```bash
curl -X POST "{back_to_url}" \
-H "Content-Type: application/json" \
-d '{"success": true}'
```
<p><strong>Najlepszy wybór w przypadku:</strong> złożonych obliczeń, wywołań zewnętrznych interfejsów API, operacji na bazach danych i przetwarzania plików</p>
Tryb synchroniczny
- Odpowiedz od razu kodem HTTP 200 (sukces) lub 4XX (błąd)
- Wybierz ten tryb, gdy przetwarzanie jest szybkie i wymaga natychmiastowej informacji zwrotnej
<p>
<strong>Najlepszy wybór w przypadku:</strong> prostych walidacji, szybkich przekształceń danych i natychmiastowych odpowiedzi o błędach
</p>