{"site":"uranoWindowsApp","basePath":"","features":[{"area":"acs/call-automation","path":"/acs/call-automation","description":"Azure Communication Services Call Automation の検証エンドポイント群（発信 / 着信応答 / 再生 / DTMF 認識 / 保留 / 録音 (ACS / BYOS Blob) / Hang-up）","links":[{"title":"エリアランディング","path":"/acs/call-automation/","description":"ACS Call Automation 機能の入口","method":"GET"},{"title":"ヘルスチェック","path":"/acs/call-automation/api/health","description":"200 / 503 を返す簡易ヘルス (要 ACS_CONNECTION_STRING)","method":"GET"},{"title":"Media Streaming (双方向WS)","path":"/acs/call-automation/media-streaming/","description":"双方向 WebSocket のオウム返し検証。通話モードを選んでブラウザのマイクで話せる (実 ACS 不要)","method":"GET"},{"title":"購入済み電話番号一覧","path":"/acs/call-automation/api/phone-numbers","description":"GET — ACS リソースに購入済みの電話番号。UI の発信元 dropdown にも利用 (PhoneNumbersClient.GetPurchasedPhoneNumbersAsync)","method":"GET"},{"title":"発信 (アウトバウンド)","path":"/acs/call-automation/api/call/outbound","description":"POST { targetPhoneNumber, sourcePhoneNumber? } — sourcePhoneNumber 省略時は ACS 購入済み番号から自動選択","method":"POST"},{"title":"着信応答 (Event Grid)","path":"/acs/call-automation/api/call/incoming","description":"POST EventGrid IncomingCall を受け取り AnswerCallAsync","method":"POST"},{"title":"コールイベント受信","path":"/acs/call-automation/api/call/events","description":"POST Call Automation イベントコールバック","method":"POST"},{"title":"音声再生","path":"/acs/call-automation/api/call/{callConnectionId}/play","description":"POST { textToPlay, voiceName? }","method":"POST"},{"title":"DTMF 認識","path":"/acs/call-automation/api/call/{callConnectionId}/recognize","description":"POST { promptText?, maxDigits?, timeoutSeconds?, participantRawId? } — participantRawId 省略時は参加者一覧から自動選択","method":"POST"},{"title":"保留 (Hold)","path":"/acs/call-automation/api/call/{callConnectionId}/hold","description":"POST { participantRawId, holdPromptText?, voiceName? } — 指定参加者を保留 (任意で保留中の音声プロンプト)","method":"POST"},{"title":"保留解除 (Unhold)","path":"/acs/call-automation/api/call/{callConnectionId}/unhold","description":"POST { participantRawId } — 指定参加者の保留を解除","method":"POST"},{"title":"切断","path":"/acs/call-automation/api/call/{callConnectionId}/hangup","description":"POST","method":"POST"},{"title":"参加者一覧","path":"/acs/call-automation/api/call/{callConnectionId}/participants","description":"GET","method":"GET"},{"title":"コールプロパティ取得","path":"/acs/call-automation/api/call/{callConnectionId}","description":"GET — CallConnectionState / Source / Targets / AnsweredBy / ServerCallId / CorrelationId を一括で取得 (GetCallConnectionPropertiesAsync)","method":"GET"},{"title":"録音開始","path":"/acs/call-automation/api/call/{callConnectionId}/recording/start","description":"POST { storage: \"acs\"|\"blob\", blobContainerUri?, content?, format?, channel?, pauseOnStart? } — 保存先を ACS マネージド (48h 保持) or BYOS Azure Blob から選択","method":"POST"},{"title":"録音一時停止","path":"/acs/call-automation/api/recording/{recordingId}/pause","description":"POST","method":"POST"},{"title":"録音再開","path":"/acs/call-automation/api/recording/{recordingId}/resume","description":"POST","method":"POST"},{"title":"録音停止","path":"/acs/call-automation/api/recording/{recordingId}/stop","description":"POST","method":"POST"},{"title":"録音状態取得","path":"/acs/call-automation/api/recording/{recordingId}","description":"GET — 現在の RecordingState を取得","method":"GET"},{"title":"録音トラッカー一覧","path":"/acs/call-automation/api/recordings","description":"GET — サーバーのメモリ上で追跡中の録音一覧","method":"GET"},{"title":"録音ダウンロード","path":"/acs/call-automation/api/recording/download","description":"POST { contentLocation, saveAsFileName? } — ACS ストレージの録音を D:\\home\\data\\acs-recordings に保存","method":"POST"},{"title":"録音削除","path":"/acs/call-automation/api/recording","description":"DELETE { deleteLocation } — ACS ストレージの録音ファイルを削除","method":"DELETE"},{"title":"録音ファイルイベント","path":"/acs/call-automation/api/call/recording-files","description":"POST EventGrid (RecordingFileStatusUpdated) — ACS リソースの EventGrid サブスクリプション先","method":"POST"},{"title":"最近のイベント (観測用)","path":"/acs/call-automation/api/events/recent","description":"GET ?max=200 — /api/call/incoming, /api/call/events, /api/call/recording-files が受信した CloudEvent を raw JSON 付きで返す (in-memory ring buffer / 最大 200 件)","method":"GET"},{"title":"イベントバッファクリア","path":"/acs/call-automation/api/events/clear","description":"POST — ring buffer をクリア","method":"POST"},{"title":"直近の着信履歴","path":"/acs/call-automation/api/incoming-calls/recent","description":"GET ?max=50 — EventGrid IncomingCall を受けて応答した着信の代表項目 (from/to/correlationId/serverCallId/callConnectionId)","method":"GET"},{"title":"着信履歴クリア","path":"/acs/call-automation/api/incoming-calls/clear","description":"POST","method":"POST"},{"title":"Server Call ID 統計","path":"/acs/call-automation/api/server-call-id/stats","description":"GET ?max=50 — outbound/incoming/callback など各観測点で見た serverCallId の桁数分布・件数・直近サンプルを返す (in-memory ring buffer / 最大 200 件)","method":"GET"},{"title":"Server Call ID クリア","path":"/acs/call-automation/api/server-call-id/clear","description":"POST","method":"POST"}]},{"area":"acs/direct-routing","path":"/acs/direct-routing","description":"Azure Communication Services Direct Routing の検証エンドポイント群 (SIP Trunk / Voice Route の参照・設定)","links":[{"title":"エリアランディング","path":"/acs/direct-routing/","description":"Direct Routing 機能の入口 (JSON)","method":"GET"},{"title":"ヘルスチェック","path":"/acs/direct-routing/api/health","description":"200 / 503","method":"GET"},{"title":"Trunk 一覧","path":"/acs/direct-routing/api/trunks","description":"GET — 設定済み SIP Trunk 全件","method":"GET"},{"title":"Trunk 取得","path":"/acs/direct-routing/api/trunks/{fqdn}","description":"GET — 単一 Trunk","method":"GET"},{"title":"Trunk 作成/更新","path":"/acs/direct-routing/api/trunks","description":"PUT { fqdn, sipSignalingPort } — 1 件 upsert","method":"PUT"},{"title":"Trunks 一括上書き","path":"/acs/direct-routing/api/trunks/bulk","description":"PUT [{ fqdn, sipSignalingPort }, ...] — 配列で全置換","method":"PUT"},{"title":"Trunk 削除","path":"/acs/direct-routing/api/trunks/{fqdn}","description":"DELETE","method":"DELETE"},{"title":"Route 一覧","path":"/acs/direct-routing/api/routes","description":"GET — Voice Route 全件","method":"GET"},{"title":"Routes 一括上書き","path":"/acs/direct-routing/api/routes","description":"PUT [{ name, numberPattern, description?, trunks: [fqdn,...] }, ...]","method":"PUT"}]},{"area":"acs/email","path":"/acs/email","description":"Azure Communication Services Email の検証エンドポイント（SDK 経由の送信 / 状態取得 / Sender 確認、および /repeatable 配下の Raw REST + Repeatability ヘッダ検証）。","links":[{"title":"エリアランディング","path":"/acs/email/","description":"ACS Email 機能の入口","method":"GET"},{"title":"ヘルスチェック","path":"/acs/email/api/health","description":"200 / 503 を返す簡易ヘルス (要 ACS_CONNECTION_STRING)","method":"GET"},{"title":"送信元確認","path":"/acs/email/api/sender","description":"App Setting ACS_EMAIL_SENDER_ADDRESS の現在値を返す","method":"GET"},{"title":"メール送信 (SDK)","path":"/acs/email/api/send","description":"POST { to, cc?, bcc?, subject, plainText?, html?, senderAddress?, replyTo?, waitUntil? } — operationId を返却","method":"POST"},{"title":"送信状態取得","path":"/acs/email/api/messages/{operationId}","description":"GET — Status (NotStarted/Running/Succeeded/Failed/Canceled)","method":"GET"},{"title":"Repeatability 検証エリア","path":"/acs/email/repeatable/","description":"Raw REST で emails:send を叩き、Repeatability-Request-Id / -First-Sent 送信時の Repeatability-Result ヘッダの有無を API バージョン別に検証","method":"GET"},{"title":"Repeatability — 単発送信","path":"/acs/email/repeatable/api/send","description":"POST — 1 回だけ送信し、リクエスト/レスポンスヘッダを丸ごと返す","method":"POST"},{"title":"Repeatability — 二連送信","path":"/acs/email/repeatable/api/send-twice","description":"POST — 同じ Repeatability-Request-Id で 2 回送信し両レスポンスを比較","method":"POST"}]},{"area":"acs/job-router","path":"/acs/job-router","description":"Azure Communication Services Job Router の検証エンドポイント群 (Distribution Policy / Queue / Worker / Job / Offer)","links":[{"title":"エリアランディング","path":"/acs/job-router/","description":"Job Router 機能の入口 (JSON)","method":"GET"},{"title":"ヘルスチェック","path":"/acs/job-router/api/health","description":"200 / 503","method":"GET"},{"title":"DP 一覧","path":"/acs/job-router/api/distribution-policies","description":"GET — Distribution Policy 一覧","method":"GET"},{"title":"DP 作成/更新","path":"/acs/job-router/api/distribution-policies","description":"POST { id, name?, offerExpiresAfterSeconds?, mode? } — mode は longest-idle / round-robin / best-worker","method":"POST"},{"title":"Queue 一覧","path":"/acs/job-router/api/queues","description":"GET","method":"GET"},{"title":"Queue 作成/更新","path":"/acs/job-router/api/queues","description":"POST { id, name?, distributionPolicyId }","method":"POST"},{"title":"Worker 作成/更新","path":"/acs/job-router/api/workers","description":"POST { id, capacity, queueIds[], channels[{id, capacity}], availableForOffers? }","method":"POST"},{"title":"Worker 取得","path":"/acs/job-router/api/workers/{workerId}","description":"GET — state / offers / assignments を返す","method":"GET"},{"title":"Worker 受付更新","path":"/acs/job-router/api/workers/{workerId}/availability","description":"PATCH { availableForOffers } — 受付状態のみ更新し再取得で確認","method":"PATCH"},{"title":"Job 作成","path":"/acs/job-router/api/jobs","description":"POST { id, channelId, queueId, priority? }","method":"POST"},{"title":"Job 取得","path":"/acs/job-router/api/jobs/{jobId}","description":"GET — status / assignments を返す","method":"GET"},{"title":"Offer 受諾","path":"/acs/job-router/api/offers/accept","description":"POST { workerId, offerId }","method":"POST"},{"title":"Offer 拒否","path":"/acs/job-router/api/offers/decline","description":"POST { workerId, offerId }","method":"POST"},{"title":"Job 完了","path":"/acs/job-router/api/jobs/{jobId}/complete","description":"POST { assignmentId } — Worker の作業完了を通知","method":"POST"},{"title":"Job クローズ","path":"/acs/job-router/api/jobs/{jobId}/close","description":"POST { assignmentId, dispositionCode? } — Job をクローズ","method":"POST"},{"title":"クイックセットアップ","path":"/acs/job-router/api/setup","description":"POST — DP \"dp-default\" + Queue \"q-default\" をべき等に作成 (検証用ショートカット)","method":"POST"}]},{"area":"bot","path":"/bot","description":"Azure Bot SDK と Web Chat を使った簡単な会話 bot 検証アプリ","links":[{"title":"エリアランディング","path":"/bot/","description":"Azure Bot SDK + Web Chat 検証機能の一覧","method":"GET"},{"title":"Web Chat テスト","path":"/bot/web-chat","description":"ブラウザ上の Web Chat から bot と会話","method":"GET"},{"title":"構成診断 JSON","path":"/bot/api/config","description":"Bot app ID / Direct Line secret の有無を非シークレットで確認","method":"GET"},{"title":"Bot message endpoint","path":"/bot/messages","description":"Azure Bot の Messaging endpoint に設定する POST endpoint","method":"POST"}]},{"area":"diag-lab","path":"/diag-lab","description":"ダンプ採取 / Profiler Trace 採取の検証用に、意図的にメモリリーク・高 CPU・ハングを起こすシナリオを提供。各シナリオは ON/OFF できる。⚠️ プロセスメモリ・CPU をホストで実消費するため、検証完了後は必ず停止 (またはアプリ再起動) してください。","links":[{"title":"エリアランディング","path":"/diag-lab/","description":"DiagLab 検証の入口","method":"GET"},{"title":"プロセス / GC 状態","path":"/diag-lab/api/info","description":"GET — processId, machineName, GC (Server/Workstation, Gen0/1/2 count, TotalAllocated), Process (WorkingSet, PrivateMemory, HandleCount, ThreadCount), uptime","method":"GET"},{"title":"GC.Collect (Forced)","path":"/diag-lab/api/gc-collect","description":"POST ?generation=0|1|2 — Forced + compacting で GC を強制実行。before/after の TotalMemory を返却","method":"POST"},{"title":"Leak 開始 (Managed)","path":"/diag-lab/api/leak/start","description":"POST ?ratePerSec=1048576&maxMb=256&chunkKb=256 — 指定 rate で byte[] を内部 List に蓄積。chunkKb=85+ で LOH 行き。maxMb 到達で自動停止","method":"POST"},{"title":"Leak 停止","path":"/diag-lab/api/leak/stop","description":"POST ?keep=false — リーク停止 + バッファ解放 + GC.Collect。keep=true で保持のまま停止 (ダンプ用にメモリ握ったまま観察可能)","method":"POST"},{"title":"Leak 状態","path":"/diag-lab/api/leak/status","description":"GET — 走行中フラグ / 累積 byte / 累積 MB / WorkingSet / TotalManagedMemory","method":"GET"},{"title":"LOH 一括 allocate","path":"/diag-lab/api/leak/loh","description":"POST ?sizeMb=10&count=5 — 10MB のバッファを 5 個まとめて確保 (LOH に直行)","method":"POST"},{"title":"CPU Spin 開始","path":"/diag-lab/api/cpu/spin","description":"POST ?ms=10000&threads=N — N 本の Task で tight loop (Math.Sqrt)。ms で自動 Cancel","method":"POST"},{"title":"CPU Spin 停止","path":"/diag-lab/api/cpu/stop","description":"POST — 走行中の spin タスクをすべて Cancel","method":"POST"},{"title":"CPU Spin 状態","path":"/diag-lab/api/cpu/status","description":"GET — 走行中の spin タスク数 + ID 一覧","method":"GET"},{"title":"Hang 開始 (BG thread)","path":"/diag-lab/api/hang/start","description":"POST ?id=h1&ms=300000 — 背景 Task が ManualResetEventSlim.Wait でハング。id 省略で自動命名。/api/hang/release?id=... で解除","method":"POST"},{"title":"Hang 解除","path":"/diag-lab/api/hang/release","description":"POST ?id=h1 — 指定 id を Set。id 省略で全 hang を解除","method":"POST"},{"title":"Hang 一覧","path":"/diag-lab/api/hang/list","description":"GET — 現在ハング中の id, 開始時刻, maxMs, 経過秒","method":"GET"},{"title":"Hang (Request 内 Sleep)","path":"/diag-lab/api/hang/sync","description":"GET ?ms=10000 — request スレッドを Thread.Sleep でブロック (HTTP クライアントから見た 502 / Front-end timeout 再現)","method":"GET"}]},{"area":"entra-oauth","path":"/entra-oauth","description":"Microsoft Entra ID の OAuth 2.0 を生の HTTP 要求で実演する検証エリア（クライアント資格情報フロー / 認証コードフロー(PKCE) をトグル切替）。認証はこのエリア内だけで完結し、他ページは匿名アクセスのまま。","links":[{"title":"エリアランディング","path":"/entra-oauth/","description":"2 つのフローをトグル切替する入口","method":"GET"},{"title":"設定状態","path":"/entra-oauth/api/config","description":"tenant / client_id / redirect_uri などの設定状態（シークレット値は返さない）","method":"GET"},{"title":"Easy Auth 設定状態","path":"/entra-oauth/api/easy-auth","description":"GET — App Service authsettingsV2 の platform.enabled と provider 状態を表示","method":"GET"},{"title":"Easy Auth モード切替","path":"/entra-oauth/api/easy-auth","description":"POST { enabled, mode, controlKey } — Easy Auth 有効化 / Easy Auth x Application Gateway モード / 無効化を Portal 反映される形で更新","method":"POST"},{"title":"クライアント資格情報 — トークン取得","path":"/entra-oauth/api/client-credentials/token","description":"POST { scope? } — app-only アクセストークンを取得しクレームをデコード","method":"POST"},{"title":"認証コード — サインイン開始","path":"/entra-oauth/auth-code/start","description":"PKCE + state 付きで /authorize にリダイレクト","method":"GET"},{"title":"認証コード — コールバック","path":"/entra-oauth/auth-code/callback","description":"code を /token に引き換えてトークン/クレームを表示（リダイレクト先）","method":"GET"}]},{"area":"signalr","path":"/signalr","description":"Azure SignalR Service を使った Blazor Server 検証アプリ","links":[{"title":"エリアランディング","path":"/signalr/","description":"Azure SignalR + Blazor Server 検証機能の一覧","method":"GET"},{"title":"在庫ステータス ダッシュボード","path":"/signalr/blazor","description":"在庫更新、補充ワークフロー、オペレーション連絡のライブ反映を確認","method":"GET"},{"title":"構成診断 JSON","path":"/signalr/api/config","description":"接続文字列の有無と対象 Azure SignalR リソースを非シークレットで確認","method":"GET"}]},{"area":"status-codes","path":"/status-codes","description":"HTTP ステータスコードを意図的に発生させる検証用エンドポイント","links":[{"title":"エリアランディング","path":"/status-codes/","description":"このエリアで提供している全エンドポイントを一覧表示","method":"GET"},{"title":"既知コード一覧","path":"/status-codes/list","description":"サポートしている主要 HTTP ステータスコードを一覧表示","method":"GET"},{"title":"200 OK","path":"/status-codes/200","description":"任意コード指定の例 (200)","method":"GET"},{"title":"404 Not Found","path":"/status-codes/404","description":"任意コード指定の例 (404)","method":"GET"},{"title":"418 I'm a teapot","path":"/status-codes/418","description":"任意コード指定の例 (418)","method":"GET"},{"title":"503 Service Unavailable","path":"/status-codes/503","description":"任意コード指定の例 (503)","method":"GET"},{"title":"ランダム","path":"/status-codes/random","description":"既知コード配列からランダム","method":"GET"},{"title":"候補からランダム","path":"/status-codes/random?codes=200,404,500","description":"指定候補からランダム","method":"GET"},{"title":"1.5 秒遅延 + 200","path":"/status-codes/delay/1500/200","description":"遅延付き応答","method":"GET"},{"title":"リダイレクト 301","path":"/status-codes/redirect/301?to=https://learn.microsoft.com/azure/app-service/","description":"Location ヘッダー付き 301","method":"GET"},{"title":"未処理例外 (500)","path":"/status-codes/exception","description":"意図的に例外を発生させて 500 を返す","method":"GET"},{"title":"ヘッダーエコー (200)","path":"/status-codes/headers/200","description":"200 + リクエストヘッダーをエコー","method":"GET"}]},{"area":"thread-pool","path":"/thread-pool","description":".NET ThreadPool の MinThreads 不足によるリクエスト詰まりを意図的に再現し、ThreadPool.SetMinThreads(workerThreads, completionPortThreads) で改善できることを動確する検証エリア。","links":[{"title":"エリアランディング","path":"/thread-pool/","description":"ThreadPool 検証の入口","method":"GET"},{"title":"ThreadPool 状態","path":"/thread-pool/api/info","description":"GET — 現在の processId/MachineName/MinThreads/MaxThreads/AvailableThreads/ThreadCount/PendingWorkItemCount/CompletedWorkItemCount/ProcessorCount を返す","method":"GET"},{"title":"MinThreads 設定","path":"/thread-pool/api/min-threads","description":"POST { workerThreads, completionPortThreads } — ThreadPool.SetMinThreads を呼び出す","method":"POST"},{"title":"MinThreads リセット","path":"/thread-pool/api/reset-min-threads","description":"POST — MinThreads を ProcessorCount に戻す","method":"POST"},{"title":"バースト (Task.Run 並列)","path":"/thread-pool/api/burst","description":"GET ?count=32&waitMs=500[&setMinWorker=K&setMinIocp=K] — Task.Run(() => Thread.Sleep(waitMs)) を count 個並列起動。setMin* 指定で同一リクエスト内で SetMinThreads してから measure (マルチインスタンス回避の決定打)","method":"GET"},{"title":"同期 Sleep (1 リクエスト)","path":"/thread-pool/api/sync-sleep","description":"GET ?ms=500 — 受け取った request thread を Thread.Sleep でブロック。クライアントから並列で叩くとスレッドプール枯渇を再現できる (要 ARR Affinity)","method":"GET"}]}],"externalFeatures":[]}