# Sharepoint Document Library Connector ## Overview The sharepoint library connector integration allows you to setup a connector between a document library in a sharepoint site and a KB in botpress. ## Configuration Add the following keys to the integration’s `configuration` block: - **clientId** (required) — Application (client) ID of your Microsoft Entra (Azure AD) app registration. - **tenantId** (required) — Directory (tenant) ID of the same app registration. - **thumbprint** (required) — Thumbprint of the certificate uploaded to the app registration. - **privateKey** (required) — PEM-formatted private key that matches the certificate (everything between `-----BEGIN PRIVATE KEY-----` and `-----END PRIVATE KEY-----`). - **primaryDomain** (required) — SharePoint primary domain (the part before `.sharepoint.com`). *Example*: `contoso` - **siteName** (required) — Name of the SharePoint site that owns the document libraries you want to sync. - **documentLibraryNames** (optional) — Comma-separated list **or** JSON array of document libraries to sync. *Examples*: `Policies,Procedures` `["Policies","Procedures"]` - **folderKbMap** (optional) — JSON object that maps `kbId` ⇒ array of folder prefixes for routing files to specific KBs. *Example*: `{"kb-marketing":["Campaigns"],"kb-policies":["HR","Legal"]}` **Tip:** - If you omit `documentLibraryNames`, **all** document libraries in the specified site will be synced. - If you omit `folderKbMap`, every file is routed to the default KB configured for its library. > [!IMPORTANT] > Due to reliability issues, **Moves** and **Copies** are not supported. Those events from sharepoint will not reflect in the knowledge bases. If you wish to move/copy a file to another location, **Upload** or **Create** the file instead. ## How to's ### How to register a app on Microsoft Entra admin center - From the Home page of Microsoft Entra admin center, Open App registrations ( This is under Applications in the Left Nav ) - Add a new registration by clicking on “+ New registration” - Give your app an appropriate name, and click register. - Open the App registration and take note of the following: - `Application (client) ID` - `Directory (tenant) ID` ### How to create a certificate for your app registration - We will be using a self signed certificate to authenticate, to create a self signed certificate run the following commands in order - `openssl genrsa -out myPrivateKey.key 2048` → This will generate a 2048-bit private key and save it as myPrivateKey.key. - `openssl req -new -key myPrivateKey.key -out myCertificate.csr` → This will create a CSR cert. You will be prompted to enter some information, fill as needed. - `openssl x509 -req -days 365 -in myCertificate.csr -signkey myPrivateKey.key -out myCertificate.crt` → This will create a certificate file named myCertificate.crt that is valid for 365 days. ### How to add your certificate to your app registration - Navigate to the Azure portal and go to your Azure AD app registration. - Under “Certificates & secrets,” choose “Certificates” and click “Upload certificate.” - Upload your .crt ### How to update API permissions for your app registration - Go to “API Permissions” it should be under the Manage Group, in your App Registration " - Click “Add a permissions” - click on "Microsoft Graph". - Select “Application permissions” as the type of permission. - Check `Sites.FullControl.All` , `Sites.Manage.All` , `Sites.Read.All` , `Sites.ReadWrite.All`, `Sites.Selected.All`, `Files.Read.All` and `Files.ReadWriteAll` - Click “Add a permissions again.” - Click the “Add a permission” button again - Scroll till you find Sharepoint and click on it. - Select “Application permissions” as the type of permission. - Check `Sites.FullControl.All` , `Sites.Manage.All` , `Sites.Read.All` , `Sites.ReadWrite.All` and `Sites.Selected.All` - Click “Add permissions.” - You should see All the permissions you added in the permissions list. - Click on “Grant admin consent for <your_org_name>” --- ## Folder‑to‑KB Mapping (`folderKbMap`) *This is an **optional** advanced feature. If you skip it, every file in the document library will go to the single KB you specified above.* ### Why use it? Sometimes one SharePoint document library contains several distinct collections of content—HR procedures, Legal policies, Marketing campaigns, etc.—but you want each collection to live in its **own** Botpress KB for cleaner search results and permissions. `folderKbMap` lets you do exactly that. ### How it works * `folderKbMap` is a **JSON object** whose keys are **KB IDs** and whose values are **arrays of folder prefixes** (relative paths) to watch. * During sync, the integration checks each file’s server‑relative path. * If the path **starts with** one of the prefixes you listed, that file is routed to the corresponding KB. * If no prefix matches, the file falls back to the default KB for the library. ### Configuration syntax ```jsonc // Example: route folders within the libraries "folderKbMap": { "kb-id-1": ["doclib1","doclib1/ExampleFolder/2025"], "kb-id-2": ["doclib2/HR","doclib2/ExampleFolder"] } ``` *Prefixes are **case‑insensitive** and may include simple wildcards (`*`).* ### Rules & limitations 1. **No KB sharing across libraries.** A single KB **cannot** receive content from two different libraries—even via folder mapping. 2. **Create KBs first.** All KB IDs used in `folderKbMap` must already exist in Botpress before you save the configuration. 3. **Recursive files** Every file within a document library, regardles whether it is in a nested folder - will be recursively copied. ### Quick checklist | ✔ | Step | |---|------| | Create a **separate KB** for each content group you want. | | Identify folder (or folder‑prefix) boundaries inside the SharePoint library. | | Build a `folderKbMap` JSON object mapping **kbId → [prefixes]**. | | Add the JSON to your integration configuration. | | Save & verify: upload a test file in each folder and confirm it appears in the expected KB. | ---