{"id":188389,"date":"2026-07-01T15:05:44","date_gmt":"2026-07-01T06:05:44","guid":{"rendered":"https:\/\/support.questetra.com\/?p=188389"},"modified":"2026-07-24T15:06:14","modified_gmt":"2026-07-24T06:06:14","slug":"qguide-request-to-openai-api-using-localstorage-202606","status":"publish","type":"post","link":"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-202606\/","title":{"rendered":"qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248) v202606"},"content":{"rendered":"\n<h4 class=\"wp-block-heading has-background\" style=\"background-color:#ffc69b;margin-top:var(--wp--preset--spacing--30);margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--20);padding-bottom:0;padding-left:var(--wp--preset--spacing--20)\"><strong>qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248) v202606<\/strong><\/h4>\n\n\n\n<p class=\"has-text-align-right has-background has-small-font-size mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#ffc69b;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--30);padding-bottom:0;padding-left:var(--wp--preset--spacing--30)\"><a href=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-202606\/\"><span class=\"material-icons\">translate<\/span> qGuide: Request to OpenAI API using localStorage v202606<\/a><\/p>\n\n\n\n<p class=\"has-background mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#ffe5ce;margin-top:0;margin-right:0;margin-bottom:var(--wp--preset--spacing--60);margin-left:0;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--40)\">\u6307\u5b9a\u30c7\u30fc\u30bf\u9805\u76ee\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u3068\u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u3092 Responses API \u306b CORS \u9001\u4fe1\u3057\u307e\u3059\u3002\u30ec\u30b9\u30dd\u30f3\u30b9\uff08\u30e2\u30c7\u30eb\u304c\u751f\u6210\u3057\u305f\u6587\u7ae0\uff09\u306f\u3001\u30bf\u30b9\u30af\u51e6\u7406\u753b\u9762\u4e0a\u3067\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u30f3\u30d7\u30c8\u8a2d\u5b9a\u6b21\u7b2c\u3067\u3001\u300c\u8aa4\u690d\u30c1\u30a7\u30c3\u30af\u6a5f\u80fd\u300d\u300c\u6587\u7ae0\u30ea\u30e9\u30a4\u30c8\u6a5f\u80fd\u300d\u300c\u5dee\u623b\u7406\u7531\u306e\u5019\u88dc\u5217\u6319\u6a5f\u80fd\u300d\u3068\u3044\u3063\u305f\u69d8\u3005\u306a\u652f\u63f4\u6a5f\u80fd\uff08\u30bf\u30b9\u30af\u51e6\u7406\u8005\u3092\u652f\u63f4\u3059\u308b\u6a5f\u80fd\uff09\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002&#8221;API\u30ad\u30fc&#8221; \u3068 &#8220;\u6307\u793a\u6587&#8221; \uff08\u6700\u59278\u500b\uff09\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30e6\u30fc\u30b6\u304c localStorage \u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span>Input \/ Output<\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2190 <code>user_config_area<\/code><\/li>\n\n\n\n<li>\u2190 <code>user_buttons_area<\/code><\/li>\n\n\n\n<li>\u2190 <code>user_files_area<\/code><\/li>\n\n\n\n<li>\u2190 localStorage<\/li>\n\n\n\n<li>\u2192 <code>pre#user_result<\/code><\/li>\n\n\n\n<li>\u2192 <code>div#user_status<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Web\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u6a5f\u80fd\u304a\u3088\u3073\u30ea\u30b9\u30af\u3092\u7406\u89e3\u3057\u305f\u3046\u3048\u3067\u3054\u6d3b\u7528\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/Web_Storage_API\" rel=\"nofollow\">https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/Web_Storage_API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/w.wiki\/ALQp\" rel=\"nofollow\">https:\/\/w.wiki\/ALQp<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span>Code Example<\/span><\/h3>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details><summary class=\"wp-block-coblocks-accordion-item__title has-background\" style=\"background-color:#ffe5ce\">HTML\/JavaScript (click to open)<\/summary><div class=\"wp-block-coblocks-accordion-item__content\" style=\"border-color:#ffe5ce\">\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;style&gt;\n\/* AI\u547c\u3073\u51fa\u3057\u30dc\u30bf\u30f3 *\/\n.user_aiBtn {\nborder: 1px solid #ccc;\npadding: 6px 12px;\nborder-radius: 20px;\ncursor: pointer;\nfont-size: 13px;\ntransition: all 0.2s ease;\ncolor: #333;\nmargin-right: 8px;\nmargin-bottom: 12px;\nbackground-color: #fff;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_aiBtn:hover { background-color: #f0f0f0; border-color: #bbb; }\n.user_aiBtn:disabled { opacity: 0.5; cursor: not-allowed; background-color: #eee; }\n\n\/* CONFIG\u30dc\u30bf\u30f3 *\/\n#user_btnConfig {\nborder: 1px solid #4a5568;\npadding: 6px 16px;\nborder-radius: 4px;\ncursor: pointer;\nfont-size: 13px;\nfont-weight: bold;\ntransition: all 0.2s ease;\ncolor: #fff;\nbackground-color: #4a5568;\nmargin-right: 16px;\nmargin-bottom: 12px;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n#user_btnConfig:hover { background-color: #2d3748; border-color: #1a202c; }\n#user_btnConfig.user_active { background-color: #2b6cb0; border-color: #2c5282; box-shadow: inset 0 2px 4px rgba(0,0,0,0.2); }\n\n\/* \u305d\u306e\u4ed6\u306e\u8a2d\u5b9a\u30a8\u30ea\u30a2\u8981\u7d20 *\/\n.user_lbl {\ndisplay: block;\nmargin: 12px 0 4px 0;\nfont-weight: bold;\nfont-size: 13px;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_input {\nwidth: 100%;\nbox-sizing: border-box;\npadding: 6px;\nborder: 1px solid #ccc;\nborder-radius: 4px;\nfont-family: inherit;\nfont-size: 13px;\nmargin-bottom: 4px;\n}\ntextarea.user_input { resize: vertical; min-height: 4em; }\n.user_actionBtn {\npadding: 4px 12px;\nborder: 1px solid #bbb;\nbackground-color: #fff;\nborder-radius: 4px;\ncursor: pointer;\nfont-size: 13px;\nmargin-right: 8px;\n}\n.user_actionBtn:hover { background-color: #eee; }\n#user_result {\nbackground-color: #f9f9f9;\nborder: 1px solid #ddd;\nborder-radius: 4px;\npadding: 12px;\nmin-height: 8em;\nwhite-space: pre-wrap;\nword-break: break-word;\nfont-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace;\nfont-size: 14px;\nline-height: 1.6;\ncolor: #222;\nmargin-top: 16px;\n}\n.user_status_text {\nfont: 12px\/1.4 system-ui, sans-serif;\nopacity: 0.75;\nmargin-top: 8px;\nmin-height: 1.4em;\ndisplay: block;\n}\n\n\/* \u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u7528\u30b9\u30bf\u30a4\u30eb *\/\n.user_file_cb_label {\ndisplay: inline-block;\nmargin-right: 16px;\nfont-size: 13px;\ncursor: pointer;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_file_cb {\nmargin-right: 4px;\nvertical-align: middle;\n}\n\n@keyframes blink { 50% { opacity: 0; } }\n.user_cursor {\ndisplay: inline-block;\nwidth: 8px;\nheight: 1em;\nbackground-color: #333;\nmargin-left: 2px;\nanimation: blink 1s step-end infinite;\nvertical-align: text-bottom;\n}\n&lt;\/style&gt;\n\n&lt;span id=&quot;user_files_area&quot; style=&quot;display:none; margin-bottom:12px; background:#e2e8f0; padding:8px 12px; border-radius:4px;&quot;&gt;&lt;\/span&gt;\n&lt;span id=&quot;user_buttons_area&quot; style=&quot;display:block;&quot;&gt;&lt;\/span&gt;\n&lt;span id=&quot;user_config_area&quot; style=&quot;display:none; padding:16px; background:#f5f7fa; border: 1px solid #cbd5e0; border-radius:8px; margin-bottom:12px;&quot;&gt;&lt;\/span&gt;\n&lt;pre id=&quot;user_result&quot;&gt;&lt;\/pre&gt;\n&lt;span id=&quot;user_status&quot; class=&quot;user_status_text&quot;&gt;&lt;\/span&gt;\n\n&lt;script&gt;\nqbpms.form.on(&#39;ready&#39;, () =&gt; {\n  \/\/ --- 0. \u57fa\u672c\u8a2d\u5b9a\u2605\u2605\u2605 \u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044 \/ EDIT here \u2605\u2605\u2605 ---\n  const TARGET_FIELD_NAMES = &quot;title,q_body&quot;; \/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\u3067\u8907\u6570\u6307\u5b9a\u53ef\u80fd\n  const TARGET_FILES_FIELD_NAME = &quot;q_attached&quot;; \/\/ \u30d5\u30a1\u30a4\u30eb\u578b\u30d5\u30a3\u30fc\u30eb\u30c9\u540d (\u7a7a\u6587\u5b57\u3067\u7121\u52b9)\n  const STORAGE_PREFIX = &quot;user_inquiry_response_&quot;; \/\/ localStorage Memory Prefix \uff08\u30a2\u30d7\u30ea\u30fb\u5de5\u7a0b\u3054\u3068\u306a\u3069\uff09\n\n  \/\/ --- \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a ---\n  const DEFAULT_MODEL = &quot;gpt-5.4-mini&quot;;\n  const DEFAULT_INST = [\n    { title: &quot;\u56de\u7b54\u8349\u7a3f500\u6587\u5b57&quot;, body: &quot;\u304a\u5ba2\u69d8\u304b\u3089\u306e\u300c\u554f\u3044\u5408\u308f\u305b\u30bf\u30a4\u30c8\u30eb\u300d\u3068\u300c\u554f\u3044\u5408\u308f\u305b\u672c\u6587\u300d\u3092\u57fa\u306b\u300e\u56de\u7b54\u6587\u306e\u8349\u7a3f\u300f\u3092\u66f8\u3044\u3066\u3002500\u6587\u5b57\u7a0b\u5ea6\u3067\u3002&quot; },\n    { title: &quot;\u666f\u8868\u6cd5\u30c1\u30a7\u30c3\u30af&quot;, body: &quot;\u666f\u54c1\u8868\u793a\u6cd5\u306b\u7167\u3089\u3057\u3066\u3001\u300c\u5e83\u544a\u6587\u6848\u300d\u3092\u8a55\u4fa1\u3057\u3066\u3002\u300e\u5408\u683c\u30fb\u8981\u4fee\u6b63\u30fbNG\u300f\u306e3\u6bb5\u968e\u3067\u5224\u5b9a\u3057\u3001\u305d\u306e\u7406\u7531\u3092\u8ff0\u3079\u3066\u3002&quot; },\n    { title: &quot;vCard\u751f\u6210&quot;, body: &quot;\u540d\u523a\u753b\u50cf\u3084\u30e1\u30fc\u30eb\u672c\u6587\u304b\u3089\u500b\u4eba\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3001Google Contact (\u9023\u7d61\u5148) \u7528\u306e vCard \u6587\u5b57\u5217\u306b\u3057\u3066\u3002\uff08.vcf \u30d5\u30a1\u30a4\u30eb\u7528\u306e\u30c7\u30fc\u30bf\uff09&quot; },\n    { title: &quot;\u8ad6\u7406\u98db\u8e8d\u306e\u6307\u6458&quot;, body: &quot;\u8ad6\u7406\u98db\u8e8d\u3092\u6307\u6458\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7279\u306b\u3001\u524d\u63d0\u4e0d\u8db3\u3001\u56e0\u679c\u95a2\u4fc2\u306e\u5f31\u3055\u3001\u4e3b\u8a9e\u306e\u3059\u308a\u66ff\u308f\u308a\u3001\u62bd\u8c61\u8a9e\u306b\u3088\u308b\u3054\u307e\u304b\u3057\u3001\u8ab2\u984c\u30fb\u89e3\u6c7a\u7b56\u30fb\u52b9\u679c\u306e\u4e0d\u4e00\u81f4\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8aad\u8005\u304c\u300c\u306a\u305c\u305d\u3046\u8a00\u3048\u308b\u306e\u304b\uff1f\u300d\u3068\u611f\u3058\u308b\u7b87\u6240\u3092\u5217\u6319\u3057\u3001\u305d\u308c\u305e\u308c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u8aac\u660e\u3068\u6539\u5584\u6848\u3092\u7c21\u6f54\u306b\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;M5&quot;, body: &quot;\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; },\n    { title: &quot;M6&quot;, body: &quot;\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; },\n    { title: &quot;M7&quot;, body: &quot;\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; },\n    { title: &quot;M8&quot;, body: &quot;\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; }\n  ];\n\n  \/\/ \u30b9\u30c8\u30ec\u30fc\u30b8\u30ad\u30fc\n  const KEY_API = STORAGE_PREFIX + &quot;openai_api_key&quot;;\n  const KEY_MODEL = STORAGE_PREFIX + &quot;openai_model&quot;;\n  const KEY_INST_TITLE = STORAGE_PREFIX + &quot;openai_inst_title_&quot;;\n  const KEY_INST_BODY = STORAGE_PREFIX + &quot;openai_inst_body_&quot;;\n\n  const filesArea = document.getElementById(&quot;user_files_area&quot;);\n  const buttonsArea = document.getElementById(&quot;user_buttons_area&quot;);\n  const configArea = document.getElementById(&quot;user_config_area&quot;);\n  const resultElement = document.getElementById(&quot;user_result&quot;);\n  const statusElement = document.getElementById(&quot;user_status&quot;);\n  \n  \/\/ Questetra\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9\n  const qctx = window.qbpms?.contextPath || &quot;&quot;;\n  let isConfigOpen = false;\n\n  \/\/ --- \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3: ArrayBuffer \u3092 Base64 \u306b\u5909\u63db ---\n  function user_arrayBufferToBase64(buffer) {\n    let binary = &#39;&#39;;\n    const bytes = new Uint8Array(buffer);\n    const len = bytes.byteLength;\n    for (let i = 0; i &lt; len; i++) {\n      binary += String.fromCharCode(bytes[i]);\n    }\n    return window.btoa(binary);\n  }\n\n  \/\/ --- \u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u306e\u63cf\u753b\u95a2\u6570 ---\n  function renderFileList() {\n    filesArea.innerHTML = &quot;&quot;;\n    if (!TARGET_FILES_FIELD_NAME) {\n      filesArea.style.display = &quot;none&quot;;\n      return;\n    }\n\n    const files = qbpms.form.get(TARGET_FILES_FIELD_NAME);\n    if (!files || files.length === 0) {\n      filesArea.style.display = &quot;none&quot;;\n      return;\n    }\n\n    filesArea.style.display = &quot;block&quot;;\n    const lbl = document.createElement(&quot;span&quot;);\n    lbl.className = &quot;user_lbl&quot;;\n    lbl.style.marginTop = &quot;0&quot;;\n    lbl.innerText = &quot;Attachments (Check target files):&quot;;\n    filesArea.appendChild(lbl);\n\n    files.forEach((file) =&gt; {\n      const label = document.createElement(&quot;label&quot;);\n      label.className = &quot;user_file_cb_label&quot;;\n\n      const cb = document.createElement(&quot;input&quot;);\n      cb.type = &quot;checkbox&quot;;\n      cb.value = file.id; \n      cb.dataset.filename = file.name;\n      cb.dataset.pdiid = file.processDataInstanceId;\n      cb.checked = true;\n      cb.className = &quot;user_file_cb&quot;;\n\n      label.appendChild(cb);\n      label.appendChild(document.createTextNode(file.name));\n      filesArea.appendChild(label);\n    });\n  }\n\n  \/\/ --- 1. \u521d\u671f\u63cf\u753b\u3068\u30d5\u30a1\u30a4\u30eb\u9805\u76ee\u306e\u5909\u66f4\u76e3\u8996 ---\n  renderFileList();\n  if (TARGET_FILES_FIELD_NAME) {\n    qbpms.form.on(&#39;change&#39;, TARGET_FILES_FIELD_NAME, renderFileList);\n  }\n\n  \/\/ --- 2. \u30e1\u30a4\u30f3\u30dc\u30bf\u30f3\u7fa4\u306e\u52d5\u7684\u751f\u6210 ---\n  const btnConfig = document.createElement(&quot;button&quot;);\n  btnConfig.type = &quot;button&quot;;\n  btnConfig.id = &quot;user_btnConfig&quot;;\n  btnConfig.innerText = &quot;CONFIG&quot;;\n  buttonsArea.appendChild(btnConfig);\n\n  const aiButtons = [];\n  for (let i = 0; i &lt; 8; i++) {\n    const btn = document.createElement(&quot;button&quot;);\n    btn.type = &quot;button&quot;;\n    btn.className = &quot;user_aiBtn&quot;;\n    buttonsArea.appendChild(btn);\n    aiButtons.push(btn);\n  }\n\n  \/\/ --- 3. CONFIG\u30a8\u30ea\u30a2\u306e\u52d5\u7684\u751f\u6210 ---\n  const lblApi = document.createElement(&quot;span&quot;); lblApi.className = &quot;user_lbl&quot;; lblApi.innerText = &quot;API\u30ad\u30fc \/ API Key (\u30de\u30b9\u30af\u306a\u3057):&quot;; configArea.appendChild(lblApi);\n  const inpApi = document.createElement(&quot;input&quot;); inpApi.type = &quot;text&quot;; inpApi.className = &quot;user_input&quot;; inpApi.placeholder = &quot;sk-...&quot;; configArea.appendChild(inpApi);\n  \n  const lblModel = document.createElement(&quot;span&quot;);\n    lblModel.className = &quot;user_lbl&quot;;\n    lblModel.innerHTML = &#39;\u30e2\u30c7\u30eb \/ Model: &lt;a href=&quot;https:\/\/platform.openai.com\/docs\/models&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style=&quot;font-weight: normal; font-size: 12px; margin-left: 12px; color: #2b6cb0; text-decoration: underline;&quot;&gt;\u21d2 Available Models (OpenAI Docs)&lt;\/a&gt;&#39;;\n  configArea.appendChild(lblModel);\n  const inpModel = document.createElement(&quot;input&quot;); inpModel.type = &quot;text&quot;; inpModel.className = &quot;user_input&quot;; inpModel.placeholder = &quot;gpt-5.4&quot;; configArea.appendChild(inpModel);\n\n  const instInputs = [];\n  for (let i = 0; i &lt; 8; i++) {\n    const lbl = document.createElement(&quot;span&quot;); lbl.className = &quot;user_lbl&quot;; lbl.innerText = `\u6307\u793a\u6587${i + 1} \/ Instruction ${i + 1}:`; configArea.appendChild(lbl);\n    const inpT = document.createElement(&quot;input&quot;); inpT.type = &quot;text&quot;; inpT.className = &quot;user_input&quot;; inpT.placeholder = &quot;Instruction Title&quot;; configArea.appendChild(inpT);\n    const inpB = document.createElement(&quot;textarea&quot;); inpB.className = &quot;user_input&quot;; inpB.placeholder = &quot;Instruction Details&quot;; configArea.appendChild(inpB);\n    instInputs.push({ title: inpT, body: inpB });\n  }\n\n  const hr = document.createElement(&quot;hr&quot;); hr.style.margin = &quot;16px 0&quot;; hr.style.borderTop = &quot;1px dashed #ccc&quot;; configArea.appendChild(hr);\n  const btnSave = document.createElement(&quot;button&quot;); btnSave.type = &quot;button&quot;; btnSave.className = &quot;user_actionBtn&quot;; btnSave.innerText = &quot;\u8a2d\u5b9a\u3092\u4fdd\u5b58 \/ Save&quot;; configArea.appendChild(btnSave);\n  const btnClear = document.createElement(&quot;button&quot;); btnClear.type = &quot;button&quot;; btnClear.className = &quot;user_actionBtn&quot;; btnClear.innerText = &quot;\u521d\u671f\u5316 \/ Reset&quot;; configArea.appendChild(btnClear);\n  const saveStatus = document.createElement(&quot;span&quot;); saveStatus.style.color = &quot;#0066cc&quot;; saveStatus.style.fontWeight = &quot;bold&quot;; saveStatus.style.fontSize = &quot;13px&quot;; configArea.appendChild(saveStatus);\n\n  \/\/ --- 4. \u8a2d\u5b9a\u5024\u306e\u8aad\u307f\u8fbc\u307f ---\n  function loadSettings() {\n    inpApi.value = localStorage.getItem(KEY_API) || &quot;&quot;;\n    inpModel.value = localStorage.getItem(KEY_MODEL) || DEFAULT_MODEL;\n    for (let i = 0; i &lt; 8; i++) {\n      const storedT = localStorage.getItem(KEY_INST_TITLE + i);\n      const storedB = localStorage.getItem(KEY_INST_BODY + i);\n      instInputs[i].title.value = storedT !== null ? storedT : DEFAULT_INST[i].title;\n      instInputs[i].body.value = storedB !== null ? storedB : DEFAULT_INST[i].body;\n      aiButtons[i].innerText = instInputs[i].title.value;\n    }\n  }\n  loadSettings();\n\n  \/\/ --- 5. \u5404\u7a2e\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc ---\n  btnConfig.addEventListener(&quot;click&quot;, () =&gt; {\n    isConfigOpen = !isConfigOpen;\n    configArea.style.display = isConfigOpen ? &quot;block&quot; : &quot;none&quot;;\n    if (isConfigOpen) {\n      btnConfig.classList.add(&quot;user_active&quot;);\n      loadSettings();\n    } else {\n      btnConfig.classList.remove(&quot;user_active&quot;);\n    }\n  });\n\n  btnSave.addEventListener(&quot;click&quot;, () =&gt; {\n    localStorage.setItem(KEY_API, inpApi.value.trim());\n    localStorage.setItem(KEY_MODEL, inpModel.value.trim());\n    for (let i = 0; i &lt; 8; i++) {\n      localStorage.setItem(KEY_INST_TITLE + i, instInputs[i].title.value);\n      localStorage.setItem(KEY_INST_BODY + i, instInputs[i].body.value);\n      aiButtons[i].innerText = instInputs[i].title.value;\n    }\n    saveStatus.innerText = &quot; \u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f \/ Saved&quot;;\n    setTimeout(() =&gt; { saveStatus.innerText = &quot;&quot;; }, 2500);\n  });\n\n  btnClear.addEventListener(&quot;click&quot;, () =&gt; {\n    if (!confirm(&quot;\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u623b\u3057\u307e\u3059\u304b\uff1f \/ Do you want to revert to the default?&quot;)) return;\n    localStorage.removeItem(KEY_API);\n    localStorage.removeItem(KEY_MODEL);\n    for (let i = 0; i &lt; 8; i++) {\n      localStorage.removeItem(KEY_INST_TITLE + i);\n      localStorage.removeItem(KEY_INST_BODY + i);\n    }\n    loadSettings();\n    saveStatus.innerText = &quot; \u521d\u671f\u5316\u3057\u307e\u3057\u305f \/ Initialized &quot;;\n    setTimeout(() =&gt; { saveStatus.innerText = &quot;&quot;; }, 2500);\n  });\n\n  \/\/ --- \u30c6\u30ad\u30b9\u30c8\u5165\u529b\u5024\u306e\u62bd\u51fa ---\n  function getTargetTextInputs() {\n    let combinedInput = &quot;&quot;;\n    if (TARGET_FIELD_NAMES) {\n      const fields = TARGET_FIELD_NAMES.split(&quot;,&quot;);\n      fields.forEach(f =&gt; {\n        const val = qbpms.form.get(f.trim());\n        if (val) combinedInput += `\u3010${f.trim()}\u3011\\n${val}\\n\\n`;\n      });\n    }\n    return combinedInput.trim();\n  }\n\n  \/\/ --- 6. AI\u547c\u3073\u51fa\u3057\u51e6\u7406 ---\n  aiButtons.forEach((btn, index) =&gt; {\n    btn.addEventListener(&quot;click&quot;, async () =&gt; {\n      const strKey = localStorage.getItem(KEY_API);\n      const modelName = localStorage.getItem(KEY_MODEL) || DEFAULT_MODEL;\n      const strInstruction = instInputs[index].body.value;\n      const strInput = getTargetTextInputs();\n\n      if (!strKey) {\n        statusElement.innerText = &quot;ERROR: The API key has not been set. Save the setting in CONFIG.&quot;;\n        resultElement.innerText = &quot;&quot;;\n        return;\n      }\n\n      \/\/ \u51e6\u7406\u958b\u59cb: UI\u306e\u7121\u52b9\u5316\n      aiButtons.forEach(b =&gt; b.disabled = true);\n      btnConfig.disabled = true;\n      resultElement.innerHTML = &#39;&#39;;\n      \n      const contentParts = [];\n      const uploadedFileIds = []; \/\/ \u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u7528\u306eID\u4fdd\u6301\u914d\u5217\n      let processHasError = false; \/\/ \u30a8\u30e9\u30fc\u8868\u793a\u306e\u4e0a\u66f8\u304d\u9632\u6b62\u30d5\u30e9\u30b0\n\n      if (strInput) {\n        contentParts.push({ type: &quot;input_text&quot;, text: strInput });\n      }\n\n      \/\/ --- [\u30d5\u30a1\u30a4\u30eb\u53d6\u5f97\u30fb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406] ---\n      if (TARGET_FILES_FIELD_NAME) {\n        const checkboxes = document.querySelectorAll(&quot;.user_file_cb&quot;);\n        for (const cb of checkboxes) {\n          if (cb.checked) {\n            const qfileId = cb.value;\n            const filename = cb.dataset.filename;\n            const pdiId = cb.dataset.pdiid;\n\n            statusElement.innerText = ` ${filename} downloading ...`;\n\n            try {\n              const fetchUrl = `${qctx}\/API\/OR\/ProcessInstance\/File\/download?id=${encodeURIComponent(qfileId)}&processDataInstanceId=${encodeURIComponent(pdiId)}`;\n              const dlRes = await fetch(fetchUrl);\n              \n              if (!dlRes.ok) {\n                throw new Error(`HTTP Error: ${dlRes.status}`);\n              }\n\n              const contentType = dlRes.headers.get(&#39;content-type&#39;) || &#39;application\/octet-stream&#39;;\n              const buf = await dlRes.arrayBuffer();\n              \n              if (contentType.startsWith(&#39;image\/&#39;)) {\n                const base64 = user_arrayBufferToBase64(buf);\n                const dataUrl = `data:${contentType};base64,${base64}`;\n                contentParts.push({ type: &quot;input_image&quot;, image_url: dataUrl });\n                statusElement.innerText = `\u753b\u50cf\u300c${filename}\u300d\u3092\u6dfb\u4ed8\u3057\u307e\u3057\u305f\u3002\/ Attached`;\n              } else {\n                statusElement.innerText = ` ${filename} uploading ...`;\n                const formData = new FormData();\n                const blob = new Blob([new Uint8Array(buf)], { type: contentType });\n                const fileObj = (typeof File !== &#39;undefined&#39;) ? new File([blob], filename, { type: contentType }) : blob;\n                \n                formData.append(&quot;purpose&quot;, &quot;user_data&quot;);\n                formData.append(&quot;file&quot;, fileObj, filename);\n                \n                const upRes = await fetch(&quot;https:\/\/api.openai.com\/v1\/files&quot;, {\n                  method: &quot;POST&quot;,\n                  headers: { &quot;Authorization&quot;: `Bearer ${strKey}` },\n                  body: formData\n                });\n                \n                if (!upRes.ok) {\n                  let msg = `OpenAI File Upload Error: ${upRes.status}`;\n                  try { msg += `\\n${JSON.stringify(await upRes.json(), null, 2)}`; } catch (_) {}\n                  throw new Error(msg);\n                }\n                \n                const upJson = await upRes.json();\n                const uploadedFileId = upJson.id; \n                \n                uploadedFileIds.push(uploadedFileId); \/\/ \u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u5bfe\u8c61\u3068\u3057\u3066\u4fdd\u6301\n                contentParts.push({ type: &#39;input_file&#39;, file_id: uploadedFileId });\n                statusElement.innerText = `\u30d5\u30a1\u30a4\u30eb\u300c${filename}\u300d\u3092\u6dfb\u4ed8\u3057\u307e\u3057\u305f\u3002\/ Attached`;\n              }\n              \n            } catch (error) {\n              console.error(&quot;File fetch\/upload error:&quot;, error);\n              statusElement.innerText = `Error: Failed to process the file &quot;${filename}&quot;.`;\n              aiButtons.forEach(b =&gt; b.disabled = false);\n              btnConfig.disabled = false;\n              return;\n            }\n          }\n        }\n      }\n\n      if (contentParts.length === 0) {\n        statusElement.innerText = `Error: \u5bfe\u8c61\u30d5\u30a3\u30fc\u30eb\u30c9\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb \u304c\u7a7a\u3067\u3059\u3002\/ The target field or file is empty.`;\n        aiButtons.forEach(b =&gt; b.disabled = false);\n        btnConfig.disabled = false;\n        return;\n      }\n\n      statusElement.innerText = &quot;AI\u306b\u63a5\u7d9a\u4e2d... \/ Connecting to AI...&quot;;\n      resultElement.innerHTML = &#39;&lt;span class=&quot;user_cursor&quot;&gt;&lt;\/span&gt;&#39;;\n      const cursor = resultElement.querySelector(&quot;.user_cursor&quot;);\n\n      try {\n        const response = await fetch(&quot;https:\/\/api.openai.com\/v1\/responses&quot;, {\n          method: &quot;POST&quot;,\n          headers: {\n            &quot;Content-Type&quot;: &quot;application\/json&quot;,\n            &quot;Accept&quot;: &quot;text\/event-stream&quot;,\n            &quot;Authorization&quot;: `Bearer ${strKey}`\n          },\n          body: JSON.stringify({\n            model: modelName,\n            instructions: strInstruction,\n            input: [ { role: &quot;user&quot;, content: contentParts } ],\n            stream: true\n          })\n        });\n\n        if (!response.ok) {\n          let msg = `API Error: ${response.status}`;\n          try {\n            const err = await response.json();\n            msg += `\\n${JSON.stringify(err, null, 2)}`;\n          } catch (_) {}\n          throw new Error(msg);\n        }\n        \n        statusElement.innerText = &quot;AI\u304c\u6587\u7ae0\u3092\u751f\u6210\u4e2d... \/ AI is generating text...&quot;;\n        const reader = response.body.getReader();\n        const decoder = new TextDecoder();\n        let buffer = &quot;&quot;;\n        let currentEvent = &quot;&quot;;\n        \n        const flushLines = (chunkText) =&gt; {\n          buffer += chunkText;\n          const lines = buffer.split(\/\\r?\\n\/);\n          buffer = lines.pop() || &quot;&quot;;\n          \n          for (const line of lines) {\n            if (!line.trim()) continue;\n            \n            if (line.startsWith(&quot;event:&quot;)) {\n              currentEvent = line.replace(\/^event:\\s*\/, &quot;&quot;).trim();\n              continue;\n            }\n            \n            if (line.startsWith(&quot;data:&quot;)) {\n              const dataRaw = line.replace(\/^data:\\s*\/, &quot;&quot;).trim();\n              if (dataRaw === &quot;[DONE]&quot;) return &quot;DONE&quot;;\n              \n              let data = null;\n              try {\n                data = JSON.parse(dataRaw);\n              } catch (e) {\n                \/\/ \u30d1\u30fc\u30b9\u5931\u6557\u6642\u306f\u63e1\u308a\u3064\u3076\u3055\u305a\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u51fa\u529b\u3057\u3066\u30b9\u30ad\u30c3\u30d7\n                console.error(&quot;SSE JSON parse error:&quot;, dataRaw, e);\n                continue; \n              }\n\n              \/\/ \u2605\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u3068\u30d1\u30fc\u30b9\u3092\u5206\u96e2\n              if (currentEvent === &quot;response.output_text.delta&quot; && data.delta) {\n                cursor.insertAdjacentText(&quot;beforebegin&quot;, data.delta);\n              } else if (currentEvent === &quot;response.completed&quot;) {\n                return &quot;DONE&quot;;\n              } else if (currentEvent === &quot;error&quot; || currentEvent === &quot;response.error&quot;) {\n                \/\/ \u3053\u3053\u3067 throw \u3059\u308c\u3070\u3001\u5916\u5074\u306e catch (error) \u3067\u78ba\u5b9f\u306b\u88dc\u8db3\u30fb\u753b\u9762\u8868\u793a\u3055\u308c\u307e\u3059\n                throw new Error(data?.error?.message || &quot;Streaming API Error&quot;);\n              }\n            }\n          }\n        };\n\n        while (true) {\n          const { done, value } = await reader.read();\n          if (done) break;\n          const text = decoder.decode(value, { stream: true });\n          const status = flushLines(text);\n          if (status === &quot;DONE&quot;) break;\n        }\n        \n      } catch (error) {\n        processHasError = true;\n        console.error(&quot;Request failed:&quot;, error);\n        statusElement.innerText = &quot;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \/ An error occurred.&quot;;\n        cursor?.insertAdjacentText(&quot;beforebegin&quot;, `\\n[Exception] ${String(error.message || error)}`);\n      } finally {\n        const c = document.querySelector(&quot;#user_result .user_cursor&quot;);\n        c?.remove();\n        \n        \/\/ \u2605\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u51e6\u7406\n        if (uploadedFileIds.length &gt; 0 && strKey) {\n          if (!processHasError) {\n             statusElement.innerText = &quot;\u751f\u6210\u5b8c\u4e86 (\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u4e2d...) \/ Cleaning up files...&quot;;\n          }\n          \n          for (const fid of uploadedFileIds) {\n            try {\n              await fetch(`https:\/\/api.openai.com\/v1\/files\/${fid}`, {\n                method: &quot;DELETE&quot;,\n                headers: { &quot;Authorization&quot;: `Bearer ${strKey}` }\n              });\n            } catch (cleanupErr) {\n              console.error(`Failed to delete file ${fid}:`, cleanupErr);\n            }\n          }\n        }\n\n        if (!processHasError) {\n          statusElement.innerText = &quot;\u51e6\u7406\u5b8c\u4e86 \/ Completed&quot;;\n        }\n\n        aiButtons.forEach(b =&gt; b.disabled = false);\n        btnConfig.disabled = false;\n      }\n    });\n  });\n});\n&lt;\/script&gt;<\/code><\/pre><\/div>\n<\/div><\/details><\/div>\n\n\n\n<div class=\"wp-block-coblocks-accordion-item\"><details><summary class=\"wp-block-coblocks-accordion-item__title has-background\" style=\"background-color:#ffe5ce\">HTML\/JavaScript \u3014\u7a1f\u8b70\u7533\u8acb\u30d5\u30ed\u30fc\u7248\u3015 (click to open)<\/summary><div class=\"wp-block-coblocks-accordion-item__content\" style=\"border-color:#ffe5ce\">\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;style&gt;\n\/* AI\u547c\u3073\u51fa\u3057\u30dc\u30bf\u30f3 *\/\n.user_aiBtn {\nborder: 1px solid #ccc;\npadding: 6px 12px;\nborder-radius: 20px;\ncursor: pointer;\nfont-size: 13px;\ntransition: all 0.2s ease;\ncolor: #333;\nmargin-right: 8px;\nmargin-bottom: 12px;\nbackground-color: #fff;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_aiBtn:hover { background-color: #f0f0f0; border-color: #bbb; }\n.user_aiBtn:disabled { opacity: 0.5; cursor: not-allowed; background-color: #eee; }\n\n\/* CONFIG\u30dc\u30bf\u30f3 *\/\n#user_btnConfig {\nborder: 1px solid #4a5568;\npadding: 6px 16px;\nborder-radius: 4px;\ncursor: pointer;\nfont-size: 13px;\nfont-weight: bold;\ntransition: all 0.2s ease;\ncolor: #fff;\nbackground-color: #4a5568;\nmargin-right: 16px;\nmargin-bottom: 12px;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n#user_btnConfig:hover { background-color: #2d3748; border-color: #1a202c; }\n#user_btnConfig.user_active { background-color: #2b6cb0; border-color: #2c5282; box-shadow: inset 0 2px 4px rgba(0,0,0,0.2); }\n\n\/* \u305d\u306e\u4ed6\u306e\u8a2d\u5b9a\u30a8\u30ea\u30a2\u8981\u7d20 *\/\n.user_lbl {\ndisplay: block;\nmargin: 12px 0 4px 0;\nfont-weight: bold;\nfont-size: 13px;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_input {\nwidth: 100%;\nbox-sizing: border-box;\npadding: 6px;\nborder: 1px solid #ccc;\nborder-radius: 4px;\nfont-family: inherit;\nfont-size: 13px;\nmargin-bottom: 4px;\n}\ntextarea.user_input { resize: vertical; min-height: 4em; }\n.user_actionBtn {\npadding: 4px 12px;\nborder: 1px solid #bbb;\nbackground-color: #fff;\nborder-radius: 4px;\ncursor: pointer;\nfont-size: 13px;\nmargin-right: 8px;\n}\n.user_actionBtn:hover { background-color: #eee; }\n#user_result {\nbackground-color: #f9f9f9;\nborder: 1px solid #ddd;\nborder-radius: 4px;\npadding: 12px;\nmin-height: 8em;\nwhite-space: pre-wrap;\nword-break: break-word;\nfont-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace;\nfont-size: 14px;\nline-height: 1.6;\ncolor: #222;\nmargin-top: 16px;\n}\n.user_status_text {\nfont: 12px\/1.4 system-ui, sans-serif;\nopacity: 0.75;\nmargin-top: 8px;\nmin-height: 1.4em;\ndisplay: block;\n}\n\n\/* \u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u7528\u30b9\u30bf\u30a4\u30eb *\/\n.user_file_cb_label {\ndisplay: inline-block;\nmargin-right: 16px;\nfont-size: 13px;\ncursor: pointer;\nfont-family: system-ui, -apple-system, sans-serif;\n}\n.user_file_cb {\nmargin-right: 4px;\nvertical-align: middle;\n}\n\n@keyframes blink { 50% { opacity: 0; } }\n.user_cursor {\ndisplay: inline-block;\nwidth: 8px;\nheight: 1em;\nbackground-color: #333;\nmargin-left: 2px;\nanimation: blink 1s step-end infinite;\nvertical-align: text-bottom;\n}\n&lt;\/style&gt;\n\n&lt;span id=&quot;user_files_area&quot; style=&quot;display:none; margin-bottom:12px; background:#e2e8f0; padding:8px 12px; border-radius:4px;&quot;&gt;&lt;\/span&gt;\n&lt;span id=&quot;user_buttons_area&quot; style=&quot;display:block;&quot;&gt;&lt;\/span&gt;\n&lt;span id=&quot;user_config_area&quot; style=&quot;display:none; padding:16px; background:#f5f7fa; border: 1px solid #cbd5e0; border-radius:8px; margin-bottom:12px;&quot;&gt;&lt;\/span&gt;\n&lt;pre id=&quot;user_result&quot;&gt;&lt;\/pre&gt;\n&lt;span id=&quot;user_status&quot; class=&quot;user_status_text&quot;&gt;&lt;\/span&gt;\n\n&lt;script&gt;\nqbpms.form.on(&#39;ready&#39;, () =&gt; {\n  \/\/ --- 0. \u57fa\u672c\u8a2d\u5b9a\u2605\u2605\u2605 \u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044 \/ EDIT here \u2605\u2605\u2605 ---\n  const TARGET_FIELD_NAMES = &quot;title,q_payee_name,q_payment_due_date,q_payment_amount,q_description&quot;; \/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\u3067\u8907\u6570\u6307\u5b9a\u53ef\u80fd\n  const TARGET_FILES_FIELD_NAME = &quot;q_attached&quot;; \/\/ \u30d5\u30a1\u30a4\u30eb\u578b\u30d5\u30a3\u30fc\u30eb\u30c9\u540d (\u7a7a\u6587\u5b57\u3067\u7121\u52b9)\n  const STORAGE_PREFIX = &quot;user_application_approval_&quot;; \/\/ localStorage Memory Prefix \uff08\u30a2\u30d7\u30ea\u30fb\u5de5\u7a0b\u3054\u3068\u306a\u3069\uff09\n\n  \/\/ --- \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a ---\n  const DEFAULT_MODEL = &quot;gpt-5.4-mini&quot;;\n  const DEFAULT_INST = [\n    { title: &quot;\u8aa4\u690d\u30c1\u30a7\u30c3\u30af&quot;, body: &quot;\u300c\u4ef6\u540d\/Title\u30fb\u652f\u6255\u5148\u30fb\u652f\u6255\u671f\u65e5\u30fb\u652f\u6255\u91d1\u984d\u30fb\u7533\u8acb\u8a73\u7d30\u30fb\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u300d\u306e\u5168\u6587\u3092\u3001\u5165\u529b\u3055\u308c\u305f\u57fa\u6e96\u65e5\u6642\u70b9\u3067\u6821\u6b63\u3057\u3001\u660e\u3089\u304b\u306a\u8aa4\u690d\u304a\u3088\u3073\u66f4\u65b0\u6f0f\u308c\u3092\u3059\u3079\u3066\u6307\u6458\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u521d\u306b\u5168\u6587\u3092\u6700\u5f8c\u307e\u3067\u8aad\u307f\u3001\u305d\u306e\u5f8c\u3001\u2460\u8aa4\u5b57\u30fb\u8131\u5b57\u30fb\u30b9\u30da\u30eb\u30df\u30b9\u30fb\u5909\u63db\u30df\u30b9\u3001\u2461\u30ab\u30bf\u30ab\u30ca\u8a9e\u306e\u8131\u5b57\u30fb\u4fc3\u97f3\u30fb\u9577\u97f3\u306e\u8aa4\u308a\u3001\u2462\u65e5\u4ed8\u3068\u3057\u3066\u6210\u7acb\u3057\u306a\u3044\u8868\u8a18\u3001\u2463\u4e88\u5b9a\u65e5\u30fb\u652f\u6255\u671f\u65e5\u30fb\u7d0d\u671f\u30fb\u5951\u7d04\u671f\u9593\u306a\u3069\u3001\u5c06\u6765\u307e\u305f\u306f\u73fe\u5728\u306e\u4e88\u5b9a\u3067\u3042\u308b\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u57fa\u6e96\u65e5\u3088\u308a\u904e\u53bb\u306b\u306a\u3063\u3066\u3044\u308b\u65e5\u4ed8\u3001\u2464\u8a08\u7b97\u7d50\u679c\u304c\u4e00\u81f4\u3057\u306a\u3044\u91d1\u984d\u3001\u2465\u540c\u4e00\u5bfe\u8c61\u3092\u793a\u3059\u540d\u79f0\u30fb\u91d1\u984d\u30fb\u65e5\u4ed8\u306e\u4e0d\u4e00\u81f4\u3001\u306e\u9806\u306b\u72ec\u7acb\u3057\u3066\u518d\u8d70\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u30021\u4ef6\u898b\u3064\u3051\u3066\u3082\u691c\u67fb\u3092\u7d42\u4e86\u305b\u305a\u3001\u8a72\u5f53\u3059\u308b\u3059\u3079\u3066\u306e\u7b87\u6240\u3092\u5217\u6319\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u904e\u53bb\u306e\u5b9f\u7e3e\u3001\u7d4c\u7def\u3001\u6bd4\u8f03\u5bfe\u8c61\u3001\u898b\u7a4d\u65e5\u3001\u5951\u7d04\u7de0\u7d50\u65e5\u306a\u3069\u3001\u904e\u53bb\u306e\u65e5\u4ed8\u3067\u3042\u308b\u3053\u3068\u304c\u81ea\u7136\u306a\u8a18\u8f09\u306f\u6307\u6458\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u540c\u3058\u60c5\u5831\u306e\u91cd\u8907\u8a18\u8f09\u3001\u8868\u73fe\u306e\u597d\u307f\u3001\u6587\u7ae0\u30b9\u30bf\u30a4\u30eb\u3001\u8aac\u660e\u4e0d\u8db3\u3001\u652f\u51fa\u3084\u6295\u8cc7\u5224\u65ad\u306e\u59a5\u5f53\u6027\u3001\u5916\u90e8\u60c5\u5831\u304c\u306a\u3051\u308c\u3070\u6b63\u8aa4\u3092\u5224\u65ad\u3067\u304d\u306a\u3044\u5185\u5bb9\u306f\u6307\u6458\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5404\u6307\u6458\u306f\u300c- {50\u6587\u5b57\u4ee5\u5185\u306e\u6307\u6458\u7406\u7531}\\\\n    - \u539f\u6587\uff1a{\u554f\u984c\u306e\u3042\u308b\u6587\u5b57\u5217}\\\\n    - \u5bfe\u6848\uff1a{\u7f6e\u304d\u63db\u3048\u5019\u88dc}\u300d\u306e3\u884c\u3067\u51fa\u529b\u3057\u3001\u6307\u6458\u3068\u6307\u6458\u306e\u9593\u306b\u306f\u7a7a\u884c\u30921\u884c\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\u6b63\u3057\u3044\u5185\u5bb9\u3092\u7279\u5b9a\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u63a8\u6e2c\u305b\u305a\u3001\u300c\u6b63\u3057\u3044\u4e88\u5b9a\u65e5\u306b\u66f4\u65b0\u300d\u306a\u3069\u5fc5\u8981\u306a\u4fee\u6b63\u5185\u5bb9\u3092\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a72\u5f53\u7b87\u6240\u304c\u306a\u3044\u5834\u5408\u306f\u300c\u660e\u3089\u304b\u306a\u8aa4\u690d\u3084\u66f4\u65b0\u6f0f\u308c\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u300d\u3068\u306e\u4e00\u6587\u3060\u3051\u3092\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;\u6295\u8cc7\u3068\u52b9\u679c\u3092\u4f5c\u6587&quot;, body: &quot;\u300c\u4ef6\u540d\/Title\u30fb\u652f\u6255\u5148\u30fb\u652f\u6255\u671f\u65e5\u30fb\u652f\u6255\u91d1\u984d\u30fb\u7533\u8acb\u8a73\u7d30\u30fb\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u300d\u3092\u5168\u6587\u78ba\u8a8d\u3057\u3001\u3053\u306e\u7533\u8acb\u306e\u6295\u8cc7\u5185\u5bb9\u3001\u671f\u5f85\u3055\u308c\u308b\u52b9\u679c\u3001\u6295\u8cc7\u5bfe\u52b9\u679c\u3092\u3001\u627f\u8a8d\u8005\u304c\u5224\u65ad\u3057\u3084\u3059\u3044\u6587\u7ae0\u306b\u6574\u7406\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u521d\u306b\u3001\u2460\u521d\u671f\u8cbb\u7528\u30fb\u7d99\u7d9a\u8cbb\u7528\u30fb\u4eba\u7684\u8ca0\u62c5\u306a\u3069\u306e\u6295\u8cc7\u3001\u2461\u58f2\u4e0a\u5897\u52a0\u30fb\u8cbb\u7528\u524a\u6e1b\u30fb\u5de5\u6570\u524a\u6e1b\u30fb\u54c1\u8cea\u5411\u4e0a\u30fb\u51e6\u7406\u6642\u9593\u77ed\u7e2e\u306a\u3069\u306e\u52b9\u679c\u3001\u2462\u6295\u8cc7\u984d\u3068\u52b9\u679c\u306e\u5bfe\u5fdc\u95a2\u4fc2\u3001\u306e\u9806\u306b\u72ec\u7acb\u3057\u3066\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u306b\u6570\u5024\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u91d1\u984d\u30fb\u6642\u9593\u30fb\u671f\u9593\u3092\u7701\u7565\u305b\u305a\u3001\u8a08\u7b97\u53ef\u80fd\u306a\u5834\u5408\u306f\u8a08\u7b97\u6839\u62e0\u3082\u7c21\u6f54\u306b\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u52b9\u679c\u3001\u91d1\u984d\u3001\u524a\u6e1b\u6642\u9593\u3001\u767a\u751f\u78ba\u7387\u306a\u3069\u306f\u63a8\u6e2c\u30fb\u634f\u9020\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5168\u4f53\u3092400\u6587\u5b57\u7a0b\u5ea6\u3068\u3057\u3001\u5fc5\u305a\u6b21\u306e\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5404\u898b\u51fa\u3057\u306f\u72ec\u7acb\u3057\u305f\u884c\u306b\u7f6e\u304d\u3001\u898b\u51fa\u3057\u306e\u6b21\u306e\u884c\u306b\u672c\u6587\u3092\u8a18\u8f09\u3057\u3001\u30bb\u30af\u30b7\u30e7\u30f3\u9593\u306b\u306f\u7a7a\u884c\u30921\u884c\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\\\\n\u6295\u8cc7\u5185\u5bb9\uff1a\\\\n{\u6295\u8cc7\u984d\u3001\u5951\u7d04\u671f\u9593\u3001\u4eba\u7684\u8ca0\u62c5\u306a\u3069}\\\\n\\\\n\u671f\u5f85\u3055\u308c\u308b\u52b9\u679c\uff1a\\\\n{\u5b9a\u91cf\u52b9\u679c\u3068\u5b9a\u6027\u52b9\u679c}\\\\n\\\\n\u6295\u8cc7\u5bfe\u52b9\u679c\uff1a\\\\n{\u6295\u8cc7\u3068\u52b9\u679c\u306e\u6bd4\u8f03\u304a\u3088\u3073\u8a55\u4fa1}\\\\n\\\\n\u8981\u78ba\u8a8d\uff1a\\\\n- {\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5224\u65ad\u6750\u6599}\u3000\u4e0d\u8db3\u4e8b\u9805\u304c\u306a\u3044\u5834\u5408\u306f\u300c\u8981\u78ba\u8a8d\uff1a\u306a\u3057\u300d\u3068\u8a18\u8f09\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;\u30ea\u30b9\u30af\u4f4e\u6e1b\u56de\u907f\u3092\u4f5c\u6587&quot;, body: &quot;\u300c\u4ef6\u540d\/Title\u30fb\u652f\u6255\u5148\u30fb\u652f\u6255\u671f\u65e5\u30fb\u652f\u6255\u91d1\u984d\u30fb\u7533\u8acb\u8a73\u7d30\u30fb\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u300d\u3092\u5168\u6587\u78ba\u8a8d\u3057\u3001\u3053\u306e\u7533\u8acb\u306b\u3088\u3063\u3066\u4f4e\u6e1b\u307e\u305f\u306f\u56de\u907f\u3067\u304d\u308b\u30ea\u30b9\u30af\u3092\u3001\u627f\u8a8d\u8005\u304c\u5224\u65ad\u3057\u3084\u3059\u3044\u6587\u7ae0\u306b\u6574\u7406\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u521d\u306b\u3001\u2460\u73fe\u5728\u5b58\u5728\u3059\u308b\u30ea\u30b9\u30af\u3001\u2461\u7533\u8acb\u3092\u5b9f\u65bd\u3057\u306a\u3044\u5834\u5408\u306b\u60f3\u5b9a\u3055\u308c\u308b\u5f71\u97ff\u3001\u2462\u7533\u8acb\u306b\u3088\u308b\u30ea\u30b9\u30af\u4f4e\u6e1b\u7b56\u3001\u2463\u30ea\u30b9\u30af\u4f4e\u6e1b\u52b9\u679c\u3068\u6295\u8cc7\u984d\u306e\u95a2\u4fc2\u3001\u306e\u9806\u306b\u72ec\u7acb\u3057\u3066\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6cd5\u4ee4\u9055\u53cd\u3001\u60c5\u5831\u6f0f\u3048\u3044\u3001\u696d\u52d9\u505c\u6b62\u3001\u30c7\u30fc\u30bf\u6d88\u5931\u3001\u54c1\u8cea\u4f4e\u4e0b\u3001\u7d0d\u671f\u9045\u5ef6\u3001\u4eba\u7684\u30df\u30b9\u3001\u4fe1\u7528\u4f4e\u4e0b\u3001\u6a5f\u4f1a\u640d\u5931\u306a\u3069\u306e\u3046\u3061\u3001\u5165\u529b\u60c5\u5831\u306b\u6839\u62e0\u304c\u3042\u308b\u3082\u306e\u3060\u3051\u3092\u53d6\u308a\u4e0a\u3052\u3066\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u306b\u6570\u5024\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u767a\u751f\u4ef6\u6570\u3001\u640d\u5931\u91cf\u3001\u505c\u6b62\u6642\u9593\u3001\u5fa9\u65e7\u6642\u9593\u306a\u3069\u3092\u7701\u7565\u305b\u305a\u306b\u8a18\u8f09\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30ea\u30b9\u30af\u3092\u904e\u5ea6\u306b\u8a87\u5f35\u305b\u305a\u3001\u8a18\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u4e8b\u5b9f\u3001\u767a\u751f\u78ba\u7387\u3001\u640d\u5931\u984d\u306a\u3069\u306f\u63a8\u6e2c\u30fb\u634f\u9020\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5168\u4f53\u3092400\u6587\u5b57\u7a0b\u5ea6\u3068\u3057\u3001\u5fc5\u305a\u6b21\u306e\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5404\u898b\u51fa\u3057\u306f\u72ec\u7acb\u3057\u305f\u884c\u306b\u7f6e\u304d\u3001\u898b\u51fa\u3057\u306e\u6b21\u306e\u884c\u306b\u672c\u6587\u3092\u8a18\u8f09\u3057\u3001\u30bb\u30af\u30b7\u30e7\u30f3\u9593\u306b\u306f\u7a7a\u884c\u30921\u884c\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\\\\n\u60f3\u5b9a\u3055\u308c\u308b\u30ea\u30b9\u30af\uff1a\\\\n{\u73fe\u5728\u306e\u30ea\u30b9\u30af\u3068\u60f3\u5b9a\u3055\u308c\u308b\u5f71\u97ff}\\\\n\\\\n\u30ea\u30b9\u30af\u4f4e\u6e1b\u30fb\u56de\u907f\u306e\u5185\u5bb9\uff1a\\\\n{\u7533\u8acb\u306b\u3088\u308b\u5177\u4f53\u7684\u306a\u4f4e\u6e1b\u7b56\u3068\u52b9\u679c}\\\\n\\\\n\u6295\u8cc7\u306e\u59a5\u5f53\u6027\uff1a\\\\n{\u30ea\u30b9\u30af\u4f4e\u6e1b\u52b9\u679c\u3092\u8e0f\u307e\u3048\u305f\u8a55\u4fa1}\\\\n\\\\n\u8981\u78ba\u8a8d\uff1a\\\\n- {\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5224\u65ad\u6750\u6599}\u3000\u4e0d\u8db3\u4e8b\u9805\u304c\u306a\u3044\u5834\u5408\u306f\u300c\u8981\u78ba\u8a8d\uff1a\u306a\u3057\u300d\u3068\u8a18\u8f09\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;\u627f\u8a8d\u30b3\u30e1\u30f3\u30c8\u3092\u4f5c\u6587&quot;, body: &quot;\u300c\u4ef6\u540d\/Title\u30fb\u652f\u6255\u5148\u30fb\u652f\u6255\u671f\u65e5\u30fb\u652f\u6255\u91d1\u984d\u30fb\u7533\u8acb\u8a73\u7d30\u30fb\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u300d\u3092\u5168\u6587\u78ba\u8a8d\u3057\u3001\u627f\u8a8d\u8a18\u9332\u3078\u305d\u306e\u307e\u307e\u8cbc\u308a\u4ed8\u3051\u3089\u308c\u308b\u30b3\u30e1\u30f3\u30c8\u3092\u3001\u627f\u8a8d\u8005\u306e\u7acb\u5834\u3067\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7533\u8acb\u76ee\u7684\u3001\u652f\u51fa\u306e\u59a5\u5f53\u6027\u3001\u671f\u5f85\u3055\u308c\u308b\u52b9\u679c\u3001\u30ea\u30b9\u30af\u4f4e\u6e1b\u52b9\u679c\u3001\u5b9f\u65bd\u5f8c\u306b\u78ba\u8a8d\u3059\u3079\u304d\u4e8b\u9805\u3092\u305d\u308c\u305e\u308c\u78ba\u8a8d\u3057\u3001\u5165\u529b\u60c5\u5831\u306b\u6839\u62e0\u304c\u3042\u308b\u5185\u5bb9\u3060\u3051\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a18\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u4e8b\u5b9f\u3001\u52b9\u679c\u3001\u6761\u4ef6\u306a\u3069\u306f\u63a8\u6e2c\u30fb\u634f\u9020\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u627f\u8a8d\u3067\u304d\u308b\u5834\u5408\u306f\u5168\u4f53\u3092200\uff5e300\u6587\u5b57\u7a0b\u5ea6\u3068\u3057\u3001\u5fc5\u305a\u6b21\u306e\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5404\u898b\u51fa\u3057\u306f\u72ec\u7acb\u3057\u305f\u884c\u306b\u7f6e\u304d\u3001\u30bb\u30af\u30b7\u30e7\u30f3\u9593\u306b\u306f\u7a7a\u884c\u30921\u884c\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\\\\n\u627f\u8a8d\u3057\u307e\u3059\u3002\\\\n\\\\n\u627f\u8a8d\u7406\u7531\uff1a\\\\n{\u76ee\u7684\u3001\u652f\u51fa\u306e\u59a5\u5f53\u6027\u3001\u671f\u5f85\u52b9\u679c\u307e\u305f\u306f\u30ea\u30b9\u30af\u4f4e\u6e1b\u52b9\u679c}\\\\n\\\\n\u627f\u8a8d\u5f8c\u306e\u78ba\u8a8d\u4e8b\u9805\uff1a\\\\n- {\u52b9\u679c\u691c\u8a3c\u3001\u671f\u9650\u3001\u5b9f\u65bd\u6761\u4ef6\u306a\u3069}\u3000\u78ba\u8a8d\u4e8b\u9805\u304c\u306a\u3044\u5834\u5408\u306f\u300c\u627f\u8a8d\u5f8c\u306e\u78ba\u8a8d\u4e8b\u9805\uff1a\u306a\u3057\u300d\u3068\u8a18\u8f09\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u627f\u8a8d\u5224\u65ad\u306b\u5fc5\u8981\u306a\u60c5\u5831\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u627f\u8a8d\u3092\u634f\u9020\u305b\u305a\u3001\u300c\u627f\u8a8d\u5224\u65ad\u3092\u4fdd\u7559\u3057\u307e\u3059\u3002\\\\n\\\\n\u8981\u78ba\u8a8d\uff1a\\\\n- {\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5224\u65ad\u6750\u6599}\u300d\u306e\u5f62\u5f0f\u3067\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;\u5dee\u623b\u30b3\u30e1\u30f3\u30c8\u3092\u4f5c\u6587&quot;, body: &quot;\u300c\u4ef6\u540d\/Title\u30fb\u652f\u6255\u5148\u30fb\u652f\u6255\u671f\u65e5\u30fb\u652f\u6255\u91d1\u984d\u30fb\u7533\u8acb\u8a73\u7d30\u30fb\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u300d\u3092\u5168\u6587\u78ba\u8a8d\u3057\u3001\u7533\u8acb\u8005\u304c\u5177\u4f53\u7684\u306b\u4fee\u6b63\u3067\u304d\u308b\u5dee\u623b\u30b3\u30e1\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u521d\u306b\u3001\u2460\u5fc5\u9808\u60c5\u5831\u306e\u4e0d\u8db3\u3001\u2461\u9805\u76ee\u9593\u304a\u3088\u3073\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3068\u306e\u4e0d\u4e00\u81f4\u3001\u2462\u91d1\u984d\u30fb\u65e5\u4ed8\u30fb\u5951\u7d04\u671f\u9593\u306e\u4e0d\u6574\u5408\u3001\u2463\u91d1\u984d\u306e\u5185\u8a33\u3084\u7b97\u5b9a\u6839\u62e0\u306e\u4e0d\u8db3\u3001\u2464\u652f\u6255\u5148\u306e\u9078\u5b9a\u7406\u7531\u3001\u671f\u5f85\u52b9\u679c\u3001\u30ea\u30b9\u30af\u4f4e\u6e1b\u52b9\u679c\u306e\u4e0d\u8db3\u3001\u306e\u9806\u306b\u72ec\u7acb\u3057\u3066\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u30021\u4ef6\u898b\u3064\u3051\u3066\u3082\u78ba\u8a8d\u3092\u7d42\u4e86\u305b\u305a\u3001\u627f\u8a8d\u5224\u65ad\u3092\u59a8\u3052\u308b\u4e8b\u9805\u3092\u3059\u3079\u3066\u62bd\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6587\u7ae0\u8868\u73fe\u306e\u597d\u307f\u3084\u8efd\u5fae\u306a\u91cd\u8907\u306a\u3069\u3001\u627f\u8a8d\u5224\u65ad\u306b\u5f71\u97ff\u3057\u306a\u3044\u4e8b\u9805\u306f\u5dee\u623b\u7406\u7531\u306b\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u554f\u984c\u3092\u63a8\u6e2c\u30fb\u634f\u9020\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5fc5\u305a\u6b21\u306e\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3001\u5404\u9805\u76ee\u306e\u9593\u306b\u306f\u7a7a\u884c\u30921\u884c\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\\\\n\u5dee\u3057\u623b\u3057\u307e\u3059\u3002\\\\n\\\\n\u5dee\u623b\u7406\u7531\uff1a\\\\n{\u627f\u8a8d\u3067\u304d\u306a\u3044\u7406\u7531\u306e\u8981\u7d04}\\\\n\\\\n\u78ba\u8a8d\u30fb\u4fee\u6b63\u3057\u3066\u307b\u3057\u3044\u4e8b\u9805\uff1a\\\\n- {\u5bfe\u8c61\u9805\u76ee\uff1a\u5177\u4f53\u7684\u306a\u78ba\u8a8d\u30fb\u4fee\u6b63\u5185\u5bb9}\\\\n- {\u5bfe\u8c61\u9805\u76ee\uff1a\u5177\u4f53\u7684\u306a\u78ba\u8a8d\u30fb\u4fee\u6b63\u5185\u5bb9}\u3000\u4fee\u6b63\u4e8b\u9805\u306f\u91cd\u8981\u5ea6\u306e\u9ad8\u3044\u9806\u306b\u5217\u6319\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5dee\u623b\u3057\u3092\u8981\u3059\u308b\u660e\u3089\u304b\u306a\u4e8b\u9805\u304c\u306a\u3044\u5834\u5408\u306f\u300c\u5dee\u623b\u3057\u3092\u8981\u3059\u308b\u660e\u3089\u304b\u306a\u4e8b\u9805\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300d\u3068\u306e\u4e00\u6587\u3060\u3051\u3092\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot; },\n    { title: &quot;M6&quot;, body: &quot;\u7c21\u5358\u306b\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; },\n    { title: &quot;M7&quot;, body: &quot;\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; },\n    { title: &quot;M8&quot;, body: &quot;\u53b3\u3057\u304f\u30ec\u30d3\u30e5\u30fc\u3057\u3066&quot; }\n  ];\n\n  \/\/ \u30b9\u30c8\u30ec\u30fc\u30b8\u30ad\u30fc\n  const KEY_API = STORAGE_PREFIX + &quot;openai_api_key&quot;;\n  const KEY_MODEL = STORAGE_PREFIX + &quot;openai_model&quot;;\n  const KEY_INST_TITLE = STORAGE_PREFIX + &quot;openai_inst_title_&quot;;\n  const KEY_INST_BODY = STORAGE_PREFIX + &quot;openai_inst_body_&quot;;\n\n  const filesArea = document.getElementById(&quot;user_files_area&quot;);\n  const buttonsArea = document.getElementById(&quot;user_buttons_area&quot;);\n  const configArea = document.getElementById(&quot;user_config_area&quot;);\n  const resultElement = document.getElementById(&quot;user_result&quot;);\n  const statusElement = document.getElementById(&quot;user_status&quot;);\n  \n  \/\/ Questetra\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9\n  const qctx = window.qbpms?.contextPath || &quot;&quot;;\n  let isConfigOpen = false;\n\n  \/\/ --- \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3: ArrayBuffer \u3092 Base64 \u306b\u5909\u63db ---\n  function user_arrayBufferToBase64(buffer) {\n    let binary = &#39;&#39;;\n    const bytes = new Uint8Array(buffer);\n    const len = bytes.byteLength;\n    for (let i = 0; i &lt; len; i++) {\n      binary += String.fromCharCode(bytes[i]);\n    }\n    return window.btoa(binary);\n  }\n\n  \/\/ --- \u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u306e\u63cf\u753b\u95a2\u6570 ---\n  function renderFileList() {\n    filesArea.innerHTML = &quot;&quot;;\n    if (!TARGET_FILES_FIELD_NAME) {\n      filesArea.style.display = &quot;none&quot;;\n      return;\n    }\n\n    const files = qbpms.form.get(TARGET_FILES_FIELD_NAME);\n    if (!files || files.length === 0) {\n      filesArea.style.display = &quot;none&quot;;\n      return;\n    }\n\n    filesArea.style.display = &quot;block&quot;;\n    const lbl = document.createElement(&quot;span&quot;);\n    lbl.className = &quot;user_lbl&quot;;\n    lbl.style.marginTop = &quot;0&quot;;\n    lbl.innerText = &quot;Attachments (Check target files):&quot;;\n    filesArea.appendChild(lbl);\n\n    files.forEach((file) =&gt; {\n      const label = document.createElement(&quot;label&quot;);\n      label.className = &quot;user_file_cb_label&quot;;\n\n      const cb = document.createElement(&quot;input&quot;);\n      cb.type = &quot;checkbox&quot;;\n      cb.value = file.id; \n      cb.dataset.filename = file.name;\n      cb.dataset.pdiid = file.processDataInstanceId;\n      cb.checked = true;\n      cb.className = &quot;user_file_cb&quot;;\n\n      label.appendChild(cb);\n      label.appendChild(document.createTextNode(file.name));\n      filesArea.appendChild(label);\n    });\n  }\n\n  \/\/ --- 1. \u521d\u671f\u63cf\u753b\u3068\u30d5\u30a1\u30a4\u30eb\u9805\u76ee\u306e\u5909\u66f4\u76e3\u8996 ---\n  renderFileList();\n  if (TARGET_FILES_FIELD_NAME) {\n    qbpms.form.on(&#39;change&#39;, TARGET_FILES_FIELD_NAME, renderFileList);\n  }\n\n  \/\/ --- 2. \u30e1\u30a4\u30f3\u30dc\u30bf\u30f3\u7fa4\u306e\u52d5\u7684\u751f\u6210 ---\n  const btnConfig = document.createElement(&quot;button&quot;);\n  btnConfig.type = &quot;button&quot;;\n  btnConfig.id = &quot;user_btnConfig&quot;;\n  btnConfig.innerText = &quot;CONFIG&quot;;\n  buttonsArea.appendChild(btnConfig);\n\n  const aiButtons = [];\n  for (let i = 0; i &lt; 8; i++) {\n    const btn = document.createElement(&quot;button&quot;);\n    btn.type = &quot;button&quot;;\n    btn.className = &quot;user_aiBtn&quot;;\n    buttonsArea.appendChild(btn);\n    aiButtons.push(btn);\n  }\n\n  \/\/ --- 3. CONFIG\u30a8\u30ea\u30a2\u306e\u52d5\u7684\u751f\u6210 ---\n  const lblApi = document.createElement(&quot;span&quot;); lblApi.className = &quot;user_lbl&quot;; lblApi.innerText = &quot;API\u30ad\u30fc \/ API Key (\u30de\u30b9\u30af\u306a\u3057):&quot;; configArea.appendChild(lblApi);\n  const inpApi = document.createElement(&quot;input&quot;); inpApi.type = &quot;text&quot;; inpApi.className = &quot;user_input&quot;; inpApi.placeholder = &quot;sk-...&quot;; configArea.appendChild(inpApi);\n  \n  const lblModel = document.createElement(&quot;span&quot;);\n    lblModel.className = &quot;user_lbl&quot;;\n    lblModel.innerHTML = &#39;\u30e2\u30c7\u30eb \/ Model: &lt;a href=&quot;https:\/\/platform.openai.com\/docs\/models&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style=&quot;font-weight: normal; font-size: 12px; margin-left: 12px; color: #2b6cb0; text-decoration: underline;&quot;&gt;\u21d2 Available Models (OpenAI Docs)&lt;\/a&gt;&#39;;\n  configArea.appendChild(lblModel);\n  const inpModel = document.createElement(&quot;input&quot;); inpModel.type = &quot;text&quot;; inpModel.className = &quot;user_input&quot;; inpModel.placeholder = &quot;gpt-5.4&quot;; configArea.appendChild(inpModel);\n\n  const instInputs = [];\n  for (let i = 0; i &lt; 8; i++) {\n    const lbl = document.createElement(&quot;span&quot;); lbl.className = &quot;user_lbl&quot;; lbl.innerText = `\u6307\u793a\u6587${i + 1} \/ Instruction ${i + 1}:`; configArea.appendChild(lbl);\n    const inpT = document.createElement(&quot;input&quot;); inpT.type = &quot;text&quot;; inpT.className = &quot;user_input&quot;; inpT.placeholder = &quot;Instruction Title&quot;; configArea.appendChild(inpT);\n    const inpB = document.createElement(&quot;textarea&quot;); inpB.className = &quot;user_input&quot;; inpB.placeholder = &quot;Instruction Details&quot;; configArea.appendChild(inpB);\n    instInputs.push({ title: inpT, body: inpB });\n  }\n\n  const hr = document.createElement(&quot;hr&quot;); hr.style.margin = &quot;16px 0&quot;; hr.style.borderTop = &quot;1px dashed #ccc&quot;; configArea.appendChild(hr);\n  const btnSave = document.createElement(&quot;button&quot;); btnSave.type = &quot;button&quot;; btnSave.className = &quot;user_actionBtn&quot;; btnSave.innerText = &quot;\u8a2d\u5b9a\u3092\u4fdd\u5b58 \/ Save&quot;; configArea.appendChild(btnSave);\n  const btnClear = document.createElement(&quot;button&quot;); btnClear.type = &quot;button&quot;; btnClear.className = &quot;user_actionBtn&quot;; btnClear.innerText = &quot;\u521d\u671f\u5316 \/ Reset&quot;; configArea.appendChild(btnClear);\n  const saveStatus = document.createElement(&quot;span&quot;); saveStatus.style.color = &quot;#0066cc&quot;; saveStatus.style.fontWeight = &quot;bold&quot;; saveStatus.style.fontSize = &quot;13px&quot;; configArea.appendChild(saveStatus);\n\n  \/\/ --- 4. \u8a2d\u5b9a\u5024\u306e\u8aad\u307f\u8fbc\u307f ---\n  function loadSettings() {\n    inpApi.value = localStorage.getItem(KEY_API) || &quot;&quot;;\n    inpModel.value = localStorage.getItem(KEY_MODEL) || DEFAULT_MODEL;\n    for (let i = 0; i &lt; 8; i++) {\n      const storedT = localStorage.getItem(KEY_INST_TITLE + i);\n      const storedB = localStorage.getItem(KEY_INST_BODY + i);\n      instInputs[i].title.value = storedT !== null ? storedT : DEFAULT_INST[i].title;\n      instInputs[i].body.value = storedB !== null ? storedB : DEFAULT_INST[i].body;\n      aiButtons[i].innerText = instInputs[i].title.value;\n    }\n  }\n  loadSettings();\n\n  \/\/ --- 5. \u5404\u7a2e\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc ---\n  btnConfig.addEventListener(&quot;click&quot;, () =&gt; {\n    isConfigOpen = !isConfigOpen;\n    configArea.style.display = isConfigOpen ? &quot;block&quot; : &quot;none&quot;;\n    if (isConfigOpen) {\n      btnConfig.classList.add(&quot;user_active&quot;);\n      loadSettings();\n    } else {\n      btnConfig.classList.remove(&quot;user_active&quot;);\n    }\n  });\n\n  btnSave.addEventListener(&quot;click&quot;, () =&gt; {\n    localStorage.setItem(KEY_API, inpApi.value.trim());\n    localStorage.setItem(KEY_MODEL, inpModel.value.trim());\n    for (let i = 0; i &lt; 8; i++) {\n      localStorage.setItem(KEY_INST_TITLE + i, instInputs[i].title.value);\n      localStorage.setItem(KEY_INST_BODY + i, instInputs[i].body.value);\n      aiButtons[i].innerText = instInputs[i].title.value;\n    }\n    saveStatus.innerText = &quot; \u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f \/ Saved&quot;;\n    setTimeout(() =&gt; { saveStatus.innerText = &quot;&quot;; }, 2500);\n  });\n\n  btnClear.addEventListener(&quot;click&quot;, () =&gt; {\n    if (!confirm(&quot;\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u623b\u3057\u307e\u3059\u304b\uff1f \/ Do you want to revert to the default?&quot;)) return;\n    localStorage.removeItem(KEY_API);\n    localStorage.removeItem(KEY_MODEL);\n    for (let i = 0; i &lt; 8; i++) {\n      localStorage.removeItem(KEY_INST_TITLE + i);\n      localStorage.removeItem(KEY_INST_BODY + i);\n    }\n    loadSettings();\n    saveStatus.innerText = &quot; \u521d\u671f\u5316\u3057\u307e\u3057\u305f \/ Initialized &quot;;\n    setTimeout(() =&gt; { saveStatus.innerText = &quot;&quot;; }, 2500);\n  });\n\n  \/\/ --- \u30c6\u30ad\u30b9\u30c8\u5165\u529b\u5024\u306e\u62bd\u51fa ---\n  function getTargetTextInputs() {\n    const today = new Intl.DateTimeFormat(&quot;sv-SE&quot;, {\n      timeZone: &quot;Asia\/Tokyo&quot;,\n      year: &quot;numeric&quot;,\n      month: &quot;2-digit&quot;,\n      day: &quot;2-digit&quot;\n    }).format(new Date());\n    let combinedInput = `\u57fa\u6e96\u65e5\uff1a${today}\\n\\n`; \/\/ \u4eca\u65e5\u3092\u57fa\u6e96\u65e5\u306b\n    if (TARGET_FIELD_NAMES) {\n      const fields = TARGET_FIELD_NAMES.split(&quot;,&quot;);\n      fields.forEach(f =&gt; {\n        const val = qbpms.form.get(f.trim());\n        if (val) combinedInput += `\u3010${f.trim()}\u3011\\n${val}\\n\\n`;\n      });\n    }\n    return combinedInput.trim();\n  }\n\n  \/\/ --- 6. AI\u547c\u3073\u51fa\u3057\u51e6\u7406 ---\n  aiButtons.forEach((btn, index) =&gt; {\n    btn.addEventListener(&quot;click&quot;, async () =&gt; {\n      const strKey = localStorage.getItem(KEY_API);\n      const modelName = localStorage.getItem(KEY_MODEL) || DEFAULT_MODEL;\n      const strInstruction = instInputs[index].body.value;\n      const strInput = getTargetTextInputs();\n\n      if (!strKey) {\n        statusElement.innerText = &quot;ERROR: The API key has not been set. Save the setting in CONFIG.&quot;;\n        resultElement.innerText = &quot;&quot;;\n        return;\n      }\n\n      \/\/ \u51e6\u7406\u958b\u59cb: UI\u306e\u7121\u52b9\u5316\n      aiButtons.forEach(b =&gt; b.disabled = true);\n      btnConfig.disabled = true;\n      resultElement.innerHTML = &#39;&#39;;\n      \n      const contentParts = [];\n      const uploadedFileIds = []; \/\/ \u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u7528\u306eID\u4fdd\u6301\u914d\u5217\n      let processHasError = false; \/\/ \u30a8\u30e9\u30fc\u8868\u793a\u306e\u4e0a\u66f8\u304d\u9632\u6b62\u30d5\u30e9\u30b0\n\n      if (strInput) {\n        contentParts.push({ type: &quot;input_text&quot;, text: strInput });\n      }\n\n      \/\/ --- [\u30d5\u30a1\u30a4\u30eb\u53d6\u5f97\u30fb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406] ---\n      if (TARGET_FILES_FIELD_NAME) {\n        const checkboxes = document.querySelectorAll(&quot;.user_file_cb&quot;);\n        for (const cb of checkboxes) {\n          if (cb.checked) {\n            const qfileId = cb.value;\n            const filename = cb.dataset.filename;\n            const pdiId = cb.dataset.pdiid;\n\n            statusElement.innerText = ` ${filename} downloading ...`;\n\n            try {\n              const fetchUrl = `${qctx}\/API\/OR\/ProcessInstance\/File\/download?id=${encodeURIComponent(qfileId)}&processDataInstanceId=${encodeURIComponent(pdiId)}`;\n              const dlRes = await fetch(fetchUrl);\n              \n              if (!dlRes.ok) {\n                throw new Error(`HTTP Error: ${dlRes.status}`);\n              }\n\n              const contentType = dlRes.headers.get(&#39;content-type&#39;) || &#39;application\/octet-stream&#39;;\n              const buf = await dlRes.arrayBuffer();\n              \n              if (contentType.startsWith(&#39;image\/&#39;)) {\n                const base64 = user_arrayBufferToBase64(buf);\n                const dataUrl = `data:${contentType};base64,${base64}`;\n                contentParts.push({ type: &quot;input_image&quot;, image_url: dataUrl });\n                statusElement.innerText = `\u753b\u50cf\u300c${filename}\u300d\u3092\u6dfb\u4ed8\u3057\u307e\u3057\u305f\u3002\/ Attached`;\n              } else {\n                statusElement.innerText = ` ${filename} uploading ...`;\n                const formData = new FormData();\n                const blob = new Blob([new Uint8Array(buf)], { type: contentType });\n                const fileObj = (typeof File !== &#39;undefined&#39;) ? new File([blob], filename, { type: contentType }) : blob;\n                \n                formData.append(&quot;purpose&quot;, &quot;user_data&quot;);\n                formData.append(&quot;file&quot;, fileObj, filename);\n                \n                const upRes = await fetch(&quot;https:\/\/api.openai.com\/v1\/files&quot;, {\n                  method: &quot;POST&quot;,\n                  headers: { &quot;Authorization&quot;: `Bearer ${strKey}` },\n                  body: formData\n                });\n                \n                if (!upRes.ok) {\n                  let msg = `OpenAI File Upload Error: ${upRes.status}`;\n                  try { msg += `\\n${JSON.stringify(await upRes.json(), null, 2)}`; } catch (_) {}\n                  throw new Error(msg);\n                }\n                \n                const upJson = await upRes.json();\n                const uploadedFileId = upJson.id; \n                \n                uploadedFileIds.push(uploadedFileId); \/\/ \u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u5bfe\u8c61\u3068\u3057\u3066\u4fdd\u6301\n                contentParts.push({ type: &#39;input_file&#39;, file_id: uploadedFileId });\n                statusElement.innerText = `\u30d5\u30a1\u30a4\u30eb\u300c${filename}\u300d\u3092\u6dfb\u4ed8\u3057\u307e\u3057\u305f\u3002\/ Attached`;\n              }\n              \n            } catch (error) {\n              console.error(&quot;File fetch\/upload error:&quot;, error);\n              statusElement.innerText = `Error: Failed to process the file &quot;${filename}&quot;.`;\n              aiButtons.forEach(b =&gt; b.disabled = false);\n              btnConfig.disabled = false;\n              return;\n            }\n          }\n        }\n      }\n\n      if (contentParts.length === 0) {\n        statusElement.innerText = `Error: \u5bfe\u8c61\u30d5\u30a3\u30fc\u30eb\u30c9\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb \u304c\u7a7a\u3067\u3059\u3002\/ The target field or file is empty.`;\n        aiButtons.forEach(b =&gt; b.disabled = false);\n        btnConfig.disabled = false;\n        return;\n      }\n\n      statusElement.innerText = &quot;AI\u306b\u63a5\u7d9a\u4e2d... \/ Connecting to AI...&quot;;\n      resultElement.innerHTML = &#39;&lt;span class=&quot;user_cursor&quot;&gt;&lt;\/span&gt;&#39;;\n      const cursor = resultElement.querySelector(&quot;.user_cursor&quot;);\n\n      try {\n        const response = await fetch(&quot;https:\/\/api.openai.com\/v1\/responses&quot;, {\n          method: &quot;POST&quot;,\n          headers: {\n            &quot;Content-Type&quot;: &quot;application\/json&quot;,\n            &quot;Accept&quot;: &quot;text\/event-stream&quot;,\n            &quot;Authorization&quot;: `Bearer ${strKey}`\n          },\n          body: JSON.stringify({\n            model: modelName,\n            reasoning: { effort: &quot;medium&quot; },\n            instructions: strInstruction,\n            input: [ { role: &quot;user&quot;, content: contentParts } ],\n            stream: true\n          })\n        });\n\n        if (!response.ok) {\n          let msg = `API Error: ${response.status}`;\n          try {\n            const err = await response.json();\n            msg += `\\n${JSON.stringify(err, null, 2)}`;\n          } catch (_) {}\n          throw new Error(msg);\n        }\n        \n        statusElement.innerText = &quot;AI\u304c\u6587\u7ae0\u3092\u751f\u6210\u4e2d... \/ AI is generating text...&quot;;\n        const reader = response.body.getReader();\n        const decoder = new TextDecoder();\n        let buffer = &quot;&quot;;\n        let currentEvent = &quot;&quot;;\n        \n        const flushLines = (chunkText) =&gt; {\n          buffer += chunkText;\n          const lines = buffer.split(\/\\r?\\n\/);\n          buffer = lines.pop() || &quot;&quot;;\n          \n          for (const line of lines) {\n            if (!line.trim()) continue;\n            \n            if (line.startsWith(&quot;event:&quot;)) {\n              currentEvent = line.replace(\/^event:\\s*\/, &quot;&quot;).trim();\n              continue;\n            }\n            \n            if (line.startsWith(&quot;data:&quot;)) {\n              const dataRaw = line.replace(\/^data:\\s*\/, &quot;&quot;).trim();\n              if (dataRaw === &quot;[DONE]&quot;) return &quot;DONE&quot;;\n              \n              let data = null;\n              try {\n                data = JSON.parse(dataRaw);\n              } catch (e) {\n                \/\/ \u30d1\u30fc\u30b9\u5931\u6557\u6642\u306f\u63e1\u308a\u3064\u3076\u3055\u305a\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u51fa\u529b\u3057\u3066\u30b9\u30ad\u30c3\u30d7\n                console.error(&quot;SSE JSON parse error:&quot;, dataRaw, e);\n                continue; \n              }\n\n              \/\/ \u2605\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u3068\u30d1\u30fc\u30b9\u3092\u5206\u96e2\n              if (currentEvent === &quot;response.output_text.delta&quot; && data.delta) {\n                cursor.insertAdjacentText(&quot;beforebegin&quot;, data.delta);\n              } else if (currentEvent === &quot;response.completed&quot;) {\n                return &quot;DONE&quot;;\n              } else if (currentEvent === &quot;error&quot; || currentEvent === &quot;response.error&quot;) {\n                \/\/ \u3053\u3053\u3067 throw \u3059\u308c\u3070\u3001\u5916\u5074\u306e catch (error) \u3067\u78ba\u5b9f\u306b\u88dc\u8db3\u30fb\u753b\u9762\u8868\u793a\u3055\u308c\u307e\u3059\n                throw new Error(data?.error?.message || &quot;Streaming API Error&quot;);\n              }\n            }\n          }\n        };\n\n        while (true) {\n          const { done, value } = await reader.read();\n          if (done) break;\n          const text = decoder.decode(value, { stream: true });\n          const status = flushLines(text);\n          if (status === &quot;DONE&quot;) break;\n        }\n        \n      } catch (error) {\n        processHasError = true;\n        console.error(&quot;Request failed:&quot;, error);\n        statusElement.innerText = &quot;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \/ An error occurred.&quot;;\n        cursor?.insertAdjacentText(&quot;beforebegin&quot;, `\\n[Exception] ${String(error.message || error)}`);\n      } finally {\n        const c = document.querySelector(&quot;#user_result .user_cursor&quot;);\n        c?.remove();\n        \n        \/\/ \u2605\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u51e6\u7406\n        if (uploadedFileIds.length &gt; 0 && strKey) {\n          if (!processHasError) {\n             statusElement.innerText = &quot;\u751f\u6210\u5b8c\u4e86 (\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u4e2d...) \/ Cleaning up files...&quot;;\n          }\n          \n          for (const fid of uploadedFileIds) {\n            try {\n              await fetch(`https:\/\/api.openai.com\/v1\/files\/${fid}`, {\n                method: &quot;DELETE&quot;,\n                headers: { &quot;Authorization&quot;: `Bearer ${strKey}` }\n              });\n            } catch (cleanupErr) {\n              console.error(`Failed to delete file ${fid}:`, cleanupErr);\n            }\n          }\n        }\n\n        if (!processHasError) {\n          statusElement.innerText = &quot;\u51e6\u7406\u5b8c\u4e86 \/ Completed&quot;;\n        }\n\n        aiButtons.forEach(b =&gt; b.disabled = false);\n        btnConfig.disabled = false;\n      }\n    });\n  });\n});\n&lt;\/script&gt;<\/code><\/pre><\/div>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<div class=\"has-small-font-size\" style=\"text-align: right;\"><div style=\"display: inline-block; background: #FBE7DD; text-align: center;\">\n\u81ea\u7531\u6539\u5909\u53ef\u80fd\u306a HTML\/JavaScript \u30b3\u30fc\u30c9\u3067\u3059 (MIT License)\u3002\u3044\u304b\u306a\u308b\u4fdd\u8a3c\u3082\u3042\u308a\u307e\u305b\u3093\u3002<br>\n(<em><strong>JavaScript \u3092\u7528\u3044\u305f\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3<\/strong><\/em>\u306f <em><strong><span style=\"color: #1970B9\">Professional<\/span><\/strong><\/em> edition\u3067\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3059: <a href=\"https:\/\/questetra.zendesk.com\/hc\/ja\/articles\/360002245252-M213\">M213<\/a>)\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span>Capture<\/span><\/h3>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aa06c3eef264&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aa06c3eef264\" class=\"wp-block-image size-large has-lightbox wp-lightbox-container\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" data-attachment-id=\"188391\" data-permalink=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-202606\/attachment\/qguide-request-to-openai-api-using-localstorage-202606-ja\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&amp;ssl=1\" data-orig-size=\"1200,628\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"qguide-request-to-openai-api-using-localstorage-202606-ja\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1024%2C536&amp;ssl=1\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=1024%2C536&#038;ssl=1\" alt=\"\" class=\"wp-image-188391\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=1024%2C536&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=600%2C315&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=768%2C402&amp;ssl=1 768w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?w=1200&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span>Capture<\/span><\/h3>\n\n\n\n<figure class=\"wp-block-video wp-block-embed is-type-video is-provider-videopress\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"VideoPress Video Player\" aria-label=\"VideoPress Video Player\" width=\"500\" height=\"281\" src=\"https:\/\/videopress.com\/embed\/TFnKkpfc?cover=1&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0\" frameborder=\"0\" allowfullscreen data-resize-to-parent=\"true\" allow=\"clipboard-write; presentation\"><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1770107250'><\/script>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-video wp-block-embed is-type-video is-provider-videopress\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"VideoPress Video Player\" aria-label=\"VideoPress Video Player\" width=\"500\" height=\"281\" src=\"https:\/\/videopress.com\/embed\/z1MnQPRl?cover=1&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0\" frameborder=\"0\" allowfullscreen data-resize-to-parent=\"true\" allow=\"clipboard-write; presentation\"><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1770107250'><\/script>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-video wp-block-embed is-type-video is-provider-videopress\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"VideoPress Video Player\" aria-label=\"VideoPress Video Player\" width=\"500\" height=\"281\" src=\"https:\/\/videopress.com\/embed\/1jteDQrL?cover=1&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0\" frameborder=\"0\" allowfullscreen data-resize-to-parent=\"true\" allow=\"clipboard-write; presentation\"><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1770107250'><\/script>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span>See also<\/span><\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-questetra-support wp-block-embed-questetra-support\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"OSA2T5Llql\"><a href=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-2025\/\">qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cqGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8\u201d \u2014 Questetra Support\" src=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-2025\/embed\/#?secret=DWsFaMlO3F#?secret=OSA2T5Llql\" data-secret=\"OSA2T5Llql\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-questetra-support wp-block-embed-questetra-support\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"pubc3Mw6pW\"><a href=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-2026\/\">qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cqGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248)\u201d \u2014 Questetra Support\" src=\"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-2026\/embed\/#?secret=G0muqES0Ms#?secret=pubc3Mw6pW\" data-secret=\"pubc3Mw6pW\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u6307\u5b9a\u30c7\u30fc\u30bf\u9805\u76ee\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u3068\u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u3092 Responses API \u306b CORS \u9001\u4fe1\u3057\u307e\u3059\u3002\u30ec\u30b9\u30dd\u30f3\u30b9\uff08\u30e2\u30c7\u30eb\u304c\u751f\u6210\u3057\u305f\u6587\u7ae0\uff09\u306f\u3001\u30bf\u30b9\u30af\u51e6\u7406\u753b\u9762\u4e0a\u3067\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u30f3\u30d7\u30c8\u8a2d\u5b9a\u6b21\u7b2c\u3067\u3001\u300c\u8aa4\u690d\u30c1\u30a7\u30c3\u30af\u6a5f\u80fd\u300d\u300c\u6587\u7ae0\u30ea\u30e9\u30a4\u30c8\u6a5f\u80fd\u300d\u300c\u5dee\u623b\u7406\u7531\u306e\u5019\u88dc\u5217\u6319\u6a5f\u80fd\u300d\u3068\u3044\u3063\u305f\u69d8\u3005\u306a\u652f\u63f4\u6a5f\u80fd\uff08\u30bf\u30b9\u30af\u51e6\u7406\u8005\u3092\u652f\u63f4\u3059\u308b\u6a5f\u80fd\uff09\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002&#8221;API\u30ad\u30fc&#8221; \u3068 &#8220;\u6307\u793a\u6587&#8221; \uff08\u6700\u59278\u500b\uff09\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30e6\u30fc\u30b6\u304c localStorage \u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"author":2,"featured_media":188391,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_uag_custom_page_level_css":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[3440],"tags":[3430],"faq_section":[],"class_list":["post-188389","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deco-ja","tag-openai-api-ja"],"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&ssl=1",1200,628,false],"thumbnail":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=440%2C440&ssl=1",440,440,true],"medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=600%2C315&ssl=1",600,315,true],"medium_large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=768%2C402&ssl=1",768,402,true],"large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1024%2C536&ssl=1",1024,536,true],"1536x1536":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&ssl=1",1200,628,true],"2048x2048":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&ssl=1",1200,628,true],"newspack-article-block-landscape-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=1200%2C628&ssl=1",1200,628,true],"newspack-article-block-portrait-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=900%2C628&ssl=1",900,628,true],"newspack-article-block-square-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=1200%2C628&ssl=1",1200,628,true],"newspack-article-block-landscape-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=800%2C600&ssl=1",800,600,true],"newspack-article-block-portrait-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=600%2C628&ssl=1",600,628,true],"newspack-article-block-square-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=800%2C628&ssl=1",800,628,true],"newspack-article-block-landscape-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=600%2C450&ssl=1",600,450,true],"newspack-article-block-portrait-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=450%2C600&ssl=1",450,600,true],"newspack-article-block-square-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=600%2C600&ssl=1",600,600,true],"newspack-article-block-landscape-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=400%2C300&ssl=1",400,300,true],"newspack-article-block-portrait-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=300%2C400&ssl=1",300,400,true],"newspack-article-block-square-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=400%2C400&ssl=1",400,400,true],"newspack-article-block-landscape-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=200%2C150&ssl=1",200,150,true],"newspack-article-block-portrait-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=150%2C200&ssl=1",150,200,true],"newspack-article-block-square-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?resize=200%2C200&ssl=1",200,200,true],"newspack-article-block-uncropped":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&ssl=1",1200,628,true]},"uagb_author_info":{"display_name":"IMAMURA, Genichi","author_link":"https:\/\/support.questetra.com\/ja\/author\/imamuragenichi\/"},"uagb_comment_info":0,"uagb_excerpt":"\u6307\u5b9a\u30c7\u30fc\u30bf\u9805\u76ee\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u3068\u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u3092 Responses API \u306b CORS \u9001\u4fe1\u3057\u307e&hellip;","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9DiIh-N0x","jetpack-related-posts":[{"id":182096,"url":"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-2026\/","url_meta":{"origin":188389,"position":0},"title":"qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248)","author":"IMAMURA, Genichi","date":"2026-04-02","format":false,"excerpt":"\u6587\u5b57\u5217 \"\u6295\u5165\u30c7\u30fc\u30bf\" \u3092 Responses API \u306b CORS \u9001\u4fe1\u3057\u307e\u3059\u3002\u30ec\u30b9\u30dd\u30f3\u30b9\uff08\u30e2\u30c7\u30eb\u2026","rel":"","context":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","block_context":{"text":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","link":"https:\/\/support.questetra.com\/ja\/category\/deco-ja\/"},"img":{"alt_text":"qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248)","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-ja.png?fit=1200%2C628&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-ja.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-ja.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-ja.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-ja.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":188355,"url":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-202606\/","url_meta":{"origin":188389,"position":1},"title":"qGuide: Request to OpenAI API using localStorage v202606","author":"IMAMURA, Genichi","date":"2026-07-01","format":false,"excerpt":"Sends the text and file information stored in spec\u2026","rel":"","context":"Task Form Decoration","block_context":{"text":"Task Form Decoration","link":"https:\/\/support.questetra.com\/en\/category\/deco\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.png?fit=1200%2C628&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":178399,"url":"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-azure-openai-service-api-2025\/","url_meta":{"origin":188389,"position":2},"title":"qGuide: Azure OpenAI Service API \u306b\u30ea\u30af\u30a8\u30b9\u30c8","author":"Tsuyoshi Kusaka","date":"2025-10-16","format":false,"excerpt":"\u6587\u5b57\u5217 \"\u6295\u5165\u30c7\u30fc\u30bf\"\u30fb\"API\u30ad\u30fc\"\u30fb\"\u30ea\u30bd\u30fc\u30b9\u540d\"\u30fb\"\u30c7\u30d7\u30ed\u30a4ID\"\u30fb\"API\u30d0\u30fc\u30b8\u30e7\u30f3\" \u3092 \u2026","rel":"","context":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","block_context":{"text":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","link":"https:\/\/support.questetra.com\/ja\/category\/deco-ja\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qGuide-Request-to-AOAI-API-ja-eyecatch2.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qGuide-Request-to-AOAI-API-ja-eyecatch2.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qGuide-Request-to-AOAI-API-ja-eyecatch2.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qGuide-Request-to-AOAI-API-ja-eyecatch2.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qGuide-Request-to-AOAI-API-ja-eyecatch2.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":178050,"url":"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-2025\/","url_meta":{"origin":188389,"position":3},"title":"qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8","author":"IMAMURA, Genichi","date":"2025-09-29","format":false,"excerpt":"\u6587\u5b57\u5217 \"\u6295\u5165\u30c7\u30fc\u30bf\" \u3068\u6587\u5b57\u5217 \"API\u30ad\u30fc\" \u3092 Responses API \u306b CORS \u9001\u4fe1\u2026","rel":"","context":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","block_context":{"text":"\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3","link":"https:\/\/support.questetra.com\/ja\/category\/deco-ja\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/09\/qGuide-Request-to-OpenAI-API-ja.png?fit=1200%2C628&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/09\/qGuide-Request-to-OpenAI-API-ja.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/09\/qGuide-Request-to-OpenAI-API-ja.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/09\/qGuide-Request-to-OpenAI-API-ja.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/09\/qGuide-Request-to-OpenAI-API-ja.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":89754,"url":"https:\/\/support.questetra.com\/ja\/versions\/version-1210\/","url_meta":{"origin":188389,"position":4},"title":"Ver. 12.1 \uff3b\u30de\u30a4\u30bf\u30b9\u30af\uff3d\u3067\u7d5e\u308a\u8fbc\u307f\u691c\u7d22\u3084\u30c7\u30fc\u30bf\u9805\u76ee\u8868\u793a\u306b\u5bfe\u5fdc (2020\u5e747\u670813\u65e5)","author":"Hirotaka NISHI","date":"2020-06-29","format":false,"excerpt":"\u30de\u30a4\u30bf\u30b9\u30af\uff0f\u5f15\u304d\u53d7\u3051\u5f85\u3061\u306e\u4e00\u89a7\u3067\u691c\u7d22\u3084\u30c7\u30fc\u30bf\u9805\u76ee\u8868\u793a\u3092\u884c\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u5951\u7d04\u30a8\u30c7\u30a3\u30b7\u30e7\u30f3\u306b\u2026","rel":"","context":"\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831","block_context":{"text":"\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831","link":"https:\/\/support.questetra.com\/ja\/category\/versions\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/06\/version-1210-fi-ja.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/06\/version-1210-fi-ja.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/06\/version-1210-fi-ja.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/06\/version-1210-fi-ja.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/06\/version-1210-fi-ja.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":182066,"url":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-2026\/","url_meta":{"origin":188389,"position":5},"title":"qGuide: Request to OpenAI API using localStorage","author":"IMAMURA, Genichi","date":"2026-04-02","format":false,"excerpt":"Sends the Input-string to the Responses API via CO\u2026","rel":"","context":"Task Form Decoration","block_context":{"text":"Task Form Decoration","link":"https:\/\/support.questetra.com\/en\/category\/deco\/"},"img":{"alt_text":"qGuide: Request to OpenAI API using localStorage","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-en.png?fit=1200%2C628&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-en.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-en.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-en.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/04\/deco-Request-to-OpenAI-API-using-localStorage-en.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.png?fit=1200%2C628&ssl=1","_links":{"self":[{"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/posts\/188389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/comments?post=188389"}],"version-history":[{"count":13,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/posts\/188389\/revisions"}],"predecessor-version":[{"id":191207,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/posts\/188389\/revisions\/191207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/media\/188391"}],"wp:attachment":[{"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/media?parent=188389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/categories?post=188389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/tags?post=188389"},{"taxonomy":"faq_section","embeddable":true,"href":"https:\/\/support.questetra.com\/ja\/wp-json\/wp\/v2\/faq_section?post=188389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}