Como transformar componentes Lightning Web Components em gatilhos inteligentes para o painel nativo de inteligência artificial, enviando comandos contextuais e dados não salvos em tempo de execução.

Durante as primeiras iterações do Agentforce, a interação do usuário com os agentes de inteligência artificial ocorria quase exclusivamente de maneira passiva: o usuário precisava clicar manualmente no ícone do painel lateral, digitar sua dúvida em linguagem natural e aguardar a resposta. Embora esse modelo funcione bem para consultas abertas, ele cria atrito em fluxos operacionais corporativos onde a interface já possui todo o contexto do registro aberto.

Para unir a experiência rica e estruturada dos componentes Lightning Web Components (LWC) com a flexibilidade conversacional do Agentforce, a Salesforce disponibilizou o módulo headless lightning/accApi (conhecido como Agentforce Conversation Client API, ou simplesmente ACC API).

Esse módulo atua como uma ponte programática entre o código JavaScript do seu componente front-end e o painel nativo do Agentforce no desktop. Com ele, um botão customizado na tela pode abrir o painel, selecionar o agente correto e disparar uma instrução estruturada contendo dados que o usuário acabou de digitar no formulário, mesmo antes do registro ser gravado no banco de dados.

Neste guia técnico, vamos explorar os métodos fundamentais da ACC API, analisar o fluxo de mensagens entre o LWC e o painel, e implementar um componente completo de assistência de casos pronto para produção.

1. O Que É o Módulo lightning/accApi?

O lightning/accApi é um módulo JavaScript sem interface gráfica (headless) que expõe métodos assíncronos para manipular o ciclo de vida do painel do Agentforce na experiência desktop do Lightning Experience.

Ele foi desenhado para atender a três casos de uso principais:

  1. Abertura e Fechamento Controlados: Permitir que botões de ação na página abram ou minimizem o painel lateral conforme a etapa do processo de negócio.
  2. Disparo de Utterances Programáticas: Enviar frases e instruções pré-formatadas diretamente para a caixa de diálogo do agente, simulando a digitação do usuário.
  3. Injeção de Contexto Volátil: Enviar valores de campos modificados na tela que ainda não passaram por um comando DML no backend, garantindo que o agente analise o estado mais recente da interação.
+-------------------------------------------------------------+
|               Custom Lightning Web Component                |
|       (Ex: Botão "Analisar Risco de Churn" ou Formulário)   |
+-------------------------------------------------------------+
                              |
               import { open, execute } from 'lightning/accApi';
                              |
                              v
+-------------------------------------------------------------+
|                 Agentforce Conversation Client              |
|                     (lightning/accApi Bridge)               |
+-------------------------------------------------------------+
                              |
                              v [App-to-Panel Message Router]
+-------------------------------------------------------------+
|             Painel Lateral Nativo do Agentforce             |
|   (Abre na tela, seleciona o agente e executa a instrução)  |
+-------------------------------------------------------------+

2. Métodos Principais da ACC API

Para utilizar o módulo, você deve importá-lo no seu arquivo JavaScript definindo a versão mínima da API como 59.0 (recomendado 67.0 para desfrutar de todas as otimizações do runtime moderno).

Os métodos disponíveis são:

open(options)

Abre o painel lateral do Agentforce. Pode receber opcionalmente o identificador do agente (agentId ou botId) para o qual a conversa deve ser direcionada:

JavaScript

import { open } from 'lightning/accApi';

// Abertura simples do painel
await open();

// Abertura apontando para um Employee Agent específico
await open({ agentId: '0Xxxx0000000001CAA' });

close()

Fecha ou minimiza o painel lateral do Agentforce programaticamente:

JavaScript

import { close } from 'lightning/accApi';

await close();

execute(options)

O método mais poderoso da API. Ele abre o painel (caso esteja fechado), seleciona o agente especificado e envia uma mensagem de texto (utterance) como se tivesse sido redigida pelo operador:

JavaScript

import { execute } from 'lightning/accApi';

await execute({
    agentId: '0Xxxx0000000001CAA',
    text: 'Resuma as três últimas interações deste cliente e sugira a próxima melhor oferta.'
});

3. Arquitetura de UI Agêntica: Passando Valores Não Salvos ao Agentforce

Um dos maiores desafios em telas complexas de atendimento ou cotação é que o operador preenche vários campos de texto (como anotações de triagem ou justificativas de desconto) antes de salvar o registro. Se o agente de IA consultar apenas os dados gravados via SOQL ou Data Cloud, ele perderá as informações vitais que estão apenas na memória do navegador.

Com o lightning/accApi, o LWC captura os valores do formulário via JavaScript e monta uma utterance rica que inclui esses dados no prompt antes de disparar a execução.

Exemplo Prático: Componente caseAgentAssistant

Vamos construir um componente LWC para páginas de Caso (Case) que permite ao operador redigir uma anotação rápida de suporte e clicar em um botão para que o Agentforce redija uma resposta formal ao cliente considerando tanto o histórico do caso quanto a anotação provisória.

1. Template HTML: caseAgentAssistant.html

HTML

<template>
    <lightning-card title="Assistente Agêntico de Atendimento" icon-name="standard:agentforce">
        <div class="slds-p-around_medium">
            <div class="slds-m-bottom_small">
                <p class="slds-text-body_small slds-text-color_weak">
                    Utilize o Agentforce para gerar uma minuta de resposta técnica baseada nas anotações da triagem atual.
                </p>
            </div>

            <!-- Campo de entrada com valores voláteis (não salvos no banco) -->
            <lightning-textarea
                name="triageNotes"
                label="Anotações de Triagem em Tempo Real"
                placeholder="Ex: Cliente relatou falha no módulo de faturamento após a atualização 2.4..."
                value={triageNotes}
                onchange={handleNotesChange}
                rows="3"
                required>
            </lightning-textarea>

            <div class="slds-m-top_medium slds-grid slds-grid_align-spread">
                <lightning-button
                    label="Abrir Painel"
                    icon-name="utility:chat"
                    onclick={handleOpenPanel}>
                </lightning-button>

                <lightning-button
                    variant="brand"
                    label="Gerar Resposta com Agentforce"
                    icon-name="utility:magicwand"
                    onclick={handleGenerateResponse}
                    disabled={isGenerateDisabled}>
                </lightning-button>
            </div>
        </div>
    </lightning-card>
</template>

2. Controlador JavaScript: caseAgentAssistant.js

JavaScript

import { LightningElement, api, track } from 'lwc';
import { open, execute } from 'lightning/accApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';

export default class CaseAgentAssistant extends LightningElement {
    @api recordId; // ID do Caso fornecido pelo contexto da página de registro
    @track triageNotes = '';
    
    // ID do agente especializado (pode ser configurado no Lightning App Builder)
    @api targetAgentId = ''; 

    get isGenerateDisabled() {
        return !this.triageNotes || this.triageNotes.trim().length === 0;
    }

    handleNotesChange(event) {
        this.triageNotes = event.target.value;
    }

    async handleOpenPanel() {
        try {
            await open(this.targetAgentId ? { agentId: this.targetAgentId } : {});
        } catch (error) {
            this.showToast('Erro', 'Não foi possível abrir o painel do Agentforce: ' + error.message, 'error');
        }
    }

    async handleGenerateResponse() {
        try {
            // Monta a instrução incluindo o contexto do registro e os dados voláteis da tela
            const promptText = `Atue como o especialista de suporte do Caso de ID ${this.recordId}. ` +
                               `O operador realizou as seguintes observações em tempo real: "${this.triageNotes}". ` +
                               `Por favor, consulte os manuais técnicos via Data Library e elabore uma minuta de resposta estruturada para o cliente.`;

            const options = {
                text: promptText
            };

            if (this.targetAgentId) {
                options.agentId = this.targetAgentId;
            }

            // Dispara a ação no painel do Agentforce
            await execute(options);

            this.showToast('Sucesso', 'Instrução enviada ao Agentforce com sucesso.', 'success');

        } catch (error) {
            this.showToast('Falha na Execução', 'Erro ao enviar comando para o Agentforce: ' + error.message, 'error');
        }
    }

    showToast(title, message, variant) {
        this.dispatchEvent(new ShowToastEvent({ title, message, variant }));
    }
}

3. Metadados de Configuração: caseAgentAssistant.js-meta.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>67.0</apiVersion>
    <isExposed>true</isExposed>
    <masterLabel>Case Agentforce Assistant</masterLabel>
    <description>Componente LWC que controla o painel do Agentforce enviando anotações de triagem.</description>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
    </targets>
    <targetConfigs>
        <targetConfig targets="lightning__RecordPage">
            <objects>
                <object>Case</object>
            </objects>
            <property name="targetAgentId" type="String" label="ID do Agente Alvo" description="Identificador único (18 dígitos) do Agentforce Agent para este fluxo." />
        </targetConfig>
    </targetConfigs>
</LightningComponentBundle>

4. Boas Práticas e Tratamento de Exceções com lightning/accApi

Ao implementar componentes baseados na ACC API em ambientes corporativos, siga estas diretrizes essenciais:

  1. Tratamento Elegante de Erros (Try/Catch): Chamadas a open() ou execute() podem falhar caso o usuário não possua permissão de acesso ao Agentforce ou esteja utilizando um navegador incompatível. Sempre envolva as chamadas em blocos try/catch e notifique o usuário via ShowToastEvent.
  2. Evite Sobrecarga de Prompts: Mantenha as instruções objetivas. Em vez de enviar o dump completo do registro na utterance, passe o recordId e apenas os dados novos digitados pelo usuário, deixando que o agente recupere os campos complementares via SOQL ou grounding do Atlas Engine.
  3. Idempotência e Prevenção de Múltiplos Cliques: Desabilite temporariamente o botão de disparo enquanto a Promise de execute() estiver pendente para evitar o envio duplicado de comandos ao agente.

Conclusão

A chegada do módulo lightning/accApi representa a evolução definitiva da experiência do desenvolvedor front-end na era dos agentes autônomos. Ao permitir que componentes Lightning Web Components controlem o painel nativo do Agentforce de maneira programática, a Salesforce entrega aos arquitetos a capacidade de desenhar jornadas de trabalho fluidas, onde cliques em botões especializados e dados digitados na tela tornam-se gatilhos instantâneos para a ação da inteligência artificial.

Sua equipe já começou a integrar componentes LWC com o Agentforce em suas páginas de registro? Deixe suas dúvidas e experiências nos comentários abaixo ou compartilhe suas implementações com nossa comunidade no LinkedIn.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *