Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Pré-requisitos
Observação
- 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.
- 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.
- 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.
- Defina a propriedade CopilotChatEmbeddedHosts da configuração do tipo de contentor para
http://localhost:8080conseguir trabalhar no início rápido abaixo, consulte a secção CSP acima para obter mais informações. - Defina a propriedade DiscoverabilityDisabled da configuração do tipo de contentor para
falseque o agente possa encontrar os ficheiros no contentor criado. Veja a secção Desativação da Deteção acima para obter mais informações. - Certifique-se de que o Copilot para Microsoft 365 está disponível para a sua organização. Tem duas formas de obter um ambiente de programador para o Copilot:
- Um inquilino do Microsoft 365 de sandbox com o M365 Copilot (disponível em pré-visualização limitada através da associação tap).
- Um ambiente de produção do Microsoft 365 ou Office 365 elegível com uma licença M365 Copilot.
- Um inquilino do Microsoft 365 de sandbox com o M365 Copilot (disponível em pré-visualização limitada através da associação tap).
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.
Siga este guia até à secção Carregar Aplicação de Exemplo com a Extensão Visual Studio Code
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
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.
Se a aplicação ainda não tiver um segredo do cliente, a extensão pedirá para criar um para si.
Selecione uma pasta para alojar a aplicação. Esta ação clonará o seguinte repositório de Exemplos Incorporados do SharePoint para a pasta
Em seguida, quando lhe for pedido, abra a pasta
Navegue para
react-client\src\components\ChatSideBar.tsxe anule o comentário desta secção
Navegue para
react-client\src\routes\App.tsxe defina o estado React dashowSidebarvariável comotrue
Pode seguir as instruções do
README.mdficheiro na raiz do projeto para obter mais comandos npm. Executenpm run startna raiz do projeto para iniciar a sua aplicação com a funcionalidade do agente SPE ativada.Observação
npm run startDeve ser feito na pasta raiz do projeto de exemplo.\SharePoint-Embedded-Samples\Samples\spe-typescript-react-azurefunction
Inicie sessão com um utilizador que tenha uma licença de Microsoft 365 Copilot ativada.
Navegue para a
containerspágina, crie uma se ainda não tiver nenhuma
Depois de ter sido criado, irá vê-lo aqui:
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.
Exemplos
O repositório de Exemplos Incorporados do SharePoint tem exemplos sobre como utilizar o SharePoint Embedded nas suas aplicações personalizadas.