ITSkillsCenter
الأعمال الرقمية

تكاملات webhooks وbots Mattermost: درس عملي 2026

2 min de lecture

📍 المقالة الرئيسية للمجموعة: 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.

للاستزادة

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité