Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
- Questa è una funzionalità di anteprima pronta per la produzione.
- Le anteprime pronte per la produzione sono soggette a condizioni per l'utilizzo supplementari.
Si applica a Dynamics 365 Project Operations integrato con ERP e Dynamics 365 Project Operations per la produzione
Expense Agent riunisce le funzionalità di Microsoft Dynamics 365 Project Operations, app finanziarie e operative, Microsoft Copilot Studio, Power Automate e Dataverse per automatizzare i flussi di lavoro di elaborazione delle spese usando l'intelligenza artificiale. Questa funzionalità consente di risparmiare tempo e ridurre il lavoro manuale consentendo al sistema di elaborare le ricevute e generare righe di spesa e note spese per gli utenti. Usa connettori Microsoft Power Platform per l'integrazione con Outlook, Microsoft Teams, calendari utente e ambiente delle app finanziarie e operative tramite entità virtuali Dataverse.
L'Agente spesa include più flussi, tre dei quali fungono da agenti di orchestrazione principali:
- Process Emails: questo flusso analizza ogni ora una cartella della cassetta postale configurata e archivia gli allegati come ricevute scollegate in Dynamics 365 Finance.
- Estrai ID ricevuta: questo flusso preleva le ricevute non collegate e attiva l'agente per estrarre i dettagli della ricevuta e creare una riga di spesa non collegata.
- Processo Report Spese – Questo flusso converte le righe di spesa non collegate e genera report spese, basandosi sulla configurazione Raggruppa report per che hai impostato nell'applicazione per ciascuna entità legale.
Inoltre, l'agente si integra con Microsoft Teams, consentendo l'uso di schede adattive per la revisione e l'invio della nota spese.
L'agente si basa su diversi connettori Microsoft Power Platform. Questi connettori sono automaticamente referenziati nei flussi di Power Automate forniti.
- Outlook (Office 365): questo connettore accede alla cassetta postale condivisa per estrarre le ricevute.
- Dataverse (entità virtuali): questo connettore si integra con le app per la finanza e le operazioni tramite entità virtuali.
- Microsoft Copilot Studio: questo connettore richiama i modelli di intelligenza artificiale per estrarre le informazioni sulla ricevuta.
- Microsoft Teams: questo connettore invia schede adattive per le interazioni utente (se l'integrazione di Teams è abilitata).
- Microsoft 365 Users: questo connettore recupera i dettagli del calendario utente (facoltativo, se l'analisi delle ricevute è compatibile con il contesto).
Prerequisiti
- Ambiente finanziario e operativo: È necessaria almeno la versione 10.0.44 (10.0.2263.175 e successive) o 10.0.45 (10.0.2345.115 e successive) o 10.0.46 (10.0.2428.69 e successive) dell'ambiente finanziario e operativo per installare l'agente.
- Ruoli richiesti per configurare l'utente di Expense Agent: Per completare i passaggi descritti in questo articolo, è necessario essere l'amministratore di sistema dell'organizzazione e avere i seguenti ruoli per configurare l'utente di Expense Agent per l'installazione.
| System | Ruolo | Comments |
|---|---|---|
| Interfaccia di amministrazione di Power Platform | Amministratore di sistema |
|
| Finance and Operations | Amministratore di sistema |
|
| Microsoft 365 | Amministratore di Exchange e Amministratore utenti |
|
| Interfaccia di amministrazione di Teams | Amministratore di Teams | Obbligatorio se si prevede di abilitare l'integrazione di Microsoft Teams |
Passaggi per configurare l'Agente spesa
Per installare e configurare Expense Agent, seguire questa procedura:
- Installare Copilot per le app finance e operations.
- Abilita le funzionalità dell'agente nell'ambiente.
- Crea un utente spesa per l'esecuzione dell'agente.
- Configurare una cassetta postale condivisa.
- Configurare l'Agente spesa.
- Abilitare l'agente spese in Microsoft Teams (facoltativo: se è necessaria l'integrazione con Microsoft Teams)
Le sezioni seguenti descrivono in dettaglio ogni passaggio.
Passaggio 1: Installare Copilot per le app finance and operations
L'Agente delle Spese è disponibile come parte del pacchetto Copilot per le applicazioni di finanza e operazioni. Dopo aver installato questo pacchetto nell'ambiente, si ottengono automaticamente tutti gli asset necessari, inclusi l'agente, le variabili di ambiente e i flussi Power Automate.
Per installare l'app necessaria, seguire questa procedura:
- Vai all'interfaccia di amministrazione di Power Platform nel browser.
- Nell'elenco degli ambienti seleziona il nome dell'ambiente in cui si vuole installare l'app.
- Nella pagina dei dettagli dell'ambiente (NOT dal riquadro di spostamento a sinistra passare alla sezione Resources e selezionare Dynamics 365 apps.
- Cercare Copilot per le app di finanza e operazioni all'interno dell'elenco delle app di Dynamics 365. Se è già installato ed è disponibile un aggiornamento, seleziona il pulsante Aggiorna.
- Se l'app non è elencata tra le app di Dynamics 365, selezionare Installa app, selezionare Copilot per le app di finanza e operazioni e seguire le istruzioni per completare l'installazione.
- Copilot per le app Finance and Operations deve essere 1.0.3231.4 o versione successiva
Annotazioni
Altre informazioni su come abilitare Copilot nell'ambiente in Abilitare le funzionalità di Copilot nelle app finance and operations.
Suggerimento
Per verificare se il pacchetto è stato installato correttamente, seguire questa procedura:
- Passare al portale di Power Apps maker > selezionare l'ambiente > selezionare Soluzioni > Vedere cronologia > ricerca e selezionare msdyn_ExpenseAI > Dettagli.
- Controllare il campo Risultato .
- Se il risultato mostra Operazione riuscita, il pacchetto è stato installato correttamente.
- Se il risultato non mostra Operazione riuscita, l'installazione non è riuscita.
- Se l'installazione non riesce, eliminare msdyn_FnOCopilotAnchor (vedere la sezione di disinstallazione) e installare di nuovo Copilot per le app finance and operations.
Passaggio 2: abilita le funzionalità dell'agente nell'ambiente.
Dopo aver installato il pacchetto di Copilot per le app Finance e Operazioni, attivare l'agente spese dall'ambiente Dataverse e dall'ambiente Finance e Operazioni.
Abilitare le funzionalità in Dataverse
Attivare il flag di funzionalità Copilot nell'interfaccia di amministrazione di Power Platform. Per attivare il flag di funzionalità Copilot, seguire questa procedura:
- Vai a Interfaccia di amministrazione di Power Platform.
- Seleziona Ambienti>, il tuo ambiente>Impostazioni>Prodotto> select Funzionalità.
- Verificare che il flag di funzionalità Copilot sia attivato.
Abilitare la funzionalità nell'ambiente per la finanza e le operazioni
Per attivare l'agente nelle app finance and operations, seguire questa procedura:
- Accedi all'ambiente per la finanza e le operazioni.
- Vai a Gestione funzionalità e abilita le funzionalità Pagina iniziale immersiva e Gestione agenti.
- Per configurare l'Agente spesa (il programma di installazione è per persona giuridica), vai a Gestione spese>Configurazione>Generale>Parametri di gestione spese.
- Nella scheda Agente Inserimento spese configura i parametri come illustrato nella tabella seguente.
| Parametri | Value | Comments |
|---|---|---|
| Abilitare l'Agente spesa per la persona giuridica corrente | Yes | Abilita Sì per abilitare l'agente per la persona giuridica corrente. |
| Frequenza | Giornaliero o settimanale | Configurare la frequenza per la creazione automatica dei report spese nell'organizzazione. |
| Raggruppa report per | Viaggio o progetto | Configura il raggruppamento delle spese in base a un progetto o a un viaggio. |
Passaggio 3: crea un utente agente spesa per l'esecuzione dell'agente
Creare un utente agente voci di spesa dedicato per assicurarti che l'agente venga eseguito indipendentemente dall'identità di qualsiasi dipendente. Questo approccio consente di gestire la sicurezza, la gestibilità e la manutenibilità a lungo termine. Anche se è possibile usare un account utente esistente con i privilegi necessari, usare un'identità di proprietà del sistema.
Creare l'utente di Expense Agent in Microsoft Entra ID
- Accedere al portale Azure.
- Nei servizi di Azure disponibili selezionare Microsoft Entra ID.
- In Microsoft Entra ID creare un nuovo utente.
- Seleziona Aggiungi>Utente>Crea nuovo utente
- Nome dell'entità utente
- Scegli il dominio appropriato
- Nome visualizzato
- Parola chiave
- Contrassegno di abilitazione dell'account
- Per visualizzare i dettagli e completare il processo di creazione dell'utente, seleziona Rivedi e crea quindi Crea.
- Nella pagina Utente (Gestisci > utenti) seleziona un utente e la pagina dei dettagli della visualizzazione.
- Seleziona Modifica proprietà, passa alla scheda Impostazioni e compila il percorso di utilizzo appropriato.
Annotazioni
A seconda dei criteri dell'organizzazione, potrebbe essere necessario modificare la password e configurare l'autenticazione a più fattori (MFA). Segui i passaggi usati normalmente per modificare la password e configurare l'autenticazione a più fattori.
Assegnare le licenze necessarie all'utente di Agente spesa
Per installare correttamente Agente spesa, assegna le licenze seguenti all'utente Agente spesa.
- Dynamics 365 licenza dei membri di Teams
- Microsoft 365 Business Basic o qualsiasi licenza che copre Microsoft Teams e Outlook (ad esempio, Office 365 E5 con team)
- Power Apps Premium
Per assegnare licenze, seguire questa procedura:
- Accedere al Centro di amministrazione di Microsoft 365 con un utente che ha il ruolo di Amministratore delle licenze o superiore per assegnare licenze.
- Selezionare Billing>Licenses>Dynamics 365 Licenza membri di Teams.
- Seleziona + Assegna licenze.
- Cerca l'utente dell'Agente spesa creato nel passaggio precedente.
- Seleziona Assegna per completare l'assegnazione di licenza.
- Seguire i passaggi da 2 a 5 per le altre licenze, Microsoft 365 Business Basic e Power Apps Premium.
Annotazioni
Altre informazioni su come controllare e assegnare licenze in Uso della pagina Utenti attivi per assegnare o annullare l'assegnazione delle licenze.
Aggiungere l'utente all'ambiente Power Platform
Per aggiungere l'utente all'ambiente Power Platform, seguire questa procedura:
Accedi all'interfaccia di amministrazione di Power Platform e seleziona l'ambiente appropriato.
Suggerimento
Questa pagina fornisce informazioni relative all'ID ambiente per Dataverse, all'URL dell'ambiente per Dataverse e all'URL per la finanza e le operazioni. Archivia questi valori per l'uso nelle sezioni successive.
Vai ad Accesso > Utenti > Visualizza tutto.
Seleziona Aggiungi utente, immetti l'utente dell'agente appena creato e seleziona Aggiungi.
Nella pagina Gestisci ruoli di sicurezza aggiungere i ruoli seguenti.
- Ruolo dell'Agente IA per le voci di spesa
- Agente finanziario e operativo Configuration Manager
- Addetto alla personalizzazione del sistema
Per confermare le assegnazioni dei ruoli, seleziona Salva.
Questi ruoli forniscono l'accesso a Dataverse e ai componenti Power Automate necessari per il funzionamento dell'agente.
Suggerimento
Se l'utente esiste già ed è sufficiente assegnare ruoli, passare all'interfaccia di amministrazione di Power Platform e selezionare l'ambiente appropriato.
- Vai ad Accesso > Utenti > Visualizza tutto.
- Seleziona l'utente dell'agente creato.
- Seleziona Gestisci ruoli e assegna i ruoli.
Assegna il ruolo necessario nell'ambiente per la finanza e le operazioni
Per assegnare il ruolo ExpenseAgentRole nell'ambiente finanziario e operativo, seguire questa procedura:
- Nell'ambiente per la finanza e le operazioni vai ad Amministrazione di sistema>Utenti.
- Crea un record utente per l'utente dell'agente.
- Dopo aver creato l'utente, passare alla sezione ruoli dell'utente, selezionare Assegna ruoli e cercare ExpenseAgentRole.
- Seleziona Salva.
Annotazioni
ExpenseAgentRole è disponibile nella versione delle app finance and operations da 10.0.44 (10.0.2263.81) e 10.0.45 (10.0.2345.6) e con Copilot per le app finanziarie e operative versione 1.0.3121.1
Assegnare l'accesso alla cassetta postale condivisa
L'utente dell'agente deve disporre dell'autorizzazione di Microsoft Graph Mail.Read.Shared. Questa autorizzazione consente all'agente di leggere le conferme dalla cassetta postale condivisa configurata durante l'esecuzione del flusso.
Per assegnare l'accesso alla cassetta postale condivisa, seguire questa procedura:
- Passare a Microsoft Graph Explorer ed eseguire l'accesso usando l'utente agente creato.
- Seleziona l'icona utente nell'angolo in alto a destra > seleziona Consenso alle autorizzazioni .
- Seleziona il menu a discesa per Posta> cerca Mail.Read.Shared> seleziona Consenti e seleziona Accetta.
Riepilogo dei ruoli necessari per l'utente dell'agente creato
| Ambiente | Ruoli | Comments |
|---|---|---|
| Dataverse | I ruoli indicati consentono all'agente di interagire con i flussi Power Automate, le variabili di ambiente e le entità virtuali connesse a Dynamics 365 Finance | |
| Finance and Operations | Questo ruolo è necessario affinché l'agente crei e gestisca gli inserimenti spese nell'ambiente delle app per la finanza e le operazioni. Note: ExpenseAgentRole è disponibile nella versione delle applicazioni Finance and Operations da 10.0.44 (10.0.2263.81) e 10.0.45 (10.0.2345.6) e con Copilot per le applicazioni Finance and Operations versione 1.0.3121.1 |
|
| Accesso alle cassette postali condivise con Graph Explorer | Mail.Read.Shared | Microsoft Graph autorizzazione che consente all'agente di leggere le ricevute dalla cassetta postale condivisa configurata durante l'esecuzione del flusso |
Passaggio 4: configurare la cassetta postale condivisa
L'Agente spesa usa una cassetta postale condivisa per ricevere ed elaborare i messaggi di posta elettronica di ricezione. Un utente con il ruolo Amministratore di Exchange deve creare e configurare questa cassetta postale nel Microsoft 365 Admin Center.
Per creare e configurare la cassetta postale condivisa, seguire questa procedura:
Accedere al Microsoft 365 Admin Center usando un account amministratore di Exchange.
Nel riquadro a sinistra, seleziona Teams & Gruppi>Cassette postali condivise.
Suggerimento
Potrebbe essere necessario selezionare Mostra tutto per espandere l'elenco completo.
Seleziona Aggiungi una cassetta postale condivisa.
Immettere un nome e un indirizzo e-mail per la cassetta postale condivisa.
Seleziona Salva modifiche.
In Passaggi successivi, seleziona Aggiungi membri a questa cassetta postale condivisa. La gestione dei membri potrebbe richiedere alcuni minuti prima che diventi disponibile.
Seleziona Aggiungi membri.
Seleziona l'utente dell'agente creato e tutti gli altri utenti che devono monitorare la cassetta postale e seleziona Aggiungi.
Seleziona Chiudi.
Annotazioni
Usare l'indirizzo di posta elettronica della cassetta postale condivisa nel passaggio successivo. Dopo aver configurato la cassetta postale condivisa, è necessario specificarne l'indirizzo di posta elettronica e il percorso della cartella (per impostazione predefinita impostata su Posta in arrivo) come variabili di ambiente quando si configura l'agente di tempo e spese. Per altre informazioni, vedere Passaggio 5: Configurare l'Agente delle Spese.
Passaggio 5: configurare l'Agente spesa
Sono disponibili due opzioni per configurare l'Agente spesa:
- Opzione A: Usare uno script di PowerShell (scelta consigliata)
- Option B: Eseguire l'installazione manuale in Power Apps (senza PowerShell)
Importante
Prima di procedere con l'installazione dell'Expense Agent, assicurarsi che l'agente sia stato provisionato correttamente nel Microsoft Copilot Studio.
Per verificare che il provisioning dell'agente sia stato eseguito correttamente, seguire i seguenti passaggi:
- Accedere a Microsoft Copilot Studio e selezionare l'ambiente.
- Vai ad Agenti e cerca ExpenseAgent-Line (anteprima).
- Verificare che il pulsante Pubblica sia abilitato.
- Se abilitata, procedi con l'installazione. Se disabilitata, attendi il provisioning dell'agente.
- Ripeti questi passaggi per verificare che l'Agente Inserimento spese (anteprima) sia abilitato.
Suggerimento
Se il provisioning dell'app Copilot per la finanza e le operazioni richiede più di 5-6 ore, disinstallare e reinstallare l'app per risolvere potenziali ritardi di installazione. Per altre informazioni, vedere la sezione Uninstall Expense Agent alla fine di questo articolo.
Opzione A: Usare uno script di PowerShell (scelta consigliata)
La configurazione manuale dell'agente comporta la creazione e il collegamento di connessioni, l'abilitazione dei flussi Power Automate e la pubblicazione della soluzione. Questo processo può richiedere molto tempo ed è soggetto a errori. Per automatizzare l'installazione, usare uno script di PowerShell dopo l'aggiornamento dei parametri necessari.
Lo script di PowerShell automatizza le attività seguenti:
- Aggiorna le variabili di ambiente necessarie.
- Collega le connessioni di Microsoft Power Platform con i riferimenti alle connessioni della soluzione.
- Abilita tutti i flussi Power Automate richiesti dall'Agente di Gestione Tempo e Spese.
- Pubblica gli agenti Copilot.
- Pubblica la soluzione Dataverse.
Prima di eseguire lo script, devi creare connessioni perché è necessario specificare l'ID connessione per ogni connettore nel file install.ps1. Per creare queste connessioni, seguire questa procedura usando l'utente dell'agente creato.
- Accedere al portale di Power Apps maker usando l'utente dell'agente appena creato e selezionare l'ambiente.
- Nel riquadro a sinistra, seleziona Altro, quindi Connessioni.
- Selezionare Nuova connessione e cercare utilizzando il Nome connessione della tabella seguente (ad esempio, Office 365 Outlook).
- Seleziona il connettore appropriato dall'elenco e crealo.
- Dopo aver creato la connessione, prendi nota dell'utente con cui è stata creata la connessione. Dovrebbe essere idealmente l'ID utente dell'agente creato. Aggiornare questo ID utente nel file di installazione creato nel passaggio successivo.
- Ripeti i passaggi 3 e 4 per ognuna delle connessioni necessarie rimanenti elencate nella tabella seguente.
| Nome connessione | Formati URL di connessione |
|---|---|
| Office 365 Outlook | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/details |
| utenti di Office 365 | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/connectionID/dettagli |
| Microsoft Teams | https://make.powerapps.com/environments/environmentID/connections / shared_teams/connectionID/details |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/dettagli |
| Microsoft Copilot Studio (anteprima) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/details |
Informazioni necessarie per creare il file di installazione
Per creare il file di installazione , install.ps1, sono disponibili le informazioni seguenti. Per riferimento, vedi la tabella seguente.
| Parametro | Altri dettagli |
|---|---|
| ID dell'ambiente Dataverse | Immetti l'ID ambiente ottenuto dall'interfaccia di amministrazione di Power Platform. Valore di esempio: xxxx-xxxx-xxxx-xxx-xxxxxxxxxx |
| URL dell'ambiente Dataverse | Immetti l'URL dell'ambiente dall'interfaccia di amministrazione di Power Platform. Nota: assicurati di avere https:// all'inizio e nessuna barra "/" alla fine. Valore di esempio: https://org123.crm.contoso.com |
| URL dell'istanza per la finanza e le operazioni | Immetti i dettagli dell'ambiente per la finanza e le operazioni nel formato seguente. Valore di esempio: https://org123.contoso.com Nota: assicurati di avere https:// all'inizio e nessuna barra "/" alla fine. |
| OutlookFolderPath | Immetti il percorso della cartella creato nella cassetta postale condivisa. Se non viene creata alcuna altra cartella, viene impostata come Posta in arrivo per impostazione predefinita. Valore di esempio: Posta in arrivo Come procedura consigliata, creare una cartella separata per la gestione delle spese |
| ID indirizzo cassetta postale | Immettere l'indirizzo di posta elettronica della cassetta postale condivisa appena creata Valore di esempio: expenseagent@contoso.com |
| Microsoft Dataverse nome della connessione Microsoft Copilot Studio nome della connessione Microsoft Office Outlook nome della connessione Nome connessione utenti di Microsoft Office 365 Microsoft Teams nome della connessione |
L'input per tutti i nomi di connessione è lo stesso e coincide con l'ID e-mail dell'utente agente creato. Valore di esempio: createdexpenseagentuser@contoso.com |
Creare il file dello script di installazione
Creare un file di script di installazione copiando il codice seguente. Inserire le variabili di ambiente necessarie nello script, quindi eseguire lo script usando PowerShell.
Annotazioni
Posizionare il file di script di installazione sul desktop locale. Non archiviarlo in One Drive.
Creare un file di script di PowerShell con il codice seguente. Aggiornare i parametri indicati prima di eseguire lo script.
Suggerimento
Quando Obbligatorio = $true, PowerShell richiede di immettere i parametri in modo interattivo, quindi non è necessario aggiornarli direttamente nel file di script.
Se si vuole evitare l'input manuale e si vogliono definire i parametri all'interno dello script di installazione, impostare Obbligatorio = $false nella sezione Param del codice di esempio seguente.
Copiare il codice seguente nel file di script di installazione e salvarlo come "Install.ps1". Aggiornare le variabili nei rispettivi campi dei parametri nella sezione param. È necessario aggiornare 10 variabili.
Suggerimento
Usa la tabella precedente come riferimento e sostituisci tutti i valori di esempio con i rispettivi dettagli.
#requires -Version 7
Param(
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment id")]
[string]$DataverseEnvironmentId = "xxxx-xxxx-xxxx-xxx-xxxxxxxxxx",
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment URL")]
[string]$DataverseUrl = "https://org123.crm.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="Finance and Operations instance URL")]
[string]$D365FinanceAndOperationsUrl = "https://org123.operations.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="OutlookFolderPath")]
[string]$OutlookFolderPath = "Inbox",
[Parameter(Mandatory=$true, HelpMessage="Mailbox Address Id")]
[string]$MailboxAddressId = "expenseagent@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Dataverse connection name")]
[string]$MicrosoftDataverseConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Copilot Studio connection name")]
[string]$MicrosoftCopilotStudioConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office Outlook connection name")]
[string]$Office365OutlookConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office 365 Users connection name")]
[string]$Office365UsersConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Teams connection name")]
[string]$MicrosoftTeamsConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$false, HelpMessage="Checks for bot Sync Errors and if there is provisioning required before Agent publish step")]
[boolean]$CheckBotSyncStatusAndProvisionBots = $false
)
$flows = @(
"expense entry retry check",
"expense configuration",
"get expense outlook folder",
"generate expense report",
"send expense report adaptive card",
"auto match expenses",
"process emails",
"extract unattached receipt ids for copilot invocation",
"extract unattached receipt output using dataverse plugin",
"generate expense line",
"generate expense line without project id and status id",
"identify project ids",
"user calendar events",
"process expense report using copilot",
"invoke expense agent for receipt processing"
)
$agents = @(
"msdyn_ExpenseEntryAgent",
"msdyn_ExpenseReportAgent"
)
# Check PS version
if ($PSVersionTable.PSVersion.Major -lt 7) {
Write-Error 'This script requires at least PowerShell version 7' -ErrorAction Stop
}
# Install the required modules if not already installed or if the version is not 1.0.40
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.PowerShell | Where-Object { $_.Version -ge [Version]"1.0.40" })) {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 not found. Installing..." -ForegroundColor Yellow
Install-Module -Name Microsoft.PowerApps.PowerShell -RequiredVersion 1.0.40 -Force -AllowClobber -Scope CurrentUser
} else {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 is already installed." -ForegroundColor Green
}
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.Administration.PowerShell | Where-Object { $_.Version -ge [Version]"2.0.147" })) {
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -RequiredVersion 2.0.147 -Force -AllowClobber -Scope CurrentUser
}
# Install the required modules if not already installed
if (-not (Get-Module -ListAvailable -Name Az.Accounts | Where-Object { $_.Version -ge [Version]"5.0.1"})) {
Install-Module -Name Az.Accounts -RequiredVersion 5.0.1 -Force -AllowClobber -Scope CurrentUser
}
# Import required modulesds
Import-Module Az.Accounts
Import-Module Microsoft.PowerApps.PowerShell
Import-Module Microsoft.PowerApps.Administration.PowerShell
# global variable declaration
$filter = '$filter'
function Get-AccessToken {
# Retrieve the access token for the Dataverse environment
$accessToken = (Get-AzAccessToken -ResourceUrl "$DataverseUrl" -AsSecureString).Token
Write-Host "Access token for $userId retrieved successfully." -ForegroundColor Green
return $accessToken
}
function Get-AccessTokenPlainText {
param(
[Parameter(Mandatory=$true, HelpMessage="Access token for authentication")]
[securestring]$accessToken
)
# Retrieve the access token for the PVA environment
$token = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($accessToken))
return $token
}
function update-EnvironmentVaribleValue {
param (
[string]$accessToken,
[string]$env_key,
[string]$env_value # Access token for authentication
)
try
{
# Get the environment variable definition
$envVarDefinition = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariabledefinitions?$filter=schemaname eq '$env_key'" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarDefinition.value -ne $null) {
$envVarDefId = $envVarDefinition.value[0].environmentvariabledefinitionid
# Get the environment variable value record
$filterValue = [System.Web.HttpUtility]::UrlEncode("_environmentvariabledefinitionid_value eq $envVarDefId")
$envVarValue = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues?$filter=$filterValue" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarValue.value -ne $null) {
$envVarValueId = $envVarValue.value[0].environmentvariablevalueid
# Update the environment variable value
Invoke-RestMethod -Method Patch -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues($envVarValueId)" -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} -Body (@{ value = $env_value } | ConvertTo-Json -Depth 1)
Write-Host "Environment variable updated with name $env_key and value $env_value" -ForegroundColor Green
} else {
Write-Host "Environment variable value not found for $env_key. Skipping..." -ForegroundColor Red
}
}
else {
Write-Host "Environment variable definition not found for $env_key. Skipping..." -ForegroundColor Yellow
}
}
catch {
Write-Host "Failed to update environment variable $env_key. Error: $($_)" -ForegroundColor Red
throw $_ # Re-throw the error to stop the script if this step is critical
}
}
function update_EnvironmentVariablesForExpense {
param (
[string]$accessToken # Access token for authentication
)
write-host "Updating environment variables..." -ForegroundColor Yellow
try
{
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseFnoInstanceUrl" -env_value $D365FinanceAndOperationsUrl
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentOutlookFolderPath" -env_value $OutlookFolderPath
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentMailboxAddressId" -env_value $MailboxAddressId
}
Catch {
Write-Host "Failed to update environment variables. Error: $($_)" -ForegroundColor Red -ErrorAction Stop
}
}
# Function to publish the solution
function Publish-Solution {
param (
[string]$accessToken
)
Write-Host "Publishing All" -ForegroundColor Yellow
# Construct the API endpoint for publishing the solution
$uri = "$DataverseUrl/api/data/v9.2/PublishAllXml"
# Make the API call
try {
Invoke-RestMethod -Method Post `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Publish All - Success!" -ForegroundColor Green
} catch {
Write-Host "Failed to publish. Error: $($_.Exception)" -ForegroundColor Red
}
}
function Get-FlowGuidByName {
param (
[string]$accessToken, # Access token for authentication
[string]$flowName # Name of the flow to search for
)
#Write-Host "Retrieving GUID for flow: $flowName" -ForegroundColor Yellow
# Construct the API endpoint with a filter for the flow name
$encodedFlowName = [System.Web.HttpUtility]::UrlEncode($flowName)
$uri = "$DataverseUrl/api/data/v9.2/workflows?$filter=name eq '$encodedFlowName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
# Check if the flow was found
if ($response.value.Count -gt 0) {
$flow = $response.value[0]
Write-Host "Flow found: $($flow.name) with GUID: $($flow.workflowid)" -ForegroundColor Green
return $flow.workflowid
} else {
Write-Host "No flow found with the name: $flowName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve flow GUID. Error: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
}
# Function to activate a Power Automate flow
function Activate-Flow {
param (
[string]$DataverseUrl, # Dataverse environment URL
[string]$accessToken, # Access token for authentication
[string]$flowId # GUID of the flow to activate
)
# Construct the request body
$body = @{
"statecode" = 1 # Activated
"statuscode" = 2 # Activated
} | ConvertTo-Json -Depth 1 -Compress
# Construct the API endpoint
$uri = "$DataverseUrl/api/data/v9.2/workflows($flowId)"
# Make the API call
try {
Invoke-RestMethod -Method Patch `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} `
-Body $body
Write-Host "Flow activated successfully." -ForegroundColor Green
} catch {
Write-Host "Failed to activate flow. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Get-ConnectionRefIdFromLogicalName {
param (
[string]$accessToken,
[string]$connectionRefLogicalName
)
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionRefLogicalName'"
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response -ne $null) {
write-host "Connection reference id found: $($response.value[0].connectionreferenceid) " -ForegroundColor Green
return $response.value[0].connectionreferenceid
}
else {
Write-Host "No connection reference found for logical name: $connectionRefLogicalName" -ForegroundColor Red
return $null
}
}
function Get-ConnectionId {
param (
[string]$userProvidedName,
[string]$providerName
)
try {
$matchedConnectionId = $null
# Added -ErrorAction Stop to ensure the catch block is triggered on failure
$connections = Get-PowerAppConnection -EnvironmentName $DataverseEnvironmentId -ConnectorNameFilter $providerName -ErrorAction Stop
foreach ($con in $connections) {
if (($con.ConnectionName -eq $userProvidedName) -or ($con.DisplayName -eq $userProvidedName)) {
$matchedConnectionId = $con.ConnectionName
break
}
}
if ($null -eq $matchedConnectionId) {
# Use 'throw' to create a terminating error that the calling function can catch
throw "Unable to find connection '$userProvidedName' for provider '$providerName'."
}
return $matchedConnectionId
}
catch {
# Catch any errors from Get-PowerAppConnection or the 'throw' statement above
Write-Error "Failed to get connection ID for '$userProvidedName'. Error: $_"
throw # Re-throw the error to stop the script if this step is critical
}
}
function Get-ConnectionReferenceId {
param(
[string]$connectionReferenceLogicalName,
[securestring]$accessToken
)
try {
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionReferenceLogicalName'"
# Added -ErrorAction Stop for clarity, though Invoke-RestMethod often terminates on HTTP errors
$response = Invoke-RestMethod -Method Get -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -ErrorAction Stop
if ($null -eq $response -or $response.value.Count -eq 0) {
throw "Connection reference not found for logical name '$connectionReferenceLogicalName'."
}
$connectionReferenceDisplayName = $response.value[0].connectionreferencedisplayname
$connectionReferenceId = $response.value[0].connectionreferenceid
Write-Host "updating connection $connectionReferenceDisplayName for logical name $connectionReferenceLogicalName)"
return $connectionReferenceId
}
catch {
Write-Error "Failed to get connection reference ID for '$connectionReferenceLogicalName'. Error: $_"
throw # Re-throw to notify the calling function
}
}
function Set-ConnectionReferenceConnection {
param (
[string]$connectionReferenceLogicalName,
[string]$userProvidedConnectionName,
[string]$providerName,
[securestring]$accessToken
)
try {
# These functions will now throw terminating errors if they fail
$connectionReferenceId = Get-ConnectionReferenceId -connectionReferenceLogicalName $connectionReferenceLogicalName -accessToken $accessToken
$connectionId = Get-ConnectionId -userProvidedName $userProvidedConnectionName -providerName $providerName
$body = @{
"connectionid" = "$connectionId"
} | ConvertTo-Json -Depth 1
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences($connectionReferenceId)"
# Write-Host "Updating connection reference URI: $uri with connection id $connectionId"
Invoke-RestMethod -Method Patch -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -Body $body -ErrorAction Stop
Write-Host "Connection reference updated successfully." -ForegroundColor Green
}
catch {
# This block will catch errors from any of the functions called within the try block
Write-Error "Failed to set connection reference for '$connectionReferenceLogicalName'. Error: $_"
throw
}
}
function Activate-Flows {
param (
[string]$accessToken,
[array]$expenseAIFlows
)
foreach ($flowName in $expenseAIFlows) {
Write-Host "Activating flow: $flowName" -ForegroundColor Yellow
# Call the Get-FlowGuidByName function to get the flow GUID
$flowGuid = Get-FlowGuidByName -dataverseUrl $DataverseUrl -accessToken $accessToken -flowName $flowName
if ($flowGuid -ne $null) {
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid" -ForegroundColor Green
Activate-Flow -dataverseUrl $DataverseUrl -accessToken $accessToken -flowId $flowGuid
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid Activated" -ForegroundColor Green
} else {
Write-Host "Flow Name: $flowName not found." -ForegroundColor Red
}
}
}
# Function to retrieve the Agent ID by name
function Get-AgentIdBySchemaName {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentSchemaName
)
Write-Host "Retrieving agent ID for agent schema: $agentSchemaName" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots?$filter=schemaname eq '$agentSchemaName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response.value.Count -gt 0) {
$agentId = $response.value[0].botid
return $agentId
} else {
Write-Host "No agent found with the name: $agentSchemaName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
function Check-BotSyncErrors {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$botId
)
Write-Host "Retrieving Sync Status for bot ID: $botId" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($botId)"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($null -ne $response.synchronizationstatus) {
# Parse the JSON string in synchronizationstatus
$syncStatusObj = $response.synchronizationstatus | ConvertFrom-Json
$state = $syncStatusObj.currentSynchronizationState.state
$provisioningStatus = $syncStatusObj.currentSynchronizationState.provisioningStatus
Write-Host "Synchronization State: $state" -ForegroundColor Green
Write-Host "Provisioning Status: $provisioningStatus" -ForegroundColor Green
if ( $state -contains "Error" -or $provisioningStatus -contains "Error") {
Write-Host "Bot has synchronization errors." -ForegroundColor Red
return 0
} else {
if ( $state -eq "Synchronized" -or $state -eq 'Synchronizing' -and ($provisioningStatus -eq "Provisioned" -or $provisioningStatus -eq "ProvisionedWithoutRegistration")) {
Write-Host "Bot synchronization is done." -ForegroundColor Yellow
return 1
} else {
Write-Host "Bot synchronization is in progress." -ForegroundColor Green
return 2
}
}
} else {
Write-Host "No synchronization status found for bot ID: $botId" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
# Function to provision a PVA bot
function Provision-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaProvision"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent Provisioning successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
return $true
} catch {
Write-Host "Failed to Provision Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
return $false
}
# Function to publish a PVA bot
function Publish-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
Write-Host "Publishing agent with ID: $agentId" -ForegroundColor Yellow
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaPublish"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent published successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
} catch {
Write-Host "Failed to publish Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Publish-Agents {
param (
[string]$accessToken,
[array]$agentSchemas
)
if (-not $agentSchemas -or $agentSchemas.Count -eq 0) {
Write-Host "No agent schemas provided. Skipping agent publishing." -ForegroundColor Yellow
return
}
foreach ($agentSchema in $agentSchemas) {
#Write-Host "Publishing agent schema: $agentSchema" -ForegroundColor Yellow
try {
# Construct the API endpoint for publishing the agent schema
$agentId = Get-AgentIdBySchemaName -dataverseUrl $DataverseUrl -accessToken $accessToken -agentSchemaName $agentSchema
if ($agentId -ne $null) {
# check for sync errors
if ($CheckBotSyncStatusAndProvisionBots) {
$syncStatus = Check-BotSyncErrors -dataverseUrl $DataverseUrl -accessToken $accessToken -botId $agentId
if (0 -eq $syncStatus) {
Write-Host "Agent has sync errors. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
} elseif (2 -eq $syncStatus) {
Write-Host "Agent synchronization is still in progress. reprovisioning the agent." -ForegroundColor Yellow
if (Provision-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId -eq $false) {
Write-Host "Agent reprovisioning failed. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
}
} else {
Write-Host "Agent synchronization is done. Proceeding to publish." -ForegroundColor Green
}
}
# Step 4: Publish the bot
Publish-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId
} else {
Write-Host "Agent not found. Cannot proceed with publishing.Skipping the step" -ForegroundColor Yellow
}
}
catch {
Write-Host "An error occurred while publishing agent schema: $agentSchema. Error: $_" -ForegroundColor Red
}
}
}
# Main script execution
try {
$expenseAIFlows = $flows
$agentSchemas = $agents
# Step 1: Interactive login to Azure
Connect-AzAccount -UseDeviceAuthentication
$accessToken = Get-AccessToken
$accessTokenPlainText = Get-AccessTokenPlainText -accessToken $accessToken
# Step 2: Setup ennviornment variables
update_EnvironmentVariablesForExpense -accessToken $accessTokenPlainText
Write-Host "Environment variables updated successfully!" -ForegroundColor Green
# Step 3: Check active connections
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftDataverseConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps" -connectionReferenceLogicalName "msdyn_sharedcommondataserviceforapps_2c2d4" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftCopilotStudioConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_microsoftcopilotstudio" -connectionReferenceLogicalName "msdyn_sharedmicrosoftcopilotstudio_26d9d" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365OutlookConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365" -connectionReferenceLogicalName "msdyn_sharedoffice365_9b471" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftTeamsConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_teams" -connectionReferenceLogicalName "msdyn_sharedteams_8ea9c" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365UsersConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365users" -connectionReferenceLogicalName "msdyn_sharedoffice365users_909b9" -accessToken $accessToken
# Step 4: Activate flows
Activate-Flows -accessToken $accessTokenPlainText -expenseAIFlows $expenseAIFlows
# step 5: publish the agents
Publish-Agents -accessToken $accessTokenPlainText -agentSchemas $agentSchemas
# Step 6: Publish the solution
Publish-Solution -accessToken $accessTokenPlainText
Write-Host "Agent setup completed successfully!" -ForegroundColor Green
} catch {
Write-Host "An error occurred: $_" -ForegroundColor Red
}
Per attivare il file di PowerShell, seguire questa procedura:
- Aprire PowerShell (versione minima richiesta - PowerShell 7).
- Passare al percorso in cui è stato salvato il file. Usa la <posizione del file> del comando cd .
- Attiva lo script di installazione. (Usa il comando ".\Install.ps1").
- Seguire le istruzioni per accedere a Azure.
- Dopo l'accesso, potrebbe essere necessario autorizzare un'altra volta. Usa l'ID utente dell'agente creato.
Attendere che lo script venga eseguito completamente e cercare il messaggio Agent setup completed successfully!
Annotazioni
Lo script precedente esegue queste azioni:
- Imposta le variabili di ambiente.
- Verifica e collega i riferimenti alla connessione.
- Abilita i flussi di Power Automate.
- Pubblica gli agenti di Copilot necessari.
- Pubblica la soluzione Dataverse.
Dopo l'esecuzione dello script, Agente spesa è completamente configurato e pronto per l'uso.
Opzione B: configurata manualmente in Power Apps (senza PowerShell)
Se non si vuole usare lo script di PowerShell, è possibile configurare manualmente l'agente spese tramite Power Apps. Questo processo comporta l'aggiornamento delle variabili di ambiente, l'abilitazione dei flussi Power Automate e la pubblicazione della soluzione.
Aggiornamento delle variabili di ambiente
Per aggiornare le variabili di ambiente, seguire questa procedura:
Accedere a Power Apps e selezionare l'ambiente.
Seleziona Soluzioni, quindi apri Soluzione predefinita (o la soluzione in cui è installato l'agente).
Vai a Variabili di ambiente e imposta i valori seguenti.
Nome variabile Descrizione Percorso cartella Outlook gestione delle spese Specifica il percorso della cartella da monitorare nella cassetta postale condivisa (per impostazione predefinita Posta in arrivo). ID dell'indirizzo della cassetta postale condivisa dell'Agente di spesa Specifica l'indirizzo e-mail della cassetta postale condivisa. Per usare la cassetta postale dell'utente connesso, immetti NA. URL istanza Finance and Operations Specifica l'URL dell'ambiente per le app per la finanza e le operazioni (ad esempio, https://org123.contoso.com).
Abilitare i flussi di Power Automate
L'Agente delle Spese si basa sui seguenti flussi di Power Automate:
- Controllo dei tentativi per l'inserimento spese
- Configurazione spese
- Ottieni la cartella Outlook delle voci di spesa
- Genera un report spese
- Invia scheda adattiva della nota spese
- Corrispondenza automatica delle spese
- Elabora messaggi e-mail
- Estrai gli ID delle ricevute non allegati per la chiamata del copilota
- Estrai l'output della ricevuta non allegata utilizzando il plug-in Dataverse
- Genera riga di spesa
- Genera una riga di spesa senza ID progetto e ID stato
- Identificare gli ID progetto
- Eventi del calendario utente
- Elabora la nota spese utilizzando il copilota
- Attivare l'agente di spesa per l'elaborazione delle ricevute
Per abilitare i flussi, seguire questa procedura:
Accedere a Power Automate e selezionare l'ambiente.
Seleziona Flussi personali.
Per ognuno dei 15 flussi nell'elenco precedente, seguire questa procedura:
- Trova il flusso.
- Seleziona Modifica.
- Vai alla visualizzazione Finestra di progettazione precedente. disattivando l'opzione Nuova finestra di progettazione.
- Autentica le connessioni necessarie (fino a quando non vengono visualizzati i segni di spunta verdi).
- Seleziona Continua e quindi Salva.
- Seleziona Attiva per abilitare il flusso.
Pubblicare la soluzione
Dopo aver completato la configurazione di tutte le variabili di ambiente e i flussi, segui questa procedura per pubblicare la soluzione.
- In Power Apps passare a Solutions.
- Seleziona l'ambiente e la soluzione.
- Seleziona Pubblica tutte le personalizzazioni.
Al termine di questi passaggi, l'Agente delle Spese è completamente configurato e pronto per l'uso.
Passaggio 6: Abilitare l'Agente delle Spese in Microsoft Teams (facoltativo)
Per abilitare la comunicazione tramite Teams per l'agente delle spese, aggiungere il canale Teams all'agente in Power Apps. L'agente può quindi inviare schede adattive tramite Teams.
Abilitare il canale di Teams
Per abilitare il canale teams, seguire questa procedura:
- Accedere a Copilot Studio e selezionare l'ambiente corretto.
- Nella scheda Agenti, seleziona Agente Inserimento spese.
- Nella visualizzazione agente, nella scheda Channels selezionare Teams e Microsoft 365 Copilot.
- Seleziona Aggiungi canale per abilitare l'integrazione di Teams e segui la procedura descritta nella sezione Configurare la disponibilità delle app teams per configurare con chi si vuole condividere l'app.
Per altre informazioni, vedere Aprire il pannello di configurazione per il canale Teams + Microsoft 365.
Configurare la disponibilità dell'app Teams
Per configurare la disponibilità dell'app Teams, seguire questa procedura:
Dopo aver creato l'app Teams, selezionare Opzioni di disponibilità.
Seleziona con chi desideri condividere l'app:
- Utenti specifici all'interno dell'organizzazione
- Intera organizzazione
Invia l'app per l'approvazione.
Pubblicare l'app nell'interfaccia di amministrazione di Teams
Per pubblicare l'app nell'interfaccia di amministrazione di Teams, seguire questa procedura:
- Accedi all'Interfaccia di amministrazione di Teams.
- Vai a Gestisci app dell'app > Teams. Cercare "expense" (Spese) e selezionare Expense Entry Agent app in cui lo stato dell'app è bloccato.
- Seleziona Pubblica per sbloccare l'app. Al termine dell'azione di pubblicazione, assicurarsi che lo stato dell'app venga modificato in sbloccato.
Per altre informazioni, vedere Connettere e configurare un agente per Teams e Microsoft 365.
Al termine di questi passaggi, l'Agente delle Spese è pronto per l'uso.
Annotazioni
È anche possibile fornire feedback sulle righe e sui report delle spese generati dall'agente usando le icone di pollice su e pollice giù e il popup di feedback all'interno dell'ambiente Dynamics 365 Finance.
Disinstallare l'Agente spesa
Per disinstallare l'agente spese, seguire questi passaggi:
- Accedere al portale di Microsoft Power Apps Maker.
- Seleziona Soluzioni, cerca msdyn_ExpenseAI, seleziona i tre puntini quindi Elimina.
- Ricerca msdyn_FnOCopilotAnchor e poi elimina la soluzione.