Delphi ActiveX Zendesk: Create a Ticket

Back to Index

Creates a new Zendesk ticket.

Documentation: https://developer.zendesk.com/rest_api/docs/core/tickets#create-ticket

CURL Command

curl -X POST https://subdomain.zendesk.com/api/v2/tickets.json \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "ticket": {
    "subject": "My printer is on fire!",
    "comment": {
      "body": "The smoke is very colorful."
    }
  }
}' \
  -u zendesk_email:zendesk_password

Delphi ActiveX Example

var
rest: TChilkatRest;
success: Integer;
bTls: Integer;
port: Integer;
bAutoReconnect: Integer;
json: TChilkatJsonObject;
sbRequestBody: TChilkatStringBuilder;
sbResponseBody: TChilkatStringBuilder;
respStatusCode: Integer;
jsonResponse: TChilkatJsonObject;
ticketUrl: WideString;
ticketId: Integer;
ticketExternal_id: WideString;
ticketViaChannel: WideString;
ticketViaSourceRel: WideString;
ticketCreated_at: WideString;
ticketUpdated_at: WideString;
ticketType: WideString;
ticketSubject: WideString;
ticketRaw_subject: WideString;
ticketDescription: WideString;
ticketPriority: WideString;
ticketStatus: WideString;
ticketRecipient: WideString;
ticketRequester_id: Integer;
ticketSubmitter_id: Integer;
ticketAssignee_id: Integer;
ticketOrganization_id: Integer;
ticketGroup_id: Integer;
ticketForum_topic_id: WideString;
ticketProblem_id: WideString;
ticketHas_incidents: Integer;
ticketIs_public: Integer;
ticketDue_at: WideString;
ticketSatisfaction_rating: WideString;
ticketBrand_id: Integer;
ticketAllow_channelback: Integer;
auditId: Integer;
auditTicket_id: Integer;
auditCreated_at: WideString;
auditAuthor_id: Integer;
auditMetadataSystemIp_address: WideString;
auditMetadataSystemLocation: WideString;
auditMetadataSystemLatitude: Integer;
auditMetadataSystemLongitude: Integer;
auditViaChannel: WideString;
auditViaSourceRel: WideString;
i: Integer;
count_i: Integer;
id: Integer;
type: WideString;
author_id: Integer;
body: WideString;
html_body: WideString;
plain_body: WideString;
public: Integer;
audit_id: Integer;
value: WideString;
field_name: WideString;
viaChannel: WideString;
viaSourceFromDeleted: Integer;
viaSourceFromTitle: WideString;
viaSourceFromId: Integer;
viaSourceRel: WideString;
subject: WideString;
j: Integer;
count_j: Integer;
intVal: Integer;

begin
rest := TChilkatRest.Create(Self);

//  URL: https://subdomain.zendesk.com/api/v2/tickets.json
bTls := 1;
port := 443;
bAutoReconnect := 1;
success := rest.Connect('subdomain.zendesk.com',port,bTls,bAutoReconnect);
if (success <> 1) then
  begin
    Memo1.Lines.Add('ConnectFailReason: ' + IntToStr(rest.ConnectFailReason));
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;

rest.SetAuthBasic('zendesk_email','zendesk_password');

json := TChilkatJsonObject.Create(Self);
json.UpdateString('ticket.subject','My printer is on fire!');
json.UpdateString('ticket.comment.body','The smoke is very colorful.');

rest.AddHeader('Content-Type','application/json');
rest.AddHeader('Accept','application/json');

sbRequestBody := TChilkatStringBuilder.Create(Self);
json.EmitSb(sbRequestBody.ControlInterface);
sbResponseBody := TChilkatStringBuilder.Create(Self);
success := rest.FullRequestSb('POST','/api/v2/tickets.json',sbRequestBody.ControlInterface,sbResponseBody.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;
respStatusCode := rest.ResponseStatusCode;
if (respStatusCode >= 400) then
  begin
    Memo1.Lines.Add('Response Status Code = ' + IntToStr(respStatusCode));
    Memo1.Lines.Add('Response Header:');
    Memo1.Lines.Add(rest.ResponseHeader);
    Memo1.Lines.Add('Response Body:');
    Memo1.Lines.Add(sbResponseBody.GetAsString());
    Exit;
  end;

jsonResponse := TChilkatJsonObject.Create(Self);
jsonResponse.LoadSb(sbResponseBody.ControlInterface);

ticketUrl := jsonResponse.StringOf('ticket.url');
ticketId := jsonResponse.IntOf('ticket.id');
ticketExternal_id := jsonResponse.StringOf('ticket.external_id');
ticketViaChannel := jsonResponse.StringOf('ticket.via.channel');
ticketViaSourceRel := jsonResponse.StringOf('ticket.via.source.rel');
ticketCreated_at := jsonResponse.StringOf('ticket.created_at');
ticketUpdated_at := jsonResponse.StringOf('ticket.updated_at');
ticketType := jsonResponse.StringOf('ticket.type');
ticketSubject := jsonResponse.StringOf('ticket.subject');
ticketRaw_subject := jsonResponse.StringOf('ticket.raw_subject');
ticketDescription := jsonResponse.StringOf('ticket.description');
ticketPriority := jsonResponse.StringOf('ticket.priority');
ticketStatus := jsonResponse.StringOf('ticket.status');
ticketRecipient := jsonResponse.StringOf('ticket.recipient');
ticketRequester_id := jsonResponse.IntOf('ticket.requester_id');
ticketSubmitter_id := jsonResponse.IntOf('ticket.submitter_id');
ticketAssignee_id := jsonResponse.IntOf('ticket.assignee_id');
ticketOrganization_id := jsonResponse.IntOf('ticket.organization_id');
ticketGroup_id := jsonResponse.IntOf('ticket.group_id');
ticketForum_topic_id := jsonResponse.StringOf('ticket.forum_topic_id');
ticketProblem_id := jsonResponse.StringOf('ticket.problem_id');
ticketHas_incidents := jsonResponse.BoolOf('ticket.has_incidents');
ticketIs_public := jsonResponse.BoolOf('ticket.is_public');
ticketDue_at := jsonResponse.StringOf('ticket.due_at');
ticketSatisfaction_rating := jsonResponse.StringOf('ticket.satisfaction_rating');
ticketBrand_id := jsonResponse.IntOf('ticket.brand_id');
ticketAllow_channelback := jsonResponse.BoolOf('ticket.allow_channelback');
auditId := jsonResponse.IntOf('audit.id');
auditTicket_id := jsonResponse.IntOf('audit.ticket_id');
auditCreated_at := jsonResponse.StringOf('audit.created_at');
auditAuthor_id := jsonResponse.IntOf('audit.author_id');
auditMetadataSystemIp_address := jsonResponse.StringOf('audit.metadata.system.ip_address');
auditMetadataSystemLocation := jsonResponse.StringOf('audit.metadata.system.location');
auditMetadataSystemLatitude := jsonResponse.IntOf('audit.metadata.system.latitude');
auditMetadataSystemLongitude := jsonResponse.IntOf('audit.metadata.system.longitude');
auditViaChannel := jsonResponse.StringOf('audit.via.channel');
auditViaSourceRel := jsonResponse.StringOf('audit.via.source.rel');
i := 0;
count_i := jsonResponse.SizeOfArray('ticket.collaborator_ids');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.follower_ids');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.email_cc_ids');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.tags');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.custom_fields');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.sharing_agreement_ids');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.fields');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('ticket.followup_ids');
while i < count_i do
  begin
    jsonResponse.I := i;
    i := i + 1;
  end;

i := 0;
count_i := jsonResponse.SizeOfArray('audit.events');
while i < count_i do
  begin
    jsonResponse.I := i;
    id := jsonResponse.IntOf('audit.events[i].id');
    type := jsonResponse.StringOf('audit.events[i].type');
    author_id := jsonResponse.IntOf('audit.events[i].author_id');
    body := jsonResponse.StringOf('audit.events[i].body');
    html_body := jsonResponse.StringOf('audit.events[i].html_body');
    plain_body := jsonResponse.StringOf('audit.events[i].plain_body');
    public := jsonResponse.BoolOf('audit.events[i].public');
    audit_id := jsonResponse.IntOf('audit.events[i].audit_id');
    value := jsonResponse.StringOf('audit.events[i].value');
    field_name := jsonResponse.StringOf('audit.events[i].field_name');
    viaChannel := jsonResponse.StringOf('audit.events[i].via.channel');
    viaSourceFromDeleted := jsonResponse.BoolOf('audit.events[i].via.source.from.deleted');
    viaSourceFromTitle := jsonResponse.StringOf('audit.events[i].via.source.from.title');
    viaSourceFromId := jsonResponse.IntOf('audit.events[i].via.source.from.id');
    viaSourceRel := jsonResponse.StringOf('audit.events[i].via.source.rel');
    subject := jsonResponse.StringOf('audit.events[i].subject');
    j := 0;
    count_j := jsonResponse.SizeOfArray('audit.events[i].attachments');
    while j < count_j do
      begin
        jsonResponse.J := j;
        j := j + 1;
      end;

    j := 0;
    count_j := jsonResponse.SizeOfArray('audit.events[i].recipients');
    while j < count_j do
      begin
        jsonResponse.J := j;
        intVal := jsonResponse.IntOf('audit.events[i].recipients[j]');
        j := j + 1;
      end;

    i := i + 1;
  end;

Sample JSON Response Body

{
  "ticket": {
    "url": "https://chilkat.zendesk.com/api/v2/tickets/7.json",
    "id": 7,
    "external_id": null,
    "via": {
      "channel": "api",
      "source": {
        "from": {},
        "to": {},
        "rel": null
      }
    },
    "created_at": "2018-04-15T18:13:15Z",
    "updated_at": "2018-04-15T18:13:15Z",
    "type": null,
    "subject": "My printer is on fire!",
    "raw_subject": "My printer is on fire!",
    "description": "The smoke is very colorful.",
    "priority": null,
    "status": "open",
    "recipient": null,
    "requester_id": 361801727573,
    "submitter_id": 361801727573,
    "assignee_id": 361801727573,
    "organization_id": 360015071793,
    "group_id": 360000681553,
    "collaborator_ids": [
    ],
    "follower_ids": [
    ],
    "email_cc_ids": [
    ],
    "forum_topic_id": null,
    "problem_id": null,
    "has_incidents": false,
    "is_public": true,
    "due_at": null,
    "tags": [
    ],
    "custom_fields": [
    ],
    "satisfaction_rating": null,
    "sharing_agreement_ids": [
    ],
    "fields": [
    ],
    "followup_ids": [
    ],
    "brand_id": 360000471533,
    "allow_channelback": false
  },
  "audit": {
    "id": 391248331553,
    "ticket_id": 7,
    "created_at": "2018-04-15T18:13:15Z",
    "author_id": 361801727573,
    "metadata": {
      "system": {
        "ip_address": "52.25.83.238",
        "location": "Boardman, OR, United States",
        "latitude": 45.86959999999999,
        "longitude": -119.688
      },
      "custom": {}
    },
    "events": [
      {
        "id": 391248331653,
        "type": "Comment",
        "author_id": 361801727573,
        "body": "The smoke is very colorful.",
        "html_body": "<div class=\"zd-comment\"><p dir=\"auto\">The smoke is very colorful.</p></div>",
        "plain_body": "The smoke is very colorful.",
        "public": true,
        "attachments": [
        ],
        "audit_id": 391248331553
      },
      {
        "id": 391248331833,
        "type": "Create",
        "value": "My printer is on fire!",
        "field_name": "subject"
      },
      {
        "id": 391248331973,
        "type": "Create",
        "value": "361801727573",
        "field_name": "requester_id"
      },
      {
        "id": 391248332053,
        "type": "Create",
        "value": "open",
        "field_name": "status"
      },
      {
        "id": 391248332193,
        "type": "Create",
        "value": null,
        "field_name": "priority"
      },
      {
        "id": 391248332313,
        "type": "Create",
        "value": null,
        "field_name": "type"
      },
      {
        "id": 391248332353,
        "type": "Create",
        "value": "361801727573",
        "field_name": "assignee_id"
      },
      {
        "id": 391248332373,
        "type": "Create",
        "value": "360000681553",
        "field_name": "group_id"
      },
      {
        "id": 391248332393,
        "type": "Create",
        "value": "360015071793",
        "field_name": "organization_id"
      },
      {
        "id": 391248332413,
        "type": "Notification",
        "via": {
          "channel": "rule",
          "source": {
            "from": {
              "deleted": false,
              "title": "Notify requester of received request",
              "id": 360018516913
            },
            "rel": "trigger"
          }
        },
        "subject": "[Request received] {{ticket.title}}",
        "body": "Your request ({{ticket.id}}) has been received and is being reviewed by our support staff.\n\nTo add additional comments, reply to this email.\n\n{{ticket.comments_formatted}}",
        "recipients": [
          361801727573
        ]
      },
      {
        "id": 391248332433,
        "type": "Notification",
        "via": {
          "channel": "rule",
          "source": {
            "from": {
              "deleted": false,
              "title": "Notify all agents of received request",
              "id": 360018517033
            },
            "rel": "trigger"
          }
        },
        "subject": "[{{ticket.account}}] {{ticket.title}}",
        "body": "A ticket (#{{ticket.id}}) by {{ticket.requester.name}} has been received. It is unassigned.\n\n{{ticket.comments_formatted}}",
        "recipients": [
          361801727573
        ]
      }
    ],
    "via": {
      "channel": "api",
      "source": {
        "from": {},
        "to": {},
        "rel": null
      }
    }
  }
}