📍 المقالة الرئيسية للمجموعة: Mattermost 2026: الدليل الكامل.
Mattermost يصبح قوياً عندما يرتبط بـ stack الخاص بك: Forgejo يُشعر بـ PR، Grafana ينبه عند تجاوز SLO، Uptime Kuma يُبلغ بحالات downtime، Wave Webhook يؤكد المدفوعات. هذا الدرس يفصل التكوينات المُختبَرة في الإنتاج.
المتطلبات
Mattermost في الإنتاج مع حساب admin. المستوى المتوقع: متوسط. الوقت: ساعة إلى ساعتين لـ 5 تكاملات.
Webhook وارد: النمط العام
الخطوة 1 — إنشاء webhook في Mattermost
صورة الملف الشخصي → Integrations → Incoming Webhooks → Add. أدخل: العنوان (اسم الخدمة: Forgejo، Grafana…)، القناة (أين تنشر)، Lock to channel: ON للأمان. Mattermost يولد URL من نوع https://chat.../hooks/abc123xyz. انسخها فوراً واحفظها في Vaultwarden — لا يمكن استعادتها لاحقاً.
الخطوة 2 — اختبار
قبل ربط أي خدمة، اختبر الـ webhook بـ curl لتأكيد أنه يعمل بشكل صحيح. هذا يكشف الأخطاء البسيطة (URL غير صحيح، JSON malformed) قبل تكوين الخدمات الخارجية المعقدة.
curl -X POST -H "Content-Type: application/json" \
-d '{"text":"Hello from cURL!"}' \
https://chat.../hooks/abc123xyz
الرسالة تظهر في القناة Mattermost. إذا رأيتها، الـ webhook يعمل بشكل صحيح.
تكامل Forgejo
إعدادات repo Forgejo → Webhooks → Add webhook → Mattermost. التكوين: Target URL هو webhook Mattermost المنسوخ. القناة: اسم القناة الهدف. Username: forgejo-bot (يظهر كاسم المرسل في الرسائل). Events: Push، Pull Request، Issues، Releases. مع كل PR منشأ أو مدمج، رسالة في #dev مع رابط مباشر إلى PR. هذا يجعل الفريق على اطلاع دائم بنشاط التطوير دون الحاجة إلى التحقق من Forgejo بشكل دوري.
تكامل Grafana Alerts
Grafana → Alerting → Contact points → New → نوع Webhook. URL: webhook Mattermost. تنسيق JSON متوافق مع Mattermost يحول الرسائل التلقائية إلى تنسيق قابل للقراءة في القناة. الرموز التعبيرية تساعد على التمييز السريع بصرياً بين أنواع التنبيهات.
{
"text": "🚨 **{{ .CommonLabels.alertname }}** {{ .Status }}\n{{ .CommonAnnotations.summary }}",
"channel": "alerts"
}
كل تنبيه Grafana (SLO breach، latency p99 > 500ms، CPU > 90%) يُنشَر في #alerts. المهندس على دراية في الوقت الفعلي وعنده الوقت للتدخل قبل أن يلاحظ المستخدمون أي مشكلة.
تكامل Uptime Kuma
إعدادات monitor → Notifications → Add → Mattermost. URL webhook + القناة. لكل حالة DOWN أو UP، رسالة فورية. هذا التكامل أساسي لفرق DevOps الإفريقية لأنه يكشف انقطاعات الخدمة فوراً، حتى أثناء الليل أو عطلات نهاية الأسبوع.
{
"text": "🔴 **{{monitorJSON.name}}** is DOWN\nReason: {{ msg }}"
}
تكامل Wave Mobile Money
Wave Business webhook → URL endpoint مخصص (الـ VPS الخاص بك). Endpoint يتحقق من signature ثم ينشر إلى Mattermost. هذا حاسم للمتاجر الإلكترونية الإفريقية لأن Wave هو وسيلة الدفع الرئيسية في السنغال وكوت ديفوار.
// app/api/wave-webhook/route.ts (Next.js)
import { verify } from 'crypto';
export async function POST(req: Request) {
const body = await req.text();
const sig = req.headers.get('Wave-Signature');
if (!verify(body, sig, process.env.WAVE_SECRET)) {
return new Response('Invalid', { status: 401 });
}
const data = JSON.parse(body);
if (data.type === 'checkout.session.completed') {
await fetch(process.env.MATTERMOST_WEBHOOK!, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: `💰 Paiement Wave reçu : ${data.amount} XOF de ${data.customer_phone}`,
channel: 'sales'
})
});
}
return new Response('OK');
}
Slash commands مخصصة
Profile → Integrations → Slash Commands → Add. مثال /standup الذي يطلب من كل عضو أسطره الثلاثة. Slash commands تحول Mattermost إلى منصة عمل تفاعلية. المستخدم يكتب /standup ويحصل على نموذج فوري للملء، الفريق يستلم تحديثات منظمة دون الحاجة إلى اجتماع stand-up صباحي.
// API endpoint /standup
export async function POST(req: Request) {
const formData = await req.formData();
const username = formData.get('user_name');
return Response.json({
response_type: 'in_channel',
text: `📝 Standup de ${username}: ...`,
attachments: [{
actions: [{
name: 'Hier', integration: { url: '...' }
}]
}]
});
}
Bots مخصصة (Plugins)
للـ bots المتقدمة، plugin Mattermost بـ Go أو JavaScript. System Console → Plugins → Upload. Plugin يقرأ/يكتب الرسائل، يتفاعل مع mentions، ينفذ الأوامر. أمثلة plugins رسمية: Welcome Bot (تكوين new users)، Standup، Polls، Webhooks (proxy). الفرق التقنية الإفريقية يمكنها تطوير plugins مخصصة لاحتياجات الأعمال المحلية، مثل bot يقرأ نشاط Wave Business ويولد تقارير يومية في #finance.
الأخطاء الشائعة
| الخطأ | السبب | الحل |
|---|---|---|
| Webhook 404 | URL مكتوب بشكل سيئ | التحقق من تنسيق hooks/… |
| رسالة بدون markdown | JSON دون "text" |
دائماً wrap في {"text":"..."} |
| قناة غير موجودة | Lock to channel ON يمنع override | عطل lock أو استهدف القناة الصحيحة |
| Webhook صادر لا يطلق | Trigger word مفقود | عرّف trigger word في التكوين |
| Bot لا يقرأ الرسائل | صلاحيات plugin غير كافية | System Console permissions |
| Rate limit Mattermost | > 30 req/sec | Batch via queue |
التكيف مع السياق المغاربي وغرب إفريقيا
ثلاث توضيحات. Webhooks Mobile Money. Wave وOrange Money وFree Money يقدمون webhooks موقعة. دائماً تحقق من signature قبل نشر Mattermost (وإلا، spam ممكن). هذا الفحص يحمي من المهاجمين الذين قد يعرفون URL webhook الخاص بك ويُرسلون رسائل مزيفة. إشعارات العملاء. قناة #client-X مخصصة للتحديثات المؤتمتة (build deploy، monitoring). هذا يبني ثقة العملاء بإظهار الشفافية التشغيلية. Bot Astreinte. bot يستجيب لـ @on-call ويوجِّه نحو الشخص المناوب وفق جدول Postgres. هذا يضمن أن الحوادث الحرجة تصل إلى الشخص المناسب في وقت غير العمل.
دروس الإخوة في المجموعة
الأسئلة المتكررة
Webhooks IPv6؟ نعم، Mattermost يستجيب IPv4 و IPv6.
حدود webhooks؟ 30 req/sec لكل webhook. Throttle إذا أكثر.
Bots multi-channel؟ نعم، bot يمكنه النشر في عدة قنوات.
Bots كتابة في DM؟ نعم، عبر API إذا كان لديه صلاحية.
Plugins Slack متوافقة؟ لا. لكن مكافئات موجودة في Mattermost marketplace.
للاستزادة
- 🔝 العودة للمرجع: الدليل الكامل Mattermost 2026
- وثائق Webhooks: developers.mattermost.com/integrate/webhooks