ブロックタイプの検出
統合ブロックタイプエンドポイント
GET /api/tenant/{tenantId}/project/{projectId}/block/types/all
単一のAPIコールで利用可能なすべてのブロックタイプ(フィルター、計算機、エンリッチメント)を検出します。この統合エンドポイントは、mindzieStudioで利用可能なすべての分析機能の完全な情報を取得する推奨方法です。
統合エンドポイントを使う理由
統合エンドポイントは、個別のカテゴリエンドポイントをクエリするよりもいくつかの利点があります:
- 単一リクエスト: 複数のリクエストをせずに、すべてのブロックタイプを1回のAPIコールで取得
- 完全なメタデータ: カテゴリ固有のエンドポイントでは取得できないエンリッチメントを含む
- グループ化されたレスポンス: ブロックカテゴリ別に結果が整理されているため処理が簡単
- 豊富なメタデータ: 各ブロックタイプにドキュメントURL、利用ノート、関連ブロックが含まれる
- AI統合: AIコーディングアシスタントやMCPサーバー連携に最適化
リクエスト
GET /api/tenant/{tenantId}/project/{projectId}/block/types/all
Authorization: Bearer {token}
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
tenantId |
GUID | はい | テナント識別子 |
projectId |
GUID | はい | プロジェクト識別子 |
レスポンス
レスポンス構造
{
"BlockTypes": [...],
"Categories": ["属性フィルター", "時間フィルター", "計算機", ...],
"TotalCount": 45,
"ByBlockCategory": {
"Filter": [...],
"Calculator": [...],
"Enrichment": [...]
}
}
レスポンスフィールド
| フィールド | 型 | 説明 |
|---|---|---|
BlockTypes |
配列 | 完全なメタデータを含むすべてのブロックタイプ |
Categories |
配列 | すべての一意のカテゴリリスト |
TotalCount |
整数 | 利用可能なブロックタイプの総数 |
ByBlockCategory |
オブジェクト | Filter/Calculator/Enrichment に分類されたブロックタイプ |
ブロックタイプオブジェクト
BlockTypes 配列の各ブロックタイプには以下が含まれます:
| フィールド | 型 | 説明 |
|---|---|---|
OperatorName |
文字列 | ブロックタイプの一意識別子(例:"CaseAttributeFilter") |
DisplayName |
文字列 | UIに表示される表示名 |
Description |
文字列 | ブロックの機能の簡単な説明 |
Category |
文字列 | 機能カテゴリ(例:"属性フィルター"、"時間フィルター") |
BlockType |
文字列 | 大分類:"Filter"、"Calculator"、または "Enrichment" |
DocumentationUrl |
文字列 | このブロックタイプのドキュメントページURL |
UsageFrequency |
文字列 | 利用頻度("High", "Medium", "Low") |
ExcludeFromOrFilter |
ブール値 | OR条件での利用可否 |
AutoTitleEnabled |
ブール値 | 自動タイトル生成の対応可否 |
SupportedDisplayTypes |
配列 | サポートされる結果の可視化タイプ |
UsageNotes |
文字列 | 利用時の追加ガイダンス |
RelatedBlocks |
配列 | 関連するブロックタイプのリスト |
CommonUseCases |
配列 | 典型的な利用シナリオ |
レスポンス例
{
"BlockTypes": [
{
"OperatorName": "CaseAttributeFilter",
"DisplayName": "ケース属性フィルター",
"Description": "顧客タイプ、地域、優先度レベルなどの属性値に基づいてケースをフィルタリングします",
"Category": "属性フィルター",
"BlockType": "Filter",
"DocumentationUrl": "/mindzie_studio/filters/case-attribute-filter",
"UsageFrequency": "High",
"ExcludeFromOrFilter": false,
"AutoTitleEnabled": true,
"SupportedDisplayTypes": ["table", "chart"],
"UsageNotes": "完全一致、部分一致、正規表現パターンに対応",
"RelatedBlocks": ["EventAttributeFilter", "CaseIdFilter"],
"CommonUseCases": [
"顧客セグメントによるフィルタリング",
"特定の地域にフォーカス",
"優先度の高いケースの分析"
]
},
{
"OperatorName": "CaseDurationCalculator",
"DisplayName": "ケース期間計算機",
"Description": "ケースの開始から終了までの総期間を計算します",
"Category": "時間計算機",
"BlockType": "Calculator",
"DocumentationUrl": "/mindzie_studio/calculators/case-duration-calculator",
"UsageFrequency": "High",
"ExcludeFromOrFilter": false,
"AutoTitleEnabled": true,
"SupportedDisplayTypes": ["histogram", "table", "boxplot"],
"UsageNotes": "期間はプロジェクトで設定された時間単位で計算されます",
"RelatedBlocks": ["ActivityDurationCalculator", "WaitTimeCalculator"],
"CommonUseCases": [
"ケースのサイクルタイム分析",
"遅延ケースの特定",
"プロセス効率の比較"
]
},
{
"OperatorName": "CaseStageCalculator",
"DisplayName": "ケースステージ計算機",
"Description": "アクティビティのパターンやルールに基づきケースにステージラベルを割り当てます",
"Category": "ステージ分析",
"BlockType": "Enrichment",
"DocumentationUrl": "/mindzie_studio/enrichments/case-stage-calculator",
"UsageFrequency": "Medium",
"ExcludeFromOrFilter": false,
"AutoTitleEnabled": true,
"SupportedDisplayTypes": ["sankey", "table"],
"UsageNotes": "ステージ定義の設定が必要です",
"RelatedBlocks": ["CaseStatusEnrichment", "MilestoneDetector"],
"CommonUseCases": [
"ケースのステージ進捗追跡",
"ボトルネックステージの特定",
"ステージ遷移の監視"
]
}
],
"Categories": [
"属性フィルター",
"時間フィルター",
"アクティビティフィルター",
"時間計算機",
"カウント計算機",
"ステージ分析",
"データエンリッチメント"
],
"TotalCount": 45,
"ByBlockCategory": {
"Filter": [
{ "OperatorName": "CaseAttributeFilter", "DisplayName": "ケース属性フィルター", ... },
{ "OperatorName": "DateRangeFilter", "DisplayName": "日付範囲フィルター", ... }
],
"Calculator": [
{ "OperatorName": "CaseDurationCalculator", "DisplayName": "ケース期間計算機", ... }
],
"Enrichment": [
{ "OperatorName": "CaseStageCalculator", "DisplayName": "ケースステージ計算機", ... }
]
}
}
JavaScript例
// 利用可能なすべてのブロックタイプを検出
async function discoverAllBlockTypes(tenantId, projectId, token) {
const response = await fetch(
`/api/tenant/${tenantId}/project/${projectId}/block/types/all`,
{
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
if (!response.ok) {
throw new Error(`ブロックタイプの検出に失敗しました: ${response.status}`);
}
const data = await response.json();
console.log(`検出されたブロックタイプ数: ${data.TotalCount}`);
console.log(`- フィルター: ${data.ByBlockCategory.Filter.length}`);
console.log(`- 計算機: ${data.ByBlockCategory.Calculator.length}`);
console.log(`- エンリッチメント: ${data.ByBlockCategory.Enrichment.length}`);
return data;
}
// カテゴリごとにブロックタイプを取得
function getBlockTypesByCategory(allTypes, category) {
return allTypes.BlockTypes.filter(bt => bt.Category === category);
}
// 利用頻度が高いブロックタイプを取得
function getHighUsageBlockTypes(allTypes) {
return allTypes.BlockTypes.filter(bt => bt.UsageFrequency === 'High');
}
// 使用例
const blockTypes = await discoverAllBlockTypes(tenantId, projectId, token);
const timeFilters = getBlockTypesByCategory(blockTypes, '時間フィルター');
const popular = getHighUsageBlockTypes(blockTypes);
Python例
import requests
from typing import Dict, List, Any
class BlockTypeDiscovery:
def __init__(self, base_url: str, tenant_id: str, project_id: str, token: str):
self.base_url = base_url
self.tenant_id = tenant_id
self.project_id = project_id
self.headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
def discover_all(self) -> Dict[str, Any]:
"""利用可能なすべてのブロックタイプを検出"""
url = f"{self.base_url}/api/tenant/{self.tenant_id}/project/{self.project_id}/block/types/all"
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def get_filters(self) -> List[Dict]:
"""すべてのフィルターブロックタイプを取得"""
data = self.discover_all()
return data.get('ByBlockCategory', {}).get('Filter', [])
def get_calculators(self) -> List[Dict]:
"""すべての計算機ブロックタイプを取得"""
data = self.discover_all()
return data.get('ByBlockCategory', {}).get('Calculator', [])
def get_enrichments(self) -> List[Dict]:
"""すべてのエンリッチメントブロックタイプを取得"""
data = self.discover_all()
return data.get('ByBlockCategory', {}).get('Enrichment', [])
def find_by_use_case(self, keyword: str) -> List[Dict]:
"""ユースケースキーワードにマッチするブロックタイプを検索"""
data = self.discover_all()
results = []
for block_type in data['BlockTypes']:
use_cases = block_type.get('CommonUseCases', [])
if any(keyword.lower() in uc.lower() for uc in use_cases):
results.append(block_type)
return results
# 利用例
discovery = BlockTypeDiscovery(
'https://your-mindzie-instance.com',
'tenant-guid',
'project-guid',
'your-auth-token'
)
# すべてのブロックタイプを検出
all_types = discovery.discover_all()
print(f"ブロックタイプの総数: {all_types['TotalCount']}")
# カテゴリごとにブロックタイプ取得
filters = discovery.get_filters()
calculators = discovery.get_calculators()
enrichments = discovery.get_enrichments()
# 期間分析向けブロックタイプを検索
duration_blocks = discovery.find_by_use_case('duration')
カテゴリ別エンドポイント
ほとんどのユースケースには統合エンドポイントが推奨されますが、カテゴリ別エンドポイントも利用可能です:
| エンドポイント | 説明 |
|---|---|
GET /block/types?category=filters |
フィルターのみ |
GET /block/types?category=calculators |
計算機のみ |
GET /block/types/{operatorName} |
単一ブロックタイプの詳細 |
GET /block/types/{operatorName}/schema |
ブロックタイプの設定スキーマ |
MCPサーバー連携
AIコーディングアシスタントはmindzieAPIのMCPサーバーを使ってプログラム的にブロックタイプを検出できます:
mindzie_list_block_types category="unified"
このMCPツール呼び出しは同じ統合レスポンスを返し、AIツールがすべての利用可能な分析機能を簡単に理解できます。
詳細はMCPサーバー連携のドキュメントをご覧ください。
ユースケース
動的UI構築
統合エンドポイントを使い、ブロックタイプ選択メニューに各オプションの完全な情報を表示。
AIによる分析支援
AIアシスタントが利用可能な分析機能を検出し、ユーザーの目標に基づき適切なブロックタイプを提案。
ドキュメント生成
すべてのブロックタイプとそのメタデータを反復処理して動的なドキュメントを生成。
機能監査
プロジェクトに利用可能なすべての分析機能を列挙し、完全なカバレッジを確認。