https://a.storyblok.com/f/270183/259372/7a0631d275/send-text-message-cobol-feature.png

Enviar uma mensagem de texto com COBOL

Publicado em May 13, 2021

Tempo de leitura: 9 minutos

O COBOL está em alta no setor bancário e financeiro, com mais de 95% das transações em caixas eletrônicos dependendo de código COBOL, de acordo com uma relatório da Reuters.

Neste tutorial, vou mostrar a vocês um método meio improvisado para enviar mensagens de texto usando COBOL. Então, liguem o mainframe, preparem o terminal 3270 e vamos começar a escrever um pouco de COBOL!

Espere um minuto

O que é isso, você não tem acesso a um mainframe de vários milhões de dólares? Talvez sua empresa tenha um que você possa usar? Não? Tudo bem; há uma solução alternativa.

Pré-requisitos

Você também precisará do Nexmo CLI. Você pode usá-la para adquirir um número de telefone para enviar mensagens de texto.

Você também precisará de um compilador COBOL que converta seu código COBOL em binários nativos para rodar no seu sistema. Para este tutorial, vou usar GnuCOBOL.

O GnuCOBOL é um compilador COBOL gratuito que converte COBOL para C e compila o código traduzido. Ele permite criar binários nativos que podem ser executados no Mac, no Windows e no Unix/Linux.

Você pode encontrar links para download do GnuCOBOL aqui. Opcionalmente, os usuários de Mac podem instalar usando o Homebrew:

brew install gnu-cobol

Você também vai precisar de um editor. Tive algum sucesso ao usar o OpenCobolIDE. Talvez você consiga se virar com um editor de texto simples. Falarei sobre a estrutura de um módulo COBOL um pouco mais adiante e explicarei por que ter um IDE adequado é, de certa forma, essencial.

Enviar uma mensagem de texto com COBOL

Este tutorial mostrará como adquirir um número de telefone usando a CLI da Nexmo e como usar esse número para enviar mensagens de texto com COBOL.

Compra de um número

Você precisará de um número da Nexmo para enviar mensagens de texto. Se não tiver um número, pode usar a CLI da Nexmo para adquirir um:

nexmo number:buy --country_code US

Observe que, em alguns países, é possível enviar mensagens a partir de um ID de remetente alfanumérico. Para mais informações, consulte ID de remetente personalizado.

Anote o número que você acabou de comprar. Você vai usá-lo mais tarde, ao escrever o código para fazer a ligação.

Criação do módulo COBOL

Existem algumas maneiras diferentes de enviar uma mensagem de texto a partir do COBOL. No entanto, a maioria desses métodos varia de acordo com o hardware que você estiver usando. Como você provavelmente não tem acesso a um mainframe, vamos dar uma “golpezinho”. O que você vai fazer é criar um módulo em COBOL capaz de chamar a CLI da Nexmo para enviar uma mensagem de texto.

Primeiro, vamos dar uma olhada na estrutura dos módulos do COBOL. Não vou apresentar um guia detalhado sobre o COBOL, mas acho importante saber como os módulos são estruturados.

A estrutura em colunas

O COBOL possui dois formatos diferentes: fixo ou livre. O formato fixo exige que o código seja alinhado a colunas específicas:

Name Column Usage
Sequences 1-6 Used for sequence numbers. These were initially used for card and line numbers, but now the compiler ignores them. Most editors will automatically generate these.
Indicator 7 Used for indicating a comment * or a - continuation of a previous line.
Area A 8-11 Contains the start of the DIVISION and SECTION.
Area B 12-72 Contains all of your other code and programming logic not contained in the other areas.

Esta imagem ilustra um exemplo de módulo “hello world” com as seções destacadas:

Cobol columns

O COBOL 2002 introduziu um formato livre que eliminou essas restrições de colunas e combinou as áreas A e B. Como não estou tão familiarizado com o COBOL 2002, optei por manter um formato fixo para este tutorial.

As Divisões

Os módulos COBOL são divididos em quatro regiões diferentes, chamadas de divisões:

  • O IDENTIFICATION DIVISION que fornece informações de identificação, como o nome do módulo.

  • O ENVIRONMENT DIVISION que descreve as partes do seu módulo que dependem do computador no qual ele está sendo executado.

  • O DATA DIVISION onde seus dados são definidos.

  • O PROCEDURE DIVISION onde as instruções de programação do módulo são definidas.

Crie um novo programa COBOL chamado “SENDSMS.cbl” e insira o seguinte conteúdo, observando que os espaços antes do conteúdo de cada linha são essenciais:

IDENTIFICATION DIVISION.
       PROGRAM-ID. SENDSMS.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY "Hello world".
       END PROGRAM SENDSMS.

Se você estiver usando o OpenCobolIDE, poderá executar este módulo e deverá ver “Hello world” no console:

Successful run

Definindo os dados

Agora você vai definir a estrutura de dados para armazenar as informações necessárias para enviar uma mensagem de texto: o número para o qual a mensagem será enviada, o número de origem da mensagem e o conteúdo da mensagem.

Os itens de dados no COBOL têm um formato hierárquico. A cada variável é atribuído um número de nível, sendo que os números de nível mais altos estão subordinados ao nível imediatamente inferior.

Por exemplo, você poderia representar uma data da seguinte forma:

01  WS-DATE.
           02  WS-YEAR  PIC X(4).
           02  WS-MONTH PIC X(2).
           02  WS-DAY   PIC X(2).

Isso permite que você MOVE "20190401" TO WS-DATE e, em seguida, recuperar cada componente referindo-se a eles como WS-YEAR, WS-MONTH, e WS-DAY. O inverso também é verdadeiro.

A FILLER palavra-chave pode ser usada para inserir constantes na estrutura ou para ignorar certas partes dos dados recebidos. Por exemplo, se você quiser exibir a data com traços entre os números, pode escrever o seguinte:

01  WS-DATE.
           02  WS-YEAR  PIC X(4).
           02  FILLER   PIC X VALUE '-'.
           02  WS-MONTH PIC X(2).
           02  FILLER   PIC X VALUE '-'.
           02  WS-DAY   PIC X(2).

Agora, se você executar o código a seguir:

MOVE "2019" TO WS-YEAR.
MOVE "04" TO WS-MONTH.
MOVE "01" TO WS-DAY.
DISPLAY WS-DATE

A data é exibida como 2019-04-01.

Crie o comando da CLI do Nexmo

Você pode aproveitar isso criando o comando necessário para que a CLI do Nexmo envie uma mensagem de texto:

nexmo sms TO_NUMBER MESSAGE_CONTENTS --from FROM_NUMBER --confirm

Por precaução, vamos permitir até 15 dígitos para cada um dos números de telefone e 160 caracteres para o corpo da mensagem.

Adicione o seguinte ao WORKING-STORAGE SECTION do seu programa:

01  WS-COMMAND.
           02 FILLER PIC X(5) VALUE "nexmo".
           02 FILLER PIC X(5) VALUE " sms ".
           02 WS-TO-NUMBER PIC X(15).
           02 FILLER PIC X VALUE SPACE.
           02 WS-MESSAGE PIC X(160).
           02 FILLER PIC X(8) VALUE " --from ".
           02 WS-FROM-NUMBER PIC X(15).
           02 FILLER PIC X(10) VALUE " --confirm".

Chame a CLI da Nexmo

A CALL instrução é usada para chamar outros programas ou módulos. O SYSTEM programa é semelhante a exec em outras linguagens, pois permite que você execute programas de linha de comando a partir do seu programa. O WS-COMMAND contém o comando para enviar uma mensagem de texto por meio da CLI da Nexmo.

Agora, basta preencher as variáveis e passar o WS-COMMAND para o SYSTEM programa.

Adicione o seguinte ao MAIN-PROCEDURE parágrafo, substituindo YOUR-PHONE-NUMBER pelo seu número de telefone e YOUR-NEXMO-NUMBER pelo número da Nexmo que você adquiriu:

MOVE "YOUR-PHONE-NUMBER" TO WS-TO-NUMBER.
           MOVE "YOUR-NEXMO-NUMBER" TO WS-FROM-NUMBER.
           MOVE "HELLO WORLD FROM COBOL" TO WS-MESSAGE.
           CALL "SYSTEM" USING WS-COMMAND.

Aqui está o programa completo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SENDSMS.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      * nexmo sms <to> Hello world! --from <from> --confirm
       01  WS-COMMAND.
           02 FILLER PIC X(5) VALUE "nexmo".
           02 FILLER PIC X(5) VALUE " sms ".
           02 WS-TO-NUMBER PIC X(15).
           02 FILLER PIC X VALUE SPACE.
           02 WS-MESSAGE PIC X(160).
           02 FILLER PIC X(8) VALUE " --from ".
           02 WS-FROM-NUMBER PIC X(15).
           02 FILLER PIC X(10) VALUE " --confirm".

       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           MOVE "YOUR-NUMBER" TO WS-TO-NUMBER.
           MOVE "NEXMO-NUMBER" TO WS-FROM-NUMBER.
           MOVE "HELLO WORLD FROM COBOL" TO WS-MESSAGE.
           CALL "SYSTEM" USING WS-COMMAND.
           STOP RUN.
       END PROGRAM SENDSMS.

Experimente

Agora, execute seu programa e surpreenda-se ao ver uma nova mensagem de texto aparecer no seu celular.

Para onde seguir a partir daqui

Espero que tenham gostado dessa introdução ao COBOL. Talvez não seja a linguagem que vocês escolheriam para enviar mensagens de texto, e ela depende muito do hardware em que está sendo executada.

Se você estiver disposto a aceitar o desafio, Steve Williams tem um Cliente REST em COBOL, que você talvez possa usar para chamar a API da Nexmo diretamente.

Talvez você tenha mais sucesso colocando as mensagens de saída em uma fila de mensagens e, em seguida, usar Java para enviar uma mensagem de texto.

Dependendo do seu ambiente de mainframe, a IBM disponibiliza algumas instruções sobre fazer solicitações HTTP por meio do CICS como um cliente HTTP.

Para mais informações sobre COBOL, acesse o Museu Nacional de História Americana. Para conhecer a vida de Grace Hopper, a mulher que liderou a equipe responsável pelo desenvolvimento do COBOL, veja esta Biografia de Grace Hopper.

Compartilhar:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Steve CrowEx-funcionários da Vonage

Steve se autodenomina “Mathlete” e “Rei da Ironia”. Ele também é apaixonado por galgos, quebra-cabeças de torção e jogos de tabuleiro europeus. Quando não está falando de matemática para quem não entende de matemática, nem de Java para quem não entende de Java, ele pode ser encontrado tomando café e programando.