REST API
Antimatter ایپس جو کچھ بھی کرتی ہیں، وہ سب اسی HTTP API کے ذریعے ہوتی ہیں، اس لیے آپ کے اسکرپٹس بھی یہی کر سکتے ہیں۔ یہ صفحہ وضاحت کرتا ہے کہ آپ کیسے تصدیق (authenticate) کریں، کون سے وسائل آپ سب سے زیادہ استعمال کریں گے، ریسپانس اور خرابیاں کیسے نظر آتی ہیں، اور WebSocket کے ذریعے ایونٹس کو براہِ راست کیسے فالو کریں۔
بنیادی باتیں
- بنیادی URL:
https://chat.example.com/api/v4۔ نیچے دیے گئے تمام اینڈ پوائنٹس اس کے حوالے سے ہیں۔ - فارمیٹ: اندر اور باہر 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 کے کچھ اضافوں (جیسے سلسلوں کو منتقل کرنا، ماڈل کنکشنز اور پیغامات کے اقدامات) کو کور کرتی ہے۔ باقی اِنڈ پوائنٹس صرف کوڈ میں موجود ہیں۔
تصدیق (Authentication)
ہر درخواست، سوائے سائن ان کرنے اور کچھ عوامی اینڈ پوائنٹس کے، Authorization ہیڈر میں ٹوکن کی ضرورت ہوتی ہے:
curl -H "Authorization: Bearer $TOKEN" https://chat.example.com/api/v4/users/me
وہاں تین قسم کے ٹوکنز قبول کیے جاتے ہیں: ذاتی رسائی ٹوکنز، سیشن ٹوکنز اور OAuth رسائی ٹوکنز۔ Authorization: Token … بھی قبول کیا جاتا ہے۔ کوئری سٹرنگ (?access_token=) میں ٹوکنز صرف OAuth رسائی ٹوکنز کے لیے قبول کیے جاتے ہیں۔
ذاتی رسائی ٹوکنز (اسکرپٹس کے لیے سفارش کردہ)
ذاتی رسائی ٹوکن آپ کی طرح کام کرتا ہے، جب تک آپ اسے ایک میعادِ ختم نہ دیں، اس کی میعاد ختم نہیں ہوتی، اور اسے کسی بھی وقت منسوخ کیا جا سکتا ہے۔ ذاتی رسائی ٹوکنز پہلے سے بند ہوتے ہیں:
- سسٹم ایڈمن سسٹم کنسول › انضمامات › انٹیگریشن مینجمنٹ میں پرسونل ایکسس ٹوکنز فعال کریں کو آن کرتا ہے (
ServiceSettings.EnableUserAccessTokens،AM_SERVICESETTINGS_ENABLEUSERACCESSTOKENS)۔ - ہر اس شخص کے لیے جو ٹوکنز بنانے کا حق رکھتا ہے، سسٹم ایڈمن سسٹم کنسول › صارفین کا انتظام › صارفین کھولتا ہے، اس شخص کے مینیو میں کرداروں کا انتظام منتخب کرتا ہے اور اس اکاؤنٹ کو پرسونل ایکسس ٹوکنز بنانے کی اجازت دیں پر ٹک لگاتا ہے۔ سسٹم ایڈمنز ہمیشہ انہیں بنا سکتے ہیں۔
- شخص اپنا ایواٹار (avatar) اوپر دائیں جانب کھولتا ہے، پھر پروفائل اور ترتیبات › سیکیورٹی پر جاتا ہے۔ ذاتی رسائی ٹوکنز کے تحت، وہ ٹوکن کے مقصد کی وضاحت کرتا ہے اور ٹوکن بنائیں منتخب کرتا ہے۔ ٹوکن صرف ایک بار دکھایا جاتا ہے: اسے کاپی کریں۔
API کے ذریعے: POST /users/{user_id}/tokens کے ساتھ {"description": "backup script", "expires_at": 0} (expires_at ملی سیکنڈ میں؛ 0 کے لیے کوئی مدت نہیں)۔ جواب کے token فیلڈ میں راز (secret) ہوتا ہے؛ اس کا 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": "…"}'
ملٹی فیکٹر اتھنٹیکیشن والا اکاؤنٹ کے لیے "token": "123456" شامل کریں۔ سیشنز سرور کے سیشن ترتیبات کے مطابق ختم ہوتے ہیں، اور لاگین انڈپوائنٹ ریٹ لیمٹڈ ہے (فی سیکنڈ 5 درخواستیں)۔ POST /users/logout سیشن کو ختم کرتا ہے۔
X-CSRF-Token ہیڈر بھی بھیجنا ہوگا؛ Authorization ہیڈر میں موجود ٹوکن کو CSRF ہیڈر کی ضرورت نہیں ہوتی۔OAuth 2.0 ایپس
لوگوں کو اپنے Antimatter اکاؤنٹ کے ساتھ اپنی ایپلیکیشن میں سائن ان کرنے کی اجازت دینے کے لیے، ایک OAuth 2.0 ایپ رجسٹر کریں۔ Antimatter پھر OAuth پرووائڈر بن جاتا ہے:
- OAuth 2.0 سروس پرووائیڈر فعال کریں کو آن ہونا ضروری ہے (سسٹم کنسول › انضمامات › انٹیگریشن مینجمنٹ،
ServiceSettings.EnableOAuthServiceProvider، جو پہلے سے آن ہے)۔ - جس شخص کے پاس OAuth ایپس کو منظم کرنے کا حق ہے (پہلے سے سسٹم ایڈمنز)، وہ اپنا ایواٹار کھولتا ہے، پھر انضمامات › OAuth 2.0 ایپس پر جاتا ہے، اور اپنی callback URLs کے ساتھ ایپ شامل کرتا ہے۔ اسے client ID اور client secret ملتا ہے۔
- آپ کی ایپ لوگوں کو
https://chat.example.com/oauth/authorizeپر بھیجتی ہے، جہاںresponse_type=code،client_id،redirect_uriاورstateشامل ہوتے ہیں۔code_challenge_method=S256کے ساتھ PKCE کی حمایت کی جاتی ہے۔ - یہ کوڈ کو
POST https://chat.example.com/oauth/access_tokenپر تبدیل کرتی ہے (پہلےgrant_type=authorization_code، پھر تجدید کے لیےrefresh_token)، اور API کوAuthorization: Bearer <access token>کے ساتھ کال کرتی ہے۔
صارفین پروفائل اور ترتیبات › سیکیورٹی › آپ کی تصدیق شدہ ایپس میں وہ ایپس دیکھتے ہیں جنہیں انہوں نے تصدیق دی ہے۔
بنیادی وسائل
| کیا | اینڈ پوائنٹس |
|---|---|
| آپ اور دیگر لوگ | GET /users/me، GET /users/{user_id}، GET /users/username/{username}، POST /users/ids (IDs کی فہرست)، 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 (دو صارفین کے IDs)، POST /channels/group، POST /channels/{channel_id}/members |
| پیغامات (posts) | 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 (multipart: channel_id اور files)، پھر واپس آنے والے IDs کو پیغام کے 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 کا حوالہ دیں: یہ لاگز میں موجود ہے۔
ریٹ لمٹس
ریٹ لیمٹنگ پہلے سے بند ہے۔ جب سسٹم ایڈمن اسے آن کرتا ہے (سسٹم کنسول › ماحول › ریٹ لیمٹنگ)، تو پہلے سے ہر کلائنٹ کو 100 کے بارسٹس کے ساتھ فی سیکنڈ 10 درخواستیں ملتی ہیں، جو IP ایڈریس یا صارف کی بنیاد پر گنئی جاتی ہیں۔ جوابات میں X-RateLimit-Limit، X-RateLimit-Remaining اور X-RateLimit-Reset شامل ہوتے ہیں؛ حد سے اوپر، سرور 429 کے ساتھ Retry-After ہیڈر (سیکنڈز میں) جواب دیتا ہے۔ کچھ endpoints، جیسے سائن ان کرنا، ترتیب سے قطع نظر اپنی الگ حد رکھتے ہیں۔
اسکرپٹس لکھیں جو 429 پر انتظار کریں اور دوبارہ کوشش کریں، اور پولنگ سے بچیں: 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 کے ساتھ وہ چیزیں لائیں جو آپ نے چھوڑ دی (دیکھیں Pagination)۔
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(importgithub.com/mattermost/mattermost/server/public/model)۔model.NewAPIv4Client(url)، پھرclient.SetToken(token)؛model.NewWebSocketClient4(wsURL, token)events کو فالو کرتا ہے۔ Antimatter کی کاپی اپنے endpoints کے لیے طریقے شامل کرتی ہے، جیسے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/fieldsPOST اسی راستے پرPATCH، DELETE …/fields/{field_id} | کمیونٹی ایٹری بیٹس: پروفائل کے فیلڈز جو کمیونٹی کے ایڈمنز اپنے ارکان کے لیے تعریف کرتے ہیں (زیادہ سے زیادہ 20)۔ ارکان انہیں پڑھ سکتے ہیں؛ کمیونٹی ایڈمنز انہیں بناتے اور تبدیل کرتے ہیں۔ |
GET /teams/{team_id}/members/{user_id}/user_attributesPATCH اسی راستے پرPOST /teams/{team_id}/user_attributes/values/search | کسی رکن کے ایٹری بیٹ ویلیوز، {field_id: value} کی شکل میں۔ ارکان اپنے خود کے ویلیوز سیٹ کرتے ہیں (ایڈمن کے زیرِ انتظام والوں کے سوا)؛ ایڈمنز کسی بھی رکن کے ویلیوز سیٹ کر سکتے ہیں۔ تلاش کے لیے {"user_ids": [...]} (زیادہ سے زیادہ 200) استعمال ہوتا ہے۔ |
GET /teams/{team_id}/timeoutsPUT /teams/{team_id}/members/{user_id}/timeoutGET /teams/{team_id}/members/{user_id}/moderation | ٹائم آؤٹس: {"until": time, "reason": "…"} کسی کو اس وقت تک کمیونٹی میں پوسٹ کرنے، ردعمل دینے اور اپ لوڈ کرنے سے روکتا ہے (زیادہ سے زیادہ 28 دن)؛ "until": 0 اسے ہٹا دیتا ہے۔ میڈریشن ویو میں یہ بتایا جاتا ہے کہ وہ کب شامل ہوئے اور حال ہی میں کتنی پوسٹس کی ہیں۔ |
GET /channels/{channel_id}/on_topPUT, 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}/overridesGET /channels/{channel_id}/overrides/effectiveGET, PUT /channels/{channel_id}/role_access | کسی چینل میں کسی کردار یا شخص کی کیا صلاحیتیں ہیں، اور کن کرداروں کو کردار سے بند شدہ چینل نظر آتا ہے۔ |
GET, PUT /teams/{team_id}/server_categoriesGET, PUT …/server_categories/overrides | کمیونٹی کے مشترکہ چینل کیٹگریز، اور وہ اوور رائڈز جو کسی کیٹگری کے ہر چینل پر لاگو ہوتی ہیں۔ |
GET /groups/{group_id}/team_rolePUT …/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/connectionsGET, PATCH, DELETE /ai/connections/{connection_id}GET /ai/connections/usable | ماڈل کنکشنز، جو AI پرووائڈرز ہیں جنہیں سرور کی AI خصوصیات اور ایپس استعمال کرتی ہیں: دیکھیں ماڈل کنکشنز۔ |
GET /channels/{channel_id}/message_actionsPOST /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میں تبدیل کر دیتا ہے، اس کی آئی ڈی برقرار رکھتے ہوئے، جب تک کہ کمیونٹی میں پہلے سے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ہوگا، IDapi.post.move_thread.private_needs_moderator.app_errorکے ساتھ۔ - دونوں چینلز ایک ہی کمیونٹی میں ہونے چاہئیں (براہِ راست یا گروپ پیغامات نہیں)، مختلف ہونے چاہئیں، اور آرکائیو شدہ نہ ہوں۔ سسٹم پیغامات اور burn-on-read پیغامات کو منتقل نہیں کیا جا سکتا۔
- اگر کسی سلسلے میں
WranglerSettings.MoveThreadMaxCountپیغامات سے زیادہ پیغامات ہوں (ڈیفالٹ 100؛ بغیر حد کے 0)، تو منتقلی مسترد کر دی جائے گی۔
پوائنٹر اور نوٹ
منتقلی دو سسٹم پیغامات (ٹائپ system_wrangler) چھوڑتی ہے: پرانے چینل میں ایک پوائنٹر ("13 پیغامات والا سلسلہ #target میں منتقل کر دیا گیا") اور مقصد چینل میں ایک نوٹ ("یہ سلسلہ #source سے منتقل کیا گیا")، جو منتقل شدہ سلسلے کے نیچے یا، flatten کے ساتھ، اس کے پیغامات کے بعد آتا ہے۔ پیغام کے متن کے علاوہ، ان کے پروپس کلائنٹ کو چینل کے نام کو لنک کے طور پر دکھانے کی اجازت دیتے ہیں:
- پوائنٹر:
MovedThreadPermalink،NumMessages،MovedThreadChannelId،MovedThreadTeamName،MovedThreadPostId، اور عوامی مقصد کے لیےMovedThreadChannelNameاورMovedThreadChannelDisplayName۔ - نوٹ:
MovedFromChannelId،MovedFromTeamName،MovedFromPostId(پوائنٹر)،MovedFromPermalink، اور عوامی ماخذ کے لیےMovedFromChannelNameاورMovedFromChannelDisplayName۔
دونوں میں TranslationID بھی ہوتا ہے۔ ذاتی چینل کا نام چھوڑ دیا جاتا ہے: قارئین کو "کوئی اور چینل" نظر آتا ہے۔ Antimatter میں Mattermost کا اپنا POST /posts/{post_id}/move بند رہتا ہے؛ اس کے بجائے یہ انڈ پوائنٹ استعمال کریں۔
ماڈل کنکشنز
ماڈل کنکشن ایک AI پرووائیڈر کا پتہ اور کلید ہے، جسے ایڈمن سیٹ اپ کرتا ہے۔ سرور کی AI خصوصیات اور AI سروس کو کال کرنے والے ایپس ان کا استعمال کرتے ہیں۔ سسٹم ایڈمنز سرور-وائیڈ کنکشنز (manage_ai_connections) کو منظم کرتے ہیں؛ ایک کمیونٹی کے ایڈمنز اپنی کمیونٹی کے کنکشنز (manage_team_ai_connections) کو منظم کرتے ہیں۔ کلیدیں صرف لکھنے کے لیے ہیں: کوئی جواب انہیں شامل نہیں کرتا، صرف 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 | محفوظ کرنے سے پہلے کنکشن کا ٹیسٹ کرتا ہے یا اس کے ماڈلز کی فہرست دیتا ہے۔ شامل کرنے جیسا ہی باڈی؛ کچھ محفوظ نہیں ہوتا۔ |
GET، PATCH (یا PUT)، DELETE /ai/connections/{connection_id} | کنکشن پڑھتا، بدلتا یا حذف کرتا ہے۔ پچ میں صرف وہ فیلڈز ہوتی ہیں جو تبدیل کرنی ہیں؛ کلید برقرار رکھنے کے لیے 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 ہے؛ کسی کمیونٹی کا آئی ڈی اسے اس کمیونٹی کا کنکشن بناتا ہے۔ limits میں 0 کا مطلب کوئی حد نہیں ہے؛ من فی درخواستیں ہر سرور پر گنی جاتی ہیں، جبکہ ٹوکنز کے بجٹ کلوسٹر کے لیے کلینڈر مہینے (UTC) کی بنیاد پر ہوتے ہیں۔ sharing بتاتا ہے کہ کون سی کمیونٹیز سرور وائیڈ کنکشن استعمال کر سکتی ہیں (براہِ راست اور گروپ پیغامات کے لیے all_teams درکار ہے)، اور audience بتاتا ہے کہ کون اسے استعمال کر سکتا ہے؛ مہمان صرف allow_guests کے ساتھ۔ تبدیلیاں آڈٹ لاگ میں لکھی جاتی ہیں۔ ایڈمن گائیڈ ترتیبات کی وضاحت کرتا ہے: دیکھیں AI۔