https://d226lax1qjow5r.cloudfront.net/blog/blogposts/send-text-message-cobol-dr/send-text-message-cobol-feature.png

Enviar un mensaje de texto con COBOL

Publicado el May 13, 2021

Tiempo de lectura: 9 minutos

COBOL está de moda en el sector bancario y financiero, ya que más del 95% de los cajeros automáticos utilizan código COBOL, según un informe de informe de Reuters.

En este tutorial, voy a mostrarte un método, pirateado, para enviar mensajes de texto usando COBOL. Así que enciende tu mainframe, prepara tu terminal 3270, ¡y pongámonos a escribir algo de COBOL!

Espere un minuto

¿Qué es eso? no ¿tienes acceso a un mainframe multimillonario? ¿Quizá tu empresa tiene uno que te puede prestar? ¿No? No pasa nada, hay una solución.

Requisitos previos

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

También necesitará el Nexmo CLI. Puede utilizarlo para comprar un número de teléfono para enviar mensajes de texto salientes.

Usted también necesitará un compilador COBOL que convertirá su COBOL en binarios nativos para ejecutar en su sistema. Para este tutorial, voy a utilizar GnuCOBOL.

GnuCOBOL es un compilador COBOL gratuito que convierte COBOL a C y compila el código traducido. Permite crear binarios nativos que pueden ejecutarse en Mac, Windows y Unix/Linux.

Puede encontrar enlaces de descarga para GnuCOBOL aquí. Opcionalmente, los usuarios de Mac pueden instalar usando homebrew:

brew install gnu-cobol

También necesitarás un editor. Tuve cierto éxito utilizando el OpenCobolIDE. Usted podría ser capaz de arreglárselas con un editor de texto simple. Voy a hablar de la estructura de un módulo COBOL un poco más tarde y por qué tener un IDE adecuado es algo esencial.

Enviar un mensaje de texto con COBOL

Este tutorial le mostrará cómo comprar un número de teléfono con el Nexmo CLI, y cómo utilizar ese número para enviar mensajes de texto con COBOL.

Comprar un Numbers

Necesitarás un número Nexmo para enviar mensajes de texto. Si usted no tiene un número, puede utilizar el Nexmo CLI para comprar uno:

nexmo number:buy --country_code US

Tenga en cuenta que en algunos países puede enviar mensajes desde un identificador de remitente alfanumérico. Para obtener más información, consulte ID de remitente personalizado.

Toma nota del número que acabas de comprar. Lo utilizarás más tarde cuando escribas el código para crear la llamada telefónica.

Creación del módulo COBOL

Hay algunas maneras diferentes para enviar un mensaje de texto desde COBOL. Sin embargo, la mayoría de estos métodos varían en función del hardware que está utilizando. Puesto que usted probablemente no tiene acceso a un mainframe, vas a engañar un poco. Lo que vas a hacer es crear un módulo COBOL que puede llamar a la Nexmo CLI para enviar un mensaje de texto.

En primer lugar, vamos a repasar la estructura de módulos COBOL. No voy a darle una extensa guía sobre COBOL, pero creo que es importante saber cómo se estructuran los módulos.

La estructura de columnas

COBOL tiene dos formatos diferentes: fijo, o libre. El formato fijo requiere que el código se alinea con columnas 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 imagen ilustra un módulo hello world de ejemplo con las secciones señaladas:

Cobol columns

COBOL 2002 introdujo un formato libre que elimina estas restricciones de columna y combina las áreas A y B. No estoy tan familiarizado con COBOL 2002, así que he optado por seguir con un formato fijo para este tutorial.

Las divisiones

Módulos COBOL dividido en cuatro regiones diferentes, llamadas divisiones:

  • La dirección IDENTIFICATION DIVISION que proporciona información de identificación como el nombre del módulo.

  • La página ENVIRONMENT DIVISION que describe las partes de tu módulo que dependen del ordenador en el que se ejecuta.

  • La página DATA DIVISION donde se definen sus datos.

  • La dirección PROCEDURE DIVISION donde se definen las instrucciones de programación del módulo.

Crear un nuevo programa COBOL llamado "SENDSMS.cbl" y añadir el siguiente contenido, teniendo en cuenta que los espacios son esenciales antes de que el contenido de cada línea:

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

Si estás usando el OpenCobolIDE puedes ejecutar este módulo, y deberías ver "Hola mundo" en la consola:

Successful run

Definición de los datos

Ahora vas a definir la estructura de datos para almacenar la información necesaria para enviar un mensaje de texto: el número al que enviar el mensaje de texto, el número desde el que enviar el mensaje y el contenido del mensaje de texto.

Los elementos de datos en COBOL tienen un formato jerárquico. Cada variable se le da un número de nivel con los números de nivel superior están subordinados al nivel inferior por encima de ella.

Por ejemplo, puede representar una fecha con la siguiente estructura:

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

Esto le permite MOVE "20190401" TO WS-DATE y luego recuperar cada componente refiriéndose a ellos como WS-YEAR, WS-MONTHy WS-DAY. Lo contrario también es cierto.

La palabra clave FILLER puede utilizarse para inyectar constantes en la estructura, o para ignorar ciertas partes de los datos entrantes. Por ejemplo, si quisiera mostrar la fecha con guiones intercalados, podría escribir lo siguiente:

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).

Ahora, si ejecutas el siguiente código

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

La fecha aparece como 2019-04-01.

Construir el comando Nexmo CLI

Usted puede tomar ventaja de esto mediante la construcción del comando necesario para el Nexmo CLI para enviar un mensaje de texto:

nexmo sms TO_NUMBER MESSAGE_CONTENTS --from FROM_NUMBER --confirm

Para estar seguros, vamos a permitir hasta 15 dígitos para cada uno de los números de teléfono, y 160 caracteres para el cuerpo del mensaje.

Añada lo siguiente a la parte WORKING-STORAGE SECTION de su 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".

Llamar a la CLI de Nexmo

La sentencia CALL se utiliza para llamar a otros programas o módulos. El programa SYSTEM es similar a exec en otros lenguajes en el sentido de que permite ejecutar programas de línea de comandos desde el programa. El WS-COMMAND contiene el comando para enviar un mensaje de texto a través del Nexmo CLI.

Ahora, todo lo que necesitas hacer es rellenar las variables, y pasar el WS-COMMAND al programa SYSTEM programa.

Añádase lo siguiente al MAIN-PROCEDURE párrafo, sustituyendo YOUR-PHONE-NUMBER por su número de teléfono y YOUR-NEXMO-NUMBER por su número Nexmo adquirido:

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.

Aquí está el 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.

Pruébelo

Ahora, ejecute el programa y sorpréndase cuando aparezca un nuevo mensaje de texto en su teléfono.

¿Qué hacer a partir de ahora?

Espero que hayas disfrutado de este vistazo a COBOL. Puede que no sea el lenguaje que elijas para enviar mensajes de texto, y depende en gran medida del hardware que utilices.

Si te apetece el reto, Steve Williams tiene un Cliente COBOL RESTque podrías utilizar para llamar directamente a la API de Nexmo.

Es posible que tenga más éxito poniendo en cola los mensajes salientes en una cola de mensajes y luego utilizar Java para enviar un mensaje de texto.

Dependiendo de su entorno mainframe, IBM tiene algunas instrucciones para realizar peticiones HTTP a través de CICS como cliente HTTP.

Para más información sobre COBOL Museo Nacional de Historia Americana. Para echar un vistazo a la vida de Grace Hopper, la mujer que dirigió el equipo de desarrollo de COBOL, consulte lo siguiente Biografía de Grace Hopper.

Compartir:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Steve CrowAntiguos alumnos de Vonage

Steve se autoproclama matemático y rey de la sátira. También le gustan los galgos, los rompecabezas enrevesados y los juegos de mesa europeos. Cuando no está hablando de matemáticas con gente que no es matemática o de Java con gente que no es de Java, se le puede encontrar tomando café y hackeando código.