01 - Programmazione03 - Open Source03b - Node.js

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
HAI LETTO IL MANUALE ?

È la domanda che faccio sempre ai miei colleghi programmatori quando mi chiedono qualcosa: "Hai letto il manuale?". Lo sappiamo, Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 4 IT)

Eccoci alla quarta parte di questo "FAQ & Howtos" per SQL e DB2 for i ... le precedenti 3 "puntate" Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 3 IT)

iDB2-FAQ-021 – Stored Procedure e Linked Server da MS SQL Server a DB2 for i From Microsoft MS SQL Server Read more

Gestione del Sistema IBM i: FAQ & Howto (Parte 4) IT

Questa è la terza parte della raccolta di FAQ & Howto sulla gestione del sistema IBM i : puoi vedere 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.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: