Basic voice o real-time voice: due modi di rispondere al telefono
Copilot Studio realizza l’IVR (interactive voice response) con due tipi di agente vocale: i basic voice agents e i real-time voice agents. I primi sono pensati per l’orchestrazione classica: l’autore disegna il flusso topic per topic e modelli di natural language understanding si occupano del riconoscimento dell’intento e dell’estrazione delle entità. I secondi appartengono agli scenari di orchestrazione generativa e usano un modello speech-to-speech in tempo reale per ottenere bassa latenza e un turno di parola naturale; sul canale vocale supportano PSTN e SIP, input DTMF, barge-in e voice activity detection.
Si parte da Settings > Voice: Enable voice, poi la scelta fra Basic e Real-time voice. Attivando la voce, l’opzione Make voice the default modality for creating and updating within topics risulta già selezionata, i nodi passano dalla modalità Text alla modalità Speech & DTMF (mutuamente esclusive) e l’agente riceve i system topic vocali Silence detection, Speech unrecognized e Unknown dial pad press. Un dettaglio che vale un punto d’esame: Enable voice cambia solo le capacità di authoring, non il canale. Per un agente realmente raggiungibile al telefono serve attivare il canale Telephony, e la sequenza consigliata è prima Telephony e poi la connessione a Dynamics 365. Il trasferimento si costruisce con il nodo Transfer conversation, dove External phone number transfer manda la chiamata a un numero esterno; l’altra strada porta a un representative, cioè l’operatore umano.
Generativo o classico: chi decide il passo successivo
L’orchestrazione non si imposta nella pagina Voice, ma in Generative AI > Orchestration (Yes o No). Tutti i nuovi agenti nascono generativi: per lavorare in classico bisogna spegnere l’opzione. Nell’orchestrazione classica il percorso è fisso e verificabile, e la documentazione la consiglia per autenticazione e verifica di identità, raccolta di pagamenti, cattura del consenso, formule legali obbligatorie e per i menu DTMF; il prezzo è più lavoro di authoring e meno naturalezza. Nell’orchestrazione generativa è il modello a selezionare dinamicamente topic, tool, knowledge source ed eventi provenienti da altri agenti: i topic esistono ancora, ma non comandano più l’ordine. In cambio salgono i requisiti su qualità delle istruzioni, descrizioni dei tool, guardrail e soprattutto test. Il disegno ibrido è la norma: scoperta dell’intento e ricerca in knowledge in generativo, identità, consenso e pagamento in deterministico.
La scelta si riflette sull’architettura del parlato. Il pattern basic voice è una catena Speech > Text > NLU/NLU+ > orchestrazione classica > Speech; lo streaming mode è invece Speech > modello > Speech, senza passaggi separati di STT e TTS. Fra le opzioni classiche la doc distingue NLU, NLU+ e CLU: NLU si accontenta di cinque-venti frasi per topic, mentre NLU+ è pensato per applicazioni enterprise, richiede l’addestramento esplicito del modello ed è disponibile quando si gestiscono i canali con licenza Dynamics 365 Contact Center. Per un agente vocale c’è un effetto collaterale prezioso: i dati di training di NLU+ ottimizzano anche il riconoscimento vocale. Sempre sul riconoscimento, Increase accuracy with agent data funziona solo se l’agente usa le trigger phrases; con le descrizioni dei topic non produce alcun effetto.
DTMF, timeout e trigger
Il DTMF si configura su due livelli. Dentro un topic si usa un nodo Question: con l’entità Multiple choice options i tasti si assegnano a mano tramite Assign DTMF keys to options, mentre con Options from a list variable e con Boolean l’agente li assegna da solo, in ordine, da 0 a 9. Le entità numeriche accettano input multi-digit, con lunghezza minima e massima e un tasto di terminazione opzionale (nessuno, asterisco o cancelletto). A livello di agente si imposta invece un comando globale: nel nodo Trigger si sceglie DTMF global command received e si compilano le DTMF received properties, che accettano solo tasti singoli; se il tasto premuto non è mappato parte il system topic Unknown dial pad press.
I tempi contano quanto i tasti. Interdigit timeout, Termination timeout, Silence detection timeout, Utterance end timeout, Speech recognition timeout e Sensitivity hanno un valore predefinito a livello di agente e possono essere sovrascritti sul singolo nodo. Su una Question, la Fallback action decide che cosa succede al silenzio: Hang up, Escalate, Set variable to value, Set variable to empty (no value) oppure Redirect to a topic.
Variabili, fallback e cosa verifica l’esame
Le variabili vivono su quattro livelli: topic, global, system ed environment (queste ultime sono in sola lettura in Copilot Studio). Per il vocale esistono variabili dedicate come Activity.UserInputType, che dice se il turno è arrivato via parlato o via DTMF, Activity.InputDTMFKeys, Activity.SpeechRecognition.Confidence e Conversation.OnlyAllowDTMF, che porta l’IVR in modalità sola tastiera a runtime. Per ricevere contesto dall’esterno si crea una variabile con Global (any topic can access) ed External sources can set values, più Get value from this node if empty. Attenzione però: la doc avverte che gli agenti pubblicati sul canale Dynamics 365 Contact Center per casi d’uso IVR non supportano i timeout configurati sulle variabili globali impostate da sorgenti esterne.
Il comportamento di ripiego della chiamata, invece, non si configura in Copilot Studio ma nel workstream vocale: nella sezione Bot si apre Edit bot e si sceglie fra Prompt and hang-up, Prompt and transfer to external number (con External phone number in formato E.164), Prompt and escalate e Wait Music and Escalate; le chiamate finite così si contano con la metrica Fallback calls. Le variabili di contesto solo-voce Activity.From.Name (numero del chiamante) e Activity.Recipient.Name (numero dell’organizzazione) si leggono nel topic Conversation Start e si salvano in variabili globali: la pagina che le documenta vale sia per Dynamics 365 Customer Service sia per Dynamics 365 Contact Center standalone.
L’esame verifica la corrispondenza fra requisito e configurazione, non la memoria dei menu. Le confusioni tipiche sono tre: credere che generativo e classico siano due nomi della stessa cosa, quando invece cambia chi sceglie il passo successivo e quindi cambiano progettazione e test; pensare che Enable voice basti a rendere l’agente raggiungibile al telefono; e trattare NLU+ come un semplice NLU migliore invece che come un’opzione legata alla licenza, che addestra anche il riconoscimento vocale. Ricorda infine che nel pannello di test la tastiera non esiste: per simulare un tasto si scrive un comando come /DTMFKey 1, altrimenti un semplice 1 viene interpretato come posizione dell’opzione nel nodo Question.