REST API

Antimatter செயல்கள் செய்யும் எல்லாவற்றையும் ஒரே HTTP API வழியாகச் செய்கின்றன, எனவே உங்கள் ஸ்கிரிப்ட்களும் அதைச் செய்யலாம். இந்தப் பக்கம் எவ்வாறு அங்கீகரிப்பது, நீங்கள் அதிகம் பயன்படுத்தும் வளங்கள், பதில்கள் மற்றும் பிழைகள் எவ்வாறு தோன்றும், மற்றும் WebSocket வழியாக நிகழ்வுகளை நேரடியாக எவ்வாறு பின்தொடர்வது என்பதை விளக்குகிறது.

அடிப்படைகள்

  • அடிப்படை URL: https://chat.example.com/api/v4. கீழே உள்ள அனைத்து முனைகளும் (endpoints) இதற்கு சார்பானவை.
  • வடிவம்: உள்ளீடு மற்றும் வெளியீடு JSON, கோப்பு பதிவேற்றங்கள் (multipart) தவிர. Content-Type: application/json அனுப்பவும்.
  • அடையாளங்கள்: ஒவ்வொரு பொருளும் 26 எழுத்துகள் கொண்ட id உடையது. நேரங்கள் Unix epoch முதல் மில்லிசெகண்டுகளில் (create_at, update_at, delete_at; 0 என்பது "நீக்கப்படவில்லை" என்று பொருள்).
  • சமூகங்கள் என்பவை குழுக்கள்: API இவைகளை teams என்று அழைக்கிறது, team_id உடன்.
  • உங்களை: ஒரு பாதை user_id எடுக்கிற இடத்தில், me என்பது உள்நுழைந்த பயனரைக் குறிக்கிறது, எடுத்துக்காட்டாக GET /users/me.

எண்ட்பாயிண்ட்களின் முழு பட்டியலும் சர்வரின் குறியீட்டில் உள்ளது: ரூட்ஸ் server/channels/api4/*.go இல், தைப்கள் server/public/model இல் அறிவிக்கப்பட்டுள்ளன. ரிப்பாசிட்டரியின் api/v4/source கோப்பையில் உள்ள OpenAPI விளக்கம் Mattermost-இலிருந்து பெறப்பட்ட எண்ட்பாயிண்ட்களையும், Antimatter-இன் சில சேர்க்கைகளையும் (த்ரெட்களை நகர்த்துதல், மாதிரி இணைப்புகள் மற்றும் செய்தி செயல்கள்) உள்ளடக்கியுள்ளது. மற்றவை குறியீட்டில் மட்டுமே உள்ளன.

அங்கீகாரம்

உள்நுழைதல் மற்றும் சில பொது முனைகள் தவிர, ஒவ்வொரு கோரிக்கையும் Authorization தலைப்பில் (header) ஒரு டோக்கனைத் தேவைப்படுகிறது:

curl -H "Authorization: Bearer $TOKEN" https://chat.example.com/api/v4/users/me

அங்கு மூன்று வகை டோக்கன்கள் ஏற்கப்படுகின்றன: தனிப்பட்ட அணுகல் டோக்கன்கள், அமர்வு டோக்கன்கள் மற்றும் OAuth அணுகல் டோக்கன்கள். Authorization: Token … உடன் ஏற்கப்படுகிறது. வினவு சரத்தில் (query string) உள்ள டோக்கன்கள் (?access_token=) OAuth அணுகல் டோக்கன்களுக்கு மட்டுமே ஏற்கப்படுகின்றன.

தனிப்பட்ட அணுகல் டோக்கன்கள் (ஸ்கிரிப்ட்களுக்கு பரிந்துரைக்கப்படுகிறது)

ஒரு தனிப்பட்ட அணுகல் டோக்கன் உங்களைப் போல செயல்படுகிறது, நீங்கள் அதற்கு ஒரு காலாவதி தேதியைத் தந்தால் தவிர காலாவதியாகாது, மற்றும் எப்போது வேண்டுமானாலும் ரத்து செய்யப்படலாம். தனிப்பட்ட அணுகல் டோக்கன்கள் இயல்பாக அணைக்கப்பட்டுள்ளன:

  1. ஒரு அமைப்பு நிரவாகி, அமைப்பு கன்சோல் › இணைப்புகள் › இணைப்புகள் மேலாண்மை இல் தனிப்பட்ட அணுகல் டோக்கன்களை இயக்கு ஐ இயக்குகிறார் (ServiceSettings.EnableUserAccessTokens, AM_SERVICESETTINGS_ENABLEUSERACCESSTOKENS).
  2. டோக்கன்களை உருவாக்கக்கூடிய ஒவ்வொரு நபருக்கும், ஒரு அமைப்பு நிரவாகி அமைப்பு கன்சோல் › பயனர் நிர்வாகம் › பயனர்கள் ஐ திறந்து, அந்த நபரின் மெனுவில் பங்குகளை நிர்வகி ஐத் தேர்ந்தெடுத்து, இந்தக் கணக்கு தனிப்பட்ட அணுகல் டோக்கன்களை உருவாக்க அனுமதிக்கவும் ஐக் குறிக்கிறார். அமைப்பு நிரவாகிகள் எப்போதும் அவற்றை உருவாக்க முடியும்.
  3. அந்த நபர் வலது மேலே உள்ள தங்கள் அவதாரத்தைத் திறந்து, பின்னர் சுயவிவரம் & அமைப்புகள் › பாதுகாப்பு ஐத் தேர்ந்தெடுக்கிறார். தனிப்பட்ட அணுகல் டோக்கன்கள் கீழ், டோக்கன் எதற்காக என்பதை விவரித்து, டோக்கனை உருவாக்கு ஐத் தேர்ந்தெடுக்கிறார். டோக்கன் ஒருமுறை மட்டுமே காட்டப்படுகிறது: அதை நகலெடுக்கவும்.

API மூலம்: POST /users/{user_id}/tokens ஐப் பயன்படுத்தி {"description": "backup script", "expires_at": 0} ஐ அனுப்பவும் (expires_at மில்லிசெகண்டுகளில்; 0 என்றால் எதுவும் இல்லை). பதிலின் token புலம் ரகசியம்; அதன் id ஐ நீங்கள் ரத்து செய்யப் பயன்படுத்த வேண்டும் (POST /users/tokens/revoke ஐப் பயன்படுத்தி {"token_id": "…"} ஐ அனுப்பவும்). கமாண்ட் லைன் மூலம்: amctl token generate <user> <description>.

அதே அமைப்பு கன்சோல் பக்கத்தில் அதிகபட்ச தனிப்பட்ட அணுகல் டோக்கன் ஆயுள் (நாட்கள்) மூலம், ஒரு அமைப்பு நிரவாகி டோக்கன் ஆயுளைக் கட்டுப்படுத்த முடியும்.

செஷன் டோகன்கள்

கடவுச்சொல் மூலம் உள்நுழைந்தால், Token பதில் தலைப்பில் ஒரு செஷன் டோகன் திரும்பும்; அப்பாக்கள் பயன்படுத்தும் அதே வகையான செஷன் இது:

curl -i -X POST https://chat.example.com/api/v4/users/login \
  -H 'Content-Type: application/json' \
  -d '{"login_id": "maya", "password": "…"}'

பல்தர அங்கீகாரம் (multi-factor authentication) கொண்ட கணக்குக்காக "token": "123456" ஐச் சேர்க்கவும். சர்வரின் செஷன் அமைப்புகள் கூறுவது போல செஷன்கள் காலாவதியாகும், மேலும் உள்நுழைவு முடிவுப்புள்ளி (endpoint) விகிதக் கட்டுப்பாட்டில் உள்ளது (வினாடிக்கு 5 கோரிக்கைகள்). POST /users/logout செஷனை முடிக்கிறது.

பிரவுசர்கள் குக்கீ மூலம் அங்கீகரிக்கின்றன. குக்கீ மூலம் அங்கீகரிக்கப்பட்ட ஒரு கோரிக்கை, GET-க்கு அல்லாத எதற்கும் X-CSRF-Token தலைப்பையும் அனுப்ப வேண்டும்; Authorization தலைப்பில் உள்ள டோகனுக்கு CSRF தலைப்பு தேவையில்லை.

OAuth 2.0 ஆப்ஸ்

உங்கள் பயன்பாட்டில் (application) அவர்களின் Antimatter கணக்கு மூலம் உள்நுழைய அனுமதிக்க, ஒரு OAuth 2.0 ஆப் பதிவு செய்யவும். Antimatter அப்போது OAuth வழங்குநராக (provider) செயல்படும்:

  1. OAuth 2.0 சேவை வழங்குநரை இயக்கு இயக்கப்பட்டிருக்க வேண்டும் (அமைப்பு கன்சோல் › இணைப்புகள் › இணைப்புகள் மேலாண்மை, ServiceSettings.EnableOAuthServiceProvider, இயல்பாக இயக்கப்பட்டது).
  2. OAuth செயல்களை நிர்வகிக்க உரிமை கொண்ட ஒருவர் (இயல்பாக அமைப்பு நிரவாகிகள்) தங்கள் அவதாரத்தைத் திறந்து, பின்னர் இணைப்புகள் › OAuth 2.0 செயல்கள் ஐத் தேர்ந்தெடுத்து, அதன் callback URL-களுடன் செயலைச் சேர்க்கிறார். அவருக்கு ஒரு client ID மற்றும் client secret வழங்கப்படுகிறது.
  3. உங்கள் பயன்பாடு மக்களை https://chat.example.com/oauth/authorize இல் response_type=code, client_id, redirect_uri மற்றும் state உடன் அனுப்புகிறது. code_challenge_method=S256 உடன் PKCE ஆதரிக்கப்படுகிறது.
  4. அது POST https://chat.example.com/oauth/access_token இல் குறியீட்டைப் பரிமாற்றம் செய்கிறது (grant_type=authorization_code, பின்னர் புதுப்பிக்க refresh_token), மற்றும் Authorization: Bearer <access token> உடன் API ஐ அழைக்கிறது.

பயனர்கள், சுயவிவரம் & அமைப்புகள் › பாதுகாப்பு › நீங்கள் அங்கீகரித்த செயல்கள் இல் தங்கள் அங்கீகரித்த செயல்களைக் காண்கிறார்கள்.

முக்கிய வளங்கள்

எதுமுனைகள்
நீங்கள் மற்றும் மற்றவர்கள்GET /users/me, GET /users/{user_id}, GET /users/username/{username}, POST /users/ids (ID களின் பட்டியல்), POST /users/search, GET /users?in_team=…&in_channel=…
சமூகங்கள்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
சேனல்கள்GET /users/me/teams/{team_id}/channels, GET /teams/name/{team}/channels/name/{channel}, POST /channels, POST /channels/direct (இரண்டு பயனர் ID கள்), POST /channels/group, POST /channels/{channel_id}/members
செய்திகள் (பதிவுகள்)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
வினைகள்POST /reactions உடன் {"user_id", "post_id", "emoji_name"}, DELETE /users/{user_id}/posts/{post_id}/reactions/{emoji_name}
கோப்புகள்POST /files (பலபகுதி: channel_id மற்றும் files), பின்னர் திரும்பி வரும் ID களை பதிவின் file_ids இல் வைக்கவும்; GET /files/{file_id}
விருப்பங்கள்GET /users/me/preferences, PUT /users/me/preferences
ஒருங்கிணைப்புகள்/hooks/incoming, /hooks/outgoing, /commands, /bots, /oauth/apps (அடுத்த பக்கங்களைப் பார்க்கவும்)
சேவையகம்GET /system/ping (ஆரோக்கியம், டோக்கன் தேவையில்லை), GET /config/client?format=old (பயன்பாடுகள் காணும் அமைப்புகள்)

செய்தியைப் பதிவு செய்

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"}'

செய்திகள் Markdown ஆகும். த்ரெட்டில் பதிலளிக்க முதல் பதிவின் "root_id" ஐ சேர்க்கவும், கோப்புகளுக்கு "file_ids" ஐ மற்றும் இணைப்புகள் மற்றும் மற்ற கூடுதல் விவரங்களுக்கு "props" ஐ (பார்க்க இணைப்புகள்).

சேனலின் ID ஐக் கண்டறிய

curl -H "Authorization: Bearer $TOKEN" \
  https://chat.example.com/api/v4/teams/name/lumen-labs/channels/name/ops-alerts

பெயர்கள் சேனலின் இணைப்பில் உள்ளவை: /lumen-labs/channels/ops-alerts.

பக்கப்பிரிவு

பட்டியல் முனைகள் page (0 முதல்) மற்றும் per_page (இயல்பாக 60, அதிகபட்சம் 200) ஐ ஏற்கின்றன. per_page ஐ விட குறைவான நீளத்தில் ஒரு பக்கம் திரும்பி வரும் வரை அடுத்த பக்கத்திற்காக கேட்கவும்.

ஒரு சேனலின் செய்திகள் (GET /channels/{channel_id}/posts) since (ஒரு நேரம்: அப்போது முதல் மாறிய அனைத்தும்) அல்லது before மற்றும் after (ஒரு பதிவு ID) ஆகியவற்றையும் ஏற்கின்றன. அவை ஒரு பதிவு பட்டியலாக திரும்புகின்றன: {"order": [IDs, newest first], "posts": {ID: post}, "next_post_id", "prev_post_id"}.

பிழைகள்

பிழைகள் வழக்கமான HTTP நிலை குறிகளை (400 தவறான உள்ளீடு, 401 உள்நுழைதல் இல்லை, 403 அனுமதி இல்லை, 404 கிடைக்கவில்லை, 501 சேவை முடக்கப்பட்டுள்ளது) மற்றும் ஒரு JSON உடலைப் பயன்படுத்துகின்றன:

{
  "id": "api.context.permissions.app_error",
  "message": "You do not have the appropriate permissions.",
  "detailed_error": "",
  "request_id": "jz8zm5nunpbt8f3gpqsz5dq6so",
  "status_code": 403
}

உங்கள் குறியீட்டில் id-ஐப் பயன்படுத்தவும்: message பயனரின் மொழியில் மொழிபெயர்க்கப்படுகிறது. சர்வர் டெவலப்பர் முறையில் இயங்கும்போது மட்டுமே detailed_error நிரம்பும் (ServiceSettings.EnableDeveloper). சர்வரின் நிர்வாகியிடம் request_id-ஐ மேற்கோளிடவும்: அது பதிவுகளில் உள்ளது.

விகித வரம்புகள்

விகித வரம்பு இயல்பாக அணைக்கப்பட்டது. ஒரு அமைப்பு நிரவாகி அதை இயக்கும்போது (அமைப்பு கன்சோல் › சூழல் › விகித வரம்பு), ஒவ்வொரு கிளையன்க்கும் இயல்பாக வினாடிக்கு 10 கோரிக்கைகள், 100 வரை bursts உடன் வழங்கப்படுகின்றன, IP முகவரி அல்லது பயனர் அடிப்படையில் எண்ணப்படுகின்றன. பதில்கள் X-RateLimit-Limit, X-RateLimit-Remaining மற்றும் X-RateLimit-Reset ஐக் கொண்டுள்ளன; வரம்பை மீறினால், சர்வர் 429 உடன் வினாடிகளில் Retry-After தலைப்பைப் பதிலளிக்கிறது. உள்நுழைவு போன்ற சில முனைகள், அமைப்பு எதுவாக இருந்தாலும், தனித்தனி வரம்புகளைக் கொண்டுள்ளன.

429-இல் காத்திருந்து மீண்டும் முயற்சிக்கும் ஸ்கிரிப்ட்களை எழுதவும், மற்றும் பாலிங்கை (polling) தவிர்க்கவும்: அதற்குப் பதிலாக WebSocket-ஐப் பின்தொடரவும்.

WebSocket நிகழ்வு ஓட்டம்

wss://chat.example.com/api/v4/websocket-இல் இணைக்கவும். இணைப்பு கோரிக்கையில் Authorization: Bearer ஹெடர் மூலம் அல்லது முதல் செய்தியாக இதை அனுப்பி அங்கீகரிக்கவும்:

{"seq": 1, "action": "authentication_challenge", "data": {"token": "…"}}

சர்வர் ஒரு hello நிகழ்வை அனுப்புகிறது, பின்னர் நீங்கள் பார்க்க அனுமதிக்கப்பட்ட அனைத்திற்கும் ஒரு நிகழ்வை அனுப்புகிறது:

{
  "event": "posted",
  "data": {"channel_id": "…", "channel_type": "O", "post": "{\"id\":\"…\",\"message\":\"Hello\",…}"},
  "broadcast": {"channel_id": "…", "team_id": "", "user_id": "", "omit_users": null},
  "seq": 4
}

data.post என்பது JSON சரமாக உள்ள பதிவு என்பதைக் கவனியுங்கள். பொதுவான நிகழ்வுகள்: posted, post_edited, post_deleted, reaction_added, reaction_removed, typing, status_change, user_added, direct_added. செயலிகள் தங்கள் சொந்த நிகழ்வுகளை அனுப்புகின்றன, அவை custom_<app id>_<event> எனப் பெயரிடப்படுகின்றன.

நீங்கள் செயல்களையும் அனுப்பலாம், ஒவ்வொன்றும் அதிகரிக்கும் seq உடன்: user_typing {"channel_id", "parent_id"} உடன், அல்லது get_statuses. இணைப்பு துண்டாகும்போது மீண்டும் இணைக்கவும், மற்றும் நீங்கள் தவறியதை since மூலம் பெறவும் (பார்க்க பக்கவாட்டம்).

Antimatter இதுவரை பின்வரும் நிகழ்வுகளைச் சேர்க்கிறது: community_attributes_updated, member_timeouts_updated, post_put_on_top, post_removed_from_top, server_categories_updated, channel_overrides_updated மற்றும் category_overrides_updated.

வாடிக்கை நூலகங்கள்

  • செல்: server/public/model இல் model.Client4 (github.com/mattermost/mattermost/server/public/model ஐ இறக்குமதி செய்யவும்). model.NewAPIv4Client(url) பயன்படுத்தி, பின்னர் client.SetToken(token) அமைக்கவும்; model.NewWebSocketClient4(wsURL, token) நிகழ்வுகளைப் பின்தொடரும். Antimatter-இன் நகல், UpdateMessageRequest, PutPostOnTop மற்றும் ExportChannel போன்ற தனியான முனைப் புள்ளிகளுக்கான முறைகளைச் சேர்க்கிறது.
  • TypeScript: webapp/platform/client இல் உள்ள @mattermost/client இன் Client4 வகுப்பு, அதன் வகைகள் webapp/platform/types இல் உள்ளன. Antimatter இன் சேமிப்பகத்தில் உள்ள நகல் Antimatter இன் முனைப் புள்ளிகளை உள்ளடக்கியது; Mattermost ஆல் npm இல் வெளியிடப்பட்ட தொகுப்பு அவற்றை உள்ளடக்காது.
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)
}

Antimatter API இல் சேர்க்கும் விஷயங்கள்

இந்த முனைப் புள்ளிகள் மற்றும் புலங்கள் Mattermost சேவையகத்தில் இல்லை. அவற்றில் அனைத்திற்கும் ஒரு அமர்வு தேவை.

முனைப் புள்ளிஇது என்ன செய்கிறது
GET /teams/{team_id}/user_attributes/fields
POST அதே பாதை
PATCH, DELETE …/fields/{field_id}
சமூக பண்புகள்: ஒரு சமூகத்தின் நிர்வாகிகள் அதன் உறுப்பினர்களுக்காக வரையறுக்கும் சுயவிவரப் புலங்கள் (அதிகபட்சம் 20). உறுப்பினர்கள் அவற்றைப் படிக்கலாம்; சமூக நிர்வாகிகள் அவற்றை உருவாக்கி மாற்றுகின்றனர்.
GET /teams/{team_id}/members/{user_id}/user_attributes
PATCH அதே பாதை
POST /teams/{team_id}/user_attributes/values/search
ஒரு உறுப்பினரின் பண்பு மதிப்புகள், {field_id: value} வடிவில். உறுப்பினர்கள் தங்கள் சொந்தவற்றை அமைக்கலாம் (நிர்வாகி நிர்வகிப்பவற்றைத் தவிர); நிர்வாகிகள் யாருடையவற்றையும் அமைக்கலாம். தேடல் {"user_ids": [...]} ஐ ஏற்கிறது (அதிகபட்சம் 200).
GET /teams/{team_id}/timeouts
PUT /teams/{team_id}/members/{user_id}/timeout
GET /teams/{team_id}/members/{user_id}/moderation
காலத்தடைகள்: {"until": time, "reason": "…"} ஒருவரை அந்த நேரம் வரை (அதிகபட்சம் 28 நாட்கள்) சமூகத்தில் பதிவு செய்ய, வினைபுரிய மற்றும் பதிவேற்றம் செய்ய தடுக்கிறது; "until": 0 அதை அகற்றுகிறது. நிர்வாகக் காட்சி அவர்கள் எப்போது சேர்ந்தனர் மற்றும் சமீபத்தில் எவ்வளவு பதிவு செய்தனர் என்பதைக் காட்டுகிறது.
GET /channels/{channel_id}/on_top
PUT, DELETE /posts/{post_id}/on_top
ஒரு சேனலின் மேல் வைக்கப்பட்ட செய்திகள் (அதிகபட்சம் 10). {"duration": ms}, அதிகபட்சம் 30 நாட்கள்; 0 என்றால் அழிக்கப்படும் வரை வைக்கப்படும். சேனலை படிக்கக்கூடியவர்கள் அவற்றை பட்டியலிடலாம். செய்தியை மேல் வைக்க அல்லது அகற்ற, சேனலில் பதிவு செய்யும் உரிமை, மற்றும் சமூகத்தின் சேனலில் சேனலின் அல்லது சமூகத்தின் நிர்வாகியாக இருத்தல், அல்லது அங்கு செய்திகளை நிர்வகி (delete_others_posts) உரிமையைக் கொண்டிருத்தல் தேவை. நேரடி அல்லது குழு செய்தியில், அதன் உறுப்பினர்கள் இதைச் செய்யலாம். காப்பகப்படுத்தப்பட்ட சேனல்களில் இது நிராகரிக்கப்படுகிறது.
POST /channels/{channel_id}/message_requestஉங்கள் சொந்த செய்தி கோரிக்கையில் செயல்படுகிறது: {"action": "accept"}, "dismiss", அல்லது ஒரு உரையாடலை மீண்டும் கோரிக்கைகளில் வைக்க "request". உங்கள் சேனல் உறுப்பினரை திரும்ப வழங்குகிறது.
GET, PUT /channels/{channel_id}/overrides
GET /channels/{channel_id}/overrides/effective
GET, PUT /channels/{channel_id}/role_access
ஒரு சேனலில் ஒரு பங்கு அல்லது ஒரு நபர் செய்யக்கூடியவை, மேலும் பங்கு-தடுப்பிடப்பட்ட சேனலை எந்த பங்குகள் பார்க்கின்றன என்பது.
GET, PUT /teams/{team_id}/server_categories
GET, PUT …/server_categories/overrides
சமூகத்தின் பகிரப்பட்ட சேனல் வகைகள், மேலும் ஒரு வகையின் ஒவ்வொரு சேனலுக்கும் பொருந்தும் மாற்று அமைப்புகள்.
GET /groups/{group_id}/team_role
PUT …/team_role/permissions
ஒரு சமூக பங்கு வழங்கும் அனுமதிகள்.
POST /teams/{team_id}/autolinks/previewஒரு உரைக்கு சமூகத்தின் தானியங்கி இணைப்பு விதிகளை சோதிக்கிறது.
POST /channels/{channel_id}/export?format=csv&since=&until=சேனலின் செய்திகளை CSV ஆக பதிவிறக்குகிறது (அதிகபட்சம் 50,000), சேனலை படிக்கக்கூடியவர்களுக்காக.
GET /posts/{post_id}/speechஉரை-ஒலி மாற்றம் அமைக்கப்பட்டிருந்தால், உரை படிக்கப்படும்போது ஒலியாக வழங்கப்படும் செய்தி.
POST /posts/{post_id}/move_to_channelஒரே சமூகத்தின் மற்றொரு சேனலுக்கு த்ரெட்களை நகர்த்துதல்: த்ரெட்களை நகர்த்துதல் காண்க.
GET, POST /ai/connections
GET, PATCH, DELETE /ai/connections/{connection_id}
GET /ai/connections/usable
மாதிரி இணைப்புகள், சர்வரின் AI சேவைகள் மற்றும் செயல்கள் பயன்படுத்தும் AI வழங்குநர்கள்: மாதிரி இணைப்புகள் காண்க.
GET /channels/{channel_id}/message_actions
POST /posts/{post_id}/message_actions/{hook_id}
GET, POST /hooks/outgoing/{hook_id}/icon
செய்தி செயல்கள்: செய்தி மெனுவில் இருந்து மக்கள் இயக்கும் வெளியேறும் வெப்ஹூக்ஸ். செய்தி செயல்கள் காண்க.

புதிய புலங்கள்

  • சமூகங்கள் (Team, மற்றும் PUT /teams/{team_id}/patch): all_channels_membership (அவர்கள் பார்க்கக்கூடிய ஒவ்வொரு சேனலிலும் அனைவரும் உள்ளனர்), default_channel_id (புதியவர்கள் எங்கு தரையிறங்குவார்கள்; காலியானால் General), kind (community அல்லது workplace: ஒரு பணியிடத்தில், சேனல் நிர்வாகிகள் தங்கள் சேனல்களையும் காப்பகப்படுத்தலாம்; புதிய சமூகங்கள் சர்வரின் TeamSettings.DefaultCommunityKind-ஐப் பெறுகின்றன, இயல்பாக community), member_list_view (உறுப்பினர் பட்டியல் உறுப்பினர்களை எப்படி குழுவின்கிறது: choice, இயல்பானது, ஒவ்வொரு உறுப்பினருக்கும் தேர்வு செய்ய அனுமதிக்கிறது; roles அல்லது teams அதை நிலைபெறச் செய்கிறது), hide_role_colors, require_team_badges, onboarding மற்றும் autolinks (இரண்டும் JSON சரங்கள்).
  • பொதவ சேனலு புதிய குழுவில் general (General), town-square இலலே. 0.9.0 புதுப்பிப்பு ஒவ்வொரு குழுவின் town-square சேனலையும் general என மறுபெயரிடுகிறது, அதன் ID-ஐ மாற்றாமல்; குழுவுக்கு ஏற்கனவே general சேனல் இருந்தால் அப்படி இல்லை. பழைய பெயர்கள் இன்னும் வேலை செய்கின்றன: GET /teams/{team_id}/channels/name/town-square, GET /teams/name/{team}/channels/name/town-square மற்றும் வரும் வெப்க்கின் channel புலம், அந்தப் பெயரில் சேனல் இல்லையெனில், குழுவின் பொதவ சேனலைத் தருகின்றன. புதிய குறியீட்டில் default_channel_id அல்லது general என்ற பெயரைப் பயன்படுத்தவும்.
  • சேனல் இணைப்புகள்: #channel-name ஒரு சேனலை இணைக்கிறது, ~channel-name போல. பதிவின் channel_mentions பண்பு இரண்டு வகையிலும் இணைக்கப்பட்ட சேனல்களைப் பட்டியலிடுகிறது; சேனலைக் குறிக்காத #word ஹேஷ்டேகாகவே இருக்கும். Antimatter இன் வலை இடைமுகமும் மொபைல் செயலியும் #name என எழுதுகின்றன.
  • காப்கப்பட்ட சேனல்கள் இன்னும் புதிய உறுப்பினர்களை ஏற்கின்றன (POST /channels/{channel_id}/members), அவர்கள் வரலாற்றைப் படிக்க முடியும். யாரும் அங்கே பதிவு செய்ய, வினை செய்ய, பின் செய்வது, செய்தியை மேலே வைப்பது, சேனலை மறுபெயரிடுவது அல்லது உறுப்பினர்களின் பங்குகளை மாற்றுவது ஆகியவற்றைச் செய்ய முடியாது.
  • உள்ளமைப்பு பதில்கள்: "props": {"reply_to": "<post id>"} கொண்ட ஒரு பதிவு, அதே சேனலின் அந்தச் செய்தியை மேற்கோள் காட்டுகிறது. அதன் ஆசிரியரை அறிவிக்காமல் விட "reply_to_mention": false சேர்க்கவும். மேற்கோள் காட்டப்பட்ட செய்தியின் குறுகிய விளக்கத்துடன் சர்வர் metadata.reply_to-ஐ நிரப்புகிறது.
  • ஸ்பாய்லர்கள்: "props": {"spoiler": true} ஒரு பதிவின் உரையையும் கோப்புகளையும், வாசிப்பவர் அவற்றை பார்க்க தேர்ந்தெடுக்கும் வரை மறைக்கிறது.
  • புறக்கணித்தல் மற்றும் தடைசெய்தல் விருப்பங்கள் ஆகும்: user_block என்ற வகை, மறு நபரின் ID-ஆல் பெயரிடப்பட்டது, மதிப்பு ignore அல்லது block. நேரடி செய்தி ஒரு கோரிக்கையாக காத்திருக்கிறதா என்பது உங்கள் சேனல் உறுப்பினரின் notify_props.dm_request-இல் (pending, accepted அல்லது dismissed) உள்ளது.
  • செய்தி இணைப்புகள் stages மற்றும் chart ஆகியவற்றை கொண்டுள்ளன: அட்டைகள் காண்க.

ஒரு த்ரெட்டை நகர்த்துதல்

POST /posts/{post_id}/move_to_channel ஒரு த்ரெட்டை, அதன் முதல் செய்தியையும் அனைத்து பதில்களையும், அதே குழுவின் வேறு சேனலுக்கு நகர்த்துகிறது. post_id முதல் செய்தியாகவோ அல்லது எந்தப் பதிலாகவோ இருக்கலாம்.

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 (தேவை): த்ரெட் நகர்த்தப்படும் சேனல்.
  • flatten (இயல்பு false): true எனில், பதில்கள் த்ரெடாகாமல் நோக்க சேனலின் செய்திகளாக மாறுகின்றன. Fusion இன் Make it a channel இதைப் பயன்படுத்துகிறது.

செய்திகள் தங்கள் எழுத்தாளர்களை, நேரங்களை, வினைகளை மற்றும் கோப்புகளை வைத்திருக்கும். அவற்றின் நகல்கள் silent_notification பண்பைக் கொண்டுள்ளன, எனவே யாருக்கும் அறிவிப்பு வராது. அசல் செய்திகள் நீக்கப்படும். பதில் நகர்த்தப்பட்ட முதல் செய்தி, அதன் புதிய ID உடன்.

யார் த்ரெட்டை நகர்த்தலாம்

  • நீங்கள் த்ரெட்டைப் படிக்கவும், நோக்க சேனலில் பதிவு செய்யவும் முடியும்.
  • சேனலின் நிர்வாகிகள், குழுவின் நிர்வாகிகள், சேனலில் செய்திகளை நிர்வகி (delete_others_posts) உரிமை கொண்டவர்கள், மற்றும் அமைப்பு நிர்வாகிகள் எந்தத் த்ரெட்டையும் நகர்த்தலாம்.
  • இரு சேனல்களும் பொதுவாக இருந்தால், அல்லது த்ரெட்டின் ஒவ்வொரு செய்தியும் அவரது சொந்ததாக இருந்தால், த்ரெட்டின் எழுத்தாளர் அதை நகர்த்தலாம். இல்லையெனில், பதில் 403 ஆகும், ID api.post.move_thread.private_needs_moderator.app_error உடன்.
  • இரு சேனல்களும் ஒரே குழுவில் (நேரடி அல்லது குழு செய்திகள் இல்லை), வெவ்வேறாகவும், காப்பகப்படுத்தப்படாமலும் இருக்க வேண்டும். அமைப்பு செய்திகள் மற்றும் படித்தவுடன் அழிக்கப்படும் செய்திகளை நகர்த்த முடியாது.
  • WranglerSettings.MoveThreadMaxCount (இயல்பாக 100; வரம்பு இல்லை என்றால் 0) செய்திகளுக்கு மேல் நீளமான த்ரெட்கள் நிராகரிக்கப்படும்.

குறிப்பு மற்றும் குறிப்பு

இந்த நகர்த்தல் system_wrangler வகையின் இரண்டு அமைப்பு செய்திகளை விடும்: பழைய சேனலில் ஒரு குறிப்பு ("13 செய்திகள் கொண்ட ஒரு த்ரெட் #target-க்கு நகர்த்தப்பட்டது") மற்றும் இலக்கில் ஒரு குறிப்பு ("இந்த த்ரெட் #source-இருந்து நகர்த்தப்பட்டது"), நகர்த்தப்பட்ட த்ரெட்டின் கீழே அல்லது flatten உடன், அதன் செய்திகளுக்குப் பிறகு. செய்தி உரையின் கூடுதலாக, அவற்றின் பண்புகள் (props) ஒரு கிளையண்ட் சேனல் பெயரை இணைப்பாக வரைய அனுமதிக்கின்றன:

  • குறிப்பு: MovedThreadPermalink, NumMessages, MovedThreadChannelId, MovedThreadTeamName, MovedThreadPostId, மற்றும் பொது இலக்கத்திற்கு MovedThreadChannelName மற்றும் MovedThreadChannelDisplayName.
  • குறிப்பு: MovedFromChannelId, MovedFromTeamName, MovedFromPostId (குறிப்பு), MovedFromPermalink, மற்றும் பொது மூலத்திற்கு MovedFromChannelName மற்றும் MovedFromChannelDisplayName.

இருவற்றிலும் TranslationID உள்ளது. தனியார் சேனலின் பெயர் விடுபடுகிறது: வாசகர்கள் "மற்றொரு சேனல்" என்று காண்கிறார்கள். Mattermost-இன் சொந்த POST /posts/{post_id}/move Antimatter-இல் அணைக்கப்படுகிறது; இந்த முடிவுப் புள்ளியை (endpoint) பயன்படுத்தவும்.

மாதிரி இணைப்புகள்

ஒரு மாதிரி இணைப்பு (model connection) என்பது ஒரு AI வழங்குநரின் முகவரியும் விசையும் ஆகும், இது ஒரு நிர்வாகியால் அமைக்கப்படுகிறது. சர்வரின் AI சேவைகள் மற்றும் AI சேவையை அழைக்கும் செயலிகள் (apps) இவற்றைப் பயன்படுத்துகின்றன. அமைப்பு நிர்வாகிகள் சர்வர்-அகலமான இணைப்புகளை (manage_ai_connections) நிர்வகிக்கிறார்கள்; ஒரு குழுவின் நிர்வாகிகள் தங்கள் குழுவின் சொந்த (manage_team_ai_connections) இணைப்புகளை நிர்வகிக்கிறார்கள். விசைகள் எழுத-மட்டும் (write-only): பதிலில் எதுவும் ஒரு விசையைக் கொண்டிருக்காது, api_key_set மற்றும் api_key_last4 மட்டுமே.

முனைப் புள்ளிஇது என்ன செய்கிறது
GET /ai/connections?scope=நீங்கள் நிர்வகிக்கும் இணைப்புகள். scope என்பது server அல்லது ஒரு குழுவின் ID; இல்லையெனில், நீங்கள் நிர்வகிக்கும் அனைத்து வரம்புகளும்.
POST /ai/connectionsஒரு இணைப்பைச் சேர்க்கிறது (பதில் 201).
POST /ai/connections/test, POST /ai/connections/modelsசேமிக்கப்படும் முன் ஒரு இணைப்பைச் சோதிக்கிறது அல்லது அதன் மாதிரிகளைப் பட்டியலிடுகிறது. சேர்ப்பதற்கு ஒரே மாதிரியான உடல் (body); எதுவும் சேமிக்கப்படாது.
GET, PATCH (அல்லது PUT), DELETE /ai/connections/{connection_id}ஒரு இணைப்பைப் படிக்கிறது, மாற்றுகிறது அல்லது அழிக்கிறது. ஒரு patch (பேட்ச்) மாற்ற வேண்டிய புலங்கள் மட்டுமே கொண்டிருக்கும்; விசையை வைத்திருக்க api_key-ஐ விடுவிக்கவும்.
POST /ai/connections/{connection_id}/testசேமிக்கப்பட்ட இணைப்பைச் சோதிக்கிறது: {"ok", "error", "status_code", "latency_ms", "model_count"}.
GET /ai/connections/{connection_id}/modelsபிரவைடர் வழங்கும் மாதிரிகள்.
GET /ai/connections/{connection_id}/usageஇந்த மாதத்தின் கோரிக்கைகள் மற்றும் டோக்கன்கள்.
GET /ai/connections/usable?channel_id=&team_id=உள்நுழைந்தவர்களுக்காக: அங்கு நீங்கள் பயன்படுத்தக்கூடிய இணைப்புகள், அவற்றின் மாதிரிகள் மற்றும் திறன்கள்; அவற்றின் விசைகள் அல்லது முகவரிகள் இல்லை.

புதிய இணைப்பின் உடல்:

{
  "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 என்பது openai_compatible அல்லது anthropic. scope இயல்பாக server ஆகும்; ஒரு சமூகத்தின் ID அதன் இணைப்பாக மாற்றும். limits இல், 0 என்பது எல்லை இல்லை என்ற பொருள்; நிமிடத்திற்கான கோரிக்கைகள் ஒவ்வொரு சர்வரிலும் எண்ணப்படுகின்றன, டோக்கன் பட்ஜெட் முழு கிளஸ்டருக்காக நாட்காட்டி மாதத்திற்கு (UTC). sharing என்பது சர்வர்-விரிவான இணைப்பை எந்த சமூகங்கள் பயன்படுத்தலாம் என்பதைக் குறிக்கிறது (நேரடி மற்றும் குழு செய்திகளுக்கு all_teams தேவை), audience என்பது அதை யார் பயன்படுத்தலாம் என்பதைக் குறிக்கிறது; allow_guests மூலம் மட்டுமே விருந்தினர்கள். மாற்றங்கள் ஆடிட் லாகில் எழுதப்படுகின்றன. அமைப்புகளை நிர்வாகி வழிகாட்டி விளக்குகிறது: AI காண்க.