Last Updated on 7 Giugno 2020 by Roberto De Pedrini
Index
Premessa
Slack è un software che rientra nella categoria degli strumenti di collaborazione aziendale utilizzato per inviare messaggi in modo istantaneo ai membri del team (wikipedia). Si possono organizzare le comunicazioni attraverso dei canali specifici, generare delle interazioni con le notifiche, comunicare con metodi innovativi.
In questo articolo viene illustrato come, tramite una applicazione NodeJs, si possono inviare messaggi o creare delle interazioni tra il sistema gestionale che risiede nell’IbmI ed un canale Slack.
Nell’articolo viene illustrato la metodologia di interazione alla chat, e nello specifico viene illustrata un’applicazione che comunica l’ordinato giornaliero, suddiviso per cliente, al canale chat dello workspace aziendale.
L’idea è quella di generare una comunicazione giornaliera da inviare alla direzione commerciale.
Questa metodologia può essere utilizzata per generare notifiche degli errori di sistema , messaggi di esecuzione dei processi gestionali, notifiche che riguardano una azione commerciale, ecc.
Il messaggio può essere arricchito con immagini, emoticon, button, funzioni di interazione e tanto altro.
Prerequisiti
- Sistema operativo 7.2 o superiore.
- Nodejs v10.15.3 o superiore.
Iscrizione App Slack
Per prima cosa è necessario creare un nuovo workspace in slack https://slack.com/intl/en-it/, tramite l’utilizzo dell’email.
Dopo aver aperto lo workspace e i canali si procede con l’attivazione dell’ incoming webhooks (Vedi il pdf di seguito riportato).
La differenza principale tra Webhook e API è sottile, poiché entrambi i servizi servono a spostare i dati tra app. Con le API ottieni i dati dal provider, mentre le notifiche consentono al provider di inviarti i dati. In sostanza nella Api c’è una risposta, le Webhooks inviano semplicemente i dati.
Applicazione Nodejs
Andiamo a creare nel percorso home del nostro profilo /home/utente/… una cartella che chiameremo slack e dove al suo interno andremo a costruire l’applicazione.
Modulo ibmi.js
Questa funzione ha lo scopo di accedere al database dell’ibmi.
Il connettore è l’idb-pconnector.
La connessione avviene tramite una funzione async e il ritorno è un json.
Il comando node per l’installazione è il seguente: npm install idb-pconnector.
https://www.npmjs.com/package/idb-pconnector
const {Connection} = require('idb-pconnector');
var dateFormat = require('dateformat');
var datetime = new Date();
today= dateFormat(datetime, "yyyymmdd");
const sql = 'SELECT ragsoc, decimal(sum(qtaord*prezzo),7,0) val FROM libreria.testataOrd a ' +
' inner join libreria.dettaglioOrd b on a.tpdoc=b.tpdoc ' +
'and a.nrord=b.nrord ' +
' inner join libreria.anagaCli on codcli=a.codcli' +
' where a.dtord=' +today+
' group by ragsoc'
;
async function db() {
try {
let statement = new Connection().connect().getStatement();
let result = await statement.exec(sql);
c=JSON.stringify(result)
return c
} catch(error) {
console.error(`Error was: \n${error.stack}`);
}
}
module.exports = {
db
};
Modulo msgSlack.js
qui avviene la chiamata https al provider slack (xxxxxxxxx….. è il codice che bisogna copiare dall’iscrizione al servizio webhook di slack).
A questa funzione viene passato il json di ritorno dalla funzione ibmi.js e tramite un loop, viene comunicato il valore ordinato di ciascun cliente.
var SlackWebhook = require('slack-webhook')
var slack = new SlackWebhook('https://hooks.slack.com/services/xxxxxxxxx.....', {
defaults: {
username: 'Gianpiero',
channel: '#general',
icon_emoji: ':robot_face:'
}
})
function sendMsg(db) {
console.log('send:', db)
var myArray = eval("(" + db + ")")
for (var i = 0; i < myArray.length; i++) {
slack.send({
"blocks": [
{
"type": "section",
"block_id": "section789",
"fields": [
{
"type": "mrkdwn",
"text": "*Ordinato del giorno*\n" + (myArray[i].ragsoc+''+myArray[i].VAL)
}
]
}
]
,
attachments: [
// optional attachment data
],
username: 'new username',
icon_emoji: ':scream_cat:',
channel: '#general'
})
}
}
module.exports = {
sendMsg
};
Modulo appSlack.js
Questo è il modulo che gestisce l’intera applicazione e mette insieme i due moduli precedenti.
Con require vengono importati i moduli creati precedentemente.
const ibmi = require('./ibmi')
const msg = require('./msgSlack')
async function start() {
const db= await ibmi.db()
console.log('Json:' , db)
msg.sendMsg(db)
var myArray = eval("(" + db + ")")
}
start();
Esecuzione applicazione
Il lancio dell’applicazione può avvenire in diversi modi:
– Modalità interattiva (call qp2term).
– Modalità batch (qsh).
Per impostare i parametri per l’esecuzione automatica dell’applicazione è necessario configurare un file profile nella cartella \etc e un file .profile nella cartella dell’utente \home\user\:
profile
PATH=/QOpenSys/pkgs/bin:$PATH
export PATH
.profile
node /home/QPGMR01/slack/appSlack.js
Esempio di lancio interattivo da un programma rpgfree che abbiamo chiamato slack:
CTL-Opt OPTION(*SRCSTMT:*NODEBUGIO)
DFTACTGRP(*No);
dcl-pr qp2term ExtPgm('QP2TERM');
END-PR;
callp qp2term();
*Inlr=*On;
Eseguire il programma slack collegandosi alla sessione con l’utente con cui è stata realizzata l’applicazione nodejs nell’ifs del sistema.
call slack
Il messaggio viene inviato alla piattaforma slack da cui possiamo accedere dal browser o meglio in mobilità da qualsiasi device.
Conclusione
E’ importante individuare nell’analisi dei processi aziendali le tecnologie più appropriate per accelerare le innovazioni. Questa è una delle tante che si possono implementare per fornire servizi di qualità, come per esempio inviando notifiche di mercato ad un reparto commerciale o rendere più efficienti le comunicazioni attraverso i canali chat. Anche Slack contribuisce ad arricchire l’offerta di prodotti e servizi utili alle aziende per essere competitive e per generare valore aggiunto dal lavoro del team. L’azienda è fatta di persone e tutto è utile per rafforzare la responsabilità di ognuno di noi e la qualità dei servizi offerti.
1 Comment