Połącz własnego agenta
Własny agent to zewnętrzny agent AI, którego posiadasz i hostujesz. Po połączeniu otrzymuje własną tożsamość w monday.com. Można go oznaczać za pomocą @ w aktualizacjach lub przypisywać do elementów. Agent działa na tablicach za pośrednictwem API monday.com.
Gdy agent zostanie wywołany, monday.com wysyła podpisane żądanie HTTP POST na podany przez Ciebie adres URL wywołania zwrotnego. Potwierdź otrzymanie żądania w ciągu 30 sekund. W przypadku czatu z agentem wyślij widoczną odpowiedź później za pomocą send_custom_agent_message, używając wartości payload.conversationId z webhooka. Twoja usługa może też działać niezależnie w monday.com, korzystając z tokena API wydanego podczas łączenia agenta.
Ta funkcja jest w wersji alfa i jest aktywnie rozwijana (stan na czerwiec 2026 r.). Przed ogólną dostępnością należy spodziewać się zmian powodujących niezgodność. Wszystkie żądania wymagają nagłówka api-version: dev.
📘 Mutacje GraphQL wymienione w tym artykule (
connect_external_agent_sync,update_custom_agent,send_custom_agent_message,disconnect_external_agent,add_agent_resource_access) są szczegółowo opisane w dokumentacji referencyjnej Agents API.
Krok 1. Utwórz agenta
W interfejsie: przejdź do Agenci (Agents) → Zarządzaj agentami (Manage agents) → Dodaj własnego agenta (Bring your agent), wybierz Własny agent (Custom agent), wpisz nazwę i opcjonalnie podaj Adres URL wywołania zwrotnego (Callback URL). W oknie potwierdzenia skopiuj Token API (API Token) i Tajny klucz podpisu (Signing Secret) - są wyświetlane tylko raz.
Za pomocą API: wywołaj connect_external_agent_sync. Mutacja zwraca agent_id, signing_secret i api_token.
Adres URL wywołania zwrotnego jest opcjonalny. Podaj go, jeśli chcesz, by monday.com powiadamiało Twoją usługę o wywołaniu agenta. Jeśli go nie podasz, agent i tak zostanie utworzony i otrzymasz token API. Możesz sterować agentem za pomocą API monday.com i tego tokena, ale nie będziesz otrzymywać zdarzeń webhook.
Wartości signing_secret i api_token są zwracane tylko raz i nigdy więcej nie są wyświetlane ani logowane. Od razu zapisz je w menedżerze sekretów. Jeśli je utracisz, rozłącz agenta i połącz go ponownie, aby wygenerować nowe dane uwierzytelniające.
Krok 2. Odbierz webhook wywołujący agenta
Gdy agent zostanie wywołany, monday.com wysyła podpisane żądanie POST na podany przez Ciebie adres URL wywołania zwrotnego.
Treść żądania:
{
"event": "agent_triggered",
"triggerType": "chat",
"payload": {
"text": "<trigger text>",
"conversationId": "v1.example-conversation-token"
},
"timestamp": "2026-06-15T10:30:00Z"
}
| Pole | Wartości | Opis |
|---|---|---|
event |
agent_triggered |
W webhookach własnych agentów zawsze ma wartość agent_triggered. |
triggerType |
chat, mention, assigned, unknown |
Sposób wywołania agenta. Mogą pojawić się aliasy, takie jak assign - ujednolić je. |
payload.text |
ciąg znaków | Tekst, który wywołał agenta. |
payload.conversationId |
ciąg znaków | Dotyczy tylko czatu. Nieprzezroczysty identyfikator konwersacji. Przekaż go bez zmian jako conversation_id do send_custom_agent_message. |
timestamp |
ciąg znaków ISO 8601 | Czas wystąpienia zdarzenia. |
Nagłówki żądania:
| Nagłówek | Opis |
|---|---|
x-monday-signature |
sha256=<hex> - podpis żądania HMAC-SHA256. |
x-monday-timestamp |
Czas wysłania żądania przez monday.com w milisekundach od epoki Unix. |
x-monday-agent-id |
Identyfikator agenta, który wywołał zdarzenie. |
content-type |
application/json |
Krok 3. Odpowiedz na webhook
monday.com wysyła żądanie POST z informacją o wywołaniu na podany przez Ciebie adres URL i czeka do 30 sekund na odpowiedź HTTP 200. Treść odpowiedzi może mieć maksymalnie 1 MB. W przypadku czatu z agentem odpowiedź HTTP służy tylko do potwierdzenia otrzymania żądania. Wiadomość widoczną dla użytkownika wyślij później za pomocą send_custom_agent_message.
Odpowiedz na czacie
- Odczytaj
payload.conversationIdz webhooka. To nieprzezroczysty ciąg znaków - przekaż go bez zmian. - Zwróć odpowiedź HTTP 200, zanim rozpoczniesz dłużej trwające operacje. Jeśli pominięto
streamlub ma wartośćtrue, zwróć pusty strumień SSE zakończony przezdata: [DONE]. Jeślistreamma wartośćfalse, zwróć{ "success": true }. - Wywołaj
send_custom_agent_messageza pomocą wartościapi_tokenagenta. Ustawconversation_idnapayload.conversationId.
Możesz używać tej samej wartości conversation_id w dowolnej liczbie wiadomości przez maksymalnie 7 dni. Zmiana adresu URL wywołania zwrotnego lub ponowne połączenie agenta unieważni tę wartość.
mutation ($input: SendCustomAgentMessageInput!) {
send_custom_agent_message(input: $input) {
delivered
message_id
}
}
{
"input": {
"conversation_id": "v1.example-conversation-token",
"message": "The project is 62% complete - 3 tasks remain in the backlog."
}
}
await mondayApi(agentApiToken, `
mutation ($input: SendCustomAgentMessageInput!) {
send_custom_agent_message(input: $input) {
delivered
message_id
}
}`, {
input: {
conversation_id: payload.conversationId,
message: replyText,
},
});
Wartość delivered jest równa true, gdy interfejs czatu otrzyma wiadomość. message_id to identyfikator tej wiadomości.
Potwierdź otrzymanie webhooka w ciągu 30 sekund. W przeciwnym razie uruchomienie zakończy się przekroczeniem limitu czasu. Po potwierdzeniu otrzymania żądania wyślij wiadomość na czacie za pomocą send_custom_agent_message. Ta sama wartość conversationId pozostaje ważna przez maksymalnie 7 dni, chyba że zmienisz adres URL wywołania zwrotnego lub ponownie połączysz agenta.
Możesz też umieścić całą odpowiedź na czacie w treści HTTP. Zwróć JSON { "success": true, "message": "Your reply text" } albo strumieniuj wiersze SSE data: {"type":"text","content":"..."}, a na końcu dodaj data: [DONE]. Użyj tej metody tylko wtedy, gdy odpowiedź będzie gotowa w ciągu 30 sekund. W przypadku wywołań przez oznaczenie lub przypisanie treść HTTP nie jest wyświetlana - potwierdź otrzymanie żądania, a następnie wyślij wiadomość za pomocą tokena agenta (zobacz Krok 5).
Krok 4. Zweryfikuj podpis webhooka
Przed przetworzeniem zweryfikuj każdy przychodzący webhook. Użyj porównania o stałym czasie wykonania, aby zapobiec atakom czasowym.
- Odczytaj
x-monday-signatureix-monday-timestampz nagłówków żądania. - Oblicz
HMAC-SHA256(signing_secret, "{x-monday-timestamp}.{raw_body}"). - Dodaj przed wynikiem prefiks
sha256=i porównaj go zx-monday-signature, używając porównania o stałym czasie wykonania. - Odrzuć żądania, jeśli podpisy się nie zgadzają lub znacznik czasu jest nieaktualny.
const crypto = require('crypto');
function verifySignature(signingSecret, rawBody, headers) {
const timestamp = headers['x-monday-timestamp'];
const receivedSig = headers['x-monday-signature'];
if (!timestamp || !receivedSig) return false;
const expected = 'sha256=' + crypto
.createHmac('sha256', signingSecret)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
// timingSafeEqual throws if the buffers differ in length, so guard first.
const expectedBuf = Buffer.from(expected);
const receivedBuf = Buffer.from(receivedSig);
return (
expectedBuf.length === receivedBuf.length &&
crypto.timingSafeEqual(expectedBuf, receivedBuf)
);
}
Wartość callback_url musi być prawidłowym adresem HTTPS dostępnym z infrastruktury monday.com. Adres jest ponownie weryfikowany podczas wykonywania, aby chronić przed atakami SSRF i DNS rebinding.
Krok 5. Wykonuj działania w monday.com
Połączone agenty działają pod własną tożsamością monday.com - uprawnienia dostępu Twojego konta nie są przenoszone na agenta. Przyznaj agentowi dostęp do potrzebnych tablic lub dokumentów (strona agenta → Wiedza i dostęp (Knowledge and access) albo mutacja add_agent_resource_access), a następnie wywołaj API za pomocą wartości api_token agenta:
curl -X POST https://api.monday.com/v2 \
-H "Authorization: <agent-api-token>" \
-H "Content-Type: application/json" \
-d '{"query": "{ me { id name } }"}'
Wartość api_token jest ważna przez długi czas - nie wygasa automatycznie i zostaje unieważniona dopiero po rozłączeniu agenta. Używaj jej do operacji trwających dłużej niż 30-sekundowe okno webhooka, w tym do wysyłania odpowiedzi na czacie za pomocą send_custom_agent_message.
Zarządzanie agentem
- Zaktualizuj nazwę lub adres URL wywołania zwrotnego -
update_custom_agent(token właściciela zagent_idalbo własnyapi_tokenagenta bezagent_id). Zmiana wartościcallback_urlpowoduje wygenerowanie nowej wartościsigning_secret- zapisz ją. - Rozłącz agenta -
disconnect_external_agent. Spowoduje to unieważnienie tokena agenta i usunięcie agenta.
Rozwiązywanie problemów
Agent twierdzi, że ma dostęp, ale nie może edytować elementów.
Agent działa pod własną tożsamością. Przyznaj mu dostęp READ_WRITE do odpowiedniej tablicy (zobacz Krok 5) - uprawnienia dostępu Twojego konta do tablicy nie mają wpływu na agenta.
Weryfikacja podpisu webhooka nie działa.
Oblicz HMAC-SHA256 dla "{x-monday-timestamp}.{raw_body}", używając signing_secret (nie tokena API), i użyj nieprzetworzonej treści żądania.
Przekroczono limit czasu webhooka.
Potwierdź otrzymanie webhooka w ciągu 30 sekund. Aby wysłać później odpowiedź na czacie, wywołaj send_custom_agent_message i użyj wartości payload.conversationId z webhooka.
Dane poufne zostały utracone po konfiguracji.
Wartości signing_secret i api_token są wyświetlane tylko raz. Jeśli je utracisz, rozłącz agenta i połącz go ponownie, aby wygenerować nowe dane uwierzytelniające.
📘 Dołącz do naszej społeczności deweloperów!
Jeśli masz pytania lub potrzebujesz pomocy dotyczącej własnych agentów, odwiedź społeczność deweloperów monday.com.