Mengintegrasikan dialer pihak ketiga dengan Dynamics 365 Kecerdasan Percakapan (pratinjau)
[Artikel ini adalah dokumentasi prarilis dan dapat berubah.]
Dengan integrasi ini, pengguna Dynamics 365 dapat menggunakan dialer yang disediakan oleh perusahaan telepon pihak ketiga seperti Twilio Flex, untuk melakukan dan menerima panggilan telepon di Dynamics 365, dan mendapatkan wawasan yang dihasilkan AI secara real-time dan analisis pasca-panggilan yang kaya dari panggilan mereka. Pelajari lebih lanjut tentang Dynamics 365 Kecerdasan Percakapan
Penting
- Ini adalah fitur pratinjau.
- Fitur pratinjau tidak dimaksudkan untuk digunakan dalam produksi dan fungsinya mungkin terbatas. Fitur-fitur ini tunduk pada ketentuan penggunaan tambahan, dan tersedia sebelum rilis resmi sehingga pelanggan bisa mendapatkan akses awal dan memberikan umpan balik.
Cara kerja integrasi
Pada tingkat tinggi, integrasi terdiri dari tiga bagian:
Daftarkan penyedia: Daftarkan detail penyedia dan dapatkan daftar pengguna yang akan direkam dengan menggunakan API Kecerdasan Percakapan.
Fork media: Fork aliran audio ke perekam Kecerdasan Percakapan menggunakan protokol SIPREC.
Kirim peristiwa real-time: Untuk mengaktifkan transkripsi real-time dan pengalaman Wawasan Panggilan, kirim peristiwa UI dari UI klien penyedia ke Dynamics 365 Kecerdasan Percakapan.
Untuk contoh integrasi antara Dynamics 365 Kecerdasan Percakapan dan penyedia telepon pihak ketiga, Twilio Flex, lihat Mengintegrasikan Twilio Flex dengan Dynamics 365 Kecerdasan Percakapan.
Diagram berikut mengilustrasikan cara kerja integrasi:
Langkah 1: Daftarkan penyedia
Tambahkan izin API untuk perekaman media:
Di Microsoft Entra aplikasi ID yang Anda buat, buka izin API.
Pilih Tambahkan izin.
Di bawah API yang digunakan organisasi saya, cari Perekaman Media untuk Dynamics 365 Sales dan pilih:
Tambahkan izin Users.Read.All dan pilih Tambahkan izin
Catatan
Pastikan untuk mendapatkan persetujuan admin untuk izin agar dapat memanggil API Kecerdasan Percakapan dalam konteks aplikasi. Pelajari izin dan izin lebih lanjut.
Dapatkan token untuk menjalankan API Kecerdasan Percakapan menggunakan aplikasi yang dibuat di bagian sebelumnya:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token -d 'client_id=<your app id>' -d 'grant_type=client_credentials' -d 'scope=f448d7e5-e313-4f90-a3eb-5dbb3277e4b3/.default' -d 'client_secret=<your app secret>'
Parameter menentukan
scope
ID aplikasi aplikasi Kecerdasan Percakapan. Jangan ubah nilai ini.Untuk informasi selengkapnya tentang perintah curl, lihat Mendapatkan Microsoft Entra token ID untuk perwakilan layanan.
Panggil API Kecerdasan Percakapan berikut untuk mendaftarkan penyedia layanan pihak ketiga:
POST /api/v1.0/providers/tenants
Tentukan parameter berikut dalam isi permintaan:
orgID: Tentukan ID organisasi Dynamics 365.
Jenis: Tentukan "kustom" untuk dialer pihak ketiga.
hosting: Tentukan jenis hosting penyedia telepon. Misalnya, "cloud" atau "lokal".
AccountId: Tentukan ID akun penyedia telepon.
CerfificateSubjectName dan CertificateIssuer: Tentukan detail sertifikat penyedia telepon.
SourceIPNetwork: Tentukan alamat IP klien SIPREC. Tentukan "0.0.0.0" jika Anda tidak ingin membatasi alamat IP.
Cuplikan berikut adalah contoh isi permintaan:{ "orgId": "ad3dca46-962a-4895-9f85-d25f3828781f", "Type": "custom", "hosting": "cloud", "displayName": "Test Custom Provider", "AuthenticationDetails": { "AccountId":"adxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "CertificateSubjectName": "certSubject", "CertificateIssuer": "issuer", "SourceIPNetwork": "0.0.0.0" } }
Untuk informasi selengkapnya tentang API, lihat dokumentasi Swagger.
Panggil API Kecerdasan Percakapan berikut untuk mendapatkan daftar pengguna yang akan direkam:
GET /api/v1.0/providers/users
Setelah admin Dynamics 365 Sales membuat kebijakan perekaman, penyedia dapat menggunakan titik akhir ini untuk memfilter media yang akan dicabang ke perekam Kecerdasan Percakapan.
Langkah 2: Fork media (integrasi SIPREC)
Perekam Kecerdasan Percakapan menerapkan standar Protokol SIPREC.
Komunikasi diamankan menggunakan protokol SIPS (port 5061) dan SRTP. Autentikasi dilakukan menggunakan mTLS dalam koneksi pesan SIPS, dan didasarkan pada sertifikat yang diberikan ke API – yang berarti bahwa penyedia harus terdaftar untuk penyewa untuk membuat koneksi SIPS.
Cuplikan layar berikut mengilustrasikan komunikasi antara klien SIPREC dan server SIPREC:
Metadata berikut diperlukan untuk Kecerdasan Percakapan:
Header:
Nama Header | KETERANGAN | Contoh Nilai |
---|---|---|
ID Panggilan | Pengidentifikasi unik panggilan. ID ini digunakan untuk menghubungkan sinyal SIP dan tindakan pengguna seperti memulai/menghentikan perekaman. | efxxxxxxxxxxxxxxxxx |
X-AccountId | Pengidentifikasi unik dari akun tempat panggilan berada. ID ini digunakan untuk otentikasi dan otorisasi. Ini adalah ID akun yang sama yang terdaftar di API untuk penyewa. | ACxxxxxxxxxxxxxxxxxxxxxxxx |
Metadata
Nama kunci metadata | KETERANGAN | Contoh Nilai |
---|---|---|
Peran | Menunjukkan apakah itu panggilan masuk atau keluar untuk penjual. | ["masuk", "keluar"] |
Nama Tampilan Penelepon | Nama tampilan penelepon. Jika tidak tersedia, nomor telepon akan ditampilkan. | Kenny Smith |
Nama Tampilan Panggilan | Nama tampilan penerima. Jika tidak tersedia, nomor telepon akan ditampilkan. | Alex Baker |
Berikut adalah contoh pesan undangan dan selamat tinggal dengan header dan metadata yang diperlukan:
Pesan UNDANG:
INVITE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK4fa2.cdabfe83d76d3c41987802096d3b342a.0;received=172.16.x.x;rport=40334
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_599-10236398515455707148
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls>
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6
Call-ID: efab0870bc597cb3fb56010921e2f57f
CSeq: 1 INVITE
Contact: <sip:SRC@172.25.x.x:5060;transport=udp>;+sip.src
Max-Forwards: 67
Record-Route: <sip:84.172.x.x:5061;transport=tls;r2=on;lr>,<sip:84.172.x.x;r2=on;lr>
User-Agent: provider Gateway
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY
Require: siprec
Content-Length: 3194
Content-Type: multipart/mixed;boundary=\"----=_Part_1253_283419664.1674116473425\"
Min-SE: 35
X-AccountId: ACxxxxxxxxxxxxxxxxxxxx
------=_Part_1253_283419664.1674116473425
Content-Type: application/sdp
v=0
o=root 1176539620 1176539620 IN IP4 172.18.x.x
s=provider Media Gateway
c=IN IP4 84.172.x.x
t=0 0
m=audio 15352 RTP/SAVP 0 8 101
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key>
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:20
a=sendonly
a=label:inbound
m=audio 16022 RTP/SAVP 0 8 101
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key>
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:20
a=sendonly
a=label:outbound
------=_Part_1253_283419664.1674116473425
Content-Type: application/rs-metadata+xml
Content-Disposition: recording-session
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<recording xmlns='urn:ietf:params:xml:ns:recording:1'>
<datamode>complete</datamode>
<session session_id=\"Wd/putWgTWCW2z1lI5Db9w==\">
<ExtensionParameters xmlns=\"http://provider.com/siprec\">
<Parameter name=\"Role\" value=\"inbound\"/>
<Parameter name=\"CallerDisplayName\" value=\"Kiana Anderson\"/>
<Parameter name=\"CalleeDisplayName\" value=\"Tomas Richardson\"/>
</ExtensionParameters>
</session>
<participant participant_id=\"bXCloPcETS6P/kfeeJtiow==\">
<nameID aor=\"EE5C7EF0\"/>
</participant>
<participant participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\">
<nameID aor=\"230908\"/>
</participant>
<stream stream_id=\"9xff8FcdRUaJCSTxWFbV9g==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>inbound</label></stream>
<stream stream_id=\"f/Qezx4jTMqiWSB1vW7oJA==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>outbound</label></stream>
<sessionrecordingassoc session_id=\"Wd/putWgTWCW2z1lI5Db9w==\">
<associate-time>2023-01-19T08:21:13.382512Z</associate-time>
</sessionrecordingassoc>
<participantsessionassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\">
<associate-time>2023-01-19T08:21:13.382512Z</associate-time>
</participantsessionassoc>
<participantsessionassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\">
<associate-time>2023-01-19T08:21:13.382512Z</associate-time>
</participantsessionassoc>
<participantstreamassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\">
<send>9xff8FcdRUaJCSTxWFbV9g==</send>
<recv>f/Qezx4jTMqiWSB1vW7oJA==</recv>
</participantstreamassoc>
<participantstreamassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\">
<send>f/Qezx4jTMqiWSB1vW7oJA==</send>
<recv>9xff8FcdRUaJCSTxWFbV9g==</recv>
</participantstreamassoc>
</recording>
------=_Part_1253_283419664.1674116473425--
Pesan selamat tinggal:
BYE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK1fa2.d03c36b567136fcfae84281e926cda62.0;received=172.16.x.x;rport=40334
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;received=84.144.x.x;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_600-2513288074170844985
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls>;tag=OXFWHPJQTL
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6
Call-ID: efab0870bc597cb3fb56010921e2f57f
CSeq: 2 BYE
Max-Forwards: 68
User-Agent: provider Gateway
Require: siprec
Content-Length: 901
Content-Type: multipart/mixed;boundary=\"----=_Part_29418_1017575873.1674116842924\"
X-AccountId: ACxxxxxxxxxxxxx
Titik akhir dan wilayah perekam yang didukung
Tabel berikut mencantumkan titik akhir perekam yang didukung dan wilayahnya. Anda dapat mengonfigurasi perekam yang ingin Anda gunakan di pengaturan penyedia telepon Anda. Untuk mempelajari tentang bagaimana hal ini dilakukan untuk Twilio Flex, lihat Langkah 2: Instal konektor SIPREC dan rutekan panggilan ke Dynamics 365.
Titik akhir | Wilayah |
---|---|
media.recording.dynamics.com | Global (wilayah terdekat) |
southeastasia.media.recording.dynamics.com | Asia Tenggara |
australiaeast.media.recording.dynamics.com | Australia |
sam.media.recording.dynamics.com | Amerika Selatan |
canadacentral.media.recording.dynamics.com | Kanada |
switzerlandnorth.media.recording.dynamics.com | Swiss |
eastus.media.recording.dynamics.com | US |
francecentral.media.recording.dynamics.com | Prancis |
centralindia.media.recording.dynamics.com | India |
japaneast.media.recording.dynamics.com | Jepang |
uae.media.recording.dynamics.com | UEA |
uksouth.media.recording.dynamics.com | Inggris |
westeurope.media.recording.dynamics.com | Eropa Barat |
zaf.media.recording.dynamics.com | Afrika Selatan |
Langkah 3: Kirim peristiwa real-time (Integrasi klien Dialer)
Untuk memungkinkan Kecerdasan Percakapan memberikan transkripsi dan wawasan real time, dialer pihak ketiga dapat menggunakan dua peristiwa untuk memberi tahu saat panggilan dimulai atau berakhir.
Acara panggilan dimulai:Ketika Kecerdasan Percakapan mendapatkan peristiwa "panggilan dimulai", itu akan menampilkan tombol perekaman dan transkripsi dan wawasan real time.
Acara panggilan berakhir: Ketika Kecerdasan Percakapan mendapatkan peristiwa "panggilan berakhir", itu akan Wrap panggilan dan menampilkan tombol Ringkasan lengkap untuk mendapatkan ringkasan panggilan dan wawasan yang dihasilkan AI.
Untuk mengirim aktivitas, gunakan raiseEvent API di Kerangka Kerja Integrasi Saluran Dynamics 365 (CIF).
Berikut adalah contoh cuplikan kode untuk mengirim peristiwa:
export interface CallStartedEvent {
callId: string;
startTime: Date;
isIncomingCall: boolean;
contactNumber: string;
contactName: string;
}
export interface CallEndedEvent {
callId: string;
callDurationInSeconds: number;
callTerminationReason: string; // ['success', 'error']
callEndTime: Date;
isCallStarted: boolean;
}
dialer.Actions.addListener('onCallStarted', (payload: any) => {
const callStartedEvent : CallStartedEvent = {
callId: payload.call_sid,
startTime: new Date(),
isIncomingCall: payload.attributes.is_incoming_call,
contactName: payload.attributes.caller_name,
contactNumber: payload.attributes.caller_phone_number
};
// @ts-ignore
Microsoft.CIFramework.raiseEvent('WIDGET_CALL_STARTED', callStartedEvent);
});
dialer.Actions.addListener('onCallEnded', (payload: any) => {
const callEndedEvent : CallEndedEvent = {
callId: payload.call_sid,
callEndTime: new Date(),
callTerminationReason: 'success',
isCallStarted: true,
callDurationInSeconds: payload.attributes.call_length
};
// @ts-ignore
Microsoft.CIFramework.raiseEvent('WIDGET_CALL_ENDED', callEndedEvent);
});
Menguji integrasi
Setelah mendaftarkan penyedia baru dengan penyewa dan menyiapkan forking SIPREC dan peristiwa dialer klien, Anda dapat menguji integrasi dengan membuat kebijakan perekaman baru dengan penyedia baru.
Masuk sebagai administrator Sistem di aplikasi Pusat Penjualan.
Dari Ubah area, pilih Pengaturan wawasan penjualan.
Buka Pengaturan GlobalKecerdasan> Percakapan. Di bagian Penyedia panggilan, Anda akan melihat penyedia pihak ketiga yang telah Anda daftarkan.
Buat kebijakan perekaman untuk penyedia baru. Untuk informasi selengkapnya, lihat Menyiapkan Microsoft Teams Kecerdasan Percakapan
Cuplikan layar berikut adalah contoh kebijakan perekaman untuk Twilio.
Sekarang, panggil pengguna yang merupakan bagian dari peran keamanan yang dipilih (dalam contoh kami, kebijakan diaktifkan untuk semua peran keamanan).
Saat Dynamics 365 menerima aktivitas callStarted dari dialer, Anda akan memiliki opsi untuk memulai perekaman:
Setelah memilih Rekam, Anda akan dapat melihat transkripsi real-time selama panggilan dan ringkasan lengkap serta Wawasan Panggilan di akhir panggilan.