Create Ticket
One script reply has been approved by the moderators Verified

Create Ticket

Created by hugo697 844 days ago Picked 4 times
Submitted by hugo697 Typescript (fetch-only)
Verified 298 days ago
1
type Zendesk = {
2
  username: string;
3
  password: string;
4
  subdomain: string;
5
};
6
/**
7
 * Create Ticket
8
 * Create Ticket
9
 */
10
export async function main(
11
  auth: Zendesk,
12
  body: {
13
    ticket?: {
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
          commodo_7f?: string;
66
          dolore6b?: number;
67
          [k: string]: unknown;
68
        };
69
        plain_body?: string;
70
        public?: string;
71
        type?: string;
72
        uploads?: string[];
73
        via?: {
74
          channel?: string;
75
          source?: { anim3?: number; [k: string]: unknown };
76
          [k: string]: unknown;
77
        };
78
        [k: string]: unknown;
79
      };
80
      custom_fields?: string;
81
      custom_status_id?: string;
82
      due_at?: string;
83
      email_cc_ids?: string;
84
      email_ccs?: {
85
        action?: string;
86
        user_email?: string;
87
        user_id?: string;
88
        user_name?: string;
89
        [k: string]: unknown;
90
      }[];
91
      external_id?: string;
92
      follower_ids?: string;
93
      followers?: {
94
        action?: string;
95
        user_email?: string;
96
        user_id?: string;
97
        [k: string]: unknown;
98
      }[];
99
      group_id?: string;
100
      macro_ids?: string;
101
      organization_id?: string;
102
      priority?: string;
103
      problem_id?: string;
104
      raw_subject?: string;
105
      recipient?: string;
106
      requester_id?: string;
107
      safe_update?: string;
108
      sharing_agreement_ids?: string[];
109
      status?: string;
110
      subject?: string;
111
      submitter_id?: string;
112
      tags?: string;
113
      ticket_form_id?: string;
114
      type?: string;
115
      updated_stamp?: string;
116
      via?: {
117
        channel?: string;
118
        source?: {
119
          from?: {
120
            address?: string;
121
            id?: string;
122
            name?: string;
123
            title?: string;
124
            [k: string]: unknown;
125
          };
126
          rel?: string;
127
          to?: { address?: string; name?: string; [k: string]: unknown };
128
          [k: string]: unknown;
129
        };
130
        [k: string]: unknown;
131
      };
132
      via_followup_source_id?: string;
133
      [k: string]: unknown;
134
    };
135
    [k: string]: unknown;
136
  }
137
) {
138
  const url = new URL(`https://${auth.subdomain}.zendesk.com/api/v2/tickets`);
139

140
  const response = await fetch(url, {
141
    method: "POST",
142
    headers: {
143
      "Content-Type": "application/json",
144
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
145
    },
146
    body: JSON.stringify(body),
147
  });
148
  if (!response.ok) {
149
    const text = await response.text();
150
    throw new Error(`${response.status} ${text}`);
151
  }
152
  return await response.json();
153
}
154