チケットの作成・更新時にファイルを添付する
パフォーマンス上の理由から、現在エンタープライズプランのお客様のみ添付ファイルのアップロードAPIを利用可能です。
チケットの作成時にファイルを添付するには、以下の2つのステップで実装します。
- 添付ファイルをアップロード: ファイルをkickflowのファイルアップロードAPIに送信し、署名済みIDを取得します。
- チケットを作成: 取得した署名済みIDを使って、チケットの作成APIにリクエストを送信します。
JavaScriptでの実装例を以下に示します。
/**
* 添付ファイルをアップロードし、その署名済みIDを使ってチケットを申請する
* @param {File} file - アップロードするファイル
* @param {string} workflowId - 申請するワークフローのID
* @param {string} authorTeamId - 申請者のチームID
* @param {string} fileFormFieldCode - ファイル添付用のフォームフィールドコード
* @returns {Promise<Object>} 作成されたチケットの詳細を含むPromise
*/
async function uploadFileAndCreateTicket(file, workflowId, authorTeamId, fileFormFieldCode) {
const API_BASE_URL = "https://api.kickflow.com/v1";
const ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"; // あなたのアクセストークンに置き換えてください
// 1. 添付ファイルをアップロード
console.log("ファイルをアップロード中...");
const fileUploadUrl = `${API_BASE_URL}/files`;
const fileFormData = new FormData();
fileFormData.append("file", file);
const fileUploadResponse = await fetch(fileUploadUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${ACCESS_TOKEN}`,
// 'Content-Type': 'multipart/form-data' はfetchが自動で設定します
},
body: fileFormData,
});
if (!fileUploadResponse.ok) {
const errorData = await fileUploadResponse.json();
throw new Error(`ファイルのアップロードに失敗しました: ${fileUploadResponse.status} - ${errorData.message}`);
}
const fileUploadData = await fileUploadResponse.json();
const signedId = fileUploadData.signedId;
console.log(`ファイルが正常にアップロードされました。署名済みID: ${signedId}`);
// 2. アップロードされたファイルの署名済みIDを使ってチケットを申請
console.log("チケットを申請中...");
const createTicketUrl = `${API_BASE_URL}/tickets`;
const ticketPayload = {
status: "in_progress", // または "draft"
workflowId: workflowId,
authorTeamId: authorTeamId,
inputs: [
{
formFieldCode: fileFormFieldCode,
files: [signedId], // アップロードしたファイルの署名済みIDを指定
},
// 他のフォームフィールドの入力が必要な場合はここに追加
// {
// formFieldCode: "your_text_field_code",
// value: "入力テキスト"
// },
// {
// formFieldCode: "your_checkbox_field_code",
// value: ["option1", "option2"]
// }
],
title: "添付ファイル付き申請テスト", // ワークフローの設定による
};
const createTicketResponse = await fetch(createTicketUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${ACCESS_TOKEN}`,
},
body: JSON.stringify(ticketPayload),
});
if (!createTicketResponse.ok) {
const errorData = await createTicketResponse.json();
throw new Error(`チケットの申請に失敗しました: ${createTicketResponse.status} - ${errorData.message}`);
}
const ticketData = await createTicketResponse.json();
console.log("チケットが正常に申請されました:", ticketData);
return ticketData;
}