Creates a new Zendesk ticket with an attachment. The file attachment is indicated by an array of attachment tokens contained within the comment. (The attachment should be uploaded beforehand, and the token can be obtained from the JSON response of the attachment file upload.)
curl -X POST https://subdomain.zendesk.com/api/v2/tickets.json \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"ticket": {
"subject": "My application crashed. Please help.",
"comment": { "body": "Here is a screen shot", "uploads": ["W7Y11FCxfQlzOFPDbVDUEE45C"] }
}
}' \
-u zendesk_email:zendesk_password
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;
url: WideString;
file_name: WideString;
content_url: WideString;
mapped_content_url: WideString;
content_type: WideString;
size: Integer;
width: WideString;
height: WideString;
inline: Integer;
k: Integer;
count_k: 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 application crashed. Please help.');
json.UpdateString('ticket.comment.body','Here is a screen shot');
json.UpdateString('ticket.comment.uploads[0]','W7Y11FCxfQlzOFPDbVDUEE45C');
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;
url := jsonResponse.StringOf('audit.events[i].attachments[j].url');
id := jsonResponse.IntOf('audit.events[i].attachments[j].id');
file_name := jsonResponse.StringOf('audit.events[i].attachments[j].file_name');
content_url := jsonResponse.StringOf('audit.events[i].attachments[j].content_url');
mapped_content_url := jsonResponse.StringOf('audit.events[i].attachments[j].mapped_content_url');
content_type := jsonResponse.StringOf('audit.events[i].attachments[j].content_type');
size := jsonResponse.IntOf('audit.events[i].attachments[j].size');
width := jsonResponse.StringOf('audit.events[i].attachments[j].width');
height := jsonResponse.StringOf('audit.events[i].attachments[j].height');
inline := jsonResponse.BoolOf('audit.events[i].attachments[j].inline');
k := 0;
count_k := jsonResponse.SizeOfArray('audit.events[i].attachments[j].thumbnails');
while k < count_k do
begin
jsonResponse.K := k;
k := k + 1;
end;
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;
{
"ticket": {
"url": "https://chilkat.zendesk.com/api/v2/tickets/11.json",
"id": 11,
"external_id": null,
"via": {
"channel": "api",
"source": {
"from": {},
"to": {},
"rel": null
}
},
"created_at": "2018-04-15T20:29:49Z",
"updated_at": "2018-04-15T20:29:49Z",
"type": null,
"subject": "My application crashed. Please help.",
"raw_subject": "My application crashed. Please help.",
"description": "Here is a screen shot",
"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": 391509606014,
"ticket_id": 11,
"created_at": "2018-04-15T20:29:49Z",
"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": 391509606034,
"type": "Comment",
"author_id": 361801727573,
"body": "Here is a screen shot",
"html_body": "<div class=\"zd-comment\"><p dir=\"auto\">Here is a screen shot</p></div>",
"plain_body": "Here is a screen shot",
"public": true,
"attachments": [
{
"url": "https://chilkat.zendesk.com/api/v2/attachments/360887735934.json",
"id": 360887735934,
"file_name": "sample.pdf",
"content_url": "https://chilkat.zendesk.com/attachments/token/Q7wAubpKB2KERnNFj89JmdvS1/?name=sample.pdf",
"mapped_content_url": "https://chilkat.zendesk.com/attachments/token/Q7wAubpKB2KERnNFj89JmdvS1/?name=sample.pdf",
"content_type": "application/pdf",
"size": 178399,
"width": null,
"height": null,
"inline": false,
"thumbnails": [
]
}
],
"audit_id": 391509606014
},
{
"id": 391509606394,
"type": "Create",
"value": "My application crashed. Please help.",
"field_name": "subject"
},
{
"id": 391509606414,
"type": "Create",
"value": "361801727573",
"field_name": "requester_id"
},
{
"id": 391509606434,
"type": "Create",
"value": "open",
"field_name": "status"
},
{
"id": 391509606454,
"type": "Create",
"value": null,
"field_name": "priority"
},
{
"id": 391509606474,
"type": "Create",
"value": null,
"field_name": "type"
},
{
"id": 391509606494,
"type": "Create",
"value": "361801727573",
"field_name": "assignee_id"
},
{
"id": 391509606514,
"type": "Create",
"value": "360000681553",
"field_name": "group_id"
},
{
"id": 391509606534,
"type": "Create",
"value": "360015071793",
"field_name": "organization_id"
},
{
"id": 391509606554,
"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": 391509606574,
"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
}
}
}
}