REST API
Kaikki, mitä Antimatterin sovellukset tekevät, kulkee saman HTTP API:n kautta, joten skriptit voivat tehdä sen samaan tapaan. Tässä sivussa kerrotaan, miten tunnistaututaan, mitkä resurssit ovat yleisimmin käytössä, miten vastaukset ja virheet näyttävät ja miten tapahtumia voi seurata reaaliajassa WebSocketin kautta.
Perusasiat
- Perus-URL:
https://chat.example.com/api/v4. Kaikki alla olevat loput ovat suhteessa tähän. - Muoto: JSON sisäänpäin ja ulospäin, paitsi tiedostolähetykset (multipart). Lähetä
Content-Type: application/json. - Tunnistekoodit: jokaisella objektilla on 26 merkin
id. Aikaleimat ovat millisekunteja Unix-epokista (create_at,update_at,delete_at; 0 tarkoittaa "ei poistettu"). - Yhteisöt ovat tiimejä: API kutsuu niitä
teams-resursseiksi, joilla onteam_id. - Sinä: missä tahansa polussa, joka ottaa
user_id-parametrin,metarkoittaa kirjautunutta käyttäjää, kutenGET /users/me.
Täydellinen luettelo päätepisteistä on palvelimen koodissa: reitit on määritelty tiedostoissa server/channels/api4/*.go ja tyypit hakemistossa server/public/model. Tietovaraston api/v4/source-hakemistossa oleva OpenAPI-kuvaus kattaa Mattermostista perityt päätepisteet sekä osan Antimatterin lisäyksistä: ketjujen siirtäminen, malliyhteydet, agentit, tiimin säännöt, keskittymistila ja viestitoiminnot. Muut ovat vain koodissa.
Tunnistautuminen
Jokainen pyyntö, paitsi kirjautuminen ja muutama julkinen loppu, vaatii tunnuksen Authorization-otsakkeessa:
curl -H "Authorization: Bearer $TOKEN" https://chat.example.com/api/v4/users/me
Siellä hyväksytään kolme tyyppiä tunnusta: henkilökohtaiset pääsytunnukset, istuntotunnukset ja OAuth-pääsytunnukset. Myös Authorization: Token … hyväksytään. Tunnukset kyselymerkkijonossa (?access_token=) hyväksytään vain OAuth-pääsytunnuksille.
Henkilökohtaiset pääsytunnukset (suositellaan skripteille)
Henkilökohtainen pääsytunnus toimii puolestasi, ei vanhene, ellei sinä aseta sille vanhenemispäivää, ja se voi peruutua milloin tahansa. Henkilökohtaiset pääsytunnukset ovat oletusarvoisesti poissa käytöstä:
- Järjestelmän ylläpitäjä ottaa Ota henkilökohtaiset pääsytunnustiedot käyttöön-asetuksen käyttöön kohdassa Järjestelmäkonsoli › Integraatiot › Integraatioiden hallinta (
ServiceSettings.EnableUserAccessTokens,AM_SERVICESETTINGS_ENABLEUSERACCESSTOKENS). - Jokaiselle käyttäjälle, joka voi luoda avaimia, järjestelmän ylläpitäjä avaa Järjestelmäkonsoli › Käyttäjien hallinta › Käyttäjät, valitsee Hallitse rooleja käyttäjän valikosta ja valitsee Salli tämän tilin luoda henkilökohtaisia API-avaimia. Järjestelmän ylläpitäjät voivat aina luoda avaimia.
- Käyttäjä avaa profiilinsa yläoikeasta kulmasta ja siirtyy kohtaan Profiili ja asetukset › Turva. Kohdassa Henkilökohtaiset pääsytunnisteet hän kuvaa, mihin tunnistetta tarvitaan, ja valitsee Luo tunnus. Tunnus näytetään vain kerran: kopioi se.
API:lla: POST /users/{user_id}/tokens parametrina {"description": "backup script", "expires_at": 0} (expires_at millisekunteina; 0, jos ei eräpäivää). Vastauksen token-kenttä on avain; sen id käytetään avaimen peruuttamiseen (POST /users/tokens/revoke parametrina {"token_id": "…"}). Komentoriviltä: amctl token generate <user> <description>.
Järjestelmän ylläpitäjä voi asettaa pääsytunnisteen enimmäiskäyttöajan päivinä samassa Järjestelmäkonsolin sivulla, kohdassa Henkilökohtaisen pääsytunnisteen enimmäiskäyttöaika (päivää).
Istuntoavaimet
Kirjautuminen salasanalla palauttaa istuntoavaimen Token-vastausotsakkeessa. Istunto on sama tyyppi, jota sovellukset käyttävät:
curl -i -X POST https://chat.example.com/api/v4/users/login \
-H 'Content-Type: application/json' \
-d '{"login_id": "maya", "password": "…"}'
Lisää "token": "123456" tilille, jolla on monitahoinen tunnistautuminen. Istunnot erääntyvät palvelimen istuntoasetusten mukaan, ja kirjautumispisteellä on nopeusrajoitus (5 pyyntöä sekunnissa). POST /users/logout päättää istunnon.
X-CSRF-Token-otsakkeen kaikkeen lukuun ottamatta GET-pyyntöjä; Authorization-otsakkeessa oleva avain ei vaadi CSRF-otsaketta.OAuth 2.0 -sovellukset
Jotta käyttäjät voivat kirjautua sovellukseesi Antimatter-tilillään, rekisteröi OAuth 2.0 -sovellus. Antimatter toimii silloin OAuth-palveluntarjoajana:
- Ota OAuth 2.0 -palveluntarjoaja käyttöön on oltava päällä (Järjestelmäkonsoli › Integraatiot › Integraatioiden hallinta,
ServiceSettings.EnableOAuthServiceProvider, oletuksena päällä). - Käyttäjä, jolla on oikeus hallita OAuth-sovelluksia (oletuksena järjestelmän ylläpitäjät), avaa Integraatiot › OAuth 2.0 -sovellukset (tiimivalikko › Tiimin asetukset › Integraatiot) ja lisää sovelluksen sen takaisinkutsuosoitteineen. Hän saa asiakas-ID:n ja asiakassalaisuuden.
- Sovellus ohjaa käyttäjät osoitteeseen
https://chat.example.com/oauth/authorizeparametreillaresponse_type=code,client_id,redirect_urijastate. PKCE-tukicode_challenge_method=S256-menetelmällä on käytettävissä. - Koodi vaihdetaan osoitteessa
POST https://chat.example.com/oauth/access_token(grant_type=authorization_code, sen jälkeenrefresh_tokenuudistamiseksi), ja API:ta kutsutaan otsakkeellaAuthorization: Bearer <access token>.
Käyttäjät näkevät valtuuttamansa sovellukset kohdassa Profiili ja asetukset › Tietoturva › Valtuuttamasi sovellukset.
Pääresurssit
| Mikä | Loppupisteet |
|---|---|
| Sinä ja muut käyttäjät | GET /users/me, GET /users/{user_id}, GET /users/username/{username}, POST /users/ids (ID-lista), POST /users/search, GET /users?in_team=…&in_channel=… |
| Yhteisöt | GET /users/me/teams, GET /teams/{team_id}, GET /teams/name/{name}, PUT /teams/{team_id}/patch, GET /teams/{team_id}/members, POST /teams/{team_id}/members |
| Kanavat | GET /users/me/teams/{team_id}/channels, GET /teams/name/{team}/channels/name/{channel}, POST /channels, POST /channels/direct (kaksi käyttäjä-ID:tä), POST /channels/group, POST /channels/{channel_id}/members |
| Viestit | POST /posts, GET /posts/{post_id}, PUT /posts/{post_id}/patch, DELETE /posts/{post_id}, GET /channels/{channel_id}/posts, GET /posts/{post_id}/thread, POST /teams/{team_id}/posts/search |
| Reaktiot | POST /reactions sisältäen {"user_id", "post_id", "emoji_name"}, DELETE /users/{user_id}/posts/{post_id}/reactions/{emoji_name} |
| Tiedostot | POST /files (multipart: channel_id ja files), jonka jälkeen palautetut ID:t lisätään viestin file_ids-kenttään; GET /files/{file_id} |
| Asetukset | GET /users/me/preferences, PUT /users/me/preferences |
| Integraatiot | /hooks/incoming, /hooks/outgoing, /commands, /bots, /oauth/apps (katso seuraavat sivut) |
| Palvelin | GET /system/ping (kunto, tokeni ei tarvita), GET /config/client?format=old (asetukset, joita asiakkaat näkevät) |
Viestin julkaiseminen
curl -X POST https://chat.example.com/api/v4/posts \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"channel_id": "'$CHANNEL_ID'", "message": "Backup finished: **42 GB** in 3 min"}'
Viestit ovat Markdown-muodossa. Lisää "root_id" (ketjun ensimmäinen viesti) vastaamaan ketjussa, "file_ids" tiedostoille ja "props" liitteille ja muille lisäyksille (katso Liitteet).
Kanavan ID:n etsiminen
curl -H "Authorization: Bearer $TOKEN" \
https://chat.example.com/api/v4/teams/name/lumen-labs/channels/name/ops-alerts
Nimet ovat kanavan linkissä: /lumen-labs/channels/ops-alerts.
Sivutus
Listaloppupisteet ottavat vastaan page (alkaen 0) ja per_page (oletus 60, enintään 200). Pyydä seuraavaa sivua, kunnes palautettu sivu on lyhyempi kuin per_page.
Kanavan viestit (GET /channels/{channel_id}/posts) ottavat myös since (aika: kaikki siitä lähtien muuttuneet) tai before ja after (viestin tunniste). Vastaus on viestilista: {"order": [IDs, newest first], "posts": {ID: post}, "next_post_id", "prev_post_id"}.
Virheet
Virheet käyttävät tavallisia HTTP-tilakoodia (400 virheellinen syöte, 401 ei kirjautunut, 403 ei sallittu, 404 ei löytynyt, 501 ominaisuus poistettu käytöstä) ja JSON-viestin:
{
"id": "api.context.permissions.app_error",
"message": "You do not have the appropriate permissions.",
"detailed_error": "",
"request_id": "jz8zm5nunpbt8f3gpqsz5dq6so",
"status_code": 403
}
Käytä id:tä koodissasi: message käännetään käyttäjän kielelle. detailed_error on tyhjä, ellei palvelin aja kehittäjätilassa (ServiceSettings.EnableDeveloper). Mainitse request_id palvelimen ylläpitäjälle: se näkyy lokitiedostoissa.
Nopeusrajoitukset
Käyttörajoitukset ovat oletusarvona poistettu käytöstä. Kun järjestelmän ylläpitäjä ottaa ne käyttöön (Järjestelmäkonsoli › Ympäristö › Käyttörajoitukset), jokainen asiakas saa oletusarvona 10 pyyntöä sekunnissa ja 100:n pyynnön räjähdyksen. Laskenta perustuu IP-osoitteeseen tai käyttäjään. Vastaukset sisältävät X-RateLimit-Limit, X-RateLimit-Remaining ja X-RateLimit-Reset-otsakkeet. Rajoituksen ylittyessä palvelin vastaa 429-koodilla ja Retry-After-otsakkeella, joka ilmaisee sekunteina, milloin uutta pyyntöä voi yrittää. Joillakin liitospisteillä, kuten kirjautumisella, on omat rajoituksensa riippumatta asetuksista.
Kirjoita skriptejä, jotka odottavat ja yrittävät uudelleen 429-virheen kohdalla, ja vältä kyselyitä: seuraa WebSocket-yhteyttä sen sijaan.
WebSocket-tapahtumavirta
Yhdistä osoitteeseen wss://chat.example.com/api/v4/websocket. Todennä itsesi joko Authorization: Bearer-otsakkeella yhteydenpyynnössä tai lähettämällä tämä ensimmäisenä viestinä:
{"seq": 1, "action": "authentication_challenge", "data": {"token": "…"}}
Palvelin lähettää hello-tapahtuman, sitten tapahtuman kaikesta, mitä sinulla on oikeus nähdä:
{
"event": "posted",
"data": {"channel_id": "…", "channel_type": "O", "post": "{\"id\":\"…\",\"message\":\"Hello\",…}"},
"broadcast": {"channel_id": "…", "team_id": "", "user_id": "", "omit_users": null},
"seq": 4
}
Huomaa, että data.post on viesti JSON-muotoisena merkkijonona. Yleisiä tapahtumia ovat: posted, post_edited, post_deleted, reaction_added, reaction_removed, typing, status_change, user_added, direct_added. Sovut lähettävät omia tapahtumiaan, nimettyinä custom_<app id>_<event>.
Voit myös lähettää toimintoja, joista jokaisella on kasvava seq: user_typing arvolla {"channel_id", "parent_id"} tai get_statuses. Yhdistä uudelleen, jos yhteys katkeaa, ja hae puuttuvat tiedot since-parametrilla (ks. Sivutus).
Antimatter lisää seuraavat tapahtumat: agent_activity_changed ja agent_post_stream (katso Agentit), ai_tools_changed (katso Agentit), community_rules_updated ja community_rules_accepted (katso Tiimin säännöt), focus_ended (katso Keskittymistila), community_attributes_updated, member_timeouts_updated, post_put_on_top, post_removed_from_top, server_categories_updated, channel_overrides_updated ja category_overrides_updated. Uusi kirjautuminen omaan tiliin lähettää tapahtuman session_created muihin istuntoihisi (session_id, create_at, platform, os, browser, mobile; ei koskaan tokenia), ja varoituksen käsitteleminen lähettää tapahtuman session_revoked tai session_acknowledged (session_id) kaikkiin niihin.
Asiakasohjelmistokirjastot
- Siirry:
model.Client4-luokka sijaitsee hakemistossaserver/public/model(tuonti:github.com/mattermost/mattermost/server/public/model). Luo asiakasmodel.NewAPIv4Client(url)-metodilla ja aseta tunnusclient.SetToken(token)-metodilla.model.NewWebSocketClient4(wsURL, token)seuraa tapahtumia. Antimatterin kopio lisää metodeja omille liitospisteilleen, kutenUpdateMessageRequest,PutPostOnTopjaExportChannel. - TypeScript:
Client4-luokka@mattermost/client-paketista, joka sijaitsee hakemistossawebapp/platform/client, ja tyyppimääritykset hakemistossawebapp/platform/types. Antimatterin varastossa oleva kopio sisältää Antimatterin päätepisteet; Mattermostin npm:ssä julkaisema paketti ei sisällä niitä.
package main
import (
"context"
"log"
"github.com/mattermost/mattermost/server/public/model"
)
func main() {
client := model.NewAPIv4Client("https://chat.example.com")
client.SetToken("…")
post, _, err := client.CreatePost(context.Background(), &model.Post{
ChannelId: "…",
Message: "Hello from Go",
})
if err != nil {
log.Fatal(err)
}
log.Println("posted", post.Id)
}
Mikä Antimatter lisää API:hin
Nämä päätepisteet ja kentät eivät ole olemassa Mattermost-palvelimella. Kaikki ne vaativat istunnon.
| Päätepiste | Toiminto |
|---|---|
GET /teams/{team_id}/user_attributes/fieldsPOST sama polkuPATCH, DELETE …/fields/{field_id} | Yhteisön ominaisuudet: profiilikentät, jotka yhteisön ylläpitäjät määrittelevät jäsenilleen (enintään 20). Jäsenet voivat lukea ne; yhteisön ylläpitäjät luovat ja muuttavat niitä. |
GET /teams/{team_id}/members/{user_id}/user_attributesPATCH sama polkuPOST /teams/{team_id}/user_attributes/values/search | Jäsenen ominaisuusarvot muodossa {field_id: value}. Jäsenet asettavat omat arvonsa (paitsi ylläpitäjien hallinnoimia); ylläpitäjät voivat asettaa kenen tahansa arvot. Haku ottaa parametrina {"user_ids": [...]} (enintään 200). |
GET /teams/{team_id}/timeoutsPUT /teams/{team_id}/members/{user_id}/timeoutGET /teams/{team_id}/members/{user_id}/moderation | Aikakatkaisut: {"until": time, "reason": "…"} estää henkilön lähettämästä, reagoimasta ja lataamasta yhteisössä siihen asti (enintään 28 päivää); "until": 0 poistaa eston. Moderaatinäkymä näyttää, milloin henkilö liittyi ja kuinka paljon hän on lähettänyt äskettäin. |
GET /channels/{channel_id}/on_topPUT, DELETE /posts/{post_id}/on_top | Viestit, jotka on kiinnitetty kanavan yläreunaan (enintään 10). {"duration": ms}, enintään 30 päivää; arvo 0 pitää viestin kiinnitettynä, kunnes se poistetaan. Kaikki, jotka voivat lukea kanavan, näkevät listan. Viestin kiinnittäminen yläreunaan tai sen irrottaminen vaatii oikeuden lähettää viestejä kanavassa. Yhteisön kanavassa tämä vaatii lisäksi, että käyttäjä on kanavan tai yhteisön ylläpitäjä tai hänellä on oikeus Hallitse viestejä (delete_others_posts) kyseisessä kanavassa. Suorissa ja ryhmäviesteissä jäsenet voivat tehdä tämän. Arkistoituissa kanavissa toiminto hylätään. |
GET, PUT /teams/{team_id}/rulesPOST /teams/{team_id}/rules/acceptGET /teams/{team_id}/rules/stats | Tiimin säännöt: katso Tiimin säännöt. |
GET, POST, DELETE /users/me/focusGET /users/me/focus/summary?since=&until=POST /users/me/focus/summary/read | Keskittymistila: katso Keskittymistila. |
POST /channels/{channel_id}/message_request | Toimii omalle viestipyyntösi: {"action": "accept"}, "dismiss" tai "request" palauttamaan keskustelun pyyntöjen joukkoon. Palauttaa kanavan jäsenesi. |
GET, PUT /channels/{channel_id}/overridesGET /channels/{channel_id}/overrides/effectiveGET, PUT /channels/{channel_id}/role_access | Mikä rooli tai henkilö voi tehdä kanavassa, ja mitkä roolit näkevät roolin perusteella rajatun kanavan. |
GET, PUT /teams/{team_id}/server_categoriesGET, PUT …/server_categories/overrides | Yhteisön jaetut kanavakategoriat ja kategorian kaikkiin kanaviin sovellettavat ohitukset. |
GET /groups/{group_id}/team_rolePUT …/team_role/permissions | Oikeudet, jotka yhteisön rooli myöntää. |
POST /teams/{team_id}/autolinks/preview | Testaa yhteisön automaattiset linkkisäännöt tekstillä. |
POST /channels/{channel_id}/export?format=csv&since=&until= | Lataa kanavan viestit CSV-muodossa (enintään 50 000) käyttäjille, joilla on kanavan lukuoikeus. |
GET /posts/{post_id}/speech | Viesti, joka luetaan ääneen äänitiedostona, kun tekstistä puheeksi -toiminto on määritetty. |
POST /posts/{post_id}/move_to_channel | Siirtää ketjun toiseen kanavaan samassa yhteisössä: ks. Ketjun siirtäminen. |
GET, POST /ai/connectionsGET, PATCH, DELETE /ai/connections/{connection_id}GET /ai/connections/usable | Malliyhteydet, eli tekoälyn palveluntarjoajat, joita palvelimen tekoälyominaisuudet ja sovellukset käyttävät: ks. Malliyhteydet. |
GET, POST /ai/agentsGET, PATCH, DELETE /ai/agents/{agent_id}POST /ai/agents/{agent_id}/tasksGET /ai/agents/conversations | Tekoälyagentit, niiden toiminta sekä tekoälykeskustelun tehtävät ja keskustelut: katso Agentit. |
GET /ai/agents/{agent_id}/toolsGET /ai/agents/tools/cataloguePOST /ai/tools/calls/{call_id}/confirm, /declineGET, POST /ai/mcp_serversGET, PATCH, DELETE /ai/mcp_servers/{server_id}POST, DELETE /ai/mcp_servers/{server_id}/oauth | Agentin työkalut, luettelo työkaluista, joita se voi käyttää, odottavan työkalukutsun vahvistaminen tai hylkääminen sekä agenttien käytettävissä olevat MCP-palvelimet: katso Tekoäly. |
GET /channels/{channel_id}/message_actionsPOST /posts/{post_id}/message_actions/{hook_id}GET, POST /hooks/outgoing/{hook_id}/icon | Viestitoiminnot: lähtevät webhookit, joita käyttäjät käynnistävät viestimenusta. Ks. Viestitoiminnot. |
POST /users/me/sessions/acknowledge | Hylkää uuden kirjautumisen varoituksen yhden oman istuntosi osalta: {"session_id"}. Vain kirjautunut käyttäjä voi kutsua tätä omien istuntojensa osalta. |
PUT /channels/{channel_id}/type | Muuttaa kanavan esiasetusta tai sen asetuksia: katso Kanavatyyppit. |
GET /channels/{channel_id}/topicsPATCH /posts/{post_id}/topic | Foorumin aiheista ja vastauksen hyväksymisestä tai aiheen tilan asettamisesta: katso Kanavatyyppiä. |
Uudet kentät
- Yhteisöt (
TeamjaPUT /teams/{team_id}/patch):all_channels_membership(kaikki ovat kaikissa kanavissa, jotka näkevät),default_channel_id(mihin uudet käyttäjät ohjautuvat),welcome_channel_id(mihin liittymis- ja poistumisviestit lähetetään, tyhjä jos ei mihinkään),kind(communitytaiworkplace, näkyy käyttöliittymässä nimillä Guild ja Työtila: guild myös ottaaall_channels_membership-asetuksen käyttöön; uudet yhteisöt saavat palvelimenTeamSettings.DefaultCommunityKind-arvon, oletuksenacommunity/Guild),member_list_view(miten jäsenlista ryhmittelee jäsenet:choice, oletus, antaa jokaisen jäsenen valita;rolestaiteamsmäärää sen),hide_role_colors,require_team_badges,name_display(miten yhteisö näyttää nimet: tyhjä palvelimen oletuksena),onboardingjaautolinks(molemmat JSON-merkkijonoja). - Uuden yhteisön oletuskanava on
general(Yleinen), eitown-square. 0.9.0-päivitys nimetää jokaisen yhteisöntown-square-kanavan uudelleengeneral-kanavaksi, säilyttäen sen ID:n, ellei yhteisössä ole jogeneral-kanavaa. Vanhat nimet toimivat yhä:GET /teams/{team_id}/channels/name/town-square,GET /teams/name/{team}/channels/name/town-squareja webhookenchannel-kenttä palauttavat yhteisön oletuskanavan, jos kanavalla ei ole kyseistä nimeä. Käytä uuteen koodiindefault_channel_id-kenttää tai nimeägeneral. - Kanavalinkit:
#channel-namelinkkaa kanavan, kuten~channel-name. Viestinchannel_mentions-ominaisuus listaa kanavat, jotka on linkattu kummallakin tavalla;#word, joka ei nimeä kanavaa, jää hashtagiksi. Antimatterin verkkokeskus ja mobiilisovitus kirjoittavat#name. - Arkistoidut kanavat ottavat yhä uusia jäseniä (
POST /channels/{channel_id}/members), jotka voivat lukea niiden historian. Kukaan ei voi kirjoittaa, reagoida, kiinnittää, siirtää viestiä yläreunaan, nimetä kanavaa uudelleen tai muuttaa jäsenten rooleja siellä. - Sisäiset vastaukset: viesti, jossa on
"props": {"reply_to": "<post id>"}, lainaa kyseisen kanavan viestin. Lisää"reply_to_mention": false, jotta viestin kirjoittajaa ei ilmoiteta. Palvelin täyttäämetadata.reply_to-kentän lainatun viestin lyhyellä kuvauksella. - Spoilerit:
"props": {"spoiler": true}piilottaa viestin tekstin ja liitetiedostot, kunnes lukija valitsee nähdä ne. - Ignoroiminen ja estäminen ovat asetuksia: kategoria
user_block, nimetty toisen henkilun ID:n mukaan, arvoignoretaiblock. Suoran viestin odottaminen pyyntönä näkyy kanavan jäsenennotify_props.dm_request-kentässä (pending,acceptedtaidismissed). - Viestiliitteet voivat sisältää
stages- jachart-kentät: katso Kortit. - Kanavat (
Channel): jokaisen yhteisökanavanpropssisältää ainaam_type(text,voicetaiforum),am_mode,am_root_posts(memberstaimoderators) jaam_preset(vastaavan esiasetuksen ID tai tyhjä mukautettujen asetusten tapauksessa), ja foorumeilla lisäksiam_forum_view(topicstaiimageboard). Josam_typepuuttuu payloadista, se tarkoittaa, että kenttää ei ole täytetty, ei sitä, että kanava olisi tekstikanava. Suorat ja ryhmäviestit eivät sisällä näitä tietoja. Katso Kanavatyyppiä.
Kanavatyyppiä
Yhteisökanava on text, voice tai forum (sen tyyppi, joka määräytyy kanavan luomisen yhteydessä), yhtenä sen tyypin tiloista, ja siihen päälle asetukset. Esiasetus on nimetty paketti tilasta ja asetuksista, jonka asiakas tarjoaa yhtenä valintana; esiasetuksia ei tallenneta, joten kanavan esiasetus (am_preset) johdetaan sen asetuksista, ja se palauttaa arvon "", jos ne eivät vastaa mitään esiasetusta ("Mukautettu").
| Esiasetuksen ID | Tyyppi | Tila | root_posts | view |
|---|---|---|---|---|
text_chat | text | chat | members | – |
text_announcement | text | chat | moderators | – |
voice_talk | voice | talk | members | – |
voice_stage | voice | stage | members | – |
forum_agora | forum | discussion | members | topics |
forum_qa | forum | qa | members | topics |
forum_ideas | forum | ideas | members | topics |
forum_announcement | forum | discussion | moderators | topics |
forum_imageboard | forum | discussion | members | imageboard |
Kanavan tyypin luominen ja muuttaminen
POST /channels lukee ensin props.am_presetarvon (joka laajennetaan), ja sen jälkeen yksittäiset props.am_type-, am_mode-, am_root_posts- ja am_forum_view-arvot päällekkäin sen kanssa; muut am_-alkuiset ominaisuudet hylätään. Äänikanavan luominen hylätään, jos Äänikanavat-sovellus ei ole aktiivinen (400 api.channel.type.voice_unavailable.app_error). Suoran viestin tai ryhmäviestin luominen tyyppiominaisuuksilla hylätään (api.channel.type.direct.app_error).
curl -X POST https://chat.example.com/api/v4/channels \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"team_id": "'$TEAM_ID'", "name": "help-desk", "display_name": "Help desk", "type": "O",
"props": {"am_preset": "forum_qa"}}'
PUT /channels/{channel_id}/type muuttaa olemassa olevan kanavan esiasetusta tai asetuksia: {"preset"?, "mode"?, "root_posts"?, "view"?}. Esiasetus laajennetaan ensin samalla tavalla kuin luomisen yhteydessä. Pyyntö edellyttää kanavassa oikeutta manage_public_channel_properties tai manage_private_channel_properties (tarkastustapahtuma updateChannelType), ja vastauksena palautetaan täydennetty kanava. Ruumis, joka määrittää toisen type-arvon, hylätään (api.channel.type.fixed.app_error): tyyppiä ei voi koskaan muuttaa. Muita virheitä: api.channel.type.invalid.app_error (tuntematon arvo, tila, joka ei kuulu kanavan tyyppiin, tai näkymä muulle kuin foorumikanavalle).
Eräviennissä ja -tuonnissa (amctl import bulk) kanavan rivillä on samat neljä kenttää: am_type, am_mode, am_root_posts ja am_forum_view. Jos kanavan riviltä puuttuvat nämä kentät, kanava tuodaan tavallisena tekstimuotoisena Chat-kanavana, kuten kanavatyypit olivat ennen.
Kuka aloittaa keskustelut tai avaa aiheita
Juurviestin lähettäminen (ei vastauksena oleva viesti) edellyttää oikeutta create_root_post, joka näkyy ohituseditorissa nimillä Aloita keskustelut (teksti- ja äänikanavat) tai Avaa aiheet (foorumit). Mikään rooli ei sisällä tätä oikeutta oletuksena: ennen ohituksia kaikilla, joilla on oikeus lähettää viestejä, on tämä oikeus, jos root_posts on members, ja vain kanavan moderaattoreilla (järjestelmän ylläpitäjät, yhteisön ylläpitäjät, kanavan ylläpitäjät sekä kaikki, joilla on kanavassa oikeus Hallitse viestejä) jos arvo on moderators. Rooli- tai henkilökohtainen ohitus oikeudelle create_root_post otetaan huomioon tämän jälkeen, kuten muidenkin oikeuksien kohdalla. Vastauksen (root_id asetettu) lähettämiseen riittää tavallinen oikeus lähettää viestejä.
Jos juuriviesti ei täytä tätä ehtoa, palautetaan 403: app.post.root_posts.moderators_only.app_error, kun root_posts on moderators eikä lähettäjä ole kanavan moderaattori, tai app.post.root_posts.denied.app_error, jos kyseessä on ohituskielto. Tarkistus tehdään REST API:lle, boteille, saapuville ja lähteville webhook-kutsuille (kutsun luoja tarkistetaan) sekä kauttaviivakomentojen vastauksille. Sovellusten lähettämät viestit (laajennosrajapinta) ja siirretyn ketjun kopiot eivät tarkisteta (siirtäjä tarkistetaan sen sijaan). Erätuonti ohittaa tarkistuksen.
Foorumit hyväksyvät vain aiheita
Foorumilla juuriviestissä on oltava props.am_thread_title (aiheen otsikko), tyhjät merkit poistettuina, 1–100 merkkiä, riippumatta lähteestä, mukaan lukien sovellukset ja siirretyt ketjut: puuttuva otsikko aiheuttaa virheen 400 app.post.forum.title_required.app_error, liian pitkä otsikko virheen app.post.forum.title_too_long.app_error. Vastauksissa ei tarvita otsikkoa, ja vastauksen mukana lähetetty otsikko hylätään. Jos aiheen juuriviestiä muokataan ilman otsikkoa tai tyhjällä otsikolla, nykyinen otsikko säilyy; ei-tyhjä otsikko nimeää aiheen uudelleen. Ketjun siirtäminen foorumille (alla) vaatii myös otsikon, joko pyynnöstä tai ketjun omasta otsikosta.
Kysymys- ja vastaus-aiheen hyväksytty vastaus (am_accepted_answer, vastauksen ID) ja Ideat-aiheen tila (am_topic_status, sekä am_topic_status_by ja am_topic_status_at) kirjoitetaan vain pyynnöllä PATCH /posts/{post_id}/topic. Jos näitä kolmea kenttää lähetetään luomisen, päivityksen tai osittaisen päivityksen yhteydessä, asiakkaan tai sovelluksen toimesta, ne hylätään ja tallennettu arvo säilytetään.
Listaa foorumin aiheet
GET /channels/{channel_id}/topics?sort=votes&per_page=25
Vaatii oikeuden lukea kanavaa. Kyselyparametrit:
sort:activity(oletus),newest,votes,unanswered(vain Kysymys ja vastaus) taistatus(vain Ideat).answered(true/false, Kysymys ja vastaus) jastatus(jokin seuraavista:open,planned,in_progress,done,declined, Ideat): suodata näillä parametreilla. Jos parametria käytetään väärässä tilassa, palautetaan400.mine=true: vain sinun aloittamasi aiheet.following=true: vain seuraamasi aiheet.q: hakee otsikosta tai ensimmäisen viestin tekstistä, enintään 200 merkkiä.before: edellisen sivunnext_cursor.per_page: oletuksena 25, enintään 100.replies: 0–5 uusinta vastausta kullekin ketjulle kuvataulunäkymää varten.
Vastaus: {"topics": [{"post", "reply_count", "last_reply_at", "participant_ids", "votes", "accepted_answer_id", "status", "on_top", "replies": [post, …]}], "next_cursor"}. Äänet ovat 👍-reaktioita (+1 ja thumbsup lasketaan yhteen), joista vähennetään ketjun oma tekijä. accepted_answer_id annetaan vain Q&A-foorumeilla, status vain Ideat-foorumeilla. Kanavan kärjessä olevat ketjut tulevat ensin.
Hyväksy vastaus tai aseta ketjun tila
curl -X PATCH https://chat.example.com/api/v4/posts/$POST_ID/topic \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"accepted_answer_id": "'$REPLY_ID'"}'
post_id:n on oltava foorumiketjun juurviesti, muuten 400 app.topic.not_a_topic.app_error. accepted_answer_id (vastauksen tunnus tai "" peruuttamista varten) vaatii Q&A-foorumin; status vaatii Ideat-foorumin. Väärässä tilassa oleva parametri aiheuttaa virheen 400 app.topic.mode.app_error.
- Vastauksen hyväksyminen: ketjun kysyjä (jos hän voi vielä kirjoittaa siellä) tai kanavan moderaattori; muuten
403 app.topic.accept.not_allowed.app_error. Vastauksen on oltava kyseisen ketjun aktiivinen, ei-järjestelmäviesti, muuten400 app.topic.accept.not_a_reply.app_error. Hyväksytyn vastauksen poistaminen tyhjentää vastauksen. - Tilan asettaminen: vain kanavan moderaattorit, muuten
403 app.topic.status.not_allowed.app_error; tuntematon arvo aiheuttaa virheen400 app.topic.status.invalid.app_error.
Jokainen muutos lisää järjestelmävastauksen ketjuun (kertoen sen seuraajille) ja palauttaa ketjun juurviestin sellaisena kuin se nyt on. Ideat-foorumilla ketjun äänestäminen tekee siitä myös seuraamasi.
Siirrä ketju
POST /posts/{post_id}/move_to_channel siirtää ketjun, sen ensimmäisen viestin ja kaikki vastaukset toiseen kanavaan samassa yhteisössä. post_id voi olla ensimmäinen viesti tai mikä tahansa vastaus.
curl -X POST https://chat.example.com/api/v4/posts/$POST_ID/move_to_channel \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"channel_id": "'$TARGET_CHANNEL_ID'", "flatten": false}'
channel_id(pakollinen): kanava, johon ketju siirretään.flatten(oletusfalse):truetekee vastauksista kohdekanavan viestejä ketjun sijaan. Fusionin Tee kanavasta käyttää tätä. Hylätään, jos kohde on foorumi (400 app.post.move_thread.forum_flatten.app_error): vastauksista tulisi otsikottomia ketjuja.title: ketjun otsikko, kun kohde on foorumi. Jos sitä ei anneta, ketjun oma otsikko säilytetään, jos sellainen on; puuttuminen jommassakummassa tapauksessa aiheuttaa virheen400 app.post.move_thread.forum_title_required.app_error. Ohitetaan, jos kohde ei ole foorumi.
Viestit säilyttävät kirjoittajansa, aikaleimansa, reaktiot ja tiedostot. Niiden kopiot kantavat silent_notification-ominaisuuden, joten ne eivät ilmoita kenellekään. Alkuperäiset viestit poistetaan. Vastaus on siirretty ensimmäinen viesti, jossa on sen uusi ID.
Kuka voi siirtää ketjua
- Sinun on pystyttävä lukemaan ketju ja kirjoittamaan kohdekanavaan.
- Kanavan ylläpitäjät, yhteisön ylläpitäjät, henkilöt, joilla on Hallitse viestejä (
delete_others_posts) -oikeus kanavassa, ja järjestelmän ylläpitäjät voivat siirtää mitä tahansa ketjua. - Ketjun kirjoittaja voi siirtää sen, jos molemmat kanavat ovat julkisia, tai jos ketjun kaikki viestit ovat hänen. Muussa tapauksessa vastaus on
403ja IDapi.post.move_thread.private_needs_moderator.app_error. - Molempien kanavien on oltava samassa yhteisössä (ei suoria tai ryhmäviestejä), eri kanavia ja arkistoimattomia. Järjestelmäviestejä ja luetuissa poltettavia viestejä ei voi siirtää.
- Ketju, jossa on enemmän kuin
WranglerSettings.MoveThreadMaxCountviestiä (oletusarvo 100; 0 ilman rajaa), hylätään.
Viite ja muistiinpano
Siirto luo kaksi system_wrangler-tyypin järjestelmäviestiä: viitteen vanhaan kanavaan ("Ketju, jossa on 13 viestiä, on siirretty kanavaan #target") ja muistiinpanon kohdekanavaan ("Tämä ketju on siirretty kanavasta #source"), siirretyn ketjun alle tai, flatten-valinnalla, sen viestien jälkeen. Viestien tekstin lisäksi niiden ominaisuudet mahdollistavat kanavan nimen piirtämisen linkkinä asiakkaassa:
- Viite:
MovedThreadPermalink,NumMessages,MovedThreadChannelId,MovedThreadTeamName,MovedThreadPostIdja, jos kohde on julkinen kanava,MovedThreadChannelNamejaMovedThreadChannelDisplayName. - Muistiinpano:
MovedFromChannelId,MovedFromTeamName,MovedFromPostId(viite),MovedFromPermalinkja, jos lähde on julkinen kanava,MovedFromChannelNamejaMovedFromChannelDisplayName.
Molemmilla on myös TranslationID. Yksityisen kanavan nimi jätetään pois: lukijat näkevät tekstin "toinen kanava". Mattermostin oma POST /posts/{post_id}/move-pääte on poistettu käytöstä Antimatterissa; käytä tätä päatetta.
Yhteisön säännöt
Yhteisön ylläpitäjät voivat vaatia, että jäsenet hyväksyvät yhteisön säännöt ennen kuin he voivat lähettää viestejä kanavilla. Kun säännöt ovat käytössä, jäsen, joka ei ole hyväksynyt nykyistä versiota, ei voi lähettää, vastata, lähettää tiedostoja, ajoittaa, muokata tai palauttaa viestiä eikä suorittaa komentoja, jotka lähettävät viestejä yhteisön kanaville: palvelin vastaa tilakoodilla 403 ja virhekoodilla api.post.community_rules_not_accepted, ja ajoitetun viestin lähettäminen epäonnistuu virhekoodilla community_rules_not_accepted. Lukeminen, reaktiot sekä suorat ja ryhmäviestit eivät ole rajoitettuja. Myöskään botit, saapuvat webhookit, järjestelmäviestit tai yhteisön ylläpitäjät (manage_team, jonka järjestelmän ylläpitäjillä on myös) eivät ole rajoitettuja.
| Päätepiste | Toiminto |
|---|---|
GET /teams/{team_id}/rules | Säännöt (enabled, text Markdown-muodossa, version), viimeisin hyväksymäsi versio (accepted_version) ja se, onko hyväksyminen pakollista ennen viestin lähettämistä (must_accept). Jäsenille ja kaikille, jotka voivat liittyä avoimeen yhteisöön. |
PUT /teams/{team_id}/rules | Tallentaa säännöt avaimilla {"enabled", "text", "ask_again"} (manage_team). ask_again luo uuden version, joka kaikkien on hyväksyttävä uudelleen; ensimmäinen tallennus on versio 1. Teksti on pakollinen sääntöjen käyttöönotolle, ja sen enimmäispituus on 16 000 merkkiä. |
POST /teams/{team_id}/rules/accept | Hyväksyy version (version), jonka olet lukenut jäsenenä. Palauttaa 409, jos uudempi versio on tallennettu tämän jälkeen, ja 0, jos hyväksyt nykyisen version. |
GET /teams/{team_id}/rules/stats | Kuinka moni yhteisön jäsenistä on hyväksynyt nykyisen version (manage_team). |
Tapahtuma community_rules_updated lähetetään yhteisölle, kun ylläpitäjä tallentaa säännöt (team_id, enabled, version), ja tapahtuma community_rules_accepted lähetetään hyväksyneelle jäsenelle kaikissa hänen istunnoissaan (team_id, version).
Keskittymistila
Keskittymistila on Älä häiritse -tila, jolla on lopetusaika: ilmoitukset mykistetään (ei push-, sähköposti-, työpöytä- tai pysyviä ilmoituksia, mukaan lukien kiireelliset viestit), syystä tulee mukautettu tila 🎯-emojilla (dart), joka vanhenee lopetusaikana, ja Antimatterin sovellukset piilottavat käyttäjän omat lukemattomat merkkien määrät. Vain henkilö itse voi käyttää näitä päätepisteitä (me tai hänen oma ID:nsä): kukaan muu, mukaan lukien järjestelmän ylläpitäjät, ei voi aloittaa, lopettaa tai lukea kenenkään keskittymistilaa tai sen yhteenvetoa.
| Päätepiste | Toiminto |
|---|---|
GET /users/me/focus | Nykyinen keskittymistila (active, start_at, end_at, reason) tai viimeisin keskittymistila sen päättymisen jälkeen (ended_at asetettu), tai kaikki nollia. |
POST /users/me/focus | Aloittaa keskittymisen tai muuttaa keskittymisen aikana lopetusajankohdan ja syyn: {"duration": "1h30m", "reason": "…"} tai keston sijaan {"end_at": ms}, alkaen minuutista viikkoon. "duration": "tomorrow" lopettaa keskittymisen seuraavana päivänä kello 09.00 käyttäjän aikavyöhykkeellä. Lopetusajankohta pyöristetään alaspäin minuutin tarkkuudella; syy voi olla enintään 100 merkkiä. Edellyttää käyttäjätilojen olevan käytössä (ServiceSettings.EnableUserStatuses); botit eivät voi keskittyä. |
DELETE /users/me/focus | Lopettaa keskittymisen nyt. |
GET /users/me/focus/summary?since=&until= | Mitä kyseisen ajanjakson aikana on jäänyt lukematta (keskittymisen start_at ja ended_at): kanavat, joissa on muiden lähettämiä lukemattomia viestejä (suorat ja ryhmäviestit ensin, sitten maininnat; mykistetyt kanavat vain mainintojen osalta), ja kun vastausketjut ovat tiivistettyjä, seuratut ketjut, joissa on uusia vastauksia, kunkin ketjun osalta ilmoitetaan lukumäärä, maininnat ja viimeisin lähettäjä. |
POST /users/me/focus/summary/read | Käytettäessä parametreja {"since", "until"}: merkitsee nämä kanavat ja ketjut luetuiksi vain until-ajankohtaan asti; sitä myöhemmin tulleet viestit jäävät lukemattomiksi. |
Kun henkilö keskittyy, hänen käyttäjänsä omaisuutena on focus_until (millisekunteina), jota asiakasohjelmat käyttävät keskittymistilan näyttämiseen; sitä ei voi muuttaa profiilin kautta. Keskittyminen päättyy, kun henkilö lopettaa sen, kun ajankohta koittaa (minuutin sisällä) tai kun henkilö asettaa tilan itse, jolloin tila säilyy. Muutoin palautetaan aiempi tila ja mukautettu tila. Kaikki hänen istuntonsa saavat tällöin focus_ended-tapahtuman, jossa on start_at, end_at ja ended_by (user, timer tai status).
Malliyhteydet
Malli-yhteys on tekoälyn palveluntarjoattajan osoite ja avain, jonka ylläpitäjä määrittää. Palvelimen tekoälyominaisuudet ja tekoälypalvelua käyttävät sovellukset käyttävät näitä. Järjestelmän ylläpitäjät hallinnoivat palvelimenlaajuisia yhteyksiä (manage_ai_connections); yhteisön ylläpitäjät hallinnoivat yhteisönsä omia (manage_team_ai_connections). Avaimet ovat vain kirjoitettavia: vastaukset eivät sisällä avainta, vaan vain api_key_set ja api_key_last4.
| Päätepiste | Toiminto |
|---|---|
GET /ai/connections?scope= | Yhteydet, joita hallinnoit. scope on joko server tai yhteisön ID; ilman sitä palautetaan kaikki hallinnoimasi alueet. |
POST /ai/connections | Lisää yhteyden (vastaa 201). |
POST /ai/connections/test, POST /ai/connections/models | Testaa yhteyden tai luettaa sen mallit ennen tallennusta. Sama ruumis kuin lisäyksessä; mitään ei tallenneta. |
GET, PATCH (tai PUT), DELETE /ai/connections/{connection_id} | Lue, muuta tai poista yhteys. Patch sisältää vain muutettavat kentät; jätä api_key pois, jos avainta ei haluta vaihtaa. |
POST /ai/connections/{connection_id}/test | Testaa tallennettu yhteys: {"ok", "error", "status_code", "latency_ms", "model_count"}. |
GET /ai/connections/{connection_id}/models | Mallit, joita palveluntarjoaja tarjoaa. |
GET /ai/connections/{connection_id}/usage | Tämän kuukauden pyynnöt ja tokenit. |
GET /ai/connections/usable?channel_id=&team_id= | Kaikille kirjautuneille: siellä käytettävissä olevat yhteydet, niiden mallit ja ominaisuudet, mutta ei koskaan avaimia tai osoitteita. |
Uuden yhteyden ruumis:
{
"name": "Local models",
"scope": "server",
"provider": "openai_compatible",
"base_url": "http://llm.internal:8000/v1",
"api_key": "…",
"extra_headers": {},
"models": {"chat": "qwen3-32b", "embeddings": "", "transcription": "", "decisions": ""},
"limits": {"requests_per_minute": 0, "monthly_token_budget": 0, "per_user_requests_per_minute": 0, "per_user_monthly_token_budget": 0},
"sharing": {"all_teams": true, "team_ids": []},
"audience": {"everyone": true, "group_ids": [], "roles": [], "allow_guests": false}
}
provider on openai_compatible tai anthropic. scope on oletuksena server; yhteisön ID tekee siitä kyseisen yhteisön yhteyden. limits-osassa arvo 0 tarkoittaa, ettei rajaa ole; pyyntöjä minuutissa lasketaan jokaisella palvelimella, ja token-budjetteja kalenterikuukaudessa (UTC) koko klusterille. sharing määrittää, mitkä yhteisöt voivat käyttää palvelimenlaajuista yhteyttä (suoriin viesteihin ja ryhmäviesteihin tarvitaan all_teams), ja audience määrittää, ketkä voivat käyttää sitä; vieraat vain, jos allow_guests on asetettu. Muutokset kirjataan tilintarkastuslokiin. Ylläpitäjän opas selittää asetukset: katso AI.
Agentit
Agentti on agent-tyyppinen bottitili (käyttäjän omaisuutena is_agent), jolla on asetukset: sen kattavuus (server tai yhteisön ID), sisäänrakennettu vai external, ja sisäänrakennetun agentin osalta malliyhteys, malli, järjestelmäkehote ja päättely. Järjestelmän ylläpitäjät hallitsevat palvelinkohtaisia agentteja (manage_system), yhteisön ylläpitäjät oman yhteisönsä agentteja (manage_team); lisäksi manage_own_agent heidän itse luomalleen agentille ja manage_others_agent muille agentteille. Agentin ID näissä poluissa on sen käyttäjä-ID. Ulkoisen agentin suorittaminen ja sisäänrakennetun agentin tilan asettaminen on selitetty osiossa Botit; PUT /users/{user_id}/status ja mukautettuja tiloja koskevat päätepisteet hylkäävät sisäänrakennetun agentin ID:n myös järjestelmän ylläpitäjiltä (403, api.status.agent.app_error).
| Päätepiste | Toiminto |
|---|---|
GET /ai/agents?scope= | Hallitsemasi agentit: scope on server tai yhteisön ID. Jos sitä ei ole määritetty, palautetaan kaikki hallitsemasi agentit. |
POST /ai/agents | Luo agentin ja sen käyttäjätilin (palauttaa 201). Yhteisön agentti liittyy kyseiseen yhteisöön. |
GET, PATCH, DELETE /ai/agents/{agent_id}POST …/enable, POST …/disable | Lue, muokkaa, poista (käyttäjätili poistetaan käytöstä, mutta viestit säilyvät), ota agentti käyttöön tai poista se käytöstä. |
GET /ai/agents/connections?scope=GET /ai/agents/connections/{connection_id}/models | Malliyhteydet, joita tämän laajuuden agentti voi käyttää, ja niiden mallit. |
GET, PUT /ai/agents/{agent_id}/activityPOST /ai/agents/activity/ids | Mitä agentti tekee. Tämän asettaa joko agentin oma token tai sen hallitsijat. Erä voi sisältää enintään 200 käyttäjä-ID:tä. |
POST /ai/agents/{agent_id}/tasks | Pyydää sisäänrakennettua agenttia suorittamaan tehtävä: summarize_thread, find_action_items tai find_open_questions (ketjun post_id:lla tai channel_id:lla alkaen since-ajankohdasta), summarize_channel, ask_channel (sisältää question) tai summarize_transcription (puhelun transkriptioviesti). Pyyntö muuttuu viestiksi sinun ja agentin välisessä suorassa viestissä omalla kielelläsi, ja vastaus annetaan siellä. Vastaus (201) on kyseinen viesti. Jos et voi lukea viestiä tai kanavaa, vastaus on kuin kohdetta ei olisi olemassa. |
GET /ai/agents/conversations?agent_id=&before=&per_page= | Keskustelusi käytettävissä olevien agenttien kanssa uusimmat ensin: ketjut, jotka olet aloittanut suorissa viesteissä heidän kanssaan, sekä ketjut muualla, joihin jokin heistä on vastannut ja joita seuraat. before (aikaleima) antaa seuraavan sivun. per_page on enintään 100. |
Uuden agentin runko:
{
"username": "researcher",
"display_name": "Researcher",
"description": "Answers with sources",
"scope": "server",
"external": false,
"connection_id": "…",
"model": "",
"system_prompt": "You research questions and answer with sources.",
"reasoning": {"enabled": false, "effort": "", "budget_tokens": 0},
"max_tool_turns": 0,
"access": {"everyone": true, "team_ids": [], "channel_ids": [], "roles": [], "user_ids": [], "allow_guests": false}
}
Tyhjä model käyttää yhteyden chat-mallia. access.channel_ids tarkoittaa kyseisten kanavien jäseniä. Ulkoisella agentilla ei ole yhteyttä, mallia eikä järjestelmäkehote. GET /agents palauttaa listan agentteja, joiden kanssa voit keskustella, sellaisina kuin tekoälykeskustelusovellus heidät näkee.