Compartilhar via


Tutorial para começar a utilizar o agente Do SharePoint Embedded

Pré-requisitos

Observação

  1. Terá de criar uma aplicação Do SharePoint Embedded. Se não tiver uma, pode criar facilmente uma aplicação de exemplo com as instruções aqui.
  2. Tem de especificar um tipo de contentor padrão no momento da criação. Consoante o objetivo, pode ou não ter de fornecer o ID da Subscrição do Azure. Um conjunto de tipos de contentor para fins de avaliação não pode ser convertido para produção ou vice-versa.
  3. Tem de utilizar a versão mais recente do SharePoint PowerShell para configurar um tipo de contentor. Para obter permissões e as informações mais recentes sobre Windows PowerShell para o SharePoint Embedded, veja a documentação em Introdução à Shell de Gestão incorporada do SharePoint.

Introdução à utilização do SDK do SharePoint Embedded

1. Instale o SDK no seu repositório de React

# Install the SDK with npm

npm install "https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz"

Se quiser verificar as somas de verificação

No MacOS/Linux

version="1.0.9";

url="https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz"; 

expected_checksum="3bdf19830ffc098b253cc809f969f50fba236ad95fe85123e7b15c7cf58ecf6b"; 

package_path="microsoft-sharepointembedded-copilotchat-react-$version.tgz"; 

curl -o $package_path $url && [ "$(sha256sum $package_path | awk '{ print $1 }')" == "$expected_checksum" ] && npm install $package_path || { echo "Checksum does not match. Aborting installation."; rm $package_path; }

No Windows:

$version = "1.0.9"
$url = "https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz"
$expected_checksum = "3BDF19830FFC098B253CC809F969F50FBA236AD95FE85123E7B15C7CF58ECF6B"
$package_path = "microsoft-sharepointembedded-copilotchat-react-$version.tgz"

Invoke-WebRequest -Uri $url -OutFile $package_path

$calculated_checksum = Get-FileHash -Path $package_path -Algorithm SHA256 | Select-Object -ExpandProperty Hash

if ($calculated_checksum -eq $expected_checksum) {
    Write-Output "Checksum matches. Installing the package..."
    npm install $package_path
} else {
    Write-Output "Checksum does not match. Aborting installation."
}
Remove-Item $package_path

2. Criar um authProvider objeto

Este é um objeto que corresponde a esta interface:

export interface IChatEmbeddedApiAuthProvider {
    // The hostname for your tenant. Example: https://m365x10735106.sharepoint.com
    hostname: string;
    // This function will be called when an SPO token is required
    // Scope needed: ${hostname}/Container.Selected
    getToken(): Promise<string>;
}

Utilização de exemplo na aplicação:

// In your app:
import { IChatEmbeddedApiAuthProvider } from '@microsoft/sharepointembedded-copilotchat-react';

const authProvider: IChatEmbeddedApiAuthProvider = {
    hostname: 'https://m365x10735106.sharepoint.com',
    getToken: requestSPOAccessToken,
};

Implementação de exemplo de getToken (tem de personalizá-la):

//
async function requestSPOAccessToken() {
  // Use your app's actual msalConfig
  const msalConfig = {
    auth: {
      clientId: "{Your Entra client ID}", // this can likely point to process.env.REACT_APP_CLIENT_ID if you have set it in your .env file
    },
    cache: {
              // https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/caching.md
              /*
              Cache Location | Cleared on | Shared between windows/tabs | Redirect flow supported
              -----------------   ----------  -------------------------   ------------------------
              sessionStorage | window/tab close | No | Yes
              localStorage | browser close | Yes |   Yes
              memoryStorage | page |  refresh/navigation | No | No
              */
      cacheLocation: 'localStorage',
      storeAuthStateInCookie: false,
    },
  };

  const containerScopes = {
    scopes: [`${authProvider.hostname}/Container.Selected`],
    redirectUri: '/'
  };

  const pca = new msal.PublicClientApplication(msalConfig);
  let containerTokenResponse;

  // Consent FileStorageContainer.Selected scope
  try {
    // attempt silent acquisition first
    containerTokenResponse = await pca.acquireTokenSilent(containerScopes);
    return containerTokenResponse.accessToken;
  } catch (error) {
    if (error instanceof InteractionRequiredAuthError) {
      // fallback to interaction when silent call fails
      containerTokenResponse = await pca.acquireTokenPopup(containerScopes);
      return containerTokenResponse.accessToken;
    }
    else {
      console.log(error);
    }
  }
}

3. Crie um estado de React para armazenar o no chatApi

const [chatApi, setChatApi] = React.useState<ChatEmbeddedAPI|null>(null);

Exemplo:

import React from 'react';
import { ChatEmbedded, ChatEmbeddedAPI, IChatEmbeddedApiAuthProvider } from '@microsoft/sharepointembedded-copilotchat-react';

//...
async function requestSPOAccessToken() {
  //...
}

const authProvider: IChatEmbeddedApiAuthProvider = {
  hostname: 'https://m365x10735106.sharepoint.com',
  getToken: requestSPOAccessToken,
};

function App() {
  const [chatApi, setChatApi] = React.useState<ChatEmbeddedAPI|null>(null);

  return (
    //...
  );
}

4. Adicione o ChatEmbedded componente à sua aplicação react

import React from 'react';
import { ChatEmbedded, ChatEmbeddedAPI, IChatEmbeddedApiAuthProvider } from '@microsoft/sharepointembedded-copilotchat-react';

//...
async function requestSPOAccessToken() {
  //...
}

const authProvider: IChatEmbeddedApiAuthProvider = {
  hostname: 'https://m365x10735106.sharepoint.com',
  getToken: requestSPOAccessToken,
};

function App() {
  const [chatApi, setChatApi] = React.useState<ChatEmbeddedAPI|null>(null);

  return (
    //...
    <ChatEmbedded
      onApiReady={setChatApi}
      authProvider={authProvider}
      containerId={container.id}
      style={{ width: 'calc(100% - 4px)', height: 'calc(100vh - 8px)' }}
    />
    //...
  );
}

5. Utilize o chatApi objeto no seu estado para abrir o chat e executá-lo

No exemplo acima, chame-lhe desta forma para abrir a conversa.

await chatApi.openChat();

Pode optar por transmitir as configurações de início

import { IconName, IconStyle } from './sdk/types';

//...
const zeroQueryPrompts = {
  headerText: "This is my Starter Prompt",
  promptSuggestionList: [{
    suggestionText: 'Hello',
    iconRegular: { name: IconName.ChatBubblesQuestion, style: IconStyle.Regular },
    iconHover: { name: IconName.ChatBubblesQuestion, style: IconStyle.Filled },
  }]
};

const launchConfig: ChatLaunchConfig = {
  header: 'My Awesome Chat',
  zeroQueryPrompts,
  suggestedPrompts: ["What are my files?",],
  instruction: "Response must be in the tone of a pirate",
  locale: "en",
};

await chatApi.openChat(launchConfig);

Exemplo completo:

import React from 'react';
import { ChatEmbedded, ChatEmbeddedAPI, IChatEmbeddedApiAuthProvider } from '@microsoft/sharepointembedded-copilotchat-react';

//...
async function requestSPOAccessToken() {
  //...
}

const authProvider: IChatEmbeddedApiAuthProvider = {
  hostname: 'https://m365x10735106.sharepoint.com',
  getToken: requestSPOAccessToken,
};

function App() {
  const [chatApi, setChatApi] = React.useState<ChatEmbeddedAPI|null>(null);

  React.useEffect(() => {
    const openChat = async () => {
      if (!chatApi) {
        return;
      }

      await chatApi.openChat();
    };

    openChat();
  }, [chatApi]);


  return (
    //...
    <ChatEmbedded
      onApiReady={(api) => setChatApi(api)}
      authProvider={authProvider}
      containerId={container.id}
      style={{ width: 'calc(100% - 4px)', height: 'calc(100vh - 8px)' }}
    />
    //...
  );
}

6. O chat de IA deve ser carregado com êxito

Introdução à Extensão de Visual Studio Code Do SharePoint Embedded

Início Rápido

Observação

Ao utilizar tipos de contentor padrão com a extensão do VS Code, as funcionalidades DisableDiscoverability e Grant admin consent não são atualmente suportadas. Isto terá de ser feito com o SPO Administração Powershell.

  1. Siga este guia até à secção Carregar Aplicação de Exemplo com a Extensão Visual Studio Code

  2. Na extensão, clique com o botão direito do rato na aplicação proprietária e selecione Run sample apps -> Typescript + React + Azure Functions

    Utilizar a extensão SPE VS Code para criar um projeto typeScript React Azure Functions

  3. Permitir que a extensão copie e crie segredos de cliente

    Cuidado

    Atenção para ambientes de produção, armazenar segredos em texto simples representa um risco de segurança.

    Alerta de notificação do VS Code do SPE que irá copiar segredos da aplicação em texto simples no computador local

    Se a aplicação ainda não tiver um segredo do cliente, a extensão pedirá para criar um para si.

    Notificação do VS Code do SPE a pedir ao utilizador para permitir que crie um segredo para a aplicação, caso não exista.

  4. Selecione uma pasta para alojar a aplicação. Esta ação clonará o seguinte repositório de Exemplos Incorporados do SharePoint para a pasta

    pasta do windows Explorador de Arquivos para guardar o projeto no computador local

    Em seguida, quando lhe for pedido, abra a pasta

    Extensão do VS Code com o SPE React Typescript + Azure Functions aplicação de exemplo clonada no computador local e aberta no VS Code

  5. Navegue para react-client\src\components\ChatSideBar.tsx e anule o comentário desta secção

    Explorador de ficheiros do VS Code com ChatSideBar.tsx em janela aberta com código relevante para anular comentários realçado

  6. Navegue para react-client\src\routes\App.tsx e defina o estado React da showSidebar variável comotrue

    Explorador de ficheiros do VS Code com App.tsx aberto com a linha da variável showSidebar useState a entrada da função Foi alterada de falsa para verdadeira para ativar a apresentação da barra lateral do chat

  7. Pode seguir as instruções do README.md ficheiro na raiz do projeto para obter mais comandos npm. Execute npm run start na raiz do projeto para iniciar a sua aplicação com a funcionalidade do agente SPE ativada.

    Observação

    npm run start Deve ser feito na pasta raiz do projeto de exemplo. \SharePoint-Embedded-Samples\Samples\spe-typescript-react-azurefunction

    Terminal do VS Code na pasta raiz do projeto SPE Typescript clonado anteriormente e comando npm run start escrito em

  8. Inicie sessão com um utilizador que tenha uma licença de Microsoft 365 Copilot ativada.

    Aplicação SPE Typescript em execução no Edge com botões de início de sessão

  9. Navegue para a containers página, crie uma se ainda não tiver nenhuma

    SPE Typescript App running in edge in /containers sub page with modal of user c reatign a container called ContosoCompanyContainer

    Depois de ter sido criado, irá vê-lo aqui:

    Aplicação SPE Typescript em execução no Edge com um contentor criado da ContosoCompanyContainer acima

  10. Clique no contentor e carregue os seus ficheiros. Assim que um contentor tiver sido criado e tiver navegado dentro do mesmo, a experiência de chat do agente ficará ativada.

    Aplicação SPE Typescript em execução no edge dentro de uma página de contentor criada da ContosoCompanyContainer

Exemplos

O repositório de Exemplos Incorporados do SharePoint tem exemplos sobre como utilizar o SharePoint Embedded nas suas aplicações personalizadas.