In dieser Ausgabe finden Sie eine Anleitung und ein Beispielprogramm für das professionelle Versenden von SMS-Nachrichten.Wenn Sie eine derartige Anwendung benötigen, dann ist folgender Artikel genau das Richtige für Sie:

Auf das Übermitteln von SMS-Nachrichten haben sich verschiedene Anbieter spezialisiert, die eines gemeinsam haben, sie bieten einen REST-Webservice an, um SMS-Nachrichten zu versenden. Wie das genau funktioniert, zeigt Ihnen das nachfolgende Beispiel auf Basis des Webservice von www.messagebird.com.

Als Systemvoraussetzung benötigen Sie mindestens V7R1 und das Lizenzprogramm für SQL – 5770ST1.

Am besten legen wir gleich los, indem wir eine Test-SMS versenden. Entweder mit STRSQL oder über den Punkt SQL-Prozeduren ausführen im Operations Navigator oder über die IBM i Access Client Solution Run SQL Scripts. Hier geben Sie folgenden Befehl ein:

 

Select SYSTOOLS.HTTPPOSTCLOB(

'https://rest.messagebird.com/messages',

'<httpHeader>

<header name="Content-Type" value="application/x-www-form-urlencoded"/>

<header name="Authorization" value="AccessKey test_gshuPaZoeEG6ovbc8M79w0QyM"/>

</httpHeader>',

'recipients=31612345678&originator=Rainer Ross&body=Das ist eine Testnachricht'

)

from SYSIBM.SYSDUMMY1;

Wenn Sie nicht nur testen wollen, sondern echte SMS-Nachrichten versenden möchten, benötigen Sie einen Account bei Ihrem Versender. Von diesem erhalten Sie Ihren AccessKey.Wir arbeiten mit der SQL-Funktion HTTPPOSTCLOB, weil es sich um einen HTTP-Post Request handelt. Er hat drei Parameter:

  1. Parameter: Die Domain – rest.messagebird.com/messages
  2. Parameter: Der HTTP-Header im XML-Format mit Content-Type und Authentifizierung mit AccessKey
  3. Parameter: Die zu sendenden Daten

recipients = Telefonnummer(n) des Empfängers

originator = Absendername

body = Nachricht

Das Ergebnis im JSON-Format hat folgendes Aussehen:

 

{

   „id“:“863fb843557b31120941cf1b20961966“,

   „href“:“https://rest.messagebird.com/messages/863fb843557b31120941cf1b20961966“,

   „direction“:“mt“,

   „type“:“sms“,

   „originator“:“Rainer Ross“,

   „body“:“This is a test message“,

   „reference“:null,

   „validity“:null,

   „gateway“:2,

   „typeDetails“:{

   },

   „datacoding“:“plain“,

   „mclass“:1,

   „scheduledDatetime“:null,

   „createdDatetime“:“2016-08-16T13:12:00+00:00“,

   „recipients“:{

      „totalCount“:1,

      „totalSentCount“:1,

      „totalDeliveredCount“:0,

      „totalDeliveryFailedCount“:0,

      „items“:[

         {

            „recipient“:31612345678,

            „status“:“sent“,

            „statusDatetime“:“2016-08-16T13:12:00+00:00“

         }

      ]

   }

}

Eine ausführliche Beschreibung der Daten und der Parameter finden Sie hier: developers.messagebird.com/docs/messaging

Diese Daten können Sie mit dem JSON-Parser von Scott Klement www.scottklement.com/yajl/ auswerten oder in die Datenbank schreiben und mit SQL auswerten, wie in folgendem Artikel beschrieben: www.mcpressonline.com/database/techtip-store-and-parse-json-data-natively-with-db2-for-i.html

Falls Ihr Webservice die Daten für den POST-Request im JSON-Format benötigt, sieht der SQL-Befehl wie folgt aus:

 

Select SYSTOOLS.HTTPPOSTCLOB(

'https://rest.messagebird.com/messages',

'<httpHeader>

    
<header name="Content-Type" value="application/json"/>

    
<header name="Authorization" value="AccessKey test_gshuPaZoeEG6ovbc8M79w0QyM"/>

</httpHeader>',

'{

    "recipients": "31612345678", 

    "originator": "Rainer Ross",

    "body": "Das ist eine Testnachricht"

}'

)

from SYSIBM.SYSDUMMY1;

 

Im nächsten Schritt nehmen wir das SQL-Statement und bauen es in ein RPG-Programm des Typs SQLRPGLE ein.

ctl-opt dftactgrp(*no) option(*nodebugio:*nounref);

//-------------------------------------------------------------//

//   //

// SMS mit MessageBird versenden //

//   //

//-------------------------------------------------------------//

// R.Ross 08.2016 * //

//-------------------------------------------------------------//

// Variablendefinition //

//-------------------------------------------------------------//

dcl-s Recipients varchar(20); // Recipients

dcl-s Originator varchar(11); // Originator

dcl-s Message varchar(160); // Message

dcl-s File varchar(256); // File

//-------------------------------------------------------------//

// Ausführungsbestimmungen //

//-------------------------------------------------------------//

Recipients = '31612345678';

Originator = 'Meier GmbH';

Message = 'Ihre Bestellung trifft am 16.08.2016 ein';

File = '/tmp/sms-response.json';

sendSMS(Recipients:Originator:Message:File);

*inlr = *on;

//-------------------------------------------------------------//

// Procedure - Send SMS //

//-------------------------------------------------------------//

dcl-proc sendSMS;

dcl-pi *n;


PiRecipients like(Recipients) const options(*varsize);


PiOriginator like(Originator) const options(*varsize);


PiBody like(Message) const options(*varsize);

PiFile like(File) const options(*varsize);

end-pi;

dcl-s clob sqltype(CLOB_FILE); // CLOB

dcl-s SqlCmd varchar(1000); // SQL-Command

dcl-s SqlString varchar(1000); // String

dcl-s SqlUrl varchar(128); // URL

dcl-s SqlHeader varchar(256); // Header

dcl-s SqlBody varchar(256); // Body

dcl-s Length uns(10); // Length

SqlUrl = 'https://rest.messagebird.com/messages';

SqlHeader = // HTTP-Header

'<httpHeader>' +

'<header name="Content-Type"' +

' value="application/x-www-form-urlencoded"/>' +

'<header name="Authorization"' +

' value="AccessKey test_gshuPaZoeEG6ovbc8M79w0QyM"/>' +

'</httpHeader>';

SqlBody = 'recipients=' + PiRecipients + '&' +

'originator=' + PiOriginator + '&' +

'body=' + PiBody;

SqlString = '(''' + SqlUrl + ''', +

''' + SqlHeader + ''', +

''' + SqlBody + ''')';

clob_name = PiFile; // File

clob_nl =%len(%trim(clob_name)); // NameLength

clob_fo = SQFOVR; // FileOverwrite

SqlCmd = 'select systools.httppostclob ' + SqlString + ' ' +

'from sysibm.sysdummy1';

exec sql prepare sqlcmd01 from :SqlCmd;

exec sql declare sqlcur01 cursor for sqlcmd01;

exec sql open sqlcur01;

if sqlcod = *zero;

exec sql fetch sqlcur01 into :clob;

if sqlcod = *zero; // SQL-Error

 Length = clob_dl; // DataLength

 endif;

 endif;

exec sql close sqlcur01; // Close Cursor

end-proc;

//-------------------------------------------------------------//

 

Wenn sie viele Tausend SMS pro Tag versenden möchten, ist es sinnvoll, dieses Programm in ein Triggerprogramm einzubauen oder die SMS-Nachrichten an mehrere DataQueues zu senden, die jeweils dieses Programm aufrufen, um die SMS-Nachrichten zu senden.Viel Spaß beim Ausprobieren.