{"id":188355,"date":"2026-07-01T14:56:19","date_gmt":"2026-07-01T05:56:19","guid":{"rendered":"https:\/\/support.questetra.com\/?p=188355"},"modified":"2026-07-02T15:47:14","modified_gmt":"2026-07-02T06:47:14","slug":"qguide-request-to-openai-api-using-localstorage-202606","status":"publish","type":"post","link":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-202606\/","title":{"rendered":"qGuide: Request to OpenAI API using localStorage 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: Request to OpenAI API using localStorage 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\/en\/deco-ja\/qguide-request-to-openai-api-using-localstorage-202606\/\"><span class=\"material-icons\">translate<\/span> qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248) 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)\">Sends the text and file information stored in specified data fields to the Responses API via CORS. The responses (the sentence generated by the model) will be displayed in streaming format. Depending on the prompt settings, various support functions to assist task operators can be provided, such as a typo check function, a text rewrite function, and a list of possible reasons for rejection. The &#8220;API key&#8221; and &#8220;instructions&#8221; (up to eight items) must be saved in localStorage by each user.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span style=\"text-decoration: underline;\">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\">Please use web storage after understanding its functions and risks.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Storage_API\" rel=\"nofollow\">https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Storage_API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/w.wiki\/KfNZ\" rel=\"nofollow\">https:\/\/w.wiki\/KfNZ<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--60)\"><span style=\"text-decoration: underline;\">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<\/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<span class=\"material-icons\">warning<\/span> Freely modifiable HTML\/JavaScript code, MIT License. No warranty of any kind.<br>\n(<em><strong>Decoration using JavaScript<\/strong><\/em> is only available in the <em><strong><span style=\"color: #1970B9\">Professional<\/span><\/strong><\/em> edition: <a href=\"https:\/\/questetra.zendesk.com\/hc\/en-us\/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 style=\"text-decoration: underline;\">Capture<\/span><\/h3>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a47e371c8e29&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a47e371c8e29\" 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=\"188362\" data-permalink=\"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-202606\/attachment\/qguide-request-to-openai-api-using-localstorage-202606-en\/\" data-orig-file=\"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&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-en\" 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-en.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-en-1024x536.png?resize=1024%2C536&#038;ssl=1\" alt=\"\" class=\"wp-image-188362\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/07\/qguide-request-to-openai-api-using-localstorage-202606-en.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-en.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-en.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-en.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 style=\"text-decoration: underline;\">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\"><\/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\"><\/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\"><\/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 style=\"text-decoration: underline;\">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=\"8dKTdfe2Sq\"><a href=\"https:\/\/support.questetra.com\/en\/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=Hw4DoAq9h1#?secret=8dKTdfe2Sq\" data-secret=\"8dKTdfe2Sq\" 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=\"SXXlG1AVFV\"><a href=\"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-2026\/\">qGuide: Request to OpenAI API using localStorage<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cqGuide: Request to OpenAI API using localStorage\u201d \u2014 Questetra Support\" src=\"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-2026\/embed\/#?secret=t5TVY6ENB6#?secret=SXXlG1AVFV\" data-secret=\"SXXlG1AVFV\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Sends the text and file information stored in specified data fields to the Responses API via CORS. The responses (the sentence generated by the model) will be displayed in streaming format. Depending on the prompt settings, various support functions to assist task operators can be provided, such as a typo check function, a text rewrite function, and a list of possible reasons for rejection. The &#8220;API key&#8221; and  &#8220;instructions&#8221; (up to eight items) must be saved in localStorage by each user.<\/p>\n","protected":false},"author":2,"featured_media":188362,"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":[3439],"tags":[3429],"class_list":["post-188355","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deco","tag-openai-api"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"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","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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.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-en.png?fit=1200%2C628&ssl=1",1200,628,true]},"uagb_author_info":{"display_name":"IMAMURA, Genichi","author_link":"https:\/\/support.questetra.com\/en\/author\/imamuragenichi\/"},"uagb_comment_info":0,"uagb_excerpt":"Sends the text and file information stored in specified data fields to the Responses API via CORS. The responses (the sentence generated by the model) will be displayed in streaming format. Depending on the prompt settings, various support functions to assist task operators can be provided, such as a typo check function, a text rewrite&hellip;","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9DiIh-MZZ","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":182066,"url":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-using-localstorage-2026\/","url_meta":{"origin":188355,"position":0},"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 CORS. The responses (the sentence generated by the model) will be displayed in streaming format. Depending on the prompt settings, various support functions to assist task operators can be provided, such as a typo check function, a text rewrite function, and a\u2026","rel":"","context":"In &quot;Task Form Decoration&quot;","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":[]},{"id":182096,"url":"https:\/\/support.questetra.com\/ja\/deco-ja\/qguide-request-to-openai-api-using-localstorage-2026\/","url_meta":{"origin":188355,"position":1},"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\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\"API\u30ad\u30fc\" \u3068 \"\u6307\u793a\u6587\" \u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30e6\u30fc\u30b6\u304c localStorage \u306b\u4fdd\u5b58\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002","rel":"","context":"In &quot;\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3&quot;","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":188389,"url":"https:\/\/support.questetra.com\/ja\/deco\/qguide-request-to-openai-api-using-localstorage-202606\/","url_meta":{"origin":188355,"position":2},"title":"qGuide: OpenAI API \u306b\u30ea\u30af\u30a8\u30b9\u30c8 (localStorage\u7248) v202606","author":"IMAMURA, Genichi","date":"2026-07-01","format":false,"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\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\"API\u30ad\u30fc\" \u3068 \"\u6307\u793a\u6587\" \uff08\u6700\u59278\u500b\uff09\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30e6\u30fc\u30b6\u304c localStorage \u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002","rel":"","context":"In &quot;Task Form Decoration&quot;","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-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\/07\/qguide-request-to-openai-api-using-localstorage-202606-ja.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-ja.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-ja.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-ja.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":178040,"url":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-2025\/","url_meta":{"origin":188355,"position":3},"title":"qGuide: Request to OpenAI API","author":"IMAMURA, Genichi","date":"2025-09-29","format":false,"excerpt":"Send the Input-string and ApiKey-string to the Responses API via CORS. The responses (the sentence generated by the model) will be displayed in streaming format. Depending on the prompt settings, various support functions to assist task operators can be provided, such as a typo check function, a text rewrite function,\u2026","rel":"","context":"In &quot;Task Form Decoration&quot;","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\/2025\/09\/qGuide-Request-to-OpenAI-API-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\/2025\/09\/qGuide-Request-to-OpenAI-API-en.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-en.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-en.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-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":188355,"position":4},"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 Azure OpenAI Service 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","rel":"","context":"In &quot;\u51e6\u7406\u753b\u9762\u30c7\u30b3\u30ec\u30fc\u30b7\u30e7\u30f3&quot;","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":178490,"url":"https:\/\/support.questetra.com\/en\/deco\/qguide-request-to-openai-api-with-image-2025\/","url_meta":{"origin":188355,"position":5},"title":"qGuide: Request to OpenAI API with Image","author":"IMAMURA, Genichi","date":"2025-10-22","format":false,"excerpt":"The \"input file\" (image or pdf), the \"input data\" string, and the \"API key\" are sent to the Responses API via CORS. The response (text generated by the model) is streamed on the Task Form screen. Depending on the prompt settings, various support functions (functions to assist the task processor)\u2026","rel":"","context":"In &quot;Task Form Decoration&quot;","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\/2025\/10\/qguide-request-to-openai-api-with-image-2025-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\/2025\/10\/qguide-request-to-openai-api-with-image-2025-en.png?fit=1200%2C628&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qguide-request-to-openai-api-with-image-2025-en.png?fit=1200%2C628&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qguide-request-to-openai-api-with-image-2025-en.png?fit=1200%2C628&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/10\/qguide-request-to-openai-api-with-image-2025-en.png?fit=1200%2C628&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"amp_enabled":false,"_links":{"self":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/188355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/comments?post=188355"}],"version-history":[{"count":12,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/188355\/revisions"}],"predecessor-version":[{"id":188398,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/188355\/revisions\/188398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media\/188362"}],"wp:attachment":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media?parent=188355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/categories?post=188355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/tags?post=188355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}