Class AccountsResource

Hierarchy

  • Resource
    • AccountsResource

Constructors

Methods

  • Habilita las cuentas que eligió tu usuario y cierra la sesión. Una lista vacía es «ninguna».

    O todas o ninguna: si las nuevas no caben en el plan contesta 706 con {limit, used, requested} y no habilita NINGUNA, así que ese número se le puede enseñar tal cual. Las que ya estaban activas (already_enabled) no cuentan. Cada cuenta habilitada dispara el webhook new_account, como en cualquier conexión.

    Parameters

    • idOrganization: string
    • idSession: string
    • accountIds: readonly string[]
    • options: RequestOptions = {}

    Returns Promise<Account[]>

  • Completa la conexión con lo que la red social pegó a la URL de vuelta.

    Esta llamada no la necesita la mayoría. La URL de vuelta la construye la red a partir del enlace de connectLinks, y apunta a un front de PlanVortex: es ese front el que llama aquí. El método existe para quien sirve su propia interfaz en uno de los dominios registrados en el servidor. En la integración normal —la del ejemplo connect-flow— basta con mandar al usuario a la url del token temporal y esperarlo de vuelta.

    El endpoint contesta 200 aunque haya fallado, con el error dentro del cuerpo, porque el navegador aterriza aquí desde una redirección y un 400 crudo sería una página rota. La librería deshace ese apaño: si viene errorCode, lanza el error que le toca, igual que cualquier otro método. Lo que devuelve son sólo cuentas buenas.

    Y vuelven SIN habilitar: no ocupan plaza del plan ni publican hasta que se llama a enable. Una sola autorización puede dejar varias — un usuario de Facebook con cuatro páginas son cuatro—, y por eso hay un paso de elección en medio.

    Parameters

    Returns Promise<ConnectResult>

  • Los enlaces de autorización de cada red conectable, para mandar a la persona a la suya.

    Con credenciales de app contesta 519. Se llama con un cliente autenticado con el token temporal: pv.asTemporalToken(token).accounts.connectLinks(orgId).

    Una red que no puede dar enlace simplemente no aparece, y eso es una respuesta legítima y no un fallo: es lo que pasa con Discord en una organización que todavía no ha guardado sus propias credenciales de bot.

    MIRA authorization, NO si link está vacío. Doce de las catorce redes son redirect y se manda a la persona a link. Las otras dos no, y ninguna de las dos falla de forma visible si se recorre la lista redirigiendo a link:

    • WhatsApp no es una URL: su alta es el Embedded Signup de Meta, un popup que levantas tú con el SDK de JavaScript de Facebook, así que su link es cadena vacía y lo que necesitas para abrirlo viaja en authorization. Redirigir a él manda a tu usuario a tu propia página.
    • Telegram sí tiene enlace y aun así no es una redirección: abre un chat con el bot de PlanVortex y de ahí no vuelve nadie. La cuenta nace después, cuando la persona mete el bot en su canal, y se anuncia por el WebSocket y por el webhook new_account — nunca como respuesta a una llamada tuya. Ábrelo en otra pestaña y sigue escuchando.

    Ver ConnectLink y SocialAuthorizationMethod.

    OJO: la red devuelve al usuario a un front de PlanVortex, no a una URL tuya — ver redirect_uri en ConnectLinksOptions.

    Parameters

    Returns Promise<
        {
            authorization: {
                add_to_group_link?: string;
                app_id?: string;
                bot_username?: string;
                config_id?: string;
                feature_type?: string;
                graph_version?: string;
                session_info_version?: string;
                state?: string;
                type: "telegram_bot"
                | "redirect"
                | "meta_embedded_signup";
            };
            link: string;
            social_network: | "facebook"
            | "instagram"
            | "linkedin"
            | "tiktok"
            | "twitter"
            | "whatsapp"
            | "youtube"
            | "google_business"
            | "bluesky"
            | "discord"
            | "telegram"
            | "threads"
            | "slack"
            | "pinterest";
        }[],
    >

  • Un destino con su detalle: en Pinterest, las secciones del tablero, que es lo que va en destination.section_id. No vienen en destinations porque leerlas de todos los tableros costaría una llamada a la red por tablero.

    Se comprueba contra los destinos de ESTA cuenta: uno que no está en ella contesta 993, exista o no en la red.

    Parameters

    Returns Promise<
        {
            description?: string;
            id: string;
            image?: string;
            name: string;
            privacy?: string;
            sections?: { id: string; name: string }[];
        },
    >

  • Los sitios DENTRO de la cuenta a los que se puede mandar una publicación: en Pinterest, los tableros.

    En casi todas las redes no hay, y no es un fallo tuyo: conectar la cuenta ya dice dónde sale la publicación —el muro, el canal, el perfil—, y ahí la llamada contesta 992. Sólo tienen lista las redes con destinations en catalog.socialCapabilities().

    Donde existen, el destino es OBLIGATORIO: lo que vuelve aquí es lo que se manda en destination.id al crear la publicación, y sin él se crea en withErrors con el 987.

    Las secciones de un tablero no vienen en la lista: están en destination.

    Parameters

    Returns Promise<
        {
            description?: string;
            id: string;
            image?: string;
            name: string;
            privacy?: string;
            sections?: { id: string; name: string }[];
        }[],
    >

  • Da de alta una de las cuentas que dejó connect, o recupera una que se desconectó mientras su token guardado siga sirviendo (si no, error 700 y hay que autorizar otra vez).

    Es el paso que ocupa plaza del plan: con el cupo lleno contesta 706, así que se llama una a una y se mira el hueco antes (organizations.limits). Y es también el que enciende los webhooks de la red, en cualquier plan que no sea el gratuito.

    En Slack es además lo que mete la app dentro del canal, y ahí hay un caso que no da error aquí y sí en la primera publicación: en un canal público la app entra sola, y en uno privado no puede —Slack no tiene API para eso— y hace falta que una persona escriba /invite @PlanVortex dentro del canal. Esta llamada devuelve bien igual y la cuenta queda conectada; lo que falla es publicar, con el error 980. Avísalo antes de que elijan el canal, no después.

    Parameters

    Returns Promise<EnableResult>

  • Una sesión de conexión: lo que autorizó tu usuario cuando el token se emitió con account_selection: "integrator". Es lo que pintas en TU selector de cuentas.

    El idSession es el connect_session que llega a tu redirect_uri (y el que te devolvió createConnectToken: compáralos, para que una sesión que empezó otro no acabe en el navegador de tu usuario). Si en esa URL viene también error, la conexión no terminó —access_denied si canceló, no_accounts si la red no devolvió ninguna, connect_failed con error_code— y la sesión sigue pending: puede reintentarlo con el mismo enlace.

    Sólo la app que emitió el token. Cualquier otra recibe 551, igual que una sesión que no existe o que ha caducado: una returned vive media hora.

    Parameters

    Returns Promise<ConnectSession>

  • El menú fijo del chat, una entrada por idioma.

    Sólo las redes con mensajería lo tienen: en las demás la llamada devuelve el error 710. Se comprueba con persistent_menu de catalog.socialCapabilities().

    Parameters

    Returns Promise<
        {
            call_to_actions?: { [key: string]: unknown }[];
            composer_input_disabled?: boolean;
            locale?: string;
        }[],
    >

  • Los nombres CRUDOS de las métricas que publica la red de esta cuenta.

    Son los que se pasan a metrics y los que vuelven en cada fila. No es el vocabulario común —eso es metrics de una publicación—: aquí cada red habla su idioma (page_impressions, total_interactions, allPageViews).

    Parameters

    Returns Promise<string[]>

  • La serie de métricas ya medidas de una cuenta.

    Es lectura de lo guardado, no una llamada a la red: mirar la gráfica no cuesta créditos. El agrupado lo decide el rango — hasta 31 días por día, hasta 720 por mes, y de ahí por año— y viene dicho en group.

    Parameters

    Returns Promise<
        {
            group: "day"
            | "month"
            | "year";
            stats: {
                date: string;
                group: "day" | "month" | "year";
                group_value: number;
                name: string;
                value: number;
            }[];
        },
    >

  • Desconecta la cuenta y borra sus publicaciones. Lo ya publicado en la red se queda donde está: esto no la toca.

    Parameters

    Returns Promise<void>

  • Reemplaza el menú fijo del chat. Es un REEMPLAZO: lo que no vaya en el array desaparece.

    La entrada con locale: "default" es obligatoria — es la que se enseña cuando ninguna otra encaja.

    Parameters

    • idOrganization: string
    • idAccount: string
    • menu: {
          call_to_actions?: { [key: string]: unknown }[];
          composer_input_disabled?: boolean;
          locale?: string;
      }[]
      • Optionalcall_to_actions?: { [key: string]: unknown }[]

        The buttons. A postback sends you its payload as a message; a web_url opens a page; a nested holds more buttons.

      • Optionalcomposer_input_disabled?: boolean

        true hides the text box, leaving the menu as the only way to answer.

      • Optionallocale?: string

        default, or a locale such as es_ES.

    • options: RequestOptions = {}

    Returns Promise<
        {
            call_to_actions?: { [key: string]: unknown }[];
            composer_input_disabled?: boolean;
            locale?: string;
        }[],
    >

  • Cambia el nombre con el que la cuenta se ve en PlanVortex. Es lo único editable.

    Parameters

    • idOrganization: string
    • idAccount: string
    • body: { name?: string }
    • options: RequestOptions = {}

    Returns Promise<Account>