Comment créer un bot Slack avec Mendix
Bonjour à tous et bienvenue. En tant qu'évangéliste développeur qui travaille pour Mendix, une grande partie de mon rôle ici consiste à passer beaucoup de temps à surveiller la Mendix Chaîne communautaire Slack (Cliquez ici!).
Naturellement, nous avons quelques outils incroyables installés sur notre espace de travail, ce qui m'a fait réfléchir : qu'est-ce qui entre exactement dans la création d'un bot Slack, et est-ce que cela peut être fait en utilisant Mendix seule?
Après avoir fait des recherches en ligne, tous les exemples que j'ai trouvés étaient extrêmement compliqués et nécessitaient des compétences étendues en codage Java, Python ou Javascript. Même si j'aurais pu continuer dans cette voie, je m'étais engagé à le faire de manière low-code. Je suis cependant heureux d'avoir persévéré, car je peux maintenant vous dire à quel point c'est simple et que vous pouvez tous aussi créer un bot Slack en utilisant Mendix et rien d'autre !
Que faisons-nous aujourd'hui ?
Dans ce tutoriel, nous allons créer un bot Slack qui peut envoyer des messages à l'aide d'une API RESTful. Il sera également abonné aux événements du canal, de sorte que le bot pourra répondre aux mentions ou à certains mots-clés envoyés dans un canal.
Pour commencer
Avant de commencer, assurez-vous que vous êtes inscrit à Slack et que vous avez configuré un espace de travail Slack, avec un canal auquel vous pouvez également ajouter le bot. De plus, comme Slack publiera des messages sur les services REST publiés de votre application, pour tester votre application localement pendant le développement, je vous recommande d'utiliser un outil de tunneling pour exposer votre hôte local au Web (j'utilise NGROK pour ça).
Configurer le bot sur Slack
Pour commencer, vous pouvez aller à https://api.slack.com/apps?new_classic_app=1 et cliquez "Créer une nouvelle application ».

Choisissez "À partir de rien" et donnez un nom à votre bot, je vais en créer un nouveau et l'appeler bot de messagerie. Sélectionnez l'espace de travail Slack que vous avez créé pour cela afin de développer votre application et cliquez sur "Créer une application ».

Une fois votre application créée, vous pouvez aller dans «OAuth et autorisations" et ce que nous voulons ici, c'est un jeton pour notre bot, donc sous "Jetons OAuth pour votre espace de travail » incroyablement réaliste effect. « Installer sur le lieu de travail ». Il va maintenant être indiqué que nous devons ajouter une portée pour notre bot. Descendez la page et vous verrez une section intitulée «Portée du jeton de bot". C'est ce dont nous avons besoin, alors cliquez sur "ajouter une portée OAuth », celui que nous voulons est Chat : écrire, ou pour chaînes publiques vous pouvez ajouter Discussion:write.public.

Cela permettra au bot d'avoir la permission de publier des messages dans une discussion. Maintenant, en fonction de ce que vous essayez de faire, vous devrez peut-être ajouter d'autres portées. Si vous rencontrez des erreurs, jetez un œil à celles-ci, vous devriez pouvoir déterminer les portées nécessaires aux actions que vous souhaitez que le bot effectue.
Revenez maintenant à OAuth et cliquez sur « Installer sur le lieu de travail » Encore une fois. Cliquez ensuite sur Autoriser et un jeton de bot sera généré pour vous.
Vous saurez qu'il s'agit d'un jeton de bot s'il commence quelque chose comme « xoxb-Votre_Valeur_de_Jeton”.

Une fois que vous avez cela, nous pouvons l'utiliser, avec l'ID du canal, pour envoyer un message au canal en tant que bot. Pour ce faire, j'ai préparé une application simple, et ce que je vais créer ici est d'ajouter une méthode ici pour envoyer un message en tant que bot à l'aide de l'API de Slack
Envoi de messages en tant que bot
Cette version fonctionnera dans la plupart des piles de programmation traditionnelles capables d'utiliser des méthodes HTTP ou des appels REST (Java, JavaScript, Python, etc.) — vous pouvez même l'essayer dans Facteur avant de commencer à développer votre application. Tout ce que nous devons faire est de créer un système d'authentification pour notre application avec Slack, nous devons ensuite intégrer l'API pour publier des messages, puis nous devons publier un point de terminaison REST sur lequel Slack peut publier des messages pour les événements dans le canal
Les événements peuvent être des messages, des réactions, des mentions dans le canal et plus encore. Considérez les événements Slack comme similaires à un webhook
Pour envoyer votre message au service, vous devrez fournir le point de terminaison du service. Dans ce cas, il s'agit https://slack.com/api/chat.postMessage
Comme le point de terminaison décrit le type de méthode HTTP comme POST, nous devons nous assurer d’utiliser POST ici également.

Vous aurez également besoin d'en-têtes. Nous voulons ajouter un en-tête pour Type de contenu et cela doit être 'application/json'. Ensuite, nous avons besoin d'un autre en-tête appelé Autorisation, et c'est ici que nous pouvons utiliser le jeton de notre bot que nous avons obtenu plus tôt. Vous voulez que la valeur de cet en-tête soit 'Porteur', puis un espace ' ', puis votre valeur de jeton.

Pour envoyer un message, nous devons lui fournir un corps JSON car il s'agit d'une méthode HTTP POST. Voici une structure simplifiée que nous allons utiliser, vous pouvez consulter la page de documentation complète de l'API ici.
{
“channel”:”{1}”,
“text”:”{2}”
}

Notez que dans Studio Pro, vous devrez peut-être fournir une accolade supplémentaire { avant la demande.
Cette requête a été réduite à l'essentiel : elle ne contient que channel, qui est une chaîne, et text, qui est également une chaîne. Il existe de nombreuses autres options que vous pouvez utiliser, telles que des pièces jointes, des icônes et bien d'autres choses intéressantes. Alors, allez consulter les pages de documentation et jouez. Vous pouvez voir que j'utilise des espaces réservés ici, juste pour transmettre mes valeurs du microflow à la requête en utilisant la norme Mendix Action REST.
Il nous renvoie une réponse, mais je ne m'en occupe pas ici. Au lieu de cela, vous pouvez exécuter votre application et la tester. Si elle réussit, vous devriez voir un message dans le canal lorsque vous appelez ce microflow !
Pour tester l'envoi du message, vous aurez besoin de votre identifiant de canal que vous pouvez obtenir à partir de l'URL du canal Slack (la valeur finale après le « / » final dans l'URL de votre canal), puis vous pourrez envoyer votre premier message en tant que bot ! N'oubliez pas que vous devrez d'abord vous assurer que votre bot est ajouté au canal. Pour ce faire, utilisez simplement la mention @ des bots dans le canal et ajoutez-les.
Vos messages devraient maintenant être envoyés depuis votre Mendix envoyez-les à Slack et apparaissez dans le canal comme si le bot les avait envoyées, chaque fois que vous exécutez ce microflow.
Abonnez votre application aux événements de la chaîne
Pour que Slack puisse publier des messages sur notre Mendix Pour utiliser l'application Slack, nous devons activer les événements dans les paramètres de notre bot Slack. En activant cette fonctionnalité, Slack publiera des mises à jour sur le service REST publié de notre application. Nous pouvons l'utiliser pour implémenter une logique permettant de gérer différents types d'événements qu'un utilisateur peut déclencher lors de l'utilisation du canal. Vous pouvez vous abonner à des événements spécifiques, pour lesquels vous pouvez configurer des points de terminaison spécifiques, ou vous pouvez publier toutes les mises à jour sur le même point de terminaison et créer votre propre logique pour gérer chaque événement unique. Par exemple, une bonne utilisation de cette fonctionnalité consiste à faire en sorte que le bot fasse quelque chose lorsque quelqu'un réagit à un message ou lorsqu'un nouvel utilisateur rejoint un canal. Pour ma version, j'ai ajouté un seul point de terminaison d'événement, puis j'ai géré toute la logique dans le microflow appelé par le service REST publié dans mon application. Mendix App
Pour ce faire, accédez à « Abonnements aux événements » dans api.slack.com.

Activez « Activer les événements » et vous verrez un champ pour l’URL de demande. C’est à ce stade que nous devons ouvrir un tunnel à l’aide de l’outil que j’ai mentionné plus tôt. L’outil NGROK ouvre une connexion sécurisée à partir de votre hôte local et l’expose au Web en tant que point de terminaison disponible de manière sécurisée.
Ouvrez votre explorateur de fichiers et localisez le fichier ngrok.exe que vous avez téléchargé. Ouvrez maintenant cet exe dans votre terminal ou dans l'invite de commande. Vous pouvez également simplement cliquer sur Ouvrir sur le fichier exe pour l'ouvrir dans votre terminal. Tapez ensuite «ngrok http {VOTRE NUMÉRO DE PORT D'APPLICATION MENDIX}", J'utilise normalement le port 8080 par défaut Mendix configuration de l'application, mais cela fonctionnera en utilisant n'importe quel numéro de port que vous préférez, par exemple «ngrok http 5000" fonctionnerait tant que votre Mendix l'application est également configurée pour s'exécuter sur le port 5000.

Appuyez sur Entrée et ngrok ouvrira le point de terminaison, vous devriez voir quelque chose comme ceci :

Vous devez savoir que cela ouvre les points de terminaison HTTP et HTTPS, Slack nécessite l'utilisation de HTTPS.
Gestion des événements dans Mendix
Nous disposons désormais d’un point de terminaison actif que nous pouvons utiliser dans Slack, mais nous devons y revenir après avoir configuré notre service REST publié.
De retour à Studio Pro, faites un clic droit dans votre explorateur de projets et choisissez d’ajouter un service REST publié sous « Autre ».

Donnez un nom à votre service, j’ai nommé le mien « SlackBot », puis cliquez sur OK

Ajoutez ensuite une ressource au service appelée « SlackEvent » et cliquez sur OK

Ajoutez ensuite une opération au service, c'est ici que nous définissons la méthode de notre API (GET, POST, PUT, PATCH, DELETE), configurons son propre chemin d'opération et configurons un microflow pour gérer la logique du point de terminaison.
Il n'est pas nécessaire de définir un chemin d'opération, par défaut le point de terminaison sera quelque chose comme :
https://{LocalHost}/rest/{Service_Name}/{Version_Number}/{Resource_Name}/{Operation_Path}
Voici un exemple de la manière dont vous pourriez configurer votre opération :

Nous avons maintenant une URL valide qui peut accepter les requêtes, mais il reste encore du travail à faire avant de pouvoir gérer chaque type d’événement… l’authentification.
Authentification
Au début, j'étais un peu confus ici, mais c'est en fait assez simple. Lorsque nous ajoutons le point de terminaison de l'événement dans Slack, leur API enverra un défi au point de terminaison avec une valeur « challenge » dans le corps de leur requête comme indiqué ici :
{
"token":"your_token",
"challenge":"your_ChallangeValue",
"type":"url_verification"
}
Il vous suffit de leur renvoyer cette chaîne de défi au début de votre flux la première fois qu'il est appelé.

Définition de l'URL de demande pour les événements dans Slack
Si tout est correct, nous pouvons formuler une URL que nous pouvons ajouter à la page Abonnements aux événements Slack. L'URL doit être une combinaison de votre point de terminaison https NGROK et le reste sera le point de terminaison de service pour votre service publié.
Quelque chose comme: https://{NGROK_HTTPS_URL}/{Your_Published_Rest_Operation}
Voici à quoi le mien ressemblait :
https://ff98-86-181-134-55.ngrok.io/rest/slackbot/v1/SlackEvent/Event
N'oubliez pas que NGROK est destiné uniquement au développement et qu'il expirera donc toutes les 2 heures. Après cela, vous devrez générer une nouvelle URL pour votre hôte local. Une fois en production, cela ne sera plus nécessaire, vous pourrez simplement utiliser votre URL cloud.
Vous pouvez définir cette valeur comme URL de demande sur la page des événements. Si vous avez réussi, Slack vous indiquera qu'il a vérifié le point de terminaison.

Si quelque chose ne va pas, vous pouvez déboguer votre microflux normalement, en définissant votre RESTE consommer et REST Publier les niveaux de journalisation peuvent également vous aider à mieux comprendre ce qui ne va pas, via la console.

La dernière chose que nous devons gérer avant de pouvoir personnaliser les actions de vos bots est de nous assurer qu'il se reconnaît, sinon vous pouvez créer une boucle infinie. Le bot peut se déclencher à chaque fois qu'il publie un message au groupe, si nous ne filtrons pas sa propre activité dans le canal.
Pour ce faire, nous devons importer la charge utile de la requête que Slack fournit au service REST de notre application. La charge utile ressemblera à ceci :
{
"token":"dKyT4vmA1NJLt6vq8o1WurMd",
"team_id":"T02LUP42T19",
"api_app_id":"A02MJE1059N",
"event":{
"bot_id":"B02NK4L1XHN",
"type":"message",
"text":"Hello from Mendix",
"user":"U02MEPHFY2K",
"ts":"1637273612.003700",
"team":"T02LUP42T19",
"bot_profile":{
"id":"B02NK4L1XHN",
"deleted":false,
"name":"message bot",
"updated":1637253238,
"app_id":"A02MEP8D37Z",
"icons":{
"image_36":"https://a.slack-edge.com/80588/img/plugins/app/bot_36.png",
"image_48":"https://a.slack-edge.com/80588/img/plugins/app/bot_48.png",
"image_72":"https://a.slack-edge.com/80588/img/plugins/app/service_72.png"
},
"team_id":"T02LUP42T19"
},
"channel":"C02LRPR0XGD",
"event_ts":"1637273612.003700",
"channel_type":"channel"
},
"type":"event_callback",
"event_id":"Ev02MGFCNHP1",
"event_time":1637273612,
"authorizations":[
{
"enterprise_id":null,
"team_id":"T02LUP42T19",
"user_id":"U02LUPJ8T4J",
"is_bot":true,
"is_enterprise_install":false
}
],
"is_ext_shared_channel":false,
"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUMDJMVVA0MlQxOSIsImFpZCI6IkEwMk1KRTEwNTlOIiwiY2lkIjoiQzAyTFJQUjBYR0QifQ"
}
Créez une structure JSON, collez-la et cliquez sur Rfrais Dans la section Structure, vous pouvez avant de cliquer sur OK pour fermer la fenêtre.

Créez ensuite un mappage d'importation et, sous Source du schéma, sélectionnez la structure JSON que vous avez créée. Assurez-vous que tous les champs sont sélectionnés pour obtenir tous les détails souhaités, ou choisissez ce dont vous avez besoin.

Cliquez sur OK pour fermer la fenêtre, puis, en haut à gauche de l’éditeur de cartographie, choisissez « Cartographier automatiquement ».

Vous devriez maintenant voir quelque chose comme ceci :

Enfin, utilisez ce mappage pour importer le HTTPRequest et ajoutez une vérification pour voir si l'utilisateur qui publie le message est un bot, si c'est le bot, ne faites rien et renvoyez vide.

Vous êtes désormais libre de gérer tous les événements, comme vous le souhaitez. Mon approche rapide pour cela a été d'utiliser Inclus et Trouvez mots-clés pour vérifier le contenu du message. Cette méthode vous permet d'ajouter autant de splits exclusifs que vous le souhaitez, et en faisant cela vous pouvez créer un arbre de conversation dans le microflow, une manière simple de faire les choses (mais vous pourriez aller plus loin et stocker chaque réponse dans la base de données, ce qui rendrait cette configuration configurable à l'exécution). Pour envoyer cette réponse, réutilisez simplement l'API postMessage que nous avons utilisée précédemment pour envoyer des messages de test.
Voici à quoi ressemble mon exemple

Commandes de barre oblique
Mais que sont les commandes slash ? En termes simples, elles sont similaires aux webhooks. Lorsque l'utilisateur saisit un certain mot-clé (Configuration dans Slack) suivi d'une barre oblique « / », Slack envoie les mises à jour à un point de terminaison unique.
C'est vraiment la plus grande différence entre les événements et les commandes slash. Ajoutez simplement une nouvelle méthode sur votre service REST publié, pour mon exemple, je l'ai gardé simple. Lorsque l'utilisateur tape /ping, le bot répond pong. Un peu comme "Hello world", je sais, mais je jouais surtout ici.
Ajoutez un nouveau point de terminaison et pour le chemin d'opération, entrez Ping, il s'agit également d'une méthode POST.

Ensuite, dans le microflux qui gère la logique, définissez simplement l'attribut Contenu de la réponse sur « Pong ».

Enfin, dans Slack, accédez aux commandes Slash dans le menu de gauche et cliquez sur « Créer une nouvelle commande »

Votre point de terminaison sera à nouveau une combinaison de l'URL de NGROK et la URL de votre méthode HTTP.

Tout est fait
Félicitations, vous avez réussi à atteindre cet objectif. Vous pouvez maintenant tester votre application et découvrir votre bot ! N'oubliez pas que vous devrez ajouter votre bot au canal Slack pour qu'il reçoive les mises à jour envoyées au point de terminaison de l'événement. Envoyez simplement @YourBotName dans Slack et il vous demandera d'ajouter le bot pour vous. Comme l'API de Slack n'a pas d'autres fonctionnalités à utiliser, n'hésitez pas à me faire savoir si vous souhaitez un article sur quelque chose de plus spécifique.
Avant de partir, voici une brève conversation que j'ai eue avec mon robot –

Codage heureux!
