Aller au contenu principal
Guides techniques

Recevoir vos signaux d'affaires dans Slack en temps réel

Peter Cools · · 14 min de lecture

En résumé : Ce guide vous montre comment acheminer vos signaux d’affaires Rodz directement dans Slack, en temps réel. Vous apprendrez à créer une application Slack, configurer les Incoming Webhooks, mettre en place un script intermédiaire qui transforme les payloads Rodz en messages Slack enrichis (Block Kit), puis organiser vos canaux pour que chaque signal atteigne la bonne personne sans noyer votre équipe sous les notifications.

Pourquoi recevoir vos signaux d’affaires dans Slack ?

Les signaux d’affaires n’ont de valeur que si votre équipe les exploite rapidement. Une levée de fonds détectée le lundi matin perd une grande partie de son impact si le commercial ne la découvre que le vendredi, coincée dans un onglet de tableau de bord qu’il ouvre rarement.

Slack résout ce problème de distribution. La plupart des équipes commerciales y passent déjà plusieurs heures par jour. En acheminant vos signaux directement dans Slack, vous obtenez trois avantages immédiats.

Visibilité collective. Un signal posté dans un canal partagé est visible par toute l’équipe. Le commercial, le manager et l’account executive voient la même information au même moment. Pas besoin de transférer un e-mail ou de partager une capture d’écran.

Réactivité. Une notification Slack déclenche une action en quelques minutes, parfois en quelques secondes. C’est un avantage décisif pour les signaux à forte valeur comme les levées de fonds ou les recrutements stratégiques, où le timing conditionne le taux de réponse.

Zéro changement d’outil. Vos commerciaux ne quittent pas leur environnement de travail. Ils lisent le signal dans Slack, cliquent sur un lien vers le CRM ou vers la fiche entreprise, et enchaînent avec leur action de prospection. Pas de connexion supplémentaire, pas d’onglet à ouvrir.

Si vous n’avez pas encore mis en place la réception de vos signaux via webhooks, consultez d’abord le guide de configuration des webhooks Rodz. Ce guide suppose que vous avez déjà un endpoint fonctionnel qui reçoit les payloads Rodz.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

  1. Un endpoint de réception des webhooks Rodz fonctionnel. Si ce n’est pas encore le cas, suivez d’abord le guide de configuration des webhooks.
  2. Un espace de travail Slack où vous avez les droits d’installer des applications (ou la possibilité de demander l’autorisation à un administrateur).
  3. Node.js 18+ ou Python 3.10+ installé sur votre serveur pour le script intermédiaire.
  4. Des notions de base en HTTP et JSON. Vous devez comprendre ce qu’est une requête POST et comment lire un payload JSON.
  5. Un accès à la documentation de l’API Rodz pour consulter les formats de payload si nécessaire. La référence complète des endpoints est également utile.

Deux approches possibles

Il existe deux grandes stratégies pour acheminer vos signaux Rodz vers Slack.

Approche directe : webhook vers script vers Slack

C’est l’approche que nous détaillons dans ce guide. Un script léger (Node.js ou Python) reçoit le webhook Rodz, transforme le payload en message Slack formaté, puis l’envoie à Slack via un Incoming Webhook. Cette méthode est simple, rapide à mettre en place et ne dépend d’aucun outil tiers payant.

Approche no-code : via Make ou n8n

Si vous préférez éviter le code, des plateformes comme Make ou n8n permettent de connecter Rodz à Slack en quelques clics. Vous créez un scénario qui écoute les webhooks Rodz, transforme les données via des modules visuels, puis envoie le résultat dans Slack. Cette approche est idéale pour les équipes sans développeur.

Pour un guide complet sur l’automatisation avec Make, consultez notre article dédié sur l’automatisation des signaux d’affaires avec Make.

Dans ce tutoriel, nous nous concentrons sur l’approche directe, qui offre plus de contrôle et aucune dépendance externe.

Étape 1 : Créer une application Slack et activer les Incoming Webhooks

Commencez par créer une application Slack dédiée à vos signaux d’affaires.

  1. Rendez-vous sur api.slack.com/apps et cliquez sur Create New App.
  2. Choisissez From scratch, donnez un nom à votre application (par exemple « Signaux Rodz ») et sélectionnez votre espace de travail.
  3. Dans le menu latéral, cliquez sur Incoming Webhooks.
  4. Activez le toggle Activate Incoming Webhooks.
  5. Cliquez sur Add New Webhook to Workspace en bas de la page.
  6. Sélectionnez le canal où vous souhaitez recevoir les signaux (nous recommandons de créer un canal dédié, voir l’étape suivante).
  7. Copiez l’URL du webhook Slack générée. Elle ressemble à https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX.

Conservez cette URL en sécurité. Elle permet d’envoyer des messages dans votre canal sans authentification supplémentaire. Ne la commitez pas dans un dépôt public. Stockez-la dans une variable d’environnement.

Étape 2 : Créer un canal dédié #signaux-rodz

Nous recommandons de créer un canal Slack spécifique pour vos signaux d’affaires. Cela présente plusieurs avantages :

  • Les signaux ne se mélangent pas avec les conversations quotidiennes de votre équipe.
  • Vous pouvez configurer des règles de notification spécifiques (alertes sonores pour les signaux prioritaires, mode silencieux le week-end).
  • Les nouveaux membres de l’équipe retrouvent facilement l’historique des signaux.

Créez un canal nommé #signaux-rodz dans votre espace de travail. Si vous souhaitez séparer les signaux par catégorie, vous pouvez aussi créer plusieurs canaux : #signaux-levees-de-fonds, #signaux-recrutement, #signaux-nominations. Nous reviendrons sur cette organisation plus tard dans le guide.

Lors de la création de votre Incoming Webhook (étape 1), associez-le au canal que vous venez de créer.

Étape 3 : Mettre en place le script intermédiaire

Le script intermédiaire est le pont entre Rodz et Slack. Il reçoit le webhook Rodz, extrait les données pertinentes du payload, construit un message Slack enrichi au format Block Kit, puis l’envoie à votre URL Incoming Webhook.

Voici un exemple complet en Node.js avec Express :

const express = require('express');
const crypto = require('crypto');
const app = express();

app.use(express.json());

const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_URL;
const RODZ_WEBHOOK_SECRET = process.env.RODZ_WEBHOOK_SECRET;

// Vérification de la signature HMAC du webhook Rodz
function verifySignature(payload, signature) {
  const computed = crypto.createHmac('sha256', RODZ_WEBHOOK_SECRET).update(JSON.stringify(payload)).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(computed));
}

// Associer un emoji au type de signal
function getSignalBadge(signalType) {
  const badges = {
    fundraising: ':moneybag: Levée de fonds',
    hiring: ':briefcase: Recrutement',
    executive_move: ':bust_in_silhouette: Nomination',
    relocation: ':office: Déménagement',
    partnership: ':handshake: Partenariat',
    product_launch: ':rocket: Lancement produit',
    merger_acquisition: ':chart_with_upwards_trend: Fusion-acquisition',
    award: ':trophy: Récompense',
    expansion: ':earth_africa: Expansion',
    bankruptcy: ':warning: Difficulté financière',
  };
  return badges[signalType] || ':bell: Signal';
}

app.post('/webhooks/rodz', async (req, res) => {
  // 1. Vérifier la signature
  const signature = req.headers['x-rodz-signature'];
  if (!verifySignature(req.body, signature)) {
    return res.status(401).json({ error: 'Signature invalide' });
  }

  // 2. Répondre immédiatement à Rodz
  res.status(200).json({ received: true });

  // 3. Construire et envoyer le message Slack
  const signal = req.body;
  const slackMessage = buildSlackMessage(signal);

  await fetch(SLACK_WEBHOOK_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(slackMessage),
  });
});

app.listen(3000, () => {
  console.log('Middleware Rodz-Slack actif sur le port 3000');
});

Quelques points importants :

  • Répondez d’abord, envoyez ensuite. Rodz attend une réponse dans un délai court. Envoyez le code 200 avant de poster dans Slack.
  • Vérifiez la signature HMAC. Cela garantit que le webhook provient bien de Rodz et non d’un tiers malveillant. Si vous avez besoin de détails sur cette vérification, consultez le guide des webhooks Rodz.
  • Stockez vos secrets dans des variables d’environnement. Ne codez jamais l’URL du webhook Slack ou le secret HMAC en dur dans votre code.

Étape 4 : Formater les signaux avec Slack Block Kit

Le format Block Kit de Slack permet de créer des messages riches et structurés. Voici la fonction buildSlackMessage qui transforme un payload Rodz en message Slack lisible :

function buildSlackMessage(signal) {
  const badge = getSignalBadge(signal.signal_type);
  const companyName = signal.company.name;
  const signalDate = new Date(signal.timestamp).toLocaleDateString('fr-FR', {
    day: 'numeric',
    month: 'long',
    year: 'numeric',
  });

  return {
    blocks: [
      {
        type: 'header',
        text: {
          type: 'plain_text',
          text: `${badge}`,
          emoji: true,
        },
      },
      {
        type: 'section',
        fields: [
          {
            type: 'mrkdwn',
            text: `*Entreprise*\n${companyName}`,
          },
          {
            type: 'mrkdwn',
            text: `*Date du signal*\n${signalDate}`,
          },
          {
            type: 'mrkdwn',
            text: `*Secteur*\n${signal.company.industry || 'Non renseigné'}`,
          },
          {
            type: 'mrkdwn',
            text: `*Localisation*\n${signal.company.location || 'Non renseigné'}`,
          },
        ],
      },
      {
        type: 'section',
        text: {
          type: 'mrkdwn',
          text: `*Détails*\n${signal.description}`,
        },
      },
      {
        type: 'actions',
        elements: [
          {
            type: 'button',
            text: {
              type: 'plain_text',
              text: 'Voir dans Rodz',
              emoji: true,
            },
            url: `https://app.rodz.io/signals/${signal.id}`,
            style: 'primary',
          },
          {
            type: 'button',
            text: {
              type: 'plain_text',
              text: 'Fiche entreprise',
              emoji: true,
            },
            url: `https://app.rodz.io/companies/${signal.company.id}`,
          },
        ],
      },
      {
        type: 'divider',
      },
    ],
  };
}

Ce message Slack comprend :

  • Un en-tête avec un badge coloré selon le type de signal (levée de fonds, recrutement, nomination, etc.).
  • Une section de données avec le nom de l’entreprise, la date du signal, le secteur et la localisation.
  • Un bloc de détails avec la description complète du signal.
  • Des boutons d’action pour accéder directement à la fiche du signal ou de l’entreprise dans Rodz, sans quitter Slack.

Vous pouvez personnaliser ce formatage selon vos besoins. Ajoutez par exemple le chiffre d’affaires de l’entreprise, le nombre d’employés ou un lien vers votre CRM.

Étape 5 : Envoyer le message au webhook Slack

L’envoi est déjà intégré dans le script de l’étape 3 via fetch. Voici un exemple isolé si vous voulez tester l’envoi manuellement :

curl -X POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX \
  -H "Content-Type: application/json" \
  -d '{
    "blocks": [
      {
        "type": "header",
        "text": {
          "type": "plain_text",
          "text": ":moneybag: Levée de fonds",
          "emoji": true
        }
      },
      {
        "type": "section",
        "fields": [
          {
            "type": "mrkdwn",
            "text": "*Entreprise*\nAcme Corp"
          },
          {
            "type": "mrkdwn",
            "text": "*Montant*\n5 M€ - Série A"
          }
        ]
      }
    ]
  }'

Si tout fonctionne, vous verrez le message apparaître dans votre canal #signaux-rodz en quelques secondes.

Étape 6 : Tester et vérifier le flux complet

Avant de passer en production, testez le flux de bout en bout.

  1. Déclenchez un webhook de test depuis Rodz. Dans votre tableau de bord Rodz, accédez à la section webhooks et utilisez le bouton de test pour envoyer un payload fictif à votre endpoint.
  2. Vérifiez les logs de votre script. Le signal doit être reçu, la signature validée et le message formaté.
  3. Confirmez l’apparition dans Slack. Le message doit apparaître dans le bon canal avec le formatage Block Kit complet.
  4. Testez les boutons d’action. Cliquez sur « Voir dans Rodz » et « Fiche entreprise » pour vérifier que les liens mènent aux bonnes pages.
  5. Simulez une erreur. Envoyez un payload avec une signature invalide pour vérifier que votre script rejette la requête.

Si vous rencontrez des problèmes, vérifiez les points suivants :

  • L’URL de votre Incoming Webhook Slack est-elle correcte et active ?
  • Votre serveur est-il accessible en HTTPS depuis Internet ?
  • Le format du payload Rodz correspond-il à ce que votre script attend ? Consultez la référence API pour vérifier les structures de données.

Organiser vos canaux par type de signal ou priorité

Une fois le flux en place, vous pouvez affiner la distribution des signaux en utilisant plusieurs canaux Slack.

Par type de signal

Créez un canal par catégorie de signal :

  • #signaux-financiers pour les levées de fonds, fusions-acquisitions et immatriculations.
  • #signaux-rh pour les offres d’emploi, changements de poste et recrutements.
  • #signaux-concurrence pour les appels d’offres et mouvements concurrentiels.
  • #signaux-sociaux pour les mentions, réactions et engagements sur les réseaux.

Dans votre script, ajoutez un mapping entre le type de signal et l’URL du webhook Slack correspondant :

const CHANNEL_WEBHOOKS = {
  fundraising: process.env.SLACK_WEBHOOK_FINANCIAL,
  merger_acquisition: process.env.SLACK_WEBHOOK_FINANCIAL,
  hiring: process.env.SLACK_WEBHOOK_HR,
  executive_move: process.env.SLACK_WEBHOOK_HR,
  competitor_move: process.env.SLACK_WEBHOOK_COMPETITION,
  social_mention: process.env.SLACK_WEBHOOK_SOCIAL,
};

const webhookUrl = CHANNEL_WEBHOOKS[signal.signal_type] || SLACK_WEBHOOK_URL;

Par priorité

Vous pouvez aussi segmenter par niveau de priorité. Certains signaux nécessitent une réaction immédiate (levée de fonds d’un compte cible), d’autres sont informatifs (mention sociale d’un prospect secondaire).

Définissez des règles de priorité dans votre script :

function getPriority(signal) {
  // Priorité haute : signaux financiers sur les comptes cibles
  if (signal.signal_type === 'fundraising' && signal.company.is_target) {
    return 'high';
  }
  // Priorité moyenne : signaux RH et concurrence
  if (['hiring', 'executive_move', 'competitor_move'].includes(signal.signal_type)) {
    return 'medium';
  }
  // Priorité basse : tout le reste
  return 'low';
}

Envoyez les signaux haute priorité dans un canal #signaux-urgents avec des notifications activées, et les autres dans un canal de flux général en mode silencieux.

Réduire la fatigue de notification

L’un des risques d’une intégration Slack trop généreuse, c’est de noyer votre équipe sous les notifications. Voici quelques techniques pour garder un flux utile et lisible.

Filtrez côté Rodz. Configurez vos signaux pour ne recevoir que les événements pertinents. Inutile de surveiller tous les recrutements de France si votre marché cible est le SaaS B2B en Ile-de-France. Plus vos filtres sont précis, moins vous recevez de bruit.

Regroupez les signaux à faible priorité. Au lieu d’envoyer chaque signal individuellement, accumulez les signaux peu urgents et envoyez un résumé toutes les heures ou toutes les quatre heures. Votre script peut stocker les signaux en mémoire ou dans une base de données légère (SQLite, Redis), puis envoyer un digest formaté à intervalle régulier.

Définissez des plages horaires. Bloquez les notifications Slack en dehors des heures de travail. Si un signal arrive à 23h, il peut attendre le lendemain matin. Configurez les plages « Ne pas déranger » dans Slack ou ajoutez une logique de file d’attente dans votre script.

Utilisez les threads Slack. Pour les signaux qui concernent une même entreprise, postez les mises à jour en réponse (thread) au message initial. Cela réduit le nombre de messages au niveau du canal tout en conservant le contexte complet dans le fil de discussion.

Revoyez vos filtres régulièrement. Tous les mois, prenez cinq minutes pour analyser quels signaux ont déclenché une action commerciale et lesquels ont été ignorés. Désactivez les catégories qui ne génèrent aucune réaction.

Questions fréquentes

Peut-on utiliser cette intégration sans écrire de code ?

Oui. Des plateformes comme Make ou n8n permettent de connecter les webhooks Rodz à Slack sans écrire une seule ligne de code. Vous configurez un scénario visuel qui reçoit le webhook, transforme les données et envoie le message Slack. C’est une excellente option pour les équipes sans développeur.

Les Incoming Webhooks Slack sont-ils sécurisés ?

Les URLs des Incoming Webhooks sont des URLs secrètes. Toute personne qui possède l’URL peut poster des messages dans votre canal. Ne les partagez jamais publiquement, ne les commitez pas dans un dépôt de code, et stockez-les dans des variables d’environnement. Si une URL est compromise, vous pouvez la révoquer et en générer une nouvelle depuis les paramètres de votre application Slack.

Combien de messages par seconde Slack accepte-t-il ?

Slack impose une limite de 1 message par seconde par Incoming Webhook. Si vous recevez un volume élevé de signaux, ajoutez une logique de rate limiting dans votre script (une simple file d’attente avec un délai de 1 seconde entre chaque envoi suffit). Pour les volumes très élevés, envisagez le regroupement en digest.

Peut-on envoyer des signaux dans un canal privé ?

Oui. Lors de la création de votre Incoming Webhook (étape 1), vous pouvez sélectionner un canal privé. L’application Slack doit simplement être invitée dans ce canal pour pouvoir y poster.

Comment ajouter un lien vers mon CRM dans le message Slack ?

Modifiez la fonction buildSlackMessage pour inclure un bouton supplémentaire dans le bloc actions. Si votre CRM utilise un identifiant d’entreprise que Rodz fournit dans le payload (par exemple un numéro SIREN), construisez l’URL dynamiquement. Par exemple, pour HubSpot : https://app.hubspot.com/contacts/PORTAL_ID/company/${signal.company.hubspot_id}.

Que se passe-t-il si mon script est temporairement indisponible ?

Rodz dispose d’un mécanisme de retry pour les webhooks. Si votre endpoint ne répond pas ou renvoie une erreur, Rodz retente l’envoi plusieurs fois avec un délai exponentiel. Vous ne perdez pas de signaux en cas d’indisponibilité temporaire. Pour plus de détails sur la politique de retry, consultez le guide des webhooks Rodz.

Peut-on personnaliser l’apparence du bot dans Slack ?

Oui. Dans les paramètres de votre application Slack (section Basic Information), vous pouvez définir un nom d’affichage (par exemple « Rodz Signals »), un avatar personnalisé et une couleur. Cela permet à vos équipes d’identifier immédiatement les messages provenant de Rodz dans le flux de conversation.

Comment déboguer un message qui n’apparaît pas dans Slack ?

Vérifiez ces points dans l’ordre : le webhook Rodz est-il bien déclenché (consultez les logs dans votre tableau de bord Rodz) ? Votre script reçoit-il le payload (ajoutez un console.log au début de votre handler) ? La signature HMAC est-elle validée ? L’URL du webhook Slack est-elle correcte et active ? Le format du payload Block Kit est-il valide (testez-le sur app.slack.com/block-kit-builder) ? La documentation complète de l’API Rodz peut également vous aider à identifier les problèmes de format.

Partager :

Générez votre stratégie outbound gratuitement

Notre IA analyse votre entreprise et crée un playbook complet : ICP, personas, templates d'emails, scripts d'appels.

Générer ma stratégie