Zendesk ํ™œ์šฉํ•˜๊ธฐ

๐Ÿ“Œ API ๊ธฐ๋Šฅ URL

  • Ticket ๋ฒˆํ˜ธ๋กœ json ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
https://support.๋„๋ฉ”์ธ.com/api/v2/tickets/{ticket_id}.json

ex) https://support. ๋„๋ฉ”์ธ .com/api/v2/tickets/849.jsonโ€‹
  • ํ‹ฐ์ผ“ ์ƒ์„ฑ
https://support. ๋„๋ฉ”์ธ .com/api/v2/requests.json
  •  ์ฒจ๋ถ€ ํŒŒ์ผ
https://๋„๋ฉ”์ธ.zendesk .com/api/v2/attachments/{attachment_id}.json
  •  ํ‹ฐ์ผ“์—์„œ attachment_id ์–ป๊ธฐ
/api/v2/tickets/{ticket_id}/comments

์—ฌ๋Ÿฌ ์ฒจ๋ถ€ํŒŒ์ผ : https://support. ๋„๋ฉ”์ธ .com/api/v2/tickets/2341/comments

 

๐Ÿ“Œ Zendesk

1. ์—ฐ๋™์— ํ•„์š”ํ•œ API ํ† ํฐ ์ƒ์„ฑ

 

  • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ : https:// ๋„๋ฉ”์ธ .zendesk.com/admin

 

2. ํ‹ฐ์ผ“ ์ƒ์„ฑ

 

๊ณต์‹ ๋ฌธ์„œ : https://developer.zendesk.com/api-reference/ticketing/tickets/ticket-requests/

  • ์š”์ฒญ url : ๋„๋ฉ”์ธ/api/v2/requests
  • json ํŒŒ์ผ ํ™•์ธ : https://support.๋„๋ฉ”์ธ.com/api/v2/requests.json
  • ํ‹ฐ์ผ“ ํ™•์ธ : https://support. ๋„๋ฉ”์ธ .com/api/v2/tickets/{ticket_id}.json
// ์‚ฌ์šฉ ์˜ˆ์‹œ

fetch("https://support. ๋„๋ฉ”์ธ .com/api/v2/requests.json", {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Basic " + btoa("๊ณ„์ •/token:ํ† ํฐ๊ฐ’")
                },
                body: JSON.stringify(requestData)
            }

 

3. ํ•„๋“œ ์ˆ˜์ •

๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ํ•„๋“œ ์ˆ˜์ • ๊ฐ€๋Šฅ

 : https:// ๋„๋ฉ”์ธ .zendesk.com/admin/objects-rules/tickets/ticket-fields 

 

4. ๋‹ค๊ตญ์–ด ์‚ฌ์šฉ

  • handlebars : ๊ฐ ํƒœ๊ทธ ๋ณ„๋กœ ์–ธ์–ด ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ•จ
handlebars ์‚ฌ์šฉ ์˜ˆ์‹œ
<h2>
  {{#is help_center.locale "ko"}}
     ๋ฌธ์˜ ๋“ฑ๋ก
  {{else}}Inquiry Registration
  {{/is}}
</h2>
  • ๋™์  ์ฝ˜ํ…์ธ  ํ™œ์šฉ

๋™์  ์ฝ˜ํ…์ธ  ํ™œ์šฉ : https://๋„๋ฉ”์ธ.zendesk.com/admin/workspaces/agent-workspace/dynamic_content 

  1. Zendesk Guide ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์ ‘์†
  2. ์„ค์ •(Settings) → Locale ์„ ํƒ
  3. ๋ฒˆ์—ญ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
new_request_page.hbs์—์„œ ๋™์  ์ฝ˜ํ…์ธ  ์‚ฌ์šฉ ์˜ˆ์‹œ
{{dc "์ฝ˜ํ…์ธ ๋ช…"}}
ex) 
{{dc "Zendesk_Help_Center_isPrivacyConsent"}}

[Chatgpt ์ธ์šฉ]

 

๐Ÿ“Œ Zendesk์˜ new_request_page์—์„œ ์ž๋™ ๋ฒˆ์—ญ ๊ฐ€๋Šฅํ• ๊นŒ?

 

โœ… ์ •๋‹ต: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™ ๋ฒˆ์—ญ์€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ์–ธ์–ด๋ณ„๋กœ ํผ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•จ.
Zendesk์—๋Š” ์ž๋™ ๋ฒˆ์—ญ ์‹œ์Šคํ…œ(Google Translate, DeepL ๋“ฑ)์ด ๊ธฐ๋ณธ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Œ, ๋”ฐ๋ผ์„œ new_request_page์˜ form๋„ ์ž๋™ ๋ฒˆ์—ญ์ด ๋˜์ง€ ์•Š์Œ.

โœ… ๋Œ€์‹  Zendesk๋Š” ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•จ:

  1. Zendesk์˜ ๋ฒˆ์—ญ ์‹œ์Šคํ…œ({{t}} ํ—ฌํผ)๋ฅผ ํ™œ์šฉํ•ด ์–ธ์–ด๋ณ„ ํผ์„ ์ž๋™ ๋ณ€ํ™˜

Zendesk Guide์—์„œ๋Š” {{t}} ํ—ฌํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, Zendesk์—์„œ ์„ค์ •ํ•œ ๋ฒˆ์—ญ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์ž๋™ ๋ณ€ํ™˜๋จ.


5. ์ฒจ๋ถ€ํŒŒ์ผ

 

๊ณต์‹ ๋ฌธ์„œ : https://developer.zendesk.com/api-reference/ticketing/tickets/ticket-attachments/

  • ์š”์ฒญ : ๋„๋ฉ”์ธ/api/v2/uploads
  • ํ‹ฐ์ผ“ ํ™•์ธ : https://support. ๋„๋ฉ”์ธ .com/api/v2/tickets/{ticket_id}.json
    • /api/v2/tickets/{ticket_id}/comments
    • /api/v2/attachments/{attachment_id}.json
  • ํŒŒ์ผ์€ ํ˜•์‹์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  file ๊ทธ๋Œ€๋กœ fetchํ•˜์—ฌ ์ „์†กํ•œ๋‹ค
  • ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ ๋งˆ๋‹ค token์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์‹(async/await) ์‚ฌ์šฉ

 

*) ์•„๋ž˜๋Š” ์ฒจ๋ถ€ ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ ๋ฌธ์ œ๋˜์—ˆ๋˜ ์ด๋ ฅ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.


์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๊ณผ์ •

 

[ ์˜ค๋ฅ˜ ]
file์„ fetch๋กœ ์ „์†ก ์‹œ body์— form-data๋กœ ๋„ฃ์œผ๋ฉด ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ๊นจ์ง
file ๊ทธ ์ž์ฒด๋กœ ์ธ์‹ํ•ด์•ผํ•จ

> ์˜ค๋ฅ˜ ์ƒ์„ธ ๋‚ด์šฉ

ํŒŒ์ผ์€ ์—…๋กœ๋“œ๊ฐ€ ๋˜๋Š”๋ฐ ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ๊นจ์ง

- content-type์ด multipart/form-data๋กœ ๋“ค์–ด๊ฐ€ ์žˆ์Œ

   file.type : image/png

- upload ๋ ๋•Œ

[ ํ•ด๊ฒฐ ]

API ํ…Œ์ŠคํŠธ : Postman API ํ…Œ์ŠคํŠธ ์ง„ํ–‰

์ผ๋ฐ˜ ํŒŒ์ผ์„ ์ง์ ‘ ์„ ํƒํ•ด์„œ api ์ „์†ก ์‹œ ์„ฑ๊ณต ํ™•์ธ

fetch ์‹œ ํŒŒ์ผ ๊ทธ๋Œ€๋กœ๋กœ ์„ค์ •

fetch() {

    method: "POST",

    headers: {"Authorization": "Basic " + btoa("๊ณ„์ •/token:ํ† ํฐ"),                     },

    body: file

}

 

์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ์ผ ์—…๋กœ๋“œ

ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ ๋งˆ๋‹ค token์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์‹(async/await) ์‚ฌ์šฉ

// ์ œ์ถœํ•˜๊ธฐ(ํ•„๋“œ)
document.getElementById("inquiryForm").addEventListener("submit", async (event) => {
    event.preventDefault(); // ๊ธฐ๋ณธ ํผ ์ œ์ถœ ๋ฐฉ์ง€
    const files = document.querySelector("#fileInput").files || null; // ํŒŒ์ผ ์—†์„ ๊ฒฝ์šฐ null ์ฒ˜๋ฆฌ

    const uploadToken = await uploadFile(file); // ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ๋„ (์—†์œผ๋ฉด null ๋ฐ˜ํ™˜)

    createZendeskTicket(uploadToken); // ํŒŒ์ผ ์œ ๋ฌด ๊ด€๊ณ„์—†์ด ํ‹ฐ์ผ“ ์ƒ์„ฑ
});      
 
// ํŒŒ์ผ ์—…๋กœ๋“œ
async function uploadFile(file) {
    if (!file) return null; // ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์—…๋กœ๋“œ ์ƒ๋žต


    try {


        const uploadResponse = await fetch(`https://๋„๋ฉ”์ธ.zendesk.com/api/v2/uploads?filename=${encodeURIComponent(file.name)}`, {
            method: "POST",
            headers: {
                "Authorization": "Basic " + btoa("๊ณ„์ •/token:ํ† ํฐ"),
            },
            body: file
        });