チケットの作成・更新時にファイルを添付する


パフォーマンス上の理由から、現在エンタープライズプランのお客様のみ添付ファイルのアップロードAPIを利用可能です。

チケットの作成時にファイルを添付するには、以下の2つのステップで実装します。

  1. 添付ファイルをアップロード: ファイルをkickflowのファイルアップロードAPIに送信し、署名済みIDを取得します。
  2. チケットを作成: 取得した署名済み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;
}

Copyright © 2025 kickflow, Inc.