Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
W przypadku wdrożeń OpenClaw iMessage używaj
imsg na hoście macOS Messages z aktywnym logowaniem. Jeśli Twój Gateway działa w systemie Linux lub Windows, ustaw channels.imessage.cliPath na wrapper SSH, który uruchamia imsg na Macu.Nadrabianie przestojów Gateway jest opcjonalne. Gdy jest włączone (channels.imessage.catchup.enabled: true), gateway przy następnym uruchomieniu odtwarza wiadomości przychodzące, które trafiły do chat.db, gdy był offline (awaria, restart, uśpienie Maca). Domyślnie wyłączone — zobacz Nadrabianie po przestoju gateway. Zamyka openclaw#78649.imsg rpc i komunikuje się przez JSON-RPC na stdio (bez osobnego demona/portu). Zaawansowane akcje wymagają imsg launch oraz pomyślnej sondy prywatnego API.
Akcje prywatnego API
Odpowiedzi, tapbacki, efekty, załączniki i zarządzanie grupami.
Parowanie
Wiadomości prywatne iMessage domyślnie używają trybu parowania.
Zdalny Mac
Użyj wrappera SSH, gdy Gateway nie działa na Macu z Messages.
Dokumentacja konfiguracji
Pełna dokumentacja pól iMessage.
Szybka konfiguracja
- Lokalny Mac (szybka ścieżka)
- Zdalny Mac przez SSH
Wymagania i uprawnienia (macOS)
- Messages musi być zalogowane na Macu uruchamiającym
imsg. - Full Disk Access jest wymagany dla kontekstu procesu uruchamiającego OpenClaw/
imsg(dostęp do bazy danych Messages). - Uprawnienie Automation jest wymagane do wysyłania wiadomości przez Messages.app.
- W przypadku zaawansowanych akcji (reakcja / edycja / cofnięcie wysłania / odpowiedź w wątku / efekty / operacje na grupach) funkcja System Integrity Protection musi być wyłączona — zobacz poniżej Włączanie prywatnego API imsg. Podstawowe wysyłanie/odbieranie tekstu i multimediów działa bez tego.
Włączanie prywatnego API imsg
imsg działa w dwóch trybach operacyjnych:
- Tryb podstawowy (domyślny, bez zmian SIP): tekst i multimedia wychodzące przez
send, obserwacja/historia przychodząca, lista czatów. To otrzymujesz od razu po świeżej instalacjibrew install steipete/tap/imsgoraz przyznaniu standardowych uprawnień macOS opisanych wyżej. - Tryb prywatnego API:
imsgwstrzykuje pomocniczą bibliotekę dylib doMessages.app, aby wywoływać wewnętrzne funkcjeIMCore. To odblokowujereact,edit,unsend,reply(wątek),sendWithEffect,renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroup, a także wskaźniki pisania i potwierdzenia odczytu.
imsg jasno wskazuje wymaganie:
Zaawansowane funkcje, takie jakTechnika wstrzykiwania helpera używa własnej biblioteki dylibread,typing,launch, rozbudowane wysyłanie wspierane przez bridge, mutacja wiadomości i zarządzanie czatami, są opcjonalne. Wymagają wyłączenia SIP oraz wstrzyknięcia pomocniczej biblioteki dylib doMessages.app.imsg launchodmawia wstrzyknięcia, gdy SIP jest włączone.
imsg, aby dotrzeć do prywatnych API Messages. W ścieżce OpenClaw iMessage nie ma serwera zewnętrznego ani środowiska uruchomieniowego BlueBubbles.
Konfiguracja
-
Zainstaluj (lub zaktualizuj)
imsgna Macu, na którym działa Messages.app:Wynikimsg status --jsonraportujebridge_version,rpc_methodsorazselectorsdla poszczególnych metod, dzięki czemu możesz sprawdzić, co obsługuje bieżąca kompilacja, zanim zaczniesz. -
Wyłącz System Integrity Protection. Jest to zależne od wersji macOS, ponieważ podstawowe wymaganie Apple zależy od systemu operacyjnego i sprzętu:
- macOS 10.13–10.15 (Sierra–Catalina): wyłącz Library Validation przez Terminal, uruchom ponownie w trybie Recovery Mode, uruchom
csrutil disable, zrestartuj. - macOS 11+ (Big Sur i nowsze), Intel: Recovery Mode (albo Internet Recovery),
csrutil disable, restart. - macOS 11+, Apple Silicon: sekwencja uruchamiania przyciskiem zasilania, aby wejść do Recovery; w nowszych wersjach macOS przytrzymaj klawisz Left Shift, gdy klikasz Continue, a następnie
csrutil disable. Konfiguracje maszyn wirtualnych używają osobnej procedury — najpierw zrób snapshot VM. - macOS 26 / Tahoe: zasady library-validation i kontrole prywatnych uprawnień
imagentzostały jeszcze bardziej zaostrzone;imsgmoże wymagać zaktualizowanej kompilacji, aby nadążyć. Jeśli po dużej aktualizacji macOS wstrzyknięcieimsg launchalbo konkretneselectorszaczynają zwracać false, sprawdź informacje o wydaniuimsg, zanim uznasz, że krok SIP się powiódł.
imsg launch. - macOS 10.13–10.15 (Sierra–Catalina): wyłącz Library Validation przez Terminal, uruchom ponownie w trybie Recovery Mode, uruchom
-
Wstrzyknij helper. Przy wyłączonym SIP i zalogowanym Messages.app:
imsg launchodmawia wstrzyknięcia, gdy SIP nadal jest włączone, więc działa to również jako potwierdzenie, że krok 2 został wykonany. -
Zweryfikuj bridge z OpenClaw:
Wpis iMessage powinien raportować
works, aimsg status --json | jq '.selectors'powinien pokazywaćretractMessagePart: trueoraz wszystkie selektory edycji / pisania / odczytu ujawniane przez Twoją kompilację macOS. Bramkowanie poszczególnych metod Pluginu OpenClaw wactions.tsreklamuje tylko akcje, których bazowy selektor ma wartośćtrue, więc obszar akcji widoczny na liście narzędzi agenta odzwierciedla to, co bridge może faktycznie zrobić na tym hoście.
openclaw channels status --probe raportuje kanał jako works, ale konkretne akcje zgłaszają błąd „iMessage <action> requires the imsg private API bridge” w czasie wysyłania, uruchom ponownie imsg launch — helper może zniknąć (restart Messages.app, aktualizacja systemu itd.), a buforowany status available: true będzie nadal reklamować akcje do czasu, aż następna sonda go odświeży.
Gdy nie możesz wyłączyć SIP
Jeśli wyłączenie SIP nie jest akceptowalne dla Twojego modelu zagrożeń:imsgwraca do trybu podstawowego — tylko tekst + multimedia + odbiór.- Plugin OpenClaw nadal reklamuje wysyłanie tekstu/multimediów i monitorowanie przychodzące; po prostu ukrywa
react,edit,unsend,reply,sendWithEffectoraz operacje na grupach z obszaru akcji (zgodnie z bramką możliwości dla poszczególnych metod). - Możesz uruchomić osobnego Maca bez Apple Silicon (albo dedykowanego Maca bota) z wyłączonym SIP dla obciążenia iMessage, pozostawiając SIP włączony na swoich głównych urządzeniach. Zobacz poniżej Dedykowany użytkownik macOS bota (osobna tożsamość iMessage).
Kontrola dostępu i routing
- Polityka wiadomości prywatnych
- Polityka grup + wzmianki
- Sesje i deterministyczne odpowiedzi
channels.imessage.dmPolicy kontroluje wiadomości bezpośrednie:pairing(domyślnie)allowlistopen(wymaga, abyallowFromzawierało"*")disabled
channels.imessage.allowFrom.Wpisy listy dozwolonych muszą identyfikować nadawców: uchwyty albo statyczne grupy dostępu nadawców (accessGroup:<name>). Użyj channels.imessage.groupAllowFrom dla celów czatu, takich jak chat_id:*, chat_guid:* lub chat_identifier:*; użyj channels.imessage.groups dla numerycznych kluczy rejestru chat_id.Powiązania konwersacji ACP
Starsze czaty iMessage można także powiązać z sesjami ACP. Szybki przepływ operatora:- Uruchom
/acp spawn codex --bind herew DM-ie lub dozwolonym czacie grupowym. - Przyszłe wiadomości w tej samej konwersacji iMessage będą kierowane do utworzonej sesji ACP.
/newi/resetresetują tę samą powiązaną sesję ACP w miejscu./acp closezamyka sesję ACP i usuwa powiązanie.
bindings[] z type: "acp" i match.channel: "imessage".
match.peer.id może używać:
- znormalizowanego uchwytu DM, takiego jak
+15555550123lubuser@example.com chat_id:<id>(zalecane dla stabilnych powiązań grupowych)chat_guid:<guid>chat_identifier:<identifier>
Wzorce wdrożenia
Dedykowany użytkownik bota macOS (osobna tożsamość iMessage)
Dedykowany użytkownik bota macOS (osobna tożsamość iMessage)
Użyj dedykowanego Apple ID i użytkownika macOS, aby ruch bota był odizolowany od Twojego osobistego profilu Messages.Typowy przepływ:
- Utwórz dedykowanego użytkownika macOS lub zaloguj się jako taki użytkownik.
- Zaloguj się w Messages przy użyciu Apple ID bota w ramach tego użytkownika.
- Zainstaluj
imsgu tego użytkownika. - Utwórz wrapper SSH, aby OpenClaw mógł uruchamiać
imsgw kontekście tego użytkownika. - Ustaw
channels.imessage.accounts.<id>.cliPathi.dbPathna profil tego użytkownika.
Zdalny Mac przez Tailscale (przykład)
Zdalny Mac przez Tailscale (przykład)
Typowa topologia:Użyj kluczy SSH, aby zarówno SSH, jak i SCP były nieinteraktywne.
Najpierw upewnij się, że klucz hosta jest zaufany (na przykład
- Gateway działa na Linux/VM
- iMessage +
imsgdziała na Macu w Twoim tailnecie - wrapper
cliPathużywa SSH do uruchomieniaimsg remoteHostwłącza pobieranie załączników przez SCP
ssh bot@mac-mini.tailnet-1234.ts.net), aby known_hosts było wypełnione.Wzorzec wielu kont
Wzorzec wielu kont
iMessage obsługuje konfigurację dla konta pod
channels.imessage.accounts.Każde konto może nadpisywać pola takie jak cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, ustawienia historii i allowlisty katalogów głównych załączników.Multimedia, dzielenie i targety dostarczania
Załączniki i multimedia
Załączniki i multimedia
- przyjmowanie załączników przychodzących jest domyślnie wyłączone — ustaw
channels.imessage.includeAttachments: true, aby przekazywać zdjęcia, notatki głosowe, wideo i inne załączniki do agenta. Gdy jest wyłączone, iMessage zawierające tylko załączniki są odrzucane przed dotarciem do agenta i mogą w ogóle nie wygenerować wiersza loguInbound message. - zdalne ścieżki załączników można pobierać przez SCP, gdy ustawiono
remoteHost - ścieżki załączników muszą pasować do dozwolonych katalogów głównych:
channels.imessage.attachmentRoots(lokalne)channels.imessage.remoteAttachmentRoots(tryb zdalnego SCP)- domyślny wzorzec katalogu głównego:
/Users/*/Library/Messages/Attachments
- SCP używa ścisłego sprawdzania klucza hosta (
StrictHostKeyChecking=yes) - rozmiar multimediów wychodzących używa
channels.imessage.mediaMaxMb(domyślnie 16 MB)
Dzielenie wiadomości wychodzących
Dzielenie wiadomości wychodzących
- limit fragmentu tekstu:
channels.imessage.textChunkLimit(domyślnie 4000) - tryb dzielenia:
channels.imessage.chunkModelength(domyślnie)newline(dzielenie najpierw według akapitów)
Formaty adresowania
Formaty adresowania
Preferowane jawne targety:
chat_id:123(zalecane dla stabilnego routingu)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
Akcje prywatnego API
Gdy działaimsg launch, a openclaw channels status --probe zgłasza privateApi.available: true, narzędzie wiadomości może używać natywnych akcji iMessage oprócz zwykłych wysyłek tekstowych.
Dostępne akcje
Dostępne akcje
- react: Dodaj/usuń tapbacki iMessage (
messageId,emoji,remove). Obsługiwane tapbacki mapują się na miłość, polubienie, niechęć, śmiech, podkreślenie i pytanie. - reply: Wyślij odpowiedź w wątku do istniejącej wiadomości (
messageId,textlubmessage, pluschatGuid,chatId,chatIdentifieralboto). - sendWithEffect: Wyślij tekst z efektem iMessage (
textlubmessage,effectlubeffectId). - edit: Edytuj wysłaną wiadomość w obsługiwanych wersjach macOS/prywatnego API (
messageId,textlubnewText). - unsend: Cofnij wysłaną wiadomość w obsługiwanych wersjach macOS/prywatnego API (
messageId). - upload-file: Wyślij multimedia/pliki (
bufferjako base64 albo uwodnionemedia/path/filePath,filename, opcjonalnieasVoice). Starszy alias:sendAttachment. - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: Zarządzaj czatami grupowymi, gdy bieżący target jest konwersacją grupową.
Identyfikatory wiadomości
Identyfikatory wiadomości
Kontekst przychodzącego iMessage zawiera zarówno krótkie wartości
MessageSid, jak i pełne GUID-y wiadomości, gdy są dostępne. Krótkie identyfikatory są ograniczone do ostatniej pamięci podręcznej odpowiedzi w pamięci i przed użyciem są sprawdzane względem bieżącego czatu. Jeśli krótki identyfikator wygasł albo należy do innego czatu, spróbuj ponownie z pełnym MessageSidFull.Wykrywanie możliwości
Wykrywanie możliwości
OpenClaw ukrywa akcje prywatnego API tylko wtedy, gdy status sondy z pamięci podręcznej mówi, że mostek jest niedostępny. Jeśli status jest nieznany, akcje pozostają widoczne i wysyłanie leniwie uruchamia sondy, aby pierwsza akcja mogła się powieść po
imsg launch bez osobnego ręcznego odświeżenia statusu.Potwierdzenia odczytu i pisanie
Potwierdzenia odczytu i pisanie
Gdy mostek prywatnego API działa, zaakceptowane czaty przychodzące są oznaczane jako przeczytane przed wysłaniem do obsługi, a nadawcy jest pokazywana chmurka pisania, gdy agent generuje odpowiedź. Wyłącz oznaczanie jako przeczytane za pomocą:Starsze kompilacje
imsg, które poprzedzają listę możliwości dla metody, po cichu wyłączą pisanie/odczyt; OpenClaw zapisuje jednorazowe ostrzeżenie przy każdym restarcie, aby brakujące potwierdzenie dało się przypisać.Przychodzące tapbacki
Przychodzące tapbacki
OpenClaw subskrybuje tapbacki iMessage i kieruje zaakceptowane reakcje jako zdarzenia systemowe zamiast zwykłego tekstu wiadomości, więc tapback użytkownika nie wyzwala zwykłej pętli odpowiedzi.Tryb powiadomień jest kontrolowany przez
channels.imessage.reactionNotifications:"own"(domyślnie): powiadamiaj tylko wtedy, gdy użytkownicy reagują na wiadomości napisane przez bota."all": powiadamiaj o wszystkich przychodzących tapbackach od autoryzowanych nadawców."off": ignoruj przychodzące tapbacki.
channels.imessage.accounts.<id>.reactionNotifications.Zapisy konfiguracji
iMessage domyślnie zezwala na zapisy konfiguracji inicjowane przez kanał (dla/config set|unset, gdy commands.config: true).
Wyłącz:
Scalanie dzielonych wysyłek DM-ów (polecenie + URL w jednej kompozycji)
Gdy użytkownik wpisze razem polecenie i URL — np.Dump https://example.com/article — aplikacja Messages firmy Apple dzieli wysyłkę na dwa osobne wiersze chat.db:
- Wiadomość tekstową (
"Dump"). - Dymek podglądu URL (
"https://...") z obrazami podglądu OG jako załącznikami.
imsg.
channels.imessage.coalesceSameSenderDms włącza dla DM scalanie kolejnych wierszy od tego samego nadawcy w jedną turę agenta. Czaty grupowe nadal są wysyłane osobno dla każdej wiadomości, aby zachować strukturę tur wielu użytkowników.
- When to enable
- Enabling
- Trade-offs
Włącz, gdy:
- Dostarczasz Skills, które oczekują
command + payloadw jednej wiadomości (dump, paste, save, queue itd.). - Twoi użytkownicy wklejają URL-e, obrazy lub długą treść obok poleceń.
- Możesz zaakceptować dodatkowe opóźnienie tury DM (zobacz niżej).
- Potrzebujesz minimalnego opóźnienia poleceń dla jednowyrazowych wyzwalaczy DM.
- Wszystkie Twoje przepływy to jednorazowe polecenia bez dalszych payloadów.
Scenariusze i to, co widzi agent
| Użytkownik tworzy | chat.db generuje | Flaga wyłączona (domyślnie) | Flaga włączona + okno 2500 ms |
|---|---|---|---|
Dump https://example.com (jedno wysłanie) | 2 wiersze ~1 s odstępu | Dwie tury agenta: samo „Dump”, potem URL | Jedna tura: scalony tekst Dump https://example.com |
Save this 📎image.jpg caption (załącznik + tekst) | 2 wiersze | Dwie tury (załącznik porzucony przy scalaniu) | Jedna tura: tekst + obraz zachowane |
/status (samodzielne polecenie) | 1 wiersz | Natychmiastowe wysłanie | Czekaj maksymalnie do końca okna, potem wyślij |
| URL wklejony samodzielnie | 1 wiersz | Natychmiastowe wysłanie | Natychmiastowe wysłanie (tylko jeden wpis w kubełku) |
| Tekst + URL wysłane jako dwie celowo oddzielne wiadomości, w odstępie minut | 2 wiersze poza oknem | Dwie tury | Dwie tury (okno wygasa między nimi) |
| Szybka seria (>10 małych DM w oknie) | N wierszy | N tur | Jedna tura, ograniczone wyjście (pierwszy + najnowsze, zastosowane limity tekstu/załączników) |
| Dwie osoby piszące w czacie grupowym | N wierszy od M nadawców | M+ tur (jedna na kubełek nadawcy) | M+ tur — czaty grupowe nie są scalane |
Nadrabianie po przestoju Gateway
Gdy Gateway jest offline (awaria, restart, uśpienie Maca, wyłączona maszyna),imsg watch wznawia działanie od bieżącego stanu chat.db, gdy Gateway ponownie się uruchomi — wszystko, co dotarło podczas przerwy, domyślnie nigdy nie zostanie zobaczone. Nadrabianie odtwarza te wiadomości przy następnym uruchomieniu, aby agent nie pominął po cichu ruchu przychodzącego.
Nadrabianie jest domyślnie wyłączone. Włącz je per kanał:
Jak to działa
Jedno przejście na każde uruchomieniemonitorIMessageProvider, w sekwencji: gotowe imsg launch → watch.subscribe → performIMessageCatchup → pętla wysyłania na żywo. Samo nadrabianie używa chats.list + per-czatowego messages.history wobec tego samego klienta JSON-RPC, którego używa imsg watch. Wszystko, co dotrze podczas przebiegu nadrabiania, normalnie przechodzi przez wysyłanie na żywo; istniejąca pamięć podręczna deduplikacji przychodzącej pochłania wszelkie nakładanie się z odtwarzanymi wierszami.
Każdy odtwarzany wiersz jest przekazywany przez ścieżkę wysyłania na żywo (evaluateIMessageInbound + dispatchInboundMessage), więc listy dozwolonych, zasady grup, debouncer, pamięć podręczna echa i potwierdzenia odczytu zachowują się identycznie dla wiadomości odtwarzanych i wiadomości na żywo.
Semantyka kursora i ponawiania
Nadrabianie utrzymuje kursor per konto w<openclawStateDir>/imessage/catchup/<account>__<hash>.json (katalog stanu OpenClaw domyślnie to ~/.openclaw, można go nadpisać przez OPENCLAW_STATE_DIR):
- Kursor przesuwa się po każdym udanym wysłaniu i jest zatrzymywany, gdy wysłanie wiersza rzuci błąd — następne uruchomienie ponawia ten sam wiersz od zatrzymanego kursora.
- Po
maxFailureRetrieskolejnych rzutach błędu dla tego samegoguidnadrabianie zapisujewarni wymusza przesunięcie kursora poza zablokowaną wiadomość, aby kolejne uruchomienia mogły iść naprzód. - GUID-y, dla których już się poddano, są pomijane po wykryciu (bez próby wysłania) w późniejszych uruchomieniach i liczone pod
skippedGivenUpw podsumowaniu przebiegu.
Sygnały widoczne dla operatora
WARN ... capped to perRunLimit oznacza, że pojedyncze uruchomienie nie opróżniło całego backlogu. Zwiększ perRunLimit (maks. 500), jeśli Twoje przerwy regularnie przekraczają domyślny przebieg 50 wierszy.
Kiedy pozostawić wyłączone
- Gateway działa ciągle z automatycznym restartem przez watchdog, a przerwy są zawsze krótsze niż kilka sekund — domyślne wyłączenie jest w porządku.
- Wolumen DM jest niski, a pominięte wiadomości nie zmieniłyby zachowania agenta — początkowe okno
firstRunLookbackMinutesmoże wysłać zaskakujący stary kontekst przy pierwszym włączeniu.
firstRunLookbackMinutes (domyślnie 30 min), a nie o pełne okno maxAgeMinutes — zapobiega to odtwarzaniu długiej historii wiadomości sprzed włączenia.
Rozwiązywanie problemów
imsg not found or RPC unsupported
imsg not found or RPC unsupported
Sprawdź binarkę i obsługę RPC:Jeśli próba zgłasza brak obsługi RPC, zaktualizuj
imsg. Jeśli akcje prywatnego API są niedostępne, uruchom imsg launch w zalogowanej sesji użytkownika macOS i wykonaj próbę ponownie. Jeśli Gateway nie działa na macOS, użyj opisanej wyżej konfiguracji zdalnego Maca przez SSH zamiast domyślnej lokalnej ścieżki imsg.Gateway is not running on macOS
Gateway is not running on macOS
Domyślne Następnie uruchom:
cliPath: "imsg" musi działać na Macu zalogowanym do Wiadomości. W systemie Linux lub Windows ustaw channels.imessage.cliPath na skrypt opakowujący, który łączy się przez SSH z tym Makiem i uruchamia imsg "$@".DMs are ignored
DMs are ignored
Sprawdź:
channels.imessage.dmPolicychannels.imessage.allowFrom- zatwierdzenia parowania (
openclaw pairing list imessage)
Group messages are ignored
Group messages are ignored
Sprawdź:
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- zachowanie listy dozwolonych
channels.imessage.groups - konfigurację wzorca wzmianki (
agents.list[].groupChat.mentionPatterns)
Remote attachments fail
Remote attachments fail
Sprawdź:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- uwierzytelnianie kluczem SSH/SCP z hosta Gateway
- czy klucz hosta istnieje w
~/.ssh/known_hostsna hoście Gateway - czy zdalna ścieżka jest czytelna na Macu uruchamiającym Wiadomości
macOS permission prompts were missed
macOS permission prompts were missed
Uruchom ponownie w interaktywnym terminalu GUI w tym samym kontekście użytkownika/sesji i zatwierdź monity:Potwierdź, że pełny dostęp do dysku i automatyzacja są przyznane dla kontekstu procesu, który uruchamia OpenClaw/
imsg.Wskaźniki referencji konfiguracji
Powiązane
- Przegląd kanałów — wszystkie obsługiwane kanały
- Usunięcie BlueBubbles i ścieżka imsg iMessage — ogłoszenie i podsumowanie migracji
- Przejście z BlueBubbles — tabela tłumaczenia konfiguracji i instrukcja przełączenia krok po kroku
- Parowanie — uwierzytelnianie DM i przepływ parowania
- Grupy — zachowanie czatu grupowego i bramkowanie wzmianek
- Routing kanałów — routing sesji dla wiadomości
- Bezpieczeństwo — model dostępu i utwardzanie