موصل Slack
اربط مساحة عمل Slack الخاصة بك بـ Brevo عبر Tajo للحصول على إشعارات تسويقية في الوقت الفعلي، وتنبيهات الفريق بشأن أحداث العملاء، وأتمتة سير العمل المُشغَّلة بواسطة تفاعلات Slack.
نظرة عامة
| الخاصية | القيمة |
|---|---|
| المنصة | Slack |
| الفئة | تكامل مخصص |
| تعقيد الإعداد | سهل |
| تكامل رسمي | نعم |
| البيانات المُزامَنة | مستخدمون، قنوات، رسائل، أحداث |
| عنوان URL الأساسي لـ API | https://slack.com/api |
الميزات
- تنبيهات التسويق - إرسال إشعارات في الوقت الفعلي لأحداث الحملات، والمشتركين الجدد، ومعالم الإيرادات
- إشعارات أحداث العملاء - تنبيه الفرق حول إجراءات العملاء عالية القيمة من Brevo
- محفزات سير العمل - استخدام تفاعلات Slack (نقرات الأزرار، إرسال النماذج) لتشغيل أتمتة Brevo
- التوجيه القائم على القنوات - توجيه الإشعارات إلى قنوات محددة بناءً على نوع الحدث أو شريحة العميل
- مزامنة المستخدمين - ربط مستخدمي مساحة عمل Slack بجهات اتصال Brevo للاتصالات الداخلية
- الرسائل التفاعلية - إرسال رسائل غنية بالأزرار والإجراءات لسير عمل الفريق
- الرسائل المجدولة - جدولة الإشعارات للملخصات التسويقية اليومية/الأسبوعية
- دعم المحادثات - تجميع الإشعارات ذات الصلة في محادثات لاتصال منظم
المتطلبات الأساسية
قبل البدء، تأكد من توفر ما يلي:
- مساحة عمل Slack مع صلاحيات مسؤول
- تطبيق Slack مُنشأ على api.slack.com/apps
- رمز Bot مع النطاقات المطلوبة
- حساب Brevo مع وصول إلى API
- حساب Tajo
المصادقة
رمز Bot (موصى به)
قم بتثبيت تطبيق Slack في مساحة العمل الخاصة بك واستخدم رمز Bot للوصول إلى API.
- أنشئ التطبيق على api.slack.com/apps
- أضف نطاقات OAuth المطلوبة ضمن “OAuth & Permissions”
- ثبّت التطبيق في مساحة العمل
- انسخ رمز Bot User OAuth (
xoxb-...)
curl -X POST "https://slack.com/api/chat.postMessage" \ -H "Authorization: Bearer xoxb-YOUR-BOT-TOKEN" \ -H "Content-Type: application/json" \ -d '{"channel": "C01234567", "text": "Hello from Tajo!"}'OAuth 2.0
لتوزيع تكامل Slack الخاص بك على مساحات عمل متعددة:
# Authorization URLhttps://slack.com/oauth/v2/authorize? client_id={client_id}& scope=chat:write,channels:read,users:read& redirect_uri={redirect_uri}
# Token exchangecurl -X POST "https://slack.com/api/oauth.v2.access" \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"نطاقات Bot المطلوبة
chat:write # Send messageschannels:read # List channelschannels:history # Read channel messagesusers:read # List workspace usersusers:read.email # Read user email addressesreactions:write # Add reactions to messagesfiles:write # Upload filesالوصول إلى البريد الإلكتروني للمستخدم
النطاق users:read.email مطلوب لمطابقة مستخدمي Slack مع جهات اتصال Brevo. بدونه، سيقتصر تعيين المستخدمين على أسماء العرض.
الإعداد
الإعداد الأساسي
connectors: slack: enabled: true bot_token: "${SLACK_BOT_TOKEN}" signing_secret: "${SLACK_SIGNING_SECRET}"
# Notification channels channels: marketing: "C01234567" sales: "C01234568" support: "C01234569" alerts: "C01234570"
# Event routing notifications: new_subscriber: channel: marketing template: subscriber_alert high_value_order: channel: sales template: order_alert support_ticket: channel: support template: ticket_alertتعيين الحقول
ربط بيانات مستخدم Slack بسمات جهات اتصال Brevo:
التعيينات الافتراضية
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | البريد الإلكتروني للمستخدم (معرّف فريد للمطابقة مع Brevo) |
real_name optional | string | الاسم الكامل، مقسم إلى FIRSTNAME/LASTNAME |
profile.phone optional | string | يُعيَّن إلى سمة SMS |
profile.title optional | string | المسمى الوظيفي |
tz optional | string | المنطقة الزمنية للمستخدم |
is_admin optional | boolean | حالة مسؤول مساحة العمل |
team_id optional | string | معرّف فريق مساحة العمل |
status_text optional | string | الحالة المخصصة للمستخدم |
طرق API
المراسلة
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
POST | chat.postMessage | إرسال رسالة إلى قناة |
POST | chat.update | تحديث رسالة قائمة |
POST | chat.delete | حذف رسالة |
POST | chat.scheduleMessage | جدولة رسالة |
POST | chat.postEphemeral | إرسال رسالة سريعة الزوال لمستخدم |
القنوات
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | conversations.list | سرد القنوات |
GET | conversations.info | الحصول على معلومات القناة |
GET | conversations.members | سرد أعضاء القناة |
GET | conversations.history | الحصول على رسائل القناة |
المستخدمون
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | users.list | سرد مستخدمي مساحة العمل |
GET | users.info | الحصول على معلومات المستخدم |
GET | users.lookupByEmail | البحث عن مستخدم بالبريد الإلكتروني |
GET | users.conversations | سرد قنوات المستخدم |
التفاعلات
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
POST | views.open | فتح طريقة عرض مشروطة |
POST | views.update | تحديث طريقة عرض مشروطة |
POST | reactions.add | إضافة تفاعل emoji |
الأحداث
إشعارات Brevo إلى Slack
| الحدث | المحفز | إجراء Slack |
|---|---|---|
new_subscriber | تم إنشاء جهة اتصال في Brevo | النشر في #marketing |
campaign_sent | تم إرسال حملة بريد إلكتروني | نشر ملخص في #marketing |
order_placed | تم اكتشاف طلب عالي القيمة | النشر في #sales مع التفاصيل |
cart_abandoned | تم التخلي عن السلة لمدة 30 دقيقة | النشر في #sales للمتابعة |
ticket_created | تم فتح تذكرة دعم | النشر في #support |
unsubscribed | ألغى جهة اتصال الاشتراك | نشر تنبيه في #marketing |
محفزات Slack إلى Brevo
| حدث Slack | المحفز | إجراء Brevo |
|---|---|---|
message_action | اختصار رسالة مخصص | إضافة جهة اتصال إلى قائمة أو تشغيل أتمتة |
block_actions | نقرة زر في رسالة | تحديث سمة جهة اتصال أو إرسال بريد إلكتروني |
view_submission | إرسال نموذج مشروط | إنشاء جهة اتصال أو تشغيل سير عمل |
أمثلة على الكود
تهيئة الموصل
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Slackawait tajo.connectors.connect('slack', { botToken: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET});إرسال إشعارات التسويق
// إرسال إشعار عند وضع طلب عالي القيمةawait tajo.slack.notify({ channel: 'sales', event: 'order_placed', data: { orderValue: '$1,250.00', products: ['Premium Widget', 'Pro Service'], isFirstOrder: true }, template: { blocks: [ { type: 'header', text: { type: 'plain_text', text: 'New High-Value Order' } }, { type: 'section', fields: [ { type: 'mrkdwn', text: '*Amount:*\n$1,250.00' } ] }, { type: 'actions', elements: [ { type: 'button', text: { type: 'plain_text', text: 'View in Brevo' }, url: 'https://app.brevo.com/contacts' } ] } ] }});التعامل مع تفاعلات Slack
import crypto from 'crypto';
app.post('/slack/interactions', async (req, res) => { // التحقق من توقيع طلب Slack const timestamp = req.headers['x-slack-request-timestamp']; const signature = req.headers['x-slack-signature']; const sigBasestring = `v0:${timestamp}:${req.rawBody}`; const mySignature = 'v0=' + crypto .createHmac('sha256', process.env.SLACK_SIGNING_SECRET) .update(sigBasestring) .digest('hex');
if (signature !== mySignature) { return res.status(401).send('Unauthorized'); }
const payload = JSON.parse(req.body.payload);
// التعامل مع إجراءات الزر if (payload.type === 'block_actions') { await tajo.connectors.handleWebhook('slack', { type: 'interaction', action: payload.actions[0].action_id, userId: payload.user.id, payload }); }
res.status(200).send();});حدود المعدل
تستخدم حدود معدل Slack API نظامًا متدرجًا:
| الفئة | الحد | الطرق الشائعة |
|---|---|---|
| الفئة 1 | طلب واحد/دقيقة | chat.delete، conversations.kick |
| الفئة 2 | 20 طلبًا/دقيقة | conversations.history، users.info |
| الفئة 3 | 50 طلبًا/دقيقة | conversations.list، users.list |
| الفئة 4 | 100 طلب/دقيقة | chat.postMessage |
| خاصة | متغير | chat.postMessage إلى نفس القناة: 1/ثانية |
حدود إضافية:
- Web API: حد الدفعات مع تقييد قصير المدى
- Events API: محاولات تسليم لثلاث مرات
- Incoming Webhooks: رسالة واحدة/ثانية لكل عنوان URL webhook
- Block Kit: 50 كتلة كحد أقصى لكل رسالة
معدل النشر في القناة
يقتصر النشر في نفس القناة على حوالي رسالة واحدة في الثانية. قم بتجميع الإشعارات أو استخدم المحادثات لتجنب تقييد المعدل.
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
not_authed | رمز Bot غير صالح | أعد تثبيت التطبيق وانسخ رمز Bot جديد |
channel_not_found | Bot ليس في القناة | ادعُ Bot إلى القناة المستهدفة |
missing_scope | النطاق المطلوب غير مُمنوح | أضف النطاق وأعد تثبيت التطبيق |
| الحدث لم يُستلم | اشتراك الحدث غير مضبوط | اضبط عنوان URL لاشتراكات الأحداث |
| انتهاء مهلة التفاعل | استجابة > 3 ثوان | استجب بـ 200 فورًا، ثم عالج بشكل غير متزامن |
وضع التصحيح
تفعيل التسجيل المفصل:
connectors: slack: debug: true log_level: verbose log_events: trueاختبار الاتصال
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeأفضل الممارسات
- استخدم Block Kit - ابنِ رسائل غنية وتفاعلية بإطار عمل Block Kit من Slack
- استجب بسرعة - أقرّ بالتفاعلات في غضون 3 ثوان، عالج بشكل غير متزامن
- استخدم محادثات للرسائل ذات الصلة - جمّع الإشعارات ذات الصلة في محادثات لتقليل الضوضاء
- وجّه حسب القناة - أرسل أنواع أحداث مختلفة إلى قنوات الفرق المناسبة
- ضمّن أزرار الإجراءات - أضف أزرار “عرض في Brevo” للوصول السريع إلى بيانات العملاء
- طبّق Unfurling - أظهر معاينات غنية لروابط Brevo المشتركة في Slack
الأمان
- رمز Bot - رمز وصول مقيّد بنطاق OAuth مع صلاحيات دقيقة
- توقيع الطلبات - التحقق من توقيع HMAC SHA-256 للطلبات الواردة
- OAuth 2.0 - تفويض بمعايير الصناعة للتوزيع متعدد مساحات العمل
- تشفير TLS - جميع اتصالات API مشفرة عبر HTTPS
- تدوير الرموز - تدوير تلقائي للرموز لأمان معزز