Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

MessageMedia - Send Messages

See more MessageMedia Examples

Submit one or more (up to 100 per request) SMS, MMS, or text to voice messages for delivery.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.StringBuilder,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  json: TJsonObject;
  resp: THttpResponse;
  sbResponseBody: TStringBuilder;
  jResp: TJsonObject;
  respStatusCode: Integer;
  message_id: string;
  callback_url: string;
  status: string;
  content: string;
  destination_number: string;
  delivery_report: Boolean;
  format: string;
  message_expiry_timestamp: string;
  MyKey: string;
  AnotherKey: string;
  scheduled: string;
  source_number: string;
  source_number_type: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  Implements the following CURL command:

  //  curl --request POST \
  //       --header "Content-Type: application/json" \
  //       --header "Accept: application/json" \
  //       --data-binary "{
  //      \"messages\": [
  //          {
  //              \"callback_url\": \"https://my.callback.url.com\",
  //              \"content\": \"My first message\",
  //              \"destination_number\": \"+61491570156\",
  //              \"delivery_report\": true,
  //              \"format\": \"SMS\",
  //              \"message_expiry_timestamp\": \"2016-11-03T11:49:02.807Z\",
  //              \"metadata\": {
  //                  \"myKey\": \"myValue\",
  //                  \"anotherKey\": \"anotherValue\"
  //              },
  //              \"scheduled\": \"2016-11-03T11:49:02.807Z\",
  //              \"source_number\": \"+61491570157\",
  //              \"source_number_type\": \"INTERNATIONAL\"
  //          },
  //          {
  //              \"callback_url\": \"https://my.callback.url.com\",
  //              \"content\": \"My second message\",
  //              \"destination_number\": \"+61491570158\",
  //              \"delivery_report\": true,
  //              \"format\": \"MMS\",
  //              \"subject\": \"This is an MMS message\",
  //              \"media\": [ \"https://images.pexels.com/photos/1018350/pexels-photo-1018350.jpeg?cs=srgb&dl=architecture-buildings-city-1018350.jpg\" ],
  //              \"message_expiry_timestamp\": \"2016-11-03T11:49:02.807Z\",
  //              \"metadata\": {
  //                  \"myKey\": \"myValue\",
  //                  \"anotherKey\": \"anotherValue\"
  //              },
  //              \"scheduled\": \"2016-11-03T11:49:02.807Z\",
  //              \"source_number\": \"+61491570159\",
  //              \"source_number_type\": \"INTERNATIONAL\"
  //          }
  //      ]
  //  }" \
  //  https://private-anon-ecbaffbc28-messages32.apiary-mock.com/v1/messages

  //  Use the following online tool to generate HTTP code from a CURL command
  //  Convert a cURL Command to HTTP Source Code

  //  Use this online tool to generate code from sample JSON:
  //  Generate Code to Create JSON

  //  The following JSON is sent in the request body.

  //  {
  //    "messages": [
  //      {
  //        "callback_url": "https://my.callback.url.com",
  //        "content": "My first message",
  //        "destination_number": "+61491570156",
  //        "delivery_report": true,
  //        "format": "SMS",
  //        "message_expiry_timestamp": "2016-11-03T11:49:02.807Z",
  //        "metadata": {
  //          "myKey": "myValue",
  //          "anotherKey": "anotherValue"
  //        },
  //        "scheduled": "2016-11-03T11:49:02.807Z",
  //        "source_number": "+61491570157",
  //        "source_number_type": "INTERNATIONAL"
  //      },
  //      {
  //        "callback_url": "https://my.callback.url.com",
  //        "content": "My second message",
  //        "destination_number": "+61491570158",
  //        "delivery_report": true,
  //        "format": "MMS",
  //        "subject": "This is an MMS message",
  //        "media": [
  //          "https://images.pexels.com/photos/1018350/pexels-photo-1018350.jpeg?cs=srgb&dl=architecture-buildings-city-1018350.jpg"
  //        ],
  //        "message_expiry_timestamp": "2016-11-03T11:49:02.807Z",
  //        "metadata": {
  //          "myKey": "myValue",
  //          "anotherKey": "anotherValue"
  //        },
  //        "scheduled": "2016-11-03T11:49:02.807Z",
  //        "source_number": "+61491570159",
  //        "source_number_type": "INTERNATIONAL"
  //      }
  //    ]
  //  }

  json := TJsonObject.Create;
  json.UpdateString('messages[0].callback_url','https://my.callback.url.com');
  json.UpdateString('messages[0].content','My first message');
  json.UpdateString('messages[0].destination_number','+61491570156');
  json.UpdateBool('messages[0].delivery_report',True);
  json.UpdateString('messages[0].format','SMS');
  json.UpdateString('messages[0].message_expiry_timestamp','2016-11-03T11:49:02.807Z');
  json.UpdateString('messages[0].metadata.myKey','myValue');
  json.UpdateString('messages[0].metadata.anotherKey','anotherValue');
  json.UpdateString('messages[0].scheduled','2016-11-03T11:49:02.807Z');
  json.UpdateString('messages[0].source_number','+61491570157');
  json.UpdateString('messages[0].source_number_type','INTERNATIONAL');
  json.UpdateString('messages[1].callback_url','https://my.callback.url.com');
  json.UpdateString('messages[1].content','My second message');
  json.UpdateString('messages[1].destination_number','+61491570158');
  json.UpdateBool('messages[1].delivery_report',True);
  json.UpdateString('messages[1].format','MMS');
  json.UpdateString('messages[1].subject','This is an MMS message');
  json.UpdateString('messages[1].media[0]','https://images.pexels.com/photos/1018350/pexels-photo-1018350.jpeg?cs=srgb&dl=architecture-buildings-city-1018350.jpg');
  json.UpdateString('messages[1].message_expiry_timestamp','2016-11-03T11:49:02.807Z');
  json.UpdateString('messages[1].metadata.myKey','myValue');
  json.UpdateString('messages[1].metadata.anotherKey','anotherValue');
  json.UpdateString('messages[1].scheduled','2016-11-03T11:49:02.807Z');
  json.UpdateString('messages[1].source_number','+61491570159');
  json.UpdateString('messages[1].source_number_type','INTERNATIONAL');

  http.SetRequestHeader('Content-Type','application/json');
  http.SetRequestHeader('Accept','application/json');

  resp := THttpResponse.Create;
  success := http.HttpJson('POST','https://private-anon-ecbaffbc28-messages32.apiary-mock.com/v1/messages',json,'application/json',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  sbResponseBody := TStringBuilder.Create;
  resp.GetBodySb(sbResponseBody);

  jResp := TJsonObject.Create;
  jResp.LoadSb(sbResponseBody);
  jResp.EmitCompact := False;

  WriteLn('Response Body:');
  WriteLn(jResp.Emit());

  respStatusCode := resp.StatusCode;
  WriteLn('Response Status Code = ' + respStatusCode);
  if (respStatusCode >= 400) then
    begin
      WriteLn('Response Header:');
      WriteLn(resp.Header);
      WriteLn('Failed.');
      Exit;
    end;

  //  Sample JSON response:
  //  (Sample code for parsing the JSON response is shown below)

  //  {
  //    "messages": [
  //      {
  //        "message_id": "04fe9a97-a579-43c5-bb1a-58ed29bf0a6a",
  //        "callback_url": "https://my.url.com",
  //        "status": "delivered",
  //        "content": "My first message",
  //        "destination_number": "+61491570156",
  //        "delivery_report": true,
  //        "format": "SMS",
  //        "message_expiry_timestamp": "2016-11-03T11:49:02.807Z",
  //        "metadata": {
  //          "myKey": "myValue",
  //          "anotherKey": "anotherValue"
  //        },
  //        "scheduled": "2016-11-03T11:49:02.807Z",
  //        "source_number": "+61491570157",
  //        "source_number_type": "INTERNATIONAL"
  //      }
  //    ]
  //  }

  //  Sample code for parsing the JSON response...
  //  Use the following online tool to generate parsing code from sample JSON:
  //  Generate Parsing Code from JSON

  i := 0;
  count_i := jResp.SizeOfArray('messages');
  while i < count_i do
    begin
      jResp.I := i;
      message_id := jResp.StringOf('messages[i].message_id');
      callback_url := jResp.StringOf('messages[i].callback_url');
      status := jResp.StringOf('messages[i].status');
      content := jResp.StringOf('messages[i].content');
      destination_number := jResp.StringOf('messages[i].destination_number');
      delivery_report := jResp.BoolOf('messages[i].delivery_report');
      format := jResp.StringOf('messages[i].format');
      message_expiry_timestamp := jResp.StringOf('messages[i].message_expiry_timestamp');
      MyKey := jResp.StringOf('messages[i].metadata.myKey');
      AnotherKey := jResp.StringOf('messages[i].metadata.anotherKey');
      scheduled := jResp.StringOf('messages[i].scheduled');
      source_number := jResp.StringOf('messages[i].source_number');
      source_number_type := jResp.StringOf('messages[i].source_number_type');
      i := i + 1;
    end;



  http.Free;
  json.Free;
  resp.Free;
  sbResponseBody.Free;
  jResp.Free;

end;

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

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.