日本時間5月16日のContent Cloud Summitで、カスタムアプリにBox AI APIを活用する方法を紹介します。

詳細を表示

Skillsカードのメタデータ

Skillsカードのメタデータ

処理サービスによってファイルのメタデータが特定されたら、アプリケーションはそのデータをBoxに保存されているファイルにメタデータとして書き戻すことができます。

このプロセスには、以下の手順が含まれます。

  1. スキルカードのメタデータの準備
  2. ファイルへのメタデータの書き込み

スキルカードのメタデータの準備

Skillsメタデータは、グローバルに利用可能なboxSkillsCardsという名前のメタデータテンプレートを使用します。このテンプレートは、関連ファイルに保存されるJSON構造の特定の形式に従います。

Boxでは現在、4種類のカードがサポートされています。

キーワードファイルの横にキーワードのリストを表示します。画像
タイムライン一連のテキスト/画像を表示します。それらの画像がタイムラインに表示される時刻は、クリックすると表示されます。画像
トランスクリプトトランスクリプトと、それに対応するタイムスタンプを表示します。画像
ステータスユーザーにステータスを表示します。これは、ファイルの処理中にスキルのステータスをユーザーに通知するために使用できます。

ファイルへのメタデータカードの書き込み

ファイルに1つ以上のカードを書き込むには、POST /files/:id/metadata/global/boxSkillsCards APIを使用して、Box Skill cardsのリストを渡します。

cURL
curl -X POST https://api.box.com/2.0/files/12345/metadata/global/boxSkillsCards \
     -H 'Authorization: Bearer <ACCESS_TOKEN>'
     -H 'Content-Type: application/json'
     -d '{
       "cards": [{
         "type": "skill_card",
         "skill_card_type": "keyword",
         "skill_card_title": {
           "code": "license-plates",
           "message": "Licence Plates"
         },
         "skill": {
           "type": "service"
           "id": "license-plates-service"
         },
         "invocation": {
           "type": "skill_invocation"
           "id": "license-plates-service-123"
         },
         "entries": {
           { "text": "DD-26-YT" },
           { "text": "DN86 BOX" }
         }
       }],
     }'
Node
const metadata = { 
  cards: [{
    "type": "skill_card",
    "skill_card_type": "keyword",
    "skill_card_title": {
      "code": "license-plates",
      "message": "Licence Plates"
    },
    "skill": {
      "type": "service"
      "id": "license-plates-service"
    },
    "invocation": {
      "type": "skill_invocation"
      "id": "license-plates-service-123"
    },
    "entries": {
      { "text": "DD-26-YT" },
      { "text": "DN86 BOX" }
    }
  }] 
}

client.files.addMetadata('12345', 'global', 'boxSkillsCards', metadata)
  .then(metadata => { 
    // ...
  })
Python
metadata = { 
  cards: [{
    "type": "skill_card",
    "skill_card_type": "keyword",
    "skill_card_title": {
      "code": "license-plates",
      "message": "Licence Plates"
    },
    "skill": {
      "type": "service"
      "id": "license-plates-service"
    },
    "invocation": {
      "type": "skill_invocation"
      "id": "license-plates-service-123"
    },
    "entries": {
      { "text": "DD-26-YT" },
      { "text": "DN86 BOX" }
    }
  }] 
}

client.file(file_id='12345').metadata(scope='global', template='boxSkillsCards').create(metadata)
Java
BoxFile file = new BoxFile(api, "12345");
Metadata metadata = new Metadata()
file.createMetadata("global", "boxSkillsCards", metadata);
.NET
var metadataValues = new Dictionary<string, object>()
{ 
  cards: [{
    "type": "skill_card",
    "skill_card_type": "keyword",
    "skill_card_title": {
      "code": "license-plates",
      "message": "Licence Plates"
    },
    "skill": {
      "type": "service"
      "id": "license-plates-service"
    },
    "invocation": {
      "type": "skill_invocation"
      "id": "license-plates-service-123"
    },
    "entries": {
      { "text": "DD-26-YT" },
      { "text": "DN86 BOX" }
    }
  }] 
};
Dictionary<string, object> metadata = await client.MetadataManager
    .CreateFileMetadataAsync(fileId: "12345", metadataValues, "global", "boxSkillsCards");

Box Skillカードがすでにこのファイルに適用されている場合は、このAPIコールによって、HTTPステータスコード409と共にエラーが返されます。

ファイルのメタデータカードの更新

Box Skillカードがすでにファイルに適用されている場合、PUT /files/:id/metadata/global/boxSkillsCards APIを使用して更新することができます。このAPIは、実行する多数の操作 (op) を受け取り、各操作を使用すると、特定の位置 (path) のカードを置き換えることができます。

cURL
curl -X PUT https://api.box.com/2.0/files/12345/metadata/global/boxSkillsCards \
     -H 'Authorization: Bearer <ACCESS_TOKEN>'
     -H 'Content-Type: application/json-patch+json'
     -d '[
       "op": "replace",
       "path": "/cards/0",
       "value": {
         "type": "skill_card",
         "skill_card_type": "keyword",
         "skill_card_title": {
           "code": "license-plates",
           "message": "Licence Plates"
         },
         "skill": {
           "type": "service"
           "id": "license-plates-service"
         },
         "invocation": {
           "type": "skill_invocation"
           "id": "license-plates-service-123"
         },
         "entries": {
           { "text": "DD-26-YT" },
           { "text": "DN86 BOX" }
         }
       }
     ]'
Node
const updates = [
  { 
    'op': 'replace', 
    'path': '/cards/0',
    'value': {
      "type": "skill_card",
      "skill_card_type": "keyword",
      "skill_card_title": {
        "code": "license-plates",
        "message": "Licence Plates"
      },
      "skill": {
        "type": "service"
        "id": "license-plates-service"
      },
      "invocation": {
        "type": "skill_invocation"
        "id": "license-plates-service-123"
      },
      "entries": {
        { "text": "DD-26-YT" },
        { "text": "DN86 BOX" }
      }
    }
  }
]

client.files.updateMetadata('12345', 'global', 'boxSkillsCards', updates)
  .then(metadata => { 
    // ...
  })
Python
file_metadata = client.file(file_id='12345').metadata(scope='global', template='boxSkillsCards')

card = {
  "type": "skill_card",
  "skill_card_type": "keyword",
  "skill_card_title": {
    "code": "license-plates",
    "message": "Licence Plates"
  },
  "skill": {
    "type": "service"
    "id": "license-plates-service"
  },
  "invocation": {
    "type": "skill_invocation"
    "id": "license-plates-service-123"
  },
  "entries": {
    { "text": "DD-26-YT" },
    { "text": "DN86 BOX" }
  }
}


updates = file_metadata.start_update()
updates.replace('/cards/0', card)
file_metadata.update(updates)
Java
BoxFile file = new BoxFile(api, "12345");
Metadata metadata = new Metadata()
file.updateMetadata("global", "boxSkillsCards", metadata);
.NET
var card = new Dictionary<string, object>()
{
  "type": "skill_card",
  "skill_card_type": "keyword",
  "skill_card_title": {
    "code": "license-plates",
    "message": "Licence Plates"
  },
  "skill": {
    "type": "service"
    "id": "license-plates-service"
  },
  "invocation": {
    "type": "skill_invocation"
    "id": "license-plates-service-123"
  },
  "entries": {
    { "text": "DD-26-YT" },
    { "text": "DN86 BOX" }
  }
};
var updates = new List<BoxMetadataUpdate>()
{
    new BoxMetadataUpdate()
    {
        Op = MetadataUpdateOp.replace,
        Path = "/cards/0",
        Value = card
    }
};
Dictionary<string, object> updatedMetadata = await client.MetadataManager
    .UpdateFileMetadataAsync("12345", updates, "global", "boxSkillsCards");