KFC setiap tahun membuka sekitar 100 restoran di seluruh Rusia, yang membutuhkan karyawan. Banyak juga yang memilih restoran rantai sebagai tempat untuk pekerjaan sementara, misalnya mahasiswa. KFC menerima lebih dari 15.000 lamaran pekerjaan setiap bulan . Di satu sisi, perusahaan tidak akan dibiarkan tanpa karyawan, tetapi di sisi lain, dapatkah Anda bayangkan berapa banyak manajer SDM yang akan dibutuhkan untuk memproses semua kandidat ini?
Selain itu, sebagian besar tanggapan ini mengandung kesalahan, dan beberapa tidak relevan untuk lowongan. Dan sementara HR menghabiskan waktu mereka untuk itu, mereka kehilangan kandidat yang sangat berharga. Bagaimana Anda bisa menghindari ini?
Untuk meningkatkan proses perekrutan, KFC telah bermitra dengan Voximplant . Perusahaan mengusulkan ide berikut: robot memanggil semua kandidat, menanyakan seberapa relevan lowongan tersebut, dan jika jawaban positif, memberi tahu lebih banyak tentang lowongan dan menghubungkan ke call center.
Hasilnya melebihi semua harapan. Robot memproses respons 10 kali lebih cepat daripada manusia, menyisihkan 37% kandidat, dan manajer SDM hanya berkomunikasi dengan kandidat yang tertarik, sehingga meningkatkan konversi.
Mari kita lihat cara kerjanya
Membuat robot seperti itu di platform Voximplant jauh lebih mudah daripada yang terlihat. Ayo buat robot serupa sekarang.
, . , , , , -.
Voximplant, . , :
require(Modules.ASR);
require(Modules.Player);
const callerid = '7xxxxxxxxxx';
const operator = '7xxxxxxxxxx';
let data;
let callCandidate, callOperator;
let asr;
, , VoxEngine.customData. JSON : { "phone" : "7xxxxxxxxxx", "name": "" }.
, JSON customData, callerid data.phone :
VoxEngine.addEventListener( AppEvents.Started, async e => {
data = JSON.parse( VoxEngine.customData() );
// callerid data.phone
callCandidate = VoxEngine.callPSTN( data.phone, callerid );
//
callCandidate.addEventListener( CallEvents.Connected, callCandidate_connected_handler );
callCandidate.addEventListener( CallEvents.Disconnected, callCandidate_disconnected_handler );
callCandidate.addEventListener( CallEvents.Failed, callCandidate_failed_handler );
});
, , ( ) . , , :
function callCandidate_connected_handler( e ) {
//
const text = ` ${data.name}. ?`;
const language = VoiceList.Yandex.Neural.ru_RU_alena;
const player = VoxEngine.createTTSPlayer( text, language );
// ,
// ,
player.sendMediaTo( callCandidate );
player.addEventListener( PlayerEvents.PlaybackFinished, playbackFinishedHandler );
};
, . , , :
function playbackFinishedHandler() {
// ASR
const asrProfile = ASRProfileList.Tinkoff.ru_RU;
asr = VoxEngine.createASR( { profile: asrProfile } );
// ,
// ,
callCandidate.sendMediaTo( asr );
asr.addEventListener( ASREvents.Result, asrResultHandler );
}
. . , “”, , , . , , :)
“”, . :
async function asrResultHandler( answer ) {
//
asr.removeEventListener( ASREvents.Result );
// text,
if( answer.text.includes( '' ) ) {
//
data.wantsToWork = '';
// ( callCandidate_disconnected_handler )
callCandidate.hangup();
}
else if ( answer.text.includes( '' ) ) {
data.wantsToWork = '';
//
startOperatorCall();
}
else {
callCandidate.hangup();
}
}
function startOperatorCall() {
const callOperator = VoxEngine.callPSTN( operator, callerid );
//
VoxEngine.sendMediaBetween( callCandidate, callOperator );
//
callOperator.addEventListener( CallEvents.Connected, () => {
Logger.write( ' ' );
});
callOperator.addEventListener( CallEvents.Disconnected, async () => {
callCandidate.hangup();
});
callOperator.addEventListener( CallEvents.Failed, async () => {
callCandidate.hangup();
});
}
. ( ) http- . :
//
async function callCandidate_disconnected_handler( e ) {
const url = 'https://servicename';
// url
await Net.httpRequestAsync( url, { method: 'POST', postData: JSON.stringify(data) } );
//
VoxEngine.terminate();
};
//
function callCandidate_failed_handler( e ) {
VoxEngine.terminate();
};
. , , , , , -.
. , ; . — :)
!