# Akcje automatyczne dla wiadomości Autoresponder i akcje automatyczne dla wiadomości w Ritevo: wyzwalacze, warunki z godzinami, odpowiedzi z szablonu i AI, ochrona przed pętlą. Akcja dla wiadomości reaguje na to, co dzieje się w skrzynce: nowy wątek, nową wiadomość, zmianę statusu. Najczęściej odpowiada klientowi - stałym tekstem, szablonem z danymi z wątku albo odpowiedzią napisaną przez AI - przypisuje wątek do konkretnego użytkownika, ustawia Twój własny status, oznacza wątek jako przeczytany lub ulubiony, dopisuje notatkę i wiele innych. Ogólne zasady opisuje strona [Jak działają akcje automatyczne](https://ritevo.com/pl/docs/automations/how-it-works). > **Wymagana integracja:** Potrzebujesz integracji z włączonym [pobieraniem wiadomości](https://ritevo.com/pl/docs/messages/fetching-messages). Krok **Wyślij wiadomość AI do wątku** wymaga dodatkowo integracji AI (OpenAI albo Claude), a **Wyślij wiadomość z szablonu do wątku** - zapisanego szablonu wiadomości. > **Warto wiedzieć:** Do każdej akcji, która odpowiada klientowi, dodaj warunek **Odebrano wiadomość od klienta**. Bez niego akcja zareaguje także na własne odpowiedzi i może się zapętlić - wyjaśnienie niżej. ## Gdzie znajdziesz akcje Akcje dla wiadomości są w menu **Wiadomości → Akcje** (w lewym panelu). Lista pokazuje przy każdej akcji jej wyzwalacz, warunki i kroki oraz to, czy jest aktywna. Nową akcję dodajesz przyciskiem **Dodaj nowa akcję** w prawym górnym rogu. Okruszki u góry strony (**Pulpit → Wiadomości → Akcje**) zawsze pokazują, gdzie jesteś. ![Lista akcji automatycznych dla wiadomości z podświetloną pozycją Akcje w lewym panelu; przycisk Dodaj nowa akcję w prawym górnym rogu jest zaznaczony ramką](https://ritevo.com/docs/automations/pl-message-actions-list.webp) Formularz akcji wygląda tak samo jak dla zamówień: u góry ustawienia podstawowe (nazwa, opis, wyzwalacz, strefa czasowa, **Aktywna**), po lewej warunki, po prawej kroki. ![Pusty formularz nowej akcji dla wiadomości: ustawienia podstawowe, karta warunku i karta kroku](https://ritevo.com/docs/automations/pl-message-action-form-empty.webp) ## Wyzwalacze - **Nowy wątek** (API: "Nowy wątek" = `NEW_THREAD`) - w Ritevo pojawił się wątek, którego wcześniej nie było. To zwykle pierwsza wiadomość klienta w danej sprawie. - **Odpowiedź w wątku** (API: "Odpowiedź w wątku" = `MESSAGE_RESPONSE`) - w istniejącym wątku pojawiła się nowa wiadomość. **Niezależnie od tego, kto ją napisał** - klient czy Ty. - **Odpowiedź z szablonu w wątku** (API: "Odpowiedź z szablonu w wątku" = `TEMPLATE_MESSAGE_RESPONSE`) - akcja automatyczna wysłała odpowiedź z szablonu. - **Odpowiedź AI w wątku** (API: "Odpowiedź AI w wątku" = `AI_MESSAGE_RESPONSE`) - akcja automatyczna wysłała odpowiedź AI. - **Zmiana statusu** (API: "Zmiana statusu" = `USER_DEFINED_STATUS_CHANGED`) - zmienił się Twój własny status wątku. - **Zmiana przypisania użytkownika**, **Zmiana statusu przeczytania**, **Zmiana statusu ulubionych**, **Zmiana własnej notatki**. (API: "Zmiana przypisania użytkownika" = `ASSIGNED_USER_CHANGED`, "Zmiana statusu przeczytania" = `READ_STATUS_CHANGED`, "Zmiana statusu ulubionych" = `FAVORITE_STATUS_CHANGED`, "Zmiana własnej notatki" = `OWN_NOTE_CHANGED`) Pierwsza wiadomość klienta uruchamia **Nowy wątek**, a każda następna w tej samej rozmowie - **Odpowiedź w wątku**. Wątek może być stary: klient, który kupował u Ciebie rok temu, często pisze w tej samej rozmowie i wtedy jest to **Odpowiedź w wątku**, a nie **Nowy wątek**. Dlatego autoresponder zawsze buduj jako **parę akcji** - jedną z wyzwalaczem **Nowy wątek** i drugą z wyzwalaczem **Odpowiedź w wątku**, z tymi samymi warunkami i krokami. ## Dlaczego warunek „od klienta" jest konieczny Wiadomości, które wysyłasz - ręcznie albo przez akcję - wracają do Ritevo przy kolejnym pobraniu z kanału i też są „nową wiadomością w wątku". Wyzwalacz **Odpowiedź w wątku** nie rozróżnia kierunku. Rozróżniają go dopiero warunki: - **Odebrano wiadomość od klienta** (API: "Odebrano wiadomość od klienta" = `MESSAGE_FROM_INTERLOCUTOR`; wartość w `booleanValues`: zawsze `[true]`) - ostatnia wiadomość w wątku jest od klienta. - **Wysłano wiadomość do klienta** (API: "Wysłano wiadomość do klienta" = `MESSAGE_FROM_SELF`; wartość w `booleanValues`: zawsze `[true]`) - ostatnia wiadomość jest od Ciebie. Akcja bez warunku **Odebrano wiadomość od klienta** **może się zapętlić**. Jej własna odpowiedź wraca przy kolejnym pobraniu wiadomości jako nowa wiadomość w wątku, akcja odpowiada na nią ponownie - i tak przy każdym pobraniu, bez końca. Bezpiecznik opisany na stronie ogólnej tego nie zatrzyma, bo między kolejnymi odpowiedziami mija kilka minut, a on reaguje na wiele wykonań w krótkim czasie. Klient dostawałby tę samą odpowiedź w kółko, dopóki nie wyłączysz akcji. Ten jeden warunek rozwiązuje problem u źródła, dlatego dodawaj go zawsze. ## Warunki ### Kto napisał i skąd - **Odebrano wiadomość od klienta** / **Wysłano wiadomość do klienta**. (API: "Odebrano wiadomość od klienta" = `MESSAGE_FROM_INTERLOCUTOR`, "Wysłano wiadomość do klienta" = `MESSAGE_FROM_SELF`; wartość w `booleanValues`: zawsze `[true]`) - **Integracja jest** / **Integracja nie jest** (API: "Integracja jest" = `INTEGRATION_IS`, "Integracja nie jest" = `INTEGRATION_IS_NOT`; wartość w `uuidValues`: id integracji z wiadomościami: `GET /integrations/marketplaces`, `GET /integrations/shops`, `GET /integrations/email`, `GET /integrations/messaging`) - z którego kanału pochodzi wątek. Wybierasz z listy swoich integracji - jedną albo kilka. Przy kilku wystarczy dowolna z nich. - **Typ konwersacji jest** / **Typ konwersacji nie jest** (API: "Typ konwersacji jest" = `THREAD_TYPE_IS`, "Typ konwersacji nie jest" = `THREAD_TYPE_IS_NOT`; wartość w `enumValues`: `MESSAGE`, `DISCUSSION`, `CLAIM`) - Wiadomość, Dyskusja albo Reklamacja; jedna albo kilka. - **Status konwersacji jest** / **Status konwersacji nie jest** (API: "Status konwersacji jest" = `THREAD_STATUS_IS`, "Status konwersacji nie jest" = `THREAD_STATUS_IS_NOT`; wartość w `enumValues`: `DISPUTE_ONGOING`, `DISPUTE_CLOSED`, `DISPUTE_UNRESOLVED`, `CLAIM_SUBMITTED`, `CLAIM_ACCEPTED`, `CLAIM_REJECTED`) - stan dyskusji lub reklamacji w kanale sprzedaży. ### Treść - **Wiadomość zawiera słowa kluczowe** / **Wiadomość nie zawiera słów kluczowych** (API: "Wiadomość zawiera słowa kluczowe" = `MESSAGE_CONTAINS_KEYWORDS`, "Wiadomość nie zawiera słów kluczowych" = `MESSAGE_NOT_CONTAINS_KEYWORDS`; wartość w `stringValues`: lista słów lub fragmentów tekstu; wystarczy dowolny z nich, wielkość liter nie ma znaczenia) - sprawdzana jest **ostatnia** wiadomość w wątku. Wystarczy jedno z podanych słów, wielkość liter nie ma znaczenia. - **Temat zawiera słowa kluczowe** / **Temat nie zawiera słów kluczowych**, **Własna notatka zawiera słowa kluczowe** / **Własna notatka nie zawiera słów kluczowych** (API: "Temat zawiera słowa kluczowe" = `TOPIC_CONTAINS_KEYWORDS`, "Temat nie zawiera słów kluczowych" = `TOPIC_NOT_CONTAINS_KEYWORDS`, "Własna notatka zawiera słowa kluczowe" = `OWN_NOTE_CONTAINS_KEYWORDS`, "Własna notatka nie zawiera słów kluczowych" = `OWN_NOTE_NOT_CONTAINS_KEYWORDS`; wartość w `stringValues`: lista słów lub fragmentów tekstu; wystarczy dowolny z nich, wielkość liter nie ma znaczenia) - działają tak samo. ### Godzina, dzień i data - **Godzina wykonania akcji od** / **do** (API: "Godzina wykonania akcji od" = `CURRENT_TIME_FROM`, "do" = `CURRENT_TIME_TO`; wartość w `offsetDateTimeValue`: data z czasem i przesunięciem strefy akcji; liczy się tylko godzina i minuta, na przykład `2026-01-10T16:00:00+01:00`) - która jest godzina w chwili, gdy akcja się wykonuje. - **Godzina wiadomości od** / **do** (API: "Godzina wiadomości od" = `MESSAGE_TIME_FROM`, "do" = `MESSAGE_TIME_TO`; wartość w `offsetDateTimeValue`: data z czasem i przesunięciem strefy akcji; liczy się tylko godzina i minuta, na przykład `2026-01-10T16:00:00+01:00`) - o której przyszła ostatnia wiadomość. - **Dzień wykonania akcji jest** / **nie jest**, **Dzień wiadomości jest** / **nie jest** (API: "Dzień wykonania akcji jest" = `CURRENT_DAY_OF_WEEK_IS`, "nie jest" = `CURRENT_DAY_OF_WEEK_IS_NOT`, "Dzień wiadomości jest" = `MESSAGE_DAY_OF_WEEK_IS`, "nie jest" = `MESSAGE_DAY_OF_WEEK_IS_NOT`; wartość w `integerValues`: liczby 1-7, gdzie 1 to poniedziałek, a 7 niedziela) - dni tygodnia. - **Data wykonania akcji od** / **do**, **Data wiadomości od** / **do** (API: "Data wykonania akcji od" = `CURRENT_DATE_FROM`, "do" = `CURRENT_DATE_TO`, "Data wiadomości od" = `MESSAGE_DATE_FROM`, "do" = `MESSAGE_DATE_TO`; wartość w `offsetDateTimeValue`: data z czasem i przesunięciem; liczy się cały moment) - na przykład na czas urlopu. > **Warto wiedzieć:** Godziny liczone są w strefie czasowej ustawionej w akcji. Przedział to dwa warunki (**od** i **do**), a granice się wliczają. Przedział przez północ wymaga dwóch akcji - [dlaczego](https://ritevo.com/pl/docs/automations/how-it-works#conditions). ### Stan wątku - **Status jest** / **Status nie jest** (API: "Status jest" = `USER_DEFINED_STATUS_IS`, "Status nie jest" = `USER_DEFINED_STATUS_IS_NOT`; wartość w `uuidValues`: id własnych statusów wątków: `GET /messages/statuses`) - Twoje własne statusy, jeden albo kilka. - **Przypisanym użytkownikiem jest** / **nie jest** (API: "Przypisanym użytkownikiem jest" = `ASSIGNED_USER_IS`, "nie jest" = `ASSIGNED_USER_IS_NOT`; wartość w `uuidValues`: id użytkowników firmy: `GET /company/users`) - jeden albo kilku użytkowników. - **Konwersacja jest przeczytana** / **Konwersacja nie jest przeczytana**, **Konwersacja jest w ulubionych** / **Konwersacja nie jest w ulubionych**. (API: "Konwersacja jest przeczytana" = `READ_STATUS_IS`, "Konwersacja nie jest przeczytana" = `READ_STATUS_IS_NOT`, "Konwersacja jest w ulubionych" = `FAVORITE_STATUS_IS`, "Konwersacja nie jest w ulubionych" = `FAVORITE_STATUS_IS_NOT`; wartość w `booleanValues`: lista z jedną wartością: `[true]` albo `[false]`) - **Brak notatki** / **Posiada notatkę** / **Notatka została usunięta**. (API: "Brak notatki" = `OWN_NOTE_IS_EMPTY`, "Posiada notatkę" = `OWN_NOTE_IS_NOT_EMPTY`, "Notatka została usunięta" = `OWN_NOTE_CHANGED_TO_EMPTY`; wartość w `booleanValues`: zawsze `[true]`) - **Status przeczytania zmienił się z** / **na**, **Status ulubiony zmienił się z** / **na** (API: "Status przeczytania zmienił się z" = `READ_STATUS_CHANGED_FROM`, "na" = `READ_STATUS_CHANGED_TO`, "Status ulubiony zmienił się z" = `FAVORITE_STATUS_CHANGED_FROM`, "na" = `FAVORITE_STATUS_CHANGED_TO`; wartość w `booleanValues`: lista z jedną wartością: `[true]` albo `[false]`) - reagują na samą zmianę. ## Kroki - co akcja może zrobić ### Odpowiedź do klienta - **Wyślij wiadomość do wątku** (API: "Wyślij wiadomość do wątku" = `SEND_MESSAGE_TO_THREAD`; wartość w `stringValue`: tekst do 2000 znaków) - stały tekst, do 2000 znaków. Wysyłany dosłownie, bez wstawianych wartości. - **Wyślij wiadomość z szablonu do wątku** (API: "Wyślij wiadomość z szablonu do wątku" = `TEMPLATE_SEND_MESSAGE_TO_THREAD`; wartość w `uuidValue`: id szablonu wiadomości: `GET /messages/templates`) - treść z zapisanego szablonu. Tylko w szablonie działają wstawiane wartości: **Rozmówca**, **Temat wątku**, **Status wątku**, **Numer zamówienia**, **Id zamówienia (zew.)**, **Id oferty (zew.)**. W edytorze szablonu klikasz wybraną wartość, a przy wysyłce podstawiają się dane z wątku. Jeśli wątek danej wartości nie ma (na przykład tematu albo id oferty), wstawia się ona jako pusta. - **Wyślij wiadomość AI do wątku** (API: "Wyślij wiadomość AI do wątku" = `AI_SEND_MESSAGE_TO_THREAD`; wartość w `uuidValue`: id integracji AI: `GET /integrations/ai`) - odpowiedź pisze wybrana integracja AI i Ritevo **od razu wysyła ją klientowi**. ### Jak działa odpowiedź AI - AI dostaje **treść ostatniej wiadomości klienta** oraz instrukcję, którą wpisałeś w ustawieniach integracji AI. Nie dostaje wcześniejszej historii wątku ani danych zamówienia. - Wszystko, co AI ma wiedzieć o Twojej firmie - godziny pracy, zasady zwrotów, ton odpowiedzi - wpisz w instrukcji integracji AI. - Nie ma trybu szkicu. Odpowiedź wychodzi do klienta bez Twojej akceptacji, więc zacznij od wąskich warunków, na przykład słów kluczowych albo jednego kanału. - Jeśli AI zwróci błąd, nic nie jest wysyłane, a błąd zobaczysz w audycie wiadomości. Koszt odpowiedzi rozlicza Twoje konto u dostawcy AI. ### Porządkowanie wątku - **Przypisz użytkownika** (API: "Przypisz użytkownika" = `UPDATE_ASSIGNED_USER`; wartość w `uuidValue`: id użytkownika z `GET /company/users`; `null` zdejmuje przypisanie) - także zdjęcie przypisania. - **Zaktualizuj status** (własny), **Zaktualizuj status przeczytania**, **Zaktualizuj status ulubione**, **Zaktualizuj własną notatkę**. (API: "Zaktualizuj status" = `UPDATE_USER_DEFINED_STATUS`; wartość w `uuidValue`: id własnych statusów wątków: `GET /messages/statuses` | "Zaktualizuj status przeczytania" = `UPDATE_READ_STATUS`, "Zaktualizuj status ulubione" = `UPDATE_FAVORITE_STATUS`; wartość w `booleanValue`: `true` albo `false` | "Zaktualizuj własną notatkę" = `UPDATE_OWN_NOTE`; wartość w `stringValue`: tekst do 255 znaków; `null` czyści notatkę) ## Przykład: autoresponder poza godzinami pracy Pracujesz od poniedziałku do piątku, 8:00-16:00. Klient, który napisze poza tym czasem, ma dostać informację, kiedy odpowiesz. > **Warto wiedzieć:** Każdą akcję poniżej tworzysz **dwa razy**: raz z wyzwalaczem **Nowy wątek** i raz z wyzwalaczem **Odpowiedź w wątku**. Warunki i krok są w obu takie same. Bez drugiej wersji autoresponder pominie klientów, którzy piszą w rozmowie istniejącej już w Ritevo - nawet jeśli poprzednia wiadomość była rok temu. ### Akcja 1 - weekend - Warunki: **Odebrano wiadomość od klienta**, **Dzień wykonania akcji jest** sobota, niedziela. - Krok: **Wyślij wiadomość z szablonu do wątku** z tekstem w rodzaju „Dziękujemy za wiadomość. Odpowiemy w najbliższy dzień roboczy." ### Akcja 2 - dni robocze po 16:00 - Warunki: **Odebrano wiadomość od klienta**, **Dzień wykonania akcji nie jest** sobota, niedziela, **Godzina wykonania akcji od** 16:00. - Krok: ten sam co w akcji 1. ### Akcja 3 - dni robocze przed 8:00 - Warunki: **Odebrano wiadomość od klienta**, **Dzień wykonania akcji nie jest** sobota, niedziela, **Godzina wykonania akcji do** 08:00. - Krok: ten sam co w akcji 1. Razem tworzysz sześć akcji: akcję 1, 2 i 3, każdą w dwóch wersjach - z wyzwalaczem **Nowy wątek** i z wyzwalaczem **Odpowiedź w wątku**. Akcje 2 i 3 są osobno, bo przedział 16:00-08:00 przechodzi przez północ. Warunek z dniem tygodnia w akcjach 2 i 3 pilnuje, żeby w weekend klient nie dostał dwóch odpowiedzi. ## Przykład: odpowiedź AI z przypisaniem pracownika Para akcji z aplikacji: na każdą wiadomość od klienta odpowiada AI, a wątek trafia do wybranego pracownika. Obie akcje mają te same warunki i kroki, różnią się tylko wyzwalaczem. ### Akcja 1 - wyzwalacz Nowy wątek - Wyzwalacz: **Nowy wątek**. - Warunek: **Odebrano wiadomość od klienta**. - Kroki: **Wyślij wiadomość AI do wątku** z wybraną integracją AI, potem **Przypisz użytkownika** do wybranej osoby. ![Formularz akcji: wyzwalacz Nowy wątek, warunek Odebrano wiadomość od klienta, kroki Wyślij wiadomość AI do wątku i Przypisz użytkownika](https://ritevo.com/docs/automations/pl-message-action-new-thread.webp) ### Akcja 2 - wyzwalacz Odpowiedź w wątku - To samo, tylko z wyzwalaczem **Odpowiedź w wątku** - dzięki temu AI odpowiada także na kolejne wiadomości klienta w tej samej rozmowie. ![Ta sama akcja z wyzwalaczem Odpowiedź w wątku](https://ritevo.com/docs/automations/pl-message-action-reply.webp) > **Warto wiedzieć:** Warunek **Odebrano wiadomość od klienta** jest tu konieczny: bez niego akcja 2 odpowiadałaby na własne odpowiedzi AI. Odpowiedź AI idzie do klienta od razu, więc zacznij od jednego kanału (warunek **Integracja jest**) i sprawdzaj wyniki w audycie. ## W których kanałach odpowiedź zadziała Akcja wysyła odpowiedź tą samą drogą, którą odpowiadasz ręcznie. Jeśli w danym kanale nie da się odpowiedzieć ręcznie, akcja też tego nie zrobi. Na stronie danej integracji sprawdzisz, czy możesz w niej odpowiadać na wiadomości, dyskusje i reklamacje. ## Czego akcja dla wiadomości nie zrobi - Nie wyśle załącznika. - Nie wstawi wartości z wątku w zwykłym tekście - tylko w szablonie. - Nie zamknie dyskusji ani reklamacji i nie zmieni ich stanu w kanale sprzedaży. - Nie odpowie z opóźnieniem ani „jeśli nikt nie odpisał przez godzinę". - Nie ma ograniczenia „raz na wątek" ani przerwy między odpowiedziami - zakres ustawiasz wyzwalaczem i warunkami. ## Audyt wykonania Wykonania znajdziesz w **Ustawienia → Audyt → Wiadomości**. Znaczenie wyników opisuje strona [Jak działają akcje automatyczne](https://ritevo.com/pl/docs/automations/how-it-works#history). ## Przykład zapisu przez API Akcja 2 z przykładu autorespondera (dni robocze po 16:00) w wersji z wyzwalaczem **Nowy wątek**. Drugą wersję tworzysz tak samo, zmieniając `triggerType` na `MESSAGE_RESPONSE`. Ogólne zasady zapisu są na stronie [Jak działają akcje automatyczne](https://ritevo.com/pl/docs/automations/how-it-works). ```json { "name": "Autoresponder - working days after 16:00 (new thread)", "description": "Tells the customer when we will reply", "active": true, "userTimezone": "Europe/Warsaw", "triggerType": "NEW_THREAD", "conditions": [ { "type": "MESSAGE_FROM_INTERLOCUTOR", "booleanValues": [ true ] }, { "type": "CURRENT_DAY_OF_WEEK_IS_NOT", "integerValues": [ 6, 7 ] }, { "type": "CURRENT_TIME_FROM", "offsetDateTimeValue": "2026-01-10T16:00:00+01:00" } ], "actionSteps": [ { "stepOrder": 1, "action": { "type": "TEMPLATE_SEND_MESSAGE_TO_THREAD", "uuidValue": "" } } ] } ``` --- Cała pomoc w jednym pliku: https://ritevo.com/llms-full.txt. Mapa pomocy z linkami do wszystkich stron: https://ritevo.com/llms.txt.