Przeszukiwanie X przeglądarką to złe narzędzie
gary to mój agent marketingowy w Waggle. Jego zadanie to znajdować na X ludzi, którzy pytają o problemy rozwiązywane przez Waggle, i pomocnie im odpowiadać, jako ja. Do tamtego popołudnia szukał na X powoli: sterował Chrome w swoim sandboksie, strona po stronie.
Prowadzę też agenta o nazwie grokbot, na innej platformie. Ma bezpośredni dostęp do API X, więc dla niego wyszukiwanie to wywołanie, a nie sesja przeglądania. Ta sama praca, dużo lepsze narzędzie. Tych dwóch nigdy się nie spotkało i działają na różnych platformach.
Poprosiłem więc gary'ego, żeby poszedł go poznać.
Poprosiłem, a gary otworzył webhook
O 17:03 czasu górskiego (UTC-6) powiedziałem gary'emu, czego chcę. Załóż adres e-mail, który kontrolujesz. Porozmawiaj z moim grokbotem, który ma bezpośredni dostęp do API X. Przestań szukać przez Chrome, ale dalej publikuj przez Chrome. Napisz do niego, przedstaw się i ustalcie e-mailem, jak może cię budzić wynikami wyszukiwania.
O 17:04 gary otworzył webhook na samego siebie i nazwał go tak, jak działa: budzi się, gdy grokbot wyśle wyniki wyszukiwania X. W Waggle agent może otworzyć webhook, który budzi jego samego, bez pytania kogokolwiek o zgodę. Webhook, który kieruje gdziekolwiek indziej, do człowieka, do innego agenta albo na endpoint, czeka na karcie, aż człowiek go zatwierdzi. Ten budził tylko gary'ego, więc zaczął działać od razu.
Do 17:04:55 odpowiedział mi swoim adresem e-mail i wysłał grokbotowi przedstawienie się. Zawierało to, czego grokbot potrzebował na start: adres webhooka, sposób podpisywania posta, pola, które gary chciał dla każdego wyniku (id posta, nazwę użytkownika, bio, pełny tekst, czas i liczniki) oraz jedną partię na okno poszukiwań: angielski o 14, 17, 20 i 23 UTC, japoński o 01 i 04 UTC.

Sekret nigdy nie przechodził przez agenta
W tym e-mailu czegoś celowo brakowało. Webhook ma sekret do podpisywania, a gary nie może go zobaczyć. Jest w panelu workspace'a, gdzie może go odczytać tylko człowiek. gary powiedział mi, żebym przekazał go grokbotowi bezpośrednio, a grokbotowi powiedział, że nigdy nie przyjdzie e-mailem.
To zasada z kontraktu, a nie uprzejmość. Agent może otworzyć webhook, ale jego sekret może odczytać tylko osoba, do której agent należy, albo administrator workspace'a.

Pierwszy post został odrzucony
O 17:07 grokbot wysłał pierwszy post. Waggle odrzuciło go z powodu podpisu. Nie dotarł do gary'ego i go nie obudził. O 17:08 powiedziałem gary'emu, że grokbot wysłał mu wiadomość przez webhook.
gary sprawdził ostatnie odrzucenie webhooka i wyjaśnił je w 13 sekund. Podpis się nie zgadzał. Prawdopodobne przyczyny: zły sekret, podpisanie czegoś innego niż dokładne surowe ciało żądania albo znacznik czasu starszy niż pięć minut. Znał format, bo to jest kontrakt: nadawca liczy HMAC-SHA256 ze znacznika czasu, kropki i surowego ciała i wysyła go jako X-Waggle-Signature: t=<unix seconds>,v1=<hex>. Post starszy niż pięć minut jest odrzucany, tak samo jak podpis, który już został użyty.
O 17:08 powiedziałem: uzgodnij to e-mailem. gary wysłał grokbotowi dokładny format, krótki przykład w Pythonie i typowe błędy: ponowna serializacja JSON-a przed podpisaniem, milisekundy zamiast sekund, spacje na końcu sekretu, ponowne użycie podpisu. Poprosił najpierw o maleńki post testowy. O 17:13 post testowy, {"test": true}, przeszedł sprawdzenie podpisu i obudził gary'ego. Odpisał e-mailem, że są połączeni.
Jak nadawca podpisuje post, według kontraktu webhooka. Adres i sekret to wartości zastępcze; prawdziwe pochodzą z webhooka w builderze, a sekret nigdy nie jest wysyłany e-mailem.
Pierwsza partia i trzy odpowiedzi
O 17:14 kazałem gary'emu przetestować to na jego wyszukiwaniu o 17:00. Poprosił grokbota e-mailem o angielską partię na 23 UTC: od dziesięciu do piętnastu postów, najpierw o kłopotach z dystrybucją, potem o agentach do wchodzenia na rynek, na końcu o usypianiu laptopa.
O 17:16 partia dotarła na webhook jako zdarzenie typu x_search_batch: dziesięć postów z ostatnich 24 godzin i notatka od grokbota o tym, co odfiltrował. Odpadły marki, wiadomości, konta kryptowalutowe i konta kopiuj-wklej. API X odrzuca filtr wykluczający posty z linkami, więc usunął je po wyszukiwaniu. Jedno zapytanie poszerzono, żeby wypełnić partię.
Do 17:18 gary przeczytał wszystkie dziesięć. Pominął siedem: pod jednym była już odpowiedź z tą samą radą, jeden promował własne narzędzie, a reszta pasowała gorzej. Opublikował przez Chrome trzy odpowiedzi, każdą potwierdzoną przez X, do założycieli, którzy utknęli ze znalezieniem pierwszych użytkowników. Potem zapisał postęp w swoim celu i odnotował, że zapytanie o agentów do marketingu znalazło tylko jeden post, więc poprosi grokbota o jego poszerzenie.

Wyszukiwanie idzie przez API. Przeglądarka tylko publikuje.
Ten podział jest sednem. Wyszukiwanie to duża liczba zapytań i potrzebuje API stworzonego do tego celu. Publikowanie to jedna staranna czynność, która nadal wymaga przeglądarki, więc Chrome zostaje do tego i do niczego więcej. gary nie spędza już swojego sandboksa na przewijaniu stron z wynikami.
Tak właśnie Waggle ma współpracować z resztą świata. grokbot nie jest w Waggle i nie musi być. Został źródłem pracy dla gary'ego przez zwykły podpisany webhook, który może wysłać dowolny agent lub skrypt na dowolnej platformie. Waggle łączy agentów, których już prowadzisz. Nie każe ci ich wymieniać.
Jeden człowiek, dwóch agentów z dwóch platform, kilka e-maili między nimi. Ja dałem cel. Resztę ustalili sami.
Co zadbało o bezpieczeństwo
Post jest sprawdzany, zanim cokolwiek obudzi agenta. Taki, który jest niepodpisany, źle podpisany, starszy niż pięć minut albo podpisany użytym już podpisem, jest odrzucany i nie budzi gary'ego. Tak było o 17:07 i kosztowało to kilka minut, nic więcej.
Odrzucenie nie jest ukryte. Nadawca dostaje potwierdzenie przyjęcia, zanim dowód zostanie sprawdzony, więc odrzucenie nie może do niego dotrzeć, a powód zostaje na webhooku: kiedy nastąpiło ostatnie odrzucenie i dlaczego. gary to odczytał i wyjaśnił mi w 13 sekund, a następny podpisany post przeszedł o 17:13.
Każdy krok jest w śladzie
Każda godzina w tym artykule pochodzi ze śladu gary'ego: co go obudziło, co dotarło, co postanowił i co z tym zrobił. Przedstawienie się, odrzucenie, post testowy, partia i trzy odpowiedzi są tam po kolei.
To ten sam ślad, dzięki któremu człowiek może później zapytać, co zrobił agent. Dwóch agentów na dwóch platformach łatwo stracić z oczu. Część, która działa w Waggle, jest zapisana.
Dokąd to nas prowadzi
Agent z innej platformy może stać się źródłem pracy dla agenta Waggle dzięki kilku e-mailom i jednemu podpisanemu webhookowi. Sekret zostaje przy ludziach, każdy post jest sprawdzany przy drzwiach, a ślad pokazuje, co się stało.