Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dokumen ini menyediakan instruksi langkah demi langkah tentang cara membuat dan mengintegrasikan agen Copilot Studio dengan Azure Communication Services. Panduan ini akan memungkinkan Anda membuat agen berkemampuan suara yang dapat dipanggil pengguna Anda.
Unduh contoh
Temukan proyek untuk sampel ini di GitHub. Anda dapat mengunduh kode ini dan menjalankannya secara lokal untuk mencobanya sendiri.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun Azure dengan langganan aktif, untuk detailnya lihat Membuat akun secara gratis.
- Sumber daya Azure Communication Services, lihat membuat sumber daya Azure Communication Services baru. Anda perlu merekam string koneksi sumber daya untuk sampel ini.
- Buat aplikasi layanan web baru menggunakan Call automation SDK.
- Sumber daya Azure AI Multiservice dan domain kustom.
- Sambungkan Azure Communication Services dan Azure AI.
- Lisensi Copilot Studio sehingga Anda dapat membuat dan menerbitkan agen.
1. Buat Agen Anda di Copilot Studio
Setelah masuk atau mendaftar untuk Copilot Studio, Anda masuk ke halaman Beranda. Pilih Buat di navigasi kiri.
Pada halaman Buat, pilih Agen baru.
Gunakan obrolan untuk menjelaskan agen Anda, menggunakan pertanyaan yang disediakan untuk panduan.
Setelah Anda memberikan semua informasi yang diminta, klik Buat.
Untuk detail selengkapnya tentang membuat dan menyesuaikan agen, Anda dapat melihat panduan memulai cepat Copilot Studio.
2. Nonaktifkan Autentikasi
Setelah membuat agen, Anda perlu membuat beberapa pembaruan sehingga Anda dapat mengintegrasikannya dengan Azure Communication Service.
- Navigasi ke tab Pengaturan .
- Klik Keamanan di panel kiri.
- Pilih Autentikasi, pilih Tanpa Autentikasi, dan klik Simpan.
3. Dapatkan Kunci Keamanan Webchannel
Menavigasi kembali ke bagian Keamanan pilih Keamanan Saluran Web. Salin dan simpan kunci ini di suatu tempat. Anda memerlukan ini saat menyebarkan aplikasi Anda.
4. Aktifkan Agen
Setelah Anda memperbarui pengaturan agen dan menyimpan kunci agen, kini Anda dapat menerbitkan agen Anda.
5. Menyiapkan Kode
Sekarang setelah Anda membuat agen, pastikan untuk mengunduh sampel. Setelah mengunduh sampel, Anda harus memperbarui beberapa properti.
- String koneksi Anda: Anda bisa mendapatkan string koneksi dari sumber daya Azure Communication Services Anda.
- Kunci Microsoft Copilot Studio Direct Line: Yang Anda simpan di langkah 3, kunci keamanan webchannel Anda.
- Titik akhir kustom Azure AI Services: Anda bisa mendapatkan titik akhir ini dari sumber daya Azure AI Services Anda.
- Anda harus memiliki port yang berjalan untuk menerima pemberitahuan peristiwa dari Azure Communication Services. Anda dapat menggunakan alat seperti DevTunnels untuk membantu menyiapkannya.
6. Gambaran Umum Kode
Ada beberapa konsep dasar yang harus Anda kenal bahwa sampel menggunakan untuk membangun alur kerja ini.
Panggilan masuk
Daftarkan peristiwa panggilan masuk, sehingga aplikasi Anda tahu kapan panggilan masuk dan perlu dijawab.
Menjawab panggilan dengan transkripsi waktu nyata
Saat menjawab panggilan, Anda juga mengaktifkan streaming transkripsi waktu nyata, yang mengirimkan konten hasil konversi dari Ucapan ke Teks yang dikatakan pemanggil dalam waktu yang hampir nyata.
app.MapPost("/api/incomingCall", async (
[FromBody] EventGridEvent[] eventGridEvents,
ILogger<Program> logger) =>
{
foreach (var eventGridEvent in eventGridEvents)
{
logger.LogInformation($"Incoming Call event received : {JsonConvert.SerializeObject(eventGridEvent)}");
// Handle system events
if (eventGridEvent.TryGetSystemEventData(out object eventData))
{
// Handle the subscription validation event.
if (eventData is SubscriptionValidationEventData subscriptionValidationEventData)
{
var responseData = new SubscriptionValidationResponse
{
ValidationResponse = subscriptionValidationEventData.ValidationCode
};
return Results.Ok(responseData);
}
}
var jsonObject = JsonNode.Parse(eventGridEvent.Data).AsObject();
var incomingCallContext = (string)jsonObject["incomingCallContext"];
var callbackUri = new Uri(baseUri + $"/api/calls/{Guid.NewGuid()}");
var answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri)
{
CallIntelligenceOptions = new CallIntelligenceOptions()
{
CognitiveServicesEndpoint = new Uri(cognitiveServicesEndpoint)
},
TranscriptionOptions = new TranscriptionOptions(new Uri($"wss://{baseWssUri}/ws"), "en-US", true, TranscriptionTransport.Websocket)
{
EnableIntermediateResults = true
}
};
try
{
AnswerCallResult answerCallResult = await client.AnswerCallAsync(answerCallOptions);
var correlationId = answerCallResult?.CallConnectionProperties.CorrelationId;
logger.LogInformation($"Correlation Id: {correlationId}");
if (correlationId != null)
{
CallStore[correlationId] = new CallContext()
{
CorrelationId = correlationId
};
}
}
catch (Exception ex)
{
logger.LogError($"Answer call exception : {ex.StackTrace}");
}
}
return Results.Ok();
});
Membuat koneksi copilot
Setelah panggilan tersambung, aplikasi perlu membuat koneksi ke agen AI yang Anda buat menggunakan API Direct Line dengan websocket.
Memulai percakapan
var response = await httpClient.PostAsync("https://directline.botframework.com/v3/directline/conversations", null);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject(content);
Mendengarkan webscket
await webSocket.ConnectAsync(new Uri(streamUrl), cancellationToken);
var buffer = new byte[4096]; // Set the buffer size to 4096 bytes
var messageBuilder = new StringBuilder();
while (webSocket.State == WebSocketState.Open && !cancellationToken.IsCancellationRequested)
{
messageBuilder.Clear(); // Reset buffer for each new message
WebSocketReceiveResult result;
do
{
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), cancellationToken);
messageBuilder.Append(Encoding.UTF8.GetString(buffer, 0, result.Count));
}
while (!result.EndOfMessage); // Continue until we've received the full message
}
Logika interupsi bawaan:
Aplikasi ini menggunakan hasil menengah yang diterima dari transkripsi real-time untuk mendeteksi penyelaan dari pemanggil dan membatalkan operasi pemutaran.
if (data.Contains("Intermediate"))
{
Console.WriteLine("\nCanceling prompt");
if (callMedia != null)
{
await callMedia.CancelAllMediaOperationsAsync();
}
}
- Saat agen AI memberikan respons, aplikasi menggunakan Play API untuk mengonversi teks tersebut ke audio layanan Teks ke Ucapan.
var ssmlPlaySource = new SsmlSource($"{message}");
var playOptions = new PlayToAllOptions(ssmlPlaySource)
{
OperationContext = "Testing"
};
await callConnectionMedia.PlayToAllAsync(playOptions);
- Tingkatkan panggilan saat penelepon meminta perwakilan: Ketika pengguna meminta untuk berbicara dengan perwakilan, agen AI mentransfer panggilan ke agen manusia.
if (botActivity.Type == "handoff")
{
var transferOptions = new TransferToParticipantOptions(agentPhoneIdentity)
{
SourceCallerIdNumber = acsPhoneIdentity
};
await Task.Delay(6000);
await callConnection.TransferCallToParticipantAsync(transferOptions);
}
7. Jalankan
Anda sekarang dapat melakukan panggilan dan berbicara dengan agen Anda.
Petunjuk
Topik
Untuk mengoptimalkan suara, kami sarankan Anda memperbarui topik di mana Anda menggunakan jenis "Pesan" Teks ke Ucapan, karena mengoptimalkan respons agen untuk skenario Ucapan.
Cara Menangani Topik Tentang Sistem
Agen Anda memiliki Topik Sistem bawaan secara default. Anda dapat memilih untuk menonaktifkan topik-topik ini, tetapi jika Anda ingin terus menggunakannya, aplikasi Anda harus membangun logika untuk menangani topik ini. Misalnya:
- Eskalasi: Anda perlu membangun fitur transfer agen ke dalam aplikasi Anda untuk mengalihkan panggilan dari agen copilot ini ke perwakilan manusia.