Invio messaggi Slack con NodeJs da IBM i (IT)

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

Nella console SSH si visualizzano i comandi console.log inseriti nell’applicazione node

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.

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

View Comments

Recent Posts

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

2 giorni ago

ObjectConnect over TCP/IP

A distanza di due anni e mezzo dal mio post Trasferire oggetti con ObjectConnect ed Enterprise Extender, sono finalmente riuscito…

3 giorni ago

SQL: SELECT con i “superpoteri”

Con un piccolo trucco anche una semplice istruzione SELECT può eseguire qualsiasi comando di sistema ! Vediamo come...

5 mesi ago

NetServer per tutti – parte 5

Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer

1 anno ago

NetServer per tutti – parte 4

Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer

1 anno ago

NetServer per tutti – parte 3

Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer

1 anno ago