本文へ移動
cccskills
無料GitHub で公開

copilot-studio

Copilot Studio Standard エージェントを承認付き private API で初回プロビジョニングし、設定・外部トリガー追加・ニュース配信エージェント等を構築する。生成オーケストレーション(Generative Orchestration)モード一択。

インストール方法を見る

含まれるファイル(47)

  • SKILL.md22.6 KB
  • references/.env.example4.3 KB
  • references/build-reference.md25.8 KB
  • references/external-web-embed.md10.8 KB
  • references/market-research-deployment-guide.md13.0 KB
  • references/market-research-email-template.md12.4 KB
  • references/market-research-report.md32.6 KB
  • references/model-selection.md2.5 KB
  • references/standard-mcp-tools.md3.5 KB
  • references/transcript-analytics.md5.6 KB
  • references/trigger-patterns.md26.8 KB
  • references/trigger.md42.5 KB
  • references/troubleshooting.md27.3 KB
  • references/webchat-sdk-design-template.md20.4 KB
  • references/webchat-sdk-embed.md27.5 KB
  • references/webchat-sdk-light-templates.md10.0 KB
  • references/webchat-sdk-manual-auth.md9.4 KB
  • scripts/add_fic.py3.1 KB
  • scripts/analyze_bot.py4.1 KB
  • scripts/check_email_trigger_status.py4.7 KB
  • scripts/check_publish.py432 B
  • scripts/deploy_agent.py29.8 KB
  • scripts/deploy_email_trigger.py13.3 KB
  • scripts/deploy_news_agent.py27.0 KB
  • scripts/deploy_news_flow.py9.3 KB
  • scripts/deploy_website.py8.4 KB
  • scripts/fix_email_msgid.py13.2 KB
  • scripts/fix_email_reply.py15.2 KB
  • scripts/fix_email_trigger_v2.py10.0 KB
  • scripts/fix_email_trigger.py11.5 KB
  • scripts/generate_news_icon.py5.6 KB
  • scripts/provision_agent.py9.8 KB
  • scripts/set_agent_channels.py7.1 KB
  • scripts/set_agent_security.py3.8 KB
  • scripts/set_model.py11.6 KB
  • scripts/setup_email_trigger.py8.2 KB
  • scripts/setup_webchat_auth.py13.3 KB
  • scripts/standard_model_yaml.py3.2 KB
  • scripts/standard_tool_browser_runner.mjs14.8 KB
  • scripts/standard_tool_plan.py8.1 KB
  • scripts/trigger_contract.py2.1 KB
  • tests/test_provision_agent.py2.6 KB
  • tests/test_set_model.py4.5 KB
  • tests/test_standard_model_yaml.py2.2 KB
  • tests/test_standard_tool_browser_runner.mjs4.9 KB
  • tests/test_standard_tool_plan.py4.2 KB
  • tests/test_trigger_contract.py4.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Copilot Studio エージェント構築スキル

Copilot Studio エージェントを 生成オーケストレーション(Generative Orchestration)モード一択 で構築する。 外部トリガー・ニュース配信エージェント等の応用パターンまでカバーする統合スキル。

構築を始める前に: admin スキル で環境チェックと DLP 事前チェックを実行する。 エージェントが使うコネクタ(Dataverse / カスタムコネクタ / MCP Server 等)が DLP でブロックされていたり、 Business / Non-business が混在していると、公開時に「data loss prevention policy によりブロック」となり ツール構成からやり直しになる。

サブリファレンス(必要に応じて参照)

リファレンス内容
admin スキル(環境・DLP チェック)構築前の環境チェックと DLP 事前チェック、カスタムコネクタの DLP 分類変更
構築リファレンス構築手順の詳細・Instructions テンプレート・スクリプトコード
外部公開 WebChat SDK(標準)外部公開の標準パターン。BotFramework WebChat SDK で UI フルカスタマイズ・プログラム的メッセージ送信
外部公開デザインテンプレート(標準 UI)標準 UI デザイン:左パネル(カテゴリ別カード+プロンプトチップス)+ 右 WebChat パネル(グラデーション枠・AI タイピング Tips)
ライトモード・テンプレート集ライトモード 5 レイアウト(workspace / minimal / hero-cards / dashboard / sidebar)+ 全テンプレート標準の**「新しい会話(初期化)」ボタン**(React 再マウント対策 freshWebchatEl())
外部公開 手動認証(SSO)Entra ID サインイン必須+ユーザー権限で Dataverse アクセス(RLS/OBO)。2 アプリ登録・FIC(シークレットレス)・OAuth カードの silent トークン交換
外部公開 iframe(レガシー・非推奨)iframe で埋め込む簡易版。UI カスタマイズ不可のため標準では使わない。動作確認・PoC 用のみ
外部トリガーメール受信・Teams メッセージ・スケジュール等のトリガー追加
Standard MCP toolUI観測済みprivate APIによる承認付きMCP追加とread-back
Standard model selectionGPT component YAMLのモデル値をETag・SHA-256・承認plan付きで変更
トリガーパターントリガーの設定パターン集
トラブルシューティングトリガー関連を中心とした異常系・トラブルシューティング
ニュース配信エージェントRSS + Web検索 + Work IQ MCP によるニュース収集・配信エージェント構築
ニュース配信デプロイガイドニュース配信エージェントのデプロイ手順
ニュース配信メールテンプレートニュース配信メールの HTML テンプレート
トランスクリプト分析会話トランスクリプトの分析パターン(ボット識別・ユーザー識別)

事前確認(会話の最初に 1 回だけ)

本スキルの利用が確定したら、standard の共通契約に加え、 1 回の AskUserQuestion で次をまとめて確認する。

#質問合格条件
1v1 が必要な利用形態かCode Apps 連携、WebChat、外部トリガー等の v1 採用理由が明確である
2対象環境で作成・公開できるかCopilot Studio の必要ライセンス / capacity と maker / publish 権限がある
3channel と audience は何かTeams / M365 Copilot / Web、internal / external / anonymous、公開担当者が確定している
4認証とデータアクセスは何かMicrosoft 認証 / manual auth / none、Dataverse RLS、接続所有者を承認済みである
5knowledge、MCP、trigger、外部文章を使うか接続権限、送信データ、prompt injection 対策、実害操作の確認方法が確定している
6エージェント設計とテスト範囲は承認済みかInstructions、モデル、ツール、アイコン、テストユーザー、期待応答を記録している

外部公開で AGENT_AUTH_MODE=none を使う場合は、匿名アクセスで公開してよいデータと操作を 明示承認する。ライセンス、認証方式、公開対象のいずれかが未確認なら公開しない。

外部公開 Web サイト開発フロー(必須)

外部公開は WebChat UI(BotFramework WebChat SDK)を標準とする。 iframe 埋め込みは UI カスタマイズができないためレガシー扱いとし、PoC・動作確認以外では使わない。

WebChat UI のデザインは既存のデザインテンプレートを再利用する (新規にゼロからデザインを起こさない):

フロー:

  1. 前提: エージェントを「認証なし」で公開しておく (set_agent_security.py を AGENT_AUTH_MODE=none で実行 → 公開)。 WebChat SDK は「認証なし」エージェントの DirectLine トークンで匿名接続する。
  2. 既存デザインテンプレートのレイアウト構成 + カテゴリ/プロンプト案をユーザーに提示
  3. ユーザー承認
  4. website/index.html を既存テンプレートベースで実装(WebChat SDK 埋め込み)
  5. カテゴリ・プロンプト・Tips・カラーを案件に合わせて調整
  6. py scripts/deploy_website.py で Azure Storage にデプロイ

⚠️ 「認証なし」の設定は 構築リファレンスの Step 7-8 の 3 スクリプト分離フロー(構築 → セキュリティ → チャネル)に従うこと。認証モードを設定せず 公開すると UI 既定の Microsoft 認証 になり、WebChat SDK が匿名接続できない。

前提: 設計フェーズ完了後に構築に入る(必須)

エージェントを構築する前に、エージェント設計をユーザーに提示し承認を得ていること。

設計提示時に含める内容:

項目内容
エージェント名・説明名前と役割の説明
Instructions指示テキストの全文案
推奨プロンプト3〜5 個のタイトル+プロンプト文(GPT コンポーネントの conversationStarters)
会話の開始のメッセージエージェントに合った挨拶テキスト(ConversationStart トピックの SendActivity)
会話の開始のクイック返信3〜5 個のクイック返信テキスト(ConversationStart トピックの quickReplies)
ナレッジデータソース(Dataverse テーブル / SharePoint / ファイル等)
ツールMCP Server の接続先・用途
チャネル公開設定簡単な説明・詳細な説明・背景色・開発者名(デフォルト値を提案)
フロー: 設計提示 → ユーザー承認 → アイコン画像提案 → ユーザー選択 → UI で Bot 作成 → スクリプトで設定適用

アイコン画像提案(設計承認後・構築前)

アイコンの設計・生成・登録の詳細は standard スキルの アイコン作成リファレンス を参照。 ここではエージェント固有の手順のみ記載する。

エージェント設計が承認されたら、Bot 作成前にアイコン画像を提案する。 standard スキルの アイコン作成リファレンス のアイコン画像提案フローに従い、3〜4 パターンを提案 → ユーザー選択 → PNG 3 サイズ生成(240, 192, 32)→ bots.iconbase64 + Teams マニフェストに API 登録。

大前提: 一つのソリューション内に開発

Dataverse テーブル・Code Apps・Power Automate フロー・Copilot Studio エージェントは すべて同一のソリューション内 に含める。

SOLUTION_NAME=SampleSolution  ← .env で定義。全フェーズで同じ値を使用
PUBLISHER_PREFIX=geek              ← ソリューション発行者の prefix
  • API ヘッダーに MSCRM.SolutionName: {SOLUTION_NAME} を付けることでソリューション内に作成

認証: Python スクリプトの認証は standard スキルの auth_helper.py を使用。 from auth_helper import get_token, get_session, api_get, api_post, api_patch で利用する。

  • Bot 作成時(Copilot Studio UI)は「エージェント設定」でソリューションを明示的に選択
  • ソリューション外で作成したコンポーネントはリリース管理・環境間移行ができない

必須要件

ツールにする Power Automate フローは kind: VirtualAgent(★ 検証済み教訓 2026-10-09)

エージェントのツールとして追加する Power Automate フローは、 トリガー・応答ともに kind: "VirtualAgent" でなければならない。

❌ トリガー "kind": "PowerAppV2" / 応答 "kind": "PowerApp"
   → フローのデプロイ・有効化は成功し Power Automate UI にも出るが、
     「ツールを追加 → フロー」の一覧に**一切表示されない**

✅ トリガー {"type": "Request",  "kind": "VirtualAgent"}
✅ 応答     {"type": "Response", "kind": "VirtualAgent"}
応答 schema は PowerApp 応答と形式が違う:
  ✅ プロパティは title + x-ms-dynamically-added のみ
  ❌ x-ms-content-hint / additionalProperties は付けない

★ フローを再デプロイすると workflow ID が変わる
  → 追加済みのツールは参照切れになるので削除 → 再追加する

実装の詳細は power-automate スキルの trigger-action-patterns.md 「Copilot Studio トリガー(VirtualAgent)」を参照。

Bot 作成は観測済みcontractで承認付き自動化

❌ name / schemanameだけの Dataverse bots INSERT
   → PVA Bot Management Service にプロビジョニングされない
   → Copilot Studio UI で「エージェントの作成中に問題が発生しました」エラー
   → botroutinginfo が 404 になる

✅ scripts/provision_agent.py plan でUI観測済みcontractとSHA-256を生成
✅ 承認したhashでapplyし、template/configuration/iconを含むPOSTを1回だけ実行
✅ componenttype 9(topic)と15(GPT)のread-back後に設定変更へ進む

GPT コンポーネント(componenttype=15)の扱い

  1. UI が作成したコンポーネントを特定して更新する

    • bots(id)?$select=configuration → configuration.gPTSettings.defaultSchemaName で UI コンポーネントの schemaname を取得
    • API で新しい GPT コンポーネントを INSERT すると UI と API で別々のコンポーネントが存在し、UI は自分のコンポーネントしか読まない
  2. configuration を PATCH する際は既存値をディープマージする

    • configuration を丸ごと上書きすると gPTSettings.defaultSchemaName やモデル設定が消える
    • 必ず GET → ディープマージ → PATCH
    • optInUseLatestModels は明示的に False を設定 — True だと UI で選択した基盤モデル(Claude Sonnet 等)が GPT に強制変更される
    • aISettings も丸ごと上書きせずディープマージで既存のモデル選択を保持
  3. 余分な GPT コンポーネントは削除する

    • componenttype eq 15 で全取得 → defaultSchemaName と一致するものを UI コンポーネントとして特定 → それ以外を削除

指示(Instructions)の YAML 形式 — PVA ダブル改行フォーマット

PVA パーサーは標準 YAML のシングル改行 (\n) を構造行として認識しない。 YAML の構造行(kind, displayName, conversationStarters 等)はダブル改行 (\n\n) で区切る必要がある。 ただし instructions: |- ブロック内のテキストはシングル改行で記述する。

# ✅ 正しい構築方法
def _build_gpt_yaml():
    # instructions ブロック(シングル改行)
    inst_block = "\n".join(f"  {line}" for line in GPT_INSTRUCTIONS.splitlines())

    # conversationStarters(ダブル改行)
    starter_lines = []
    for p in PREFERRED_PROMPTS:
        starter_lines.append(f"  - title: {p['title']}")
        starter_lines.append(f"    text: {p['text']}")
    starters_block = "\n\n".join(starter_lines)

    return (
        "kind: GptComponentMetadata\n\n"
        f"displayName: {BOT_NAME}\n\n"
        f"instructions: |-\n{inst_block}\n\n"
        f"conversationStarters:\n\n{starters_block}\n\n"
    )
❌ yaml.dump() → PVA パーサーと非互換
❌ 全行シングル改行 → conversationStarters / quickReplies が UI に反映されない
❌ 全行ダブル改行 → instructions テキストが空行だらけになる
❌ conversationStarters の title/text をダブルクォートで囲む → PVA に反映されない
✅ 構造行はダブル改行、instructions ブロック内はシングル改行
✅ conversationStarters の title/text はクォートなし
✅ displayName キーを含める(UI が表示に使用)
✅ instructions 内で単一波括弧 {変数名} を使わない → PVA が Power Fx 式として解釈し IdentifierNotRecognized エラー。自然言語で記述する

ConversationStart トピックの YAML 形式

ConversationStart トピック(componenttype=9)も同じダブル改行フォーマット。

lines = []
lines.append("kind: AdaptiveDialog")
lines.append("beginDialog:")
lines.append("  kind: OnConversationStart")
lines.append("  id: main")
lines.append("  actions:")
lines.append("    - kind: SendActivity")
lines.append(f"      id: {send_id}")
lines.append("      activity:")
lines.append("        text:")
lines.append(f"          - {greeting_text}")  # クォートなし
lines.append("        speak:")
lines.append(f'          - "{greeting_text}"')
lines.append("        quickReplies:")
for qr in QUICK_REPLIES:
    lines.append(f"          - kind: MessageBack")
    lines.append(f"            text: {qr}")
# ダブル改行で結合
new_data = "\n\n".join(lines) + "\n\n"
❌ シングル改行 → 送信ノードが消え、quickReplies が UI に反映されない
❌ 挨拶テキストに生改行 \n を含める → YAML が壊れる(スペースに置換する)
✅ 全行ダブル改行で結合
✅ actions 配下は 4 スペースインデント

基盤モデル選択(aISettings)

PVA は GPT コンポーネントの data YAML 末尾に基盤モデル情報を格納する:

aISettings:
  model:
    modelNameHint: Sonnet46

GPT コンポーネントの data を上書きすると、この aISettings セクションが消えて デフォルトモデル(GPT 4.1)に戻る。モデル変更はset_model.pyでplanを作り、承認したhashだけをapplyする。

python scripts/set_model.py show --bot-id $env:BOT_ID
python scripts/set_model.py plan --bot-id $env:BOT_ID --model $env:AGENT_MODEL_NAME
python scripts/set_model.py apply --expected-hash <承認したSHA-256>
❌ GPT data を丸ごと上書き → 基盤モデルがデフォルトに戻る
❌ componentが複数あるときに先頭を更新 → UI所有componentとずれる
✅ configuration.gPTSettings.defaultSchemaNameで所有componentを特定。無い場合はGPT componentが1件のときだけ続行
✅ 元YAML hashとETagを承認planへ束縛し、modelNameHint以外を保持
✅ PATCH後にYAML全体hashとmodelNameHintをread-back。反映には再公開が必要

説明(Description)の保存場所

❌ YAML 内の description キー → UI が読まない
❌ bot エンティティの description プロパティ → 存在しない
✅ botcomponents テーブルの description カラム

注意: data PATCH の非同期処理が description を上書きする
→ 対策: publish 後に description を別途 PATCH する

構築手順

詳細な構築手順・スクリプトコードは 構築リファレンス を参照。

設計承認と同時に並行着手(VS Code サブエージェント): Phase 1 の設計承認後、Dataverse 構築を待たずに 本トラック(Copilot Studio)を並行して開始できる。VS Code では Copilot Studio サブエージェントとして起動する。 先行工程(テーブル不要) = Bot 作成 → 生成オーケストレーション有効化 → Instructions 設定(Step 0–4)は Dataverse 構築と完全に並行で進められる。以下は Dataverse/Power Automate の完了を待つ同期点:

  • ★同期①(テーブル作成完了後) — Dataverse をソースにするナレッジ/MCP の追加(Step 9)。
  • ★同期②(フロー作成完了後) — Power Automate フローをツール化する連携。

全体のトラック分割・オーケストレーションは standard §8「開発フロー全体図」 を参照。

高レベルの手順:

  1. Step 0: provision_agent.pyでplan生成・hash承認・Botプロビジョニング
  2. Step 1-1.5: Bot 検索 + プロビジョニング完了待ち
  3. Step 2: カスタムトピック削除(システムトピック保護)
  4. Step 3: 生成オーケストレーション有効化
  5. Step 4: set_model.pyでmodel plan生成・hash承認・apply
  6. Step 5-5.5: Instructions + 会話の開始設定
  7. Step 6-7: エージェント公開 + 説明設定(deploy_agent.py はここまで)
  8. Step 8: セキュリティ(認証モード)設定 → 公開(set_agent_security.py)
  9. Step 9: チャネル選択(Web/Teams/Copilot)→ 公開(set_agent_channels.py)
  10. Step 10: Standard MCP toolを承認付きprivate APIで追加。connector tool・ナレッジ・トリガーは各contractに従う

⚠️ 「公開」処理は 3 スクリプトに分離する(一体化禁止)

セキュリティ設定 → 公開 → チャネル選択 → 公開 を 1 本のスクリプトにまとめると、 認証モードを設定し忘れて UI 既定の Microsoft 認証 で公開され、Web 埋め込みができなくなる。 必ず以下の順で実行する:

順スクリプト役割主な .env
1provision_agent.py承認付き初回プロビジョニングAGENT_NAME, BOT_SCHEMA, AGENT_LANGUAGE, SOLUTION_NAME
2set_model.py承認付き基盤モデル設定BOT_ID, AGENT_MODEL_NAME
3deploy_agent.py構築(Instructions等)+公開BOT_ID または AGENT_NAME
4set_agent_security.py認証モード設定→公開AGENT_AUTH_MODE(none / microsoft)
5set_agent_channels.pyチャネル選択→公開AGENT_CHANNELS(web,teams,copilot)

Copilot Studio v1 の bots.authenticationmode: 1=認証なし(Web 埋め込み必須)/2=Microsoft で認証(UI 既定・Teams)。 認証変更は公開後に反映される。

Instructions テンプレート・既存エージェント改善パターンは 構築リファレンス を参照。

.env 必須項目

全パラメータの定義(取得元コメント付き)は references/.env.example を参照。 実値はリポジトリルートの .env に置く(.gitignore 済み)。

DATAVERSE_URL=https://{org}.crm.dynamics.com/
SOLUTION_NAME=SolutionName
PUBLISHER_PREFIX=prefix
AGENT_NAME=AgentName
AGENT_LANGUAGE=1041
BOT_SCHEMA=prefix_AgentName
BOT_ID=https://copilotstudio.../bots/xxxxxxxx-xxxx-.../overview
# ↑ Copilot Studio URL をそのまま貼り付け可。GUID だけでも OK
AGENT_MODEL_NAME=Sonnet46

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

admin

無料日本語概要

Power Platform のテナント / 環境ガバナンスを確認・設定する管理スキル。開発着手前の環境チェック(既定環境ではないか・マネージド環境・Dataverse / Code Apps / MCP の有効化・セキュリティ ロール・管理 API アクセス)と DLP 事前チェックを非対話スクリプトで実行し、必要ならマネージド環境設定・カスタムコネクタの DLP 分類・ACP(Advanced connector policies)の許可コネクタを dry-run 付きで変更する。Microsoft 第一者サービスだけを許可する ACP 推奨プロファイルの適用と、クラシック DLP から ACP への移行も支援する。クラシック DLP と ACP は既定の混成モードで併用され、より制限の厳しい方が適用されるため両方を確認する。オプションとして、既定環境 / 個人開発者環境 / 市民開発者環境 / AI CoE セントラル / AI CoE 内製開発の 5 グループからなるテナント全体の環境戦略を、読み取り専用スキャン → 移行プラン(admin-migration-plan.md)→ レビュー → 適用の順で策定・実行する。設定は環境グループのルールで行うのを原則とし、グループ ルールに無い項目(既定環境ルーティング・Dataverse for Teams 禁止・Dataverse 検索・グループへの割り当て・Copilot クレジット配分)だけをテナント設定・環境個別設定・Dataverse の組織設定で補う。IP 制限・テナント分離・監査ログ・ライセンス配分などの管理設定は references にまとめる。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

agent-flows

無料日本語概要

Copilot Studio 新 UI の Agent flows / Workflows を構築・公開・検証する。Dataverse レコード作成/更新トリガーから既存の発行済み Copilot Studio v2 を Agent ノードで呼ぶ標準経路、Code Apps との非同期要求/結果連携、および手動 Start + inline Agent の API ライフサイクル検証を扱う。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

agm-qa-authoring

無料日本語概要

株主総会の想定問答を、IR 抜粋(決算短信・説明資料・招集通知など)を根拠に下書きし、利用者の確認後に Dataverse の想定問答テーブルへ「下書き」として登録するスキル。 Use when ユーザーが「配当について想定問答を作って」「この論点の想定問答を 3 件追加して」「招集通知から想定問答を作って」「想定問答を登録して」と依頼したとき。 Dataverse MCP コネクタ(describe / read_query / search_data / create_record / update_record)を使用する。削除・テーブル変更のツールは使わない。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

agm-qa-review

無料日本語概要

株主総会の想定問答を点検し、根拠の IR 抜粋に無い数値・存在しない根拠 ID・回答者や注意事項の抜け・趣旨の重複・下書きのまま残っているものを一覧にするスキル(書き込みはしない)。 Use when ユーザーが「想定問答を点検して」「根拠の無い数値が無いか確認して」「下書きの想定問答を一覧にして」と依頼したとき。 Dataverse MCP コネクタ(describe / read_query / search_data)を使用する。書き込み・削除のツールは使わない。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

agm-rehearsal-script

無料日本語概要

株主総会の質疑応答のリハーサル台本(議長・株主・回答役員の読み上げ原稿)を、承認済みの想定問答から作り、Dataverse のリハーサル台本テーブルへ登録するスキル。 Use when ユーザーが「リハーサルの台本を作って」「QA-001〜QA-010 で読み上げ原稿を作って」「番号を言わない株主も入れた台本を作って」と依頼したとき。 Dataverse MCP コネクタ(describe / read_query / search_data / create_record / update_record)を使用する。削除・テーブル変更のツールは使わない。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

ai-builder

無料日本語概要

AI Builder の AI プロンプト(GPT Dynamic Prompt)を Dataverse API で作成し、Copilot Studio エージェントにツール(アクション)として追加する。Power Automate フローとの統合パターンも含む。

geekfujiwara/CodeAppsDevelopmentStandard722026年10月9日 更新

geekfujiwara のスキルをすべて見る

このスキルの問題を報告する