← blog

Strona, którą obsługuje agent

Stawiam, że za kilka lat mało kto będzie wchodził na strony. Wyśle asystenta. Zrobiłem więc stronę, na której asystent umówi ze mną rozmowę bez logowania i bez klucza API Interfejs, przez który jeden program prosi inny o dane albo o wykonanie czynności.. Zajęło mi to kilka wieczorów z Claude Code Program firmy Anthropic, w którym asystent Claude pracuje na plikach i kodzie na twoim komputerze. i Codex Asystent AI firmy OpenAI, który pracuje na plikach na twoim komputerze: czyta je, zmienia i uruchamia programy..

Po co cztery wejścia do jednej rezerwacji

Każde narzędzie z asystentem AI umie co innego, więc ta sama rezerwacja ma cztery wejścia:

  • API (GET /api/v1/slots i POST /api/v1/bookings) jest dla agent Program oparty na modelu AI, który sam wykonuje zadania, np. szuka informacji, klika i zapisuje., które potrafią wysyłać zapytania, np. Claude Code, Codex albo tryb agenta w ChatGPT.
  • Zwykły czat ChatGPT i Claude umie tylko czytać strony. Każdy wolny termin ma więc gotowy booking_link, do którego asystent dopisuje dane osoby, a człowiek klika jeden przycisk.
  • Formularz działa bez JavaScript Język programowania, dzięki któremu strona w przeglądarce reaguje na kliknięcia i zmienia się bez przeładowania., więc agent sterujący przeglądarką też go wypełni.
  • MCP Standard, dzięki któremu asystent AI może łączyć się z aplikacjami, np. z kalendarzem czy listą zadań. pod adresem https://majlo.dev/mcp jest dla klientów AI, które da się z nim połączyć.

Co nie wyszło

Najbardziej zaskoczyło mnie to, że zwykły czat ChatGPT w ogóle nie widział strony, dopóki nie była indeksowanie Dopisanie strony do spisu wyszukiwarki, dzięki czemu można ją znaleźć.. Nie znajdował jej albo nie chciał jej otworzyć. Otwiera sam tylko adresy, które zna z wyszukiwarki, więc lista wolnych terminów jest dostępna dla wyszukiwarek. Nie ma to gwarancji dla każdego narzędzia ChatGPT.

Z tego samego powodu zwykły czat nie wyśle GET i POST Dwa rodzaje próśb do serwera: GET pobiera dane, POST wysyła je do zapisania. i nie otworzy adresu, który sam złożył z danymi osoby. Przy takim linku ChatGPT pokazuje ostrzeżenie „Check this link is safe”, więc ostatnie kliknięcie robi człowiek.

Jak się bronię przed spamem

Bez logowania każdy mógłby wpisać cudzy adres albo zająć wszystkie terminy. Dlatego:

  • Rezerwacja czeka 30 minut na kliknięcie w mailu i do kalendarza trafia dopiero po nim. Link otwiera stronę z przyciskiem, więc skaner linków Program, który sam otwiera linki z maili, żeby sprawdzić, czy nie prowadzą do czegoś groźnego. w skrzynce niczego nie potwierdzi.
  • Jeden adres może mieć jedną aktywną rezerwację, żeby jedna osoba nie zajęła wszystkich terminów.
  • Odrzucam około 97 tys. domeny jednorazowe Serwisy dające skrzynkę e-mail na chwilę, bez rejestracji, często po to, żeby nie podawać prawdziwego adresu. i adresy bez rekord MX Wpis w ustawieniach domeny, który mówi, dokąd dostarczać pocztę. Bez niego na ten adres nic nie dojdzie., bo potwierdzenie ma dojść do prawdziwej skrzynki.
  • Temat od klienta trafia do kalendarza z etykietą „niezweryfikowane” i limitem 500 znaków. Ten kalendarz czyta mój ChatGPT, a obcy tekst mógłby zawierać polecenia dla niego.

Dla agentów

Instrukcja jest na majlo.dev/agents, a skrót w llms.txt. Każda strona ma też wersję w markdown Prosty zapis tekstu z kilkoma znaczkami, np. # dla nagłówka, czytelny dla ludzi i programów., wystarczy wysłać nagłówek Dopisek na początku zapytania do serwera, który mówi, jak odpowiedzieć, np. w jakim formacie. Accept: text/markdown.