01 - Programmazione03 - Open Source03b - Node.js

Invio messaggi Slack con NodeJs da IBM i (IT)

Last Updated on 7 Giugno 2020 by Roberto De Pedrini

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

About author

Project manager, consulente aziendale gestionale, sviluppo applicazioni con Rpgfree , Python, JavaScript. Sono entrato nel mondo IT quando è nato l'As400 , sono un sostenitore della piattaforma Ibm-I e delle sue enormi potenzialità e credo nelle risorse offerte dalla comunità dell'open source. Sono grato di collaborare con FAQ400 perchè condivido pienamente gli obiettivi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *