LanaChat

API: Konta Telegram, pule i historie

8 min czytaniaZaktualizowano Markdown

Konto Telegram to jedno konto twórczyni, połączone z LanaChat przez połączenie biznesowe (bota, którego dodaje w ustawieniach Telegram). Konta są pogrupowane w pule: pula to jedna twórczyni, jeden rynek i jedno źródło ruchu, a nowe rozmowy z linku śledzącego są rozdzielane pomiędzy konta wysyłające w odpowiedniej puli. Historie są publikowane na jednym lub kilku kontach jednocześnie.

Endpointy #

MetodaŚcieżkaOpisUprawnienieStatus
GET/accountsLista kont (creator_id=, health=connected,pending,expired)can_setupPlanned
POST/accountsDodaj konto z tokenem bota; sprawdzane w Telegram przed zapisaniemcan_setupPlanned
GET/accounts/{id}Jedno konto, jego status i obciążenie w tej godziniecan_setupPlanned
PATCH/accounts/{id}Zmień brain, rynek, ruch, alias lub język odpowiedzi; włącz lub wyłącz kontocan_setupPlanned
DELETE/accounts/{id}Odłącz konto (rozmowy pozostają)can_setupPlanned
POST/accounts/{id}/checkPrzetestuj połączenie teraz, zamiast czekać na godzinne sprawdzeniecan_setupPlanned
GET/poolsWszystkie pule z ich kontami, pojemnością i statusemcan_trackingPlanned
GET/pools/settingsGodzinny limit workspace i zasady dystrybucjican_trackingPlanned
PUT/pools/settingsZmień godzinny limit (100 do 100000) i dystrybucjęcan_trackingPlanned
PATCH/pools/accounts/{account_id}Dodaj lub usuń konto z puli, wstrzymaj je, ustaw wagę lub limit godzinnycan_trackingPlanned
GET/pools/eventsLog puli: oczekiwania na flood, pauzy, wznowienia, wstrzymane linkican_trackingPlanned
GET/storiesOpublikowane i zaplanowane historie (creator_id=, status=)can_setupPlanned
POST/storiesOpublikuj historię teraz lub zaplanuj na jednym lub kilku kontachcan_setupPlanned
GET/stories/{id}Jedna historia z wyświetleniami, reakcjami i kliknięciami linkówcan_setupPlanned
DELETE/stories/{id}Anuluj zaplanowaną historięcan_setupPlanned

Obiekt konta #

{
  "id": "acc_1001",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "connected",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": true,
  "last_activity_at": "2026-10-06T13:58:20Z"
}
PoleTypOpis
idstringZaczyna się od acc_
creator_idstringTwórczyni, do której należy konto
usernamestringTelegram @username konta, bez @
bot_usernamestringBot powiązany przez połączenie biznesowe
healthstringconnected, pending lub expired
activebooleanfalse gdy konto jest wyłączone: AI na nim nie odpowiada
brain_idstring lub nullAI Brain odpowiadający na tym koncie
pool_idstringPula, do której konto należy według tagów market i traffic
marketstringRynek językowy, np. fr, en, pt-BR lub all
trafficstringŹródło ruchu, np. instagram lub tiktok
story_rightsbooleanCzy połączenie biznesowe pozwala LanaChat publikować historie
last_activity_atstringOstatnia wysłana lub odebrana wiadomość, ISO 8601 UTC
  • health to connected, pending (połączenie biznesowe niepotwierdzone) lub expired (bot stracił dostęp; połącz ponownie).
  • Token bota nigdy nie jest zwracany. LanaChat nigdy nie prosi o numer telefonu, hasło ani kod 2FA.

Konta #

Lista kont #

GET /accounts · can_setup

ParametrTypWymaganyOpis
creator_idstringNieTylko konta tej twórczyni
healthstringNieconnected, pending lub expired; kilka oddzielonych przecinkami
limit, cursornumber, stringNiePaginacja
curl "https://api.lanachat.ai/v1/accounts?creator_id=cr_lea&health=connected,expired" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "id": "acc_1001", "creator_id": "cr_lea", "username": "lea_officiel", "bot_username": "lea_helper_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": true, "last_activity_at": "2026-10-06T13:58:20Z" },
    { "id": "acc_1004", "creator_id": "cr_lea", "username": "lea_backup", "bot_username": "lea_helper2_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": false, "last_activity_at": "2026-10-06T13:51:02Z" }
  ],
  "next_cursor": null
}

Dodaj konto #

POST /accounts · can_setup

ParametrTypWymaganyOpis
creator_idstringTakTwórczyni, do której należy konto
bot_tokenstringTakToken bota powiązanego w ustawieniach biznesowych Telegram
marketstringNieRynek językowy, np. fr
trafficstringNieŹródło ruchu, np. instagram
curl -X POST https://api.lanachat.ai/v1/accounts \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"creator_id": "cr_lea", "bot_token": "<bot token>", "market": "fr", "traffic": "instagram"}'
{
  "id": "acc_1007",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "pending",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": false,
  "last_activity_at": null
}

Odpowiedź to konto (201) z health: "pending" aż twórczyni potwierdzi połączenie biznesowe w Telegram. Token bota jest sprawdzany w Telegram przed zapisem: token odrzucony przez Telegram zwraca 400. Konto już aktywne w innym workspace jest odrzucane (409). Każde konto potrzebuje licencji do odpowiadania: patrz Billing.

Pobierz konto #

GET /accounts/{id} · can_setup

curl https://api.lanachat.ai/v1/accounts/acc_1001 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Odpowiedź to obiekt konta z obciążeniem w tej godzinie. Nieznane id zwraca 404.

Aktualizuj konto #

PATCH /accounts/{id} · can_setup

ParametrTypWymaganyOpis
brain_idstringNieBrain odpowiadający na tym koncie
marketstringNieRynek językowy; przenosi konto do odpowiadającej puli
trafficstringNieŹródło ruchu; przenosi konto do odpowiadającej puli
activebooleanNiefalse wyłącza konto, true włącza je z powrotem

Alias i język odpowiedzi konta można zmienić w ten sam sposób.

curl -X PATCH https://api.lanachat.ai/v1/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"traffic": "tiktok", "active": true}'

Odpowiedź to zaktualizowane konto. Wyłączenie ostatniego konta wysyłającego twórczyni z aktywnymi linkami zwraca 409.

Odłącz konto #

DELETE /accounts/{id} · can_setup

curl -X DELETE https://api.lanachat.ai/v1/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Rozmowy pozostają. Usunięcie ostatniego konta wysyłającego twórczyni z aktywnymi linkami zwraca 409.

Sprawdź połączenie teraz #

POST /accounts/{id}/check · can_setup

curl -X POST https://api.lanachat.ai/v1/accounts/acc_1001/check \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

LanaChat sprawdza każde konto co godzinę; to wywołanie testuje je teraz. Odpowiedź to konto z aktualnym health.

Pule #

Pula tworzona jest przez tagi kont (market i traffic); nic nie trzeba tworzyć ręcznie. Nowa rozmowa trafia do puli, której ruch odpowiada źródłu linku, a rynek językowy odpowiada językowi fana, potem do puli "All traffic" twórczyni, potem do dowolnej jej puli, która jeszcze wysyła. Istniejące rozmowy zawsze pozostają na swoim koncie.

Lista pul #

GET /pools · can_tracking

curl https://api.lanachat.ai/v1/pools \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    {
      "id": "pool_lea_fr_instagram",
      "name": "French · Instagram",
      "creator_id": "cr_lea",
      "accounts": ["acc_1001", "acc_1004"],
      "sent_last_hour": 312,
      "capacity_per_hour": 400,
      "status": "near"
    }
  ],
  "next_cursor": null
}

status to sending, near (80% pojemności), saturated (95%) lub none (brak konta wysyłającego).

Pobierz ustawienia puli #

GET /pools/settings · can_tracking

curl https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "cap_per_hour": 2000,
  "default_limit_per_hour": 200,
  "distribution": { "mode": "weighted", "warmup": true, "hold_when_saturated": true }
}
PoleTypOpis
cap_per_hournumberLiczba wiadomości, które workspace może wysłać w ruchomym oknie godzinnym, 100 do 100000
default_limit_per_hournumberLimit godzinny nadawany nowemu kontu w puli
distribution.modestringweighted (losowo, proporcjonalnie do wagi konta), round_robin (kolejno każde konto) lub least_loaded (konto najdalej od limitu)
distribution.warmupbooleanNowe konto zaczyna od 50 wiadomości na godzinę i osiąga pełny limit po 7 dniach
distribution.hold_when_saturatedbooleanGdy żadne konto nie może przyjąć nowego fana, wstrzymaj fana do zwolnienia konta (najstarszy pierwszy); inaczej daj fana najmniej obciążonemu kontu nawet ponad limit

Gdy workspace osiąga cap_per_hour, linki dalej przekierowują, ale nowe rozmowy są wstrzymywane aż limit spadnie.

Zmień ustawienia puli #

PUT /pools/settings · can_tracking

ParametrTypWymaganyOpis
cap_per_hournumberTak100 do 100000, liczba całkowita
default_limit_per_hournumberTak10 do 1000, liczba całkowita
distributionobjectTakmode, warmup i hold_when_saturated, jak wyżej
curl -X PUT https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cap_per_hour": 3000, "default_limit_per_hour": 200, "distribution": {"mode": "least_loaded", "warmup": true, "hold_when_saturated": true}}'

Odpowiedź to nowe ustawienia. Limit poza 100 do 100000 zwraca 400.

Zmień konto w puli #

PATCH /pools/accounts/{account_id} · can_tracking

ParametrTypWymaganyOpis
in_poolbooleanNiefalse usuwa konto z puli: rozmowy pozostają, ale nie dostaje nowych fanów
pausedbooleanNietrue wstrzymuje konto w puli
weightnumberNie0 do 100; udział nowych fanów w trybie weighted (0 oznacza brak nowych fanów)
limit_per_hournumberNie10 do 1000 wiadomości na godzinę dla tego konta
curl -X PATCH https://api.lanachat.ai/v1/pools/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"weight": 40, "limit_per_hour": 300}'
{
  "account_id": "acc_1004",
  "creator_id": "cr_lea",
  "username": "lea_backup",
  "in_pool": true,
  "paused": false,
  "weight": 40,
  "limit_per_hour": 300,
  "sent_last_hour": 88,
  "new_conversations_today": 41,
  "state": "active",
  "flood_wait_until": null,
  "warmup_day": 7,
  "added_at": "2026-09-20T10:00:00Z"
}
  • state to active lub flood_wait: przy oczekiwaniu na flood Telegram konto samo się wstrzymuje do flood_wait_until, potem wznawia.
  • Podczas rozruchu (warmup_day 1 do 7) konto wysyła mniej niż limit_per_hour: 50 na godzinę w dniu 1, pełny limit w dniu 7.
  • Usunięcie, wstrzymanie lub wyjęcie ostatniego konta wysyłającego twórczyni z aktywnymi linkami jest odrzucane (409).

Odczytaj log puli #

GET /pools/events · can_tracking

ParametrTypWymaganyOpis
creator_idstringNieTylko zdarzenia kont tej twórczyni
limit, cursornumber, stringNiePaginacja
curl "https://api.lanachat.ai/v1/pools/events?creator_id=cr_lea&limit=2" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "at": "2026-10-06T13:40:12Z", "kind": "resumed", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup is sending again." },
    { "at": "2026-10-06T13:25:12Z", "kind": "flood_wait", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup hit a Telegram flood wait of 900 seconds." }
  ],
  "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDZUMTM6MjU6MTJaIn0"
}

kind to flood_wait, account_paused, resumed, link_paused (osiągnięto limit workspace, nowi fani są wstrzymani), account_added, account_removed lub settings. text to zdanie po angielsku.

Historie #

Lista historii #

GET /stories · can_setup

ParametrTypWymaganyOpis
creator_idstringNieTylko historie tej twórczyni
statusstringNieNa przykład scheduled
limit, cursornumber, stringNiePaginacja
curl "https://api.lanachat.ai/v1/stories?creator_id=cr_lea&status=scheduled" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [ { "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] } ],
  "next_cursor": null
}

Opublikuj historię #

POST /stories · can_setup

ParametrTypWymaganyOpis
account_idstablica stringówTakKonta, które ją publikują
media_idstringTakZdjęcie lub wideo z Vault twórczyni
textstringNiePodpis
link_idstringNieLink śledzący wyświetlany w historii
duration_hoursnumberNieJak długo historia jest widoczna
run_atstring lub nullNieKiedy opublikować (ISO 8601 UTC); pomiń, by opublikować teraz
curl -X POST https://api.lanachat.ai/v1/stories \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"account_ids": ["acc_1001", "acc_1004"], "media_id": "med_5521", "text": "New set tonight", "link_id": "lnk_3", "duration_hours": 24, "run_at": "2026-10-06T19:00:00Z"}'
{ "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] }

Konto bez prawa "manage stories" w połączeniu biznesowym (story_rights: false) jest odrzucane, z powodem w message.

Pobierz historię #

GET /stories/{id} · can_setup

curl https://api.lanachat.ai/v1/stories/sto_88 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Odpowiedź to historia z wyświetleniami, reakcjami i kliknięciami linków po opublikowaniu.

Anuluj zaplanowaną historię #

DELETE /stories/{id} · can_setup

curl -X DELETE https://api.lanachat.ai/v1/stories/sto_88 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Anulować można tylko zaplanowaną historię.

Najnowsze wieści o Lanie na Telegramie

Nowości i zaproszenia do bety, najpierw na kanale.