Create Many Tickets

Accepts an array of up to 100 ticket objects.

Script zendesk Verified

by hugo697 ยท 11/7/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 377 days ago
1
type Zendesk = {
2
  username: string;
3
  password: string;
4
  subdomain: string;
5
};
6
/**
7
 * Create Many Tickets
8
 * Accepts an array of up to 100 ticket objects.
9
 */
10
export async function main(
11
  auth: Zendesk,
12
  body: {
13
    tickets?: {
14
      additional_collaborators?: {
15
        email?: string;
16
        name?: string;
17
        [k: string]: unknown;
18
      }[];
19
      assignee_email?: string;
20
      assignee_id?: string;
21
      attribute_value_ids?: string[];
22
      brand_id?: string;
23
      collaborator_ids?: string;
24
      collaborators?: string;
25
      comment?: {
26
        attachments?: {
27
          content_type?: string;
28
          content_url?: string;
29
          deleted?: string;
30
          file_name?: string;
31
          height?: string;
32
          id?: string;
33
          inline?: string;
34
          malware_access_override?: string;
35
          malware_scan_result?: string;
36
          mapped_content_url?: string;
37
          size?: string;
38
          thumbnails?: {
39
            content_type?: string;
40
            content_url?: string;
41
            deleted?: string;
42
            file_name?: string;
43
            height?: string;
44
            id?: string;
45
            inline?: string;
46
            malware_access_override?: string;
47
            malware_scan_result?: string;
48
            mapped_content_url?: string;
49
            size?: string;
50
            url?: string;
51
            width?: string;
52
            [k: string]: unknown;
53
          }[];
54
          url?: string;
55
          width?: string;
56
          [k: string]: unknown;
57
        }[];
58
        audit_id?: string;
59
        author_id?: string;
60
        body?: string;
61
        created_at?: string;
62
        html_body?: string;
63
        id?: string;
64
        metadata?: {
65
          aliquip05?: boolean;
66
          consectetur_c?: number;
67
          ea7fe?: number;
68
          in_d97?: boolean;
69
          incididunt6da?: number;
70
          ipsum3e6?: number;
71
          minimf2b?: number;
72
          sit28?: number;
73
          [k: string]: unknown;
74
        };
75
        plain_body?: string;
76
        public?: string;
77
        type?: string;
78
        uploads?: string[];
79
        via?: {
80
          channel?: string;
81
          source?: {
82
            amet5b9?: boolean;
83
            nostrud_d48?: number;
84
            qui95c?: number;
85
            [k: string]: unknown;
86
          };
87
          [k: string]: unknown;
88
        };
89
        [k: string]: unknown;
90
      };
91
      custom_fields?: string;
92
      custom_status_id?: string;
93
      due_at?: string;
94
      email_cc_ids?: string;
95
      email_ccs?: {
96
        action?: string;
97
        user_email?: string;
98
        user_id?: string;
99
        user_name?: string;
100
        [k: string]: unknown;
101
      }[];
102
      external_id?: string;
103
      follower_ids?: string;
104
      followers?: {
105
        action?: string;
106
        user_email?: string;
107
        user_id?: string;
108
        [k: string]: unknown;
109
      }[];
110
      group_id?: string;
111
      macro_ids?: string;
112
      organization_id?: string;
113
      priority?: string;
114
      problem_id?: string;
115
      raw_subject?: string;
116
      recipient?: string;
117
      requester_id?: string;
118
      safe_update?: string;
119
      sharing_agreement_ids?: string[];
120
      status?: string;
121
      subject?: string;
122
      submitter_id?: string;
123
      tags?: string;
124
      ticket_form_id?: string;
125
      type?: string;
126
      updated_stamp?: string;
127
      via?: {
128
        channel?: string;
129
        source?: {
130
          from?: {
131
            address?: string;
132
            id?: string;
133
            name?: string;
134
            title?: string;
135
            [k: string]: unknown;
136
          };
137
          rel?: string;
138
          to?: { address?: string; name?: string; [k: string]: unknown };
139
          [k: string]: unknown;
140
        };
141
        [k: string]: unknown;
142
      };
143
      via_followup_source_id?: string;
144
      [k: string]: unknown;
145
    }[];
146
    [k: string]: unknown;
147
  }
148
) {
149
  const url = new URL(
150
    `https://${auth.subdomain}.zendesk.com/api/v2/tickets/create_many`
151
  );
152

153
  const response = await fetch(url, {
154
    method: "POST",
155
    headers: {
156
      "Content-Type": "application/json",
157
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
158
    },
159
    body: JSON.stringify(body),
160
  });
161
  if (!response.ok) {
162
    const text = await response.text();
163
    throw new Error(`${response.status} ${text}`);
164
  }
165
  return await response.json();
166
}
167