app:
  description: 総務窓口向け 自動分類・振分ワークフロー。問い合わせをカテゴリ・担当部署・緊急度に分類し、適切に振り分けることで一次対応工数を削減する。
  icon: 📥
  icon_background: '#FFEAD5'
  mode: workflow
  name: 総務 問合せ 自動分類・振分
  use_icon_as_answer_icon: false
kind: app
version: 0.6.0
workflow:
  conversation_variables: []
  environment_variables: []
  features:
    file_upload:
      image:
        enabled: false
    opening_statement: ''
    suggested_questions: []
    suggested_questions_after_answer:
      enabled: false
    text_to_speech:
      enabled: false
  graph:
    edges:
    - data:
        sourceType: start
        targetType: parameter-extractor
      id: start-to-extract1
      source: start
      target: extract1
    - data:
        sourceType: parameter-extractor
        targetType: if-else
      id: extract1-to-ifelse1
      source: extract1
      target: ifelse1
    - data:
        sourceType: if-else
        targetType: llm
      id: ifelse1-true-to-llm_urgent
      source: ifelse1
      sourceHandle: 'true'
      target: llm_urgent
    - data:
        sourceType: if-else
        targetType: llm
      id: ifelse1-false-to-llm_normal
      source: ifelse1
      sourceHandle: 'false'
      target: llm_normal
    - data:
        sourceType: llm
        targetType: code
      id: llm_urgent-to-merge1
      source: llm_urgent
      target: merge1
    - data:
        sourceType: llm
        targetType: code
      id: llm_normal-to-merge1
      source: llm_normal
      target: merge1
    - data:
        sourceType: code
        targetType: end
      id: merge1-to-end
      source: merge1
      target: end
    nodes:
    - data:
        title: 開始
        type: start
        variables:
        - label: query
          max_length: 2048
          options: []
          required: true
          type: paragraph
          variable: query
      height: 90
      id: start
      position:
        x: 80
        y: 282
      type: custom
      width: 244
    - data:
        title: 情報抽出（カテゴリ・部署・緊急度）
        type: parameter-extractor
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.2
        query:
        - start
        - query
        parameters:
        - name: category
          type: string
          description: '問い合わせのカテゴリ（例: 給与、福利厚生、設備、契約、その他）'
          required: true
        - name: department
          type: string
          description: '推奨担当部署（例: 人事、総務（設備）、法務、経理）'
          required: true
        - name: urgency
          type: string
          description: '緊急度（例: 高/中/低、緊急、対応期限あり）'
          required: true
        reasoning_mode: prompt
        instruction: 以下の社員からの問い合わせテキストから、1) カテゴリ、2) 推奨担当部署、3) 緊急度 を抽出してください。出力は各項目をJSONのキーとして返すのではなく、Difyのparameter-extractorに従い個別フィールドとして抽出してください。カテゴリ・部署・緊急度が不明な場合は最も妥当と思われる値を推測してください。
      height: 90
      id: extract1
      position:
        x: 380
        y: 282
      type: custom
      width: 244
    - data:
        title: 緊急度判定
        type: if-else
        conditions:
        - comparison_operator: contains
          id: cond1
          value: 緊急
          variable_selector:
          - extract1
          - urgency
        - comparison_operator: contains
          id: cond2
          value: 高
          variable_selector:
          - extract1
          - urgency
        logical_operator: or
      height: 90
      id: ifelse1
      position:
        x: 680
        y: 282
      type: custom
      width: 244
    - data:
        title: 振分通知文（緊急）
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.4
        prompt_template:
        - role: system
          text: 'あなたは総務窓口のアシスタントです。与えられた問い合わせを受けて、迅速に関係部署へエスカレーションするための短い振分通知（1〜3文）を作成してください。出力には必ず以下の項目を含め、最後に『担当部署:
            ○○』を明記してください。


            必須項目: カテゴリ、推奨担当部署、緊急度、簡潔な対応指示（1〜2文）。


            緊急対応が必要な場合は、先にその旨を明記し、受信者がすぐに対応できるよう簡潔に指示してください。日本語で回答してください。


            ---


            【最終出力フォーマット (この指示が最優先)】

            最終出力は **読みやすい日本語の Markdown** で返してください。JSON

            配列・オブジェクトをそのまま出力してはいけません。

            - 見出し (## / ###) でセクションを区切る

            - リスト (- / 1.) や表 (| ... |) で構造化

            - 各項目の意図や根拠が分かるよう短い説明文を添える

            - 営業デモで顧客に直接見せられる体裁にする


            (構造化されたデータ項目を内部で扱うのは構いませんが、出力時に Markdown

            に変換してください。)'
        - role: user
          text: '元の問い合わせ:


            {{#start.query#}}


            抽出結果:

            カテゴリ: {{#extract1.category#}}

            担当部署（推奨）: {{#extract1.department#}}

            緊急度: {{#extract1.urgency#}}


            指示: 上記をもとに緊急対応向けの短い振分通知文を作成してください。'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm_urgent
      position:
        x: 980
        y: 282
      type: custom
      width: 244
    - data:
        title: 振分通知文（通常）
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.4
        prompt_template:
        - role: system
          text: 'あなたは総務窓口のアシスタントです。与えられた問い合わせを受けて、適切な担当部署へエスカレーションするための短い振分通知（1〜3文）を作成してください。出力には必ず以下の項目を含め、最後に『担当部署:
            ○○』を明記してください。


            必須項目: カテゴリ、推奨担当部署、緊急度、簡潔な対応指示（1〜2文）。


            緊急でない場合は、通常の優先度に従った対応指示を含めてください。日本語で回答してください。


            ---


            【最終出力フォーマット (この指示が最優先)】

            最終出力は **読みやすい日本語の Markdown** で返してください。JSON

            配列・オブジェクトをそのまま出力してはいけません。

            - 見出し (## / ###) でセクションを区切る

            - リスト (- / 1.) や表 (| ... |) で構造化

            - 各項目の意図や根拠が分かるよう短い説明文を添える

            - 営業デモで顧客に直接見せられる体裁にする


            (構造化されたデータ項目を内部で扱うのは構いませんが、出力時に Markdown

            に変換してください。)'
        - role: user
          text: '元の問い合わせ:


            {{#start.query#}}


            抽出結果:

            カテゴリ: {{#extract1.category#}}

            担当部署（推奨）: {{#extract1.department#}}

            緊急度: {{#extract1.urgency#}}


            指示: 上記をもとに通常対応向けの短い振分通知文を作成してください。'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm_normal
      position:
        x: 1280
        y: 282
      type: custom
      width: 244
    - data:
        title: 結果マージ
        type: code
        code_language: python3
        code: "def main(**kwargs) -> dict:\n    candidates = ['llm_text_0', 'llm_text_1']\n\
          \    text = ''\n    for name in candidates:\n        v = kwargs.get(name)\n\
          \        if v:\n            text = str(v)\n            break\n    return\
          \ {\n        'output': text,\n    }\n"
        variables:
        - value_selector:
          - llm_urgent
          - text
          variable: llm_text_0
        - value_selector:
          - llm_normal
          - text
          variable: llm_text_1
        outputs:
          output:
            type: string
            children: null
      height: 90
      id: merge1
      position:
        x: 1580
        y: 282
      type: custom
      width: 244
    - data:
        title: 終了
        type: end
        outputs:
        - value_selector:
          - merge1
          - output
          variable: result
      height: 90
      id: end
      position:
        x: 1880
        y: 282
      type: custom
      width: 244
  hash: null
