> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Conector de ABBYY Vantage para Microsoft Power Automate

> Instale y configure el conector personalizado de ABBYY Vantage para Microsoft Power Automate, incluida la configuración de seguridad de OAuth 2.0 y la comprobación de la conexión.

export const VantageRegion = ({children}) => {
  const STORAGE_KEY = "abbyy.vantage.region";
  const REGIONS = [{
    code: "eu",
    label: "Europe"
  }, {
    code: "us",
    label: "North America"
  }, {
    code: "au",
    label: "Australia / Asia-Pacific"
  }];
  const [region, setRegion] = useState("eu");
  const [open, setOpen] = useState(false);
  const containerRef = useRef(null);
  const dropdownRef = useRef(null);
  function safeGetSavedRegion() {
    try {
      const saved = typeof window !== "undefined" ? window.localStorage.getItem(STORAGE_KEY) : null;
      const valid = new Set(REGIONS.map(r => r.code));
      return saved && valid.has(saved) ? saved : "eu";
    } catch {
      return "eu";
    }
  }
  function safeSetSavedRegion(code) {
    try {
      if (typeof window !== "undefined") {
        window.localStorage.setItem(STORAGE_KEY, code);
      }
    } catch {}
  }
  function dispatchRegionChanged(code) {
    try {
      if (typeof window !== "undefined") {
        window.dispatchEvent(new CustomEvent("abbyy:region-changed", {
          detail: {
            code
          }
        }));
      }
    } catch {}
  }
  function replaceRegionInString(text, currentRegion) {
    if (typeof text !== "string") return text;
    const hostRegex = /https:\/\/vantage-(eu|us|au)\.abbyy\.com/gi;
    const tokenRegex = /https:\/\/vantage-\[region\]\.abbyy\.com/gi;
    const bareHostRegex = /vantage-(eu|us|au)\.abbyy\.com/gi;
    const bareTokenRegex = /vantage-\[region\]\.abbyy\.com/gi;
    return text.replace(hostRegex, `https://vantage-${currentRegion}.abbyy.com`).replace(tokenRegex, `https://vantage-${currentRegion}.abbyy.com`).replace(bareHostRegex, `vantage-${currentRegion}.abbyy.com`).replace(bareTokenRegex, `vantage-${currentRegion}.abbyy.com`);
  }
  useEffect(() => {
    setRegion(safeGetSavedRegion());
  }, []);
  useEffect(() => {
    const root = containerRef.current;
    if (!root) return;
    const anchors = root.querySelectorAll("a[href]");
    anchors.forEach(a => {
      const href = a.getAttribute("href");
      if (href) {
        const next = replaceRegionInString(href, region);
        if (next !== href) {
          a.setAttribute("href", next);
        }
      }
    });
    const walker = typeof document !== "undefined" ? document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null) : null;
    if (walker) {
      const toUpdate = [];
      let node = walker.nextNode();
      while (node) {
        const updated = replaceRegionInString(node.nodeValue, region);
        if (updated !== node.nodeValue) {
          toUpdate.push([node, updated]);
        }
        node = walker.nextNode();
      }
      toUpdate.forEach(([textNode, value]) => {
        textNode.nodeValue = value;
      });
    }
  }, [region, children]);
  useEffect(() => {
    const root = containerRef.current;
    if (!root) return;
    const anchors = root.querySelectorAll("a[href]");
    anchors.forEach(a => {
      a.style.fontWeight = "600";
      a.style.textDecoration = "underline";
      a.style.textUnderlineOffset = "2px";
    });
  }, [region, children]);
  useEffect(() => {
    const onRegionChanged = evt => {
      const code = evt && evt.detail && evt.detail.code;
      if (!code || code === region) return;
      setRegion(code);
    };
    if (typeof window !== "undefined") {
      window.addEventListener("abbyy:region-changed", onRegionChanged);
    }
    return () => {
      if (typeof window !== "undefined") {
        window.removeEventListener("abbyy:region-changed", onRegionChanged);
      }
    };
  }, [region]);
  useEffect(() => {
    const onClickAway = e => {
      if (!dropdownRef.current) return;
      if (!dropdownRef.current.contains(e.target)) {
        setOpen(false);
      }
    };
    document.addEventListener("click", onClickAway, true);
    return () => document.removeEventListener("click", onClickAway, true);
  }, []);
  const onSelect = code => {
    setRegion(code);
    safeSetSavedRegion(code);
    dispatchRegionChanged(code);
    setOpen(false);
  };
  const current = REGIONS.find(r => r.code === region) || REGIONS[0];
  return <div className="not-prose">
      <div className="mb-4 inline-flex items-center gap-2" ref={dropdownRef}>
        <span className="text-sm text-zinc-950/80 dark:text-white/80">Tenant Region:</span>
        <div className="relative">
          <button type="button" aria-haspopup="listbox" aria-expanded={open ? "true" : "false"} onClick={() => setOpen(v => !v)} className="h-8 px-3 rounded-md bg-zinc-900/5 dark:bg-white/5 border border-zinc-950/20 dark:border-white/20 text-sm inline-flex items-center gap-2">
            <span className="text-zinc-950 dark:text-white">{current.label}</span>
            <svg width="8" height="24" viewBox="0 -9 3 24" className="transition-transform text-gray-400 overflow-visible dark:text-gray-600 ml-auto" style={{
    transform: open ? "rotate(270deg)" : "rotate(90deg)"
  }}>
              <path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"></path>
            </svg>
          </button>
          {open ? <div role="listbox" className="absolute z-50 left-full top-0 ml-2 w-56 rounded-xl border border-zinc-950/20 dark:border-white/20 bg-white dark:bg-zinc-900 shadow-lg p-2">
              {REGIONS.map(r => {
    const selected = r.code === region;
    return <button key={r.code} type="button" role="option" aria-selected={selected ? "true" : "false"} onClick={() => onSelect(r.code)} className={"w-full flex items-center justify-between px-3 py-2 rounded-lg text-sm hover:bg-zinc-950/5 dark:hover:bg-white/10 text-zinc-950 dark:text-white" + (selected ? " font-medium" : "")}>
                    <span style={selected ? {
      color: "#ff2038"
    } : undefined}>{r.label}</span>
                    <span className={selected ? "ml-3" : "ml-3 invisible"} style={selected ? {
      color: "#ff2038"
    } : undefined}>✓</span>
                  </button>;
  })}
            </div> : null}
        </div>
      </div>
      <div ref={containerRef} className="prose dark:prose-invert max-w-none">{children}</div>
    </div>;
};

El conector de ABBYY Vantage para Microsoft Power Automate permite a los desarrolladores añadir funciones de extracción de datos y clasificación de documentos a los flujos de automatización. Se trata de un paquete redistribuible para su instalación manual.

<div id="prerequisites">
  ## Requisitos previos
</div>

<Note>
  Se requiere una licencia premium de Power Automate para usar este conector.
</Note>

Necesitará un tenant de Vantage con un [cliente de API pública](/es/vantage/documentation/tenant-admin/tenant-management/configure-client) configurado. Configuración específica de este conector:

* **Authorized Redirect URL**: Se obtiene de Power Automate más adelante en esta guía de configuración. Conserve la URL de redirección de abbyy.com.
* **Client ID**: El ID de su cliente de API pública.
* **Client Secret**: Su secreto de cliente.
* Desactive **Require PKCE for Authorization Code Flow**.
* Active **Allow issuing refresh tokens to refresh access tokens**.
* Active **Allow client credentials flow**. Para Role(s), se recomienda `Skill User`.

<Accordion title="Ejemplo de cliente de API configurado">
  <img src="https://mintcdn.com/abbyy/YpqdJk1A1n7Rrt8K/images/vantage/developer/connectors/ms-powerautomate/public-api-client.jpg?fit=max&auto=format&n=YpqdJk1A1n7Rrt8K&q=85&s=d425aa3ac98d861d817edb2811d6023c" alt="Pantalla del cliente de API pública de ABBYY Vantage" width="1684" height="1688" data-path="images/vantage/developer/connectors/ms-powerautomate/public-api-client.jpg" />
</Accordion>

Necesitará el ID del tenant de Vantage durante el paso de configuración de seguridad.

<Accordion title="Cómo encontrar el ID del tenant">
  <Steps>
    <Step title="Abra la configuración del tenant">
      En Vantage, haga clic en **Configuration** en el panel izquierdo.
    </Step>

    <Step title="Copie el ID del tenant">
      Haga clic en **General** y busque el campo **Tenant ID**.

      <img src="https://mintcdn.com/abbyy/YpqdJk1A1n7Rrt8K/images/vantage/developer/connectors/ms-powerautomate/finding-tenant-id.jpg?fit=max&auto=format&n=YpqdJk1A1n7Rrt8K&q=85&s=9797a2c9bf66dfa4ba7e4319c9717f4b" alt="Pantalla de configuración del tenant de ABBYY Vantage" width="1414" height="610" data-path="images/vantage/developer/connectors/ms-powerautomate/finding-tenant-id.jpg" />
    </Step>
  </Steps>
</Accordion>

<div id="installing-the-connector">
  ## Instalar el conector
</div>

Primero, [descargue el conector](https://www.abbyy.com/marketplace/assets/host/abbyy/connector/microsoft-power-automate/) desde ABBYY Marketplace.

1. Abra Microsoft Power Automate y seleccione **Datos > Conectores personalizados** en el menú de la izquierda. Puede que tenga que seleccionar **Más** para encontrar esta opción.

2. Haga clic en **+ Nuevo conector personalizado** y seleccione **Importar un archivo OpenAPI**.

3. Introduzca un nombre para el conector, por ejemplo, "ABBYY Vantage".

4. Busque el archivo `ABBYY-Vantage-ProcessingAPI.swagger.json` y ábralo.

<div id="configure-general-information">
  ### Configurar la información general
</div>

1. \[Opcional] Cargue un icono del conector con el logotipo de ABBYY Vantage (`Vantage-Square-icon.png`) incluido en la descarga del conector.

2. Cambie la URL de **Host** por la dirección de su servidor de Vantage. Debe usar la misma dirección de host en los campos **Authorization URL** y **Token URL**.

<VantageRegion>
  ```
  vantage-us.abbyy.com
  ```
</VantageRegion>

<div id="configure-security">
  ### Configurar seguridad
</div>

Configura **Authentication type** como **OAuth 2.0** y rellena los siguientes campos con los valores de tu cliente de Vantage Public API:

* **Client ID**: tu ID de cliente de API pública.
* **Client secret**: tu secreto de cliente.
* **Authorization URL**: `https://vantage-[region].abbyy.com/auth2/[tenant-id]/connect/authorize`
* **Token URL**: `https://vantage-[region].abbyy.com/auth2/[tenant-id]/connect/token`
* **Refresh URL**: `https://vantage-[region].abbyy.com/auth2/[tenant-id]/connect/token`
* **Scope**: `openid permissions global.wildcard offline_access`

Para finalizar la configuración de seguridad:

1. Haz clic en **Create Connector** en la parte superior de la página para crear el conector y generar la URL de redirección.

2. Copia la URL de redirección. En tu cliente de Vantage Public API, en **Authorized Redirect URLs**, haz clic en **Add Redirect URL** y pega la URL.

3. En tu cliente de Vantage Public API, en **OAuth 2.0 Flows Settings**:
   * Desactiva **Require PKCE for Authorization Code Flow**.
   * Activa **Allow issuing refresh tokens to refresh access tokens**.

<div id="create-a-connection">
  ## Crear una conexión
</div>

En la pestaña **Test**, elige **New Connection**. Se abrirá una ventana emergente de inicio de sesión. Introduce tu nombre de usuario y contraseña de ABBYY Vantage y asegúrate de elegir la misma cuenta que incluye el cliente de API pública para Microsoft Power Automate.

<div id="test-the-connection">
  ## Probar la conexión
</div>

Después de iniciar sesión correctamente en tu cuenta de Vantage, la nueva conexión aparece en la lista Connections. Comprueba que el conector funciona correctamente probando una operación. Selecciona `ListAllAvailableSkills` en la lista Operations y haz clic en **Test operation**. Si no funciona, revisa los pasos anteriores para asegurarte de que todos los campos se hayan configurado correctamente.

<div id="import-demo-flows">
  ## Flujos de demostración de Import
</div>

Consulte los detalles del [proceso de ejemplo](/es/vantage/connectors/ms-powerautomate/sample-process).

<div id="modifying-flows">
  ## Modificación de flujos
</div>

Puede modificar un flujo de demostración o crear el suyo propio. Si necesita trabajar con un conjunto de datos específico de una respuesta basada en JSON, puede modificar el esquema JSON. Para obtener el esquema JSON, abra la Swagger UI y llame al método requerido. La Swagger UI está disponible en:

<VantageRegion>
  ```
  https://vantage-[region].abbyy.com/api/index.html?urls.primaryName=publicapi%2Fv1
  ```
</VantageRegion>

<div id="next-steps">
  ## Próximos pasos
</div>

Consulte las [notas de la versión](/es/vantage/connectors/ms-powerautomate/release-notes) del conector de Microsoft Power Automate.
