KFC eröffnet jährlich rund 100 Restaurants in ganz Russland, für die Mitarbeiter erforderlich sind. Viele wählen auch die Restaurants der Kette als Ort für befristete Jobs, zum Beispiel Studenten. KFC erhält jeden Monat über 15.000 Bewerbungen. Einerseits wird das Unternehmen nicht ohne Mitarbeiter bleiben, andererseits können Sie sich vorstellen, wie viele Personalmanager benötigt werden, um all diese Kandidaten zu bearbeiten?
Darüber hinaus enthalten die meisten dieser Antworten Fehler, und einige sind für die Vakanz irrelevant. Und während HRs ihre Zeit mit ihnen verbringen, verpassen sie wirklich lohnende Kandidaten. Wie können Sie das vermeiden?
Um den Rekrutierungsprozess zu verbessern, hat KFC eine Partnerschaft mit Voximplant geschlossen . Das Unternehmen schlug die folgende Idee vor: Der Roboter ruft alle Kandidaten an, fragt, wie relevant die freie Stelle ist, und informiert im Falle einer positiven Antwort mehr über die freie Stelle und stellt eine Verbindung zum Callcenter her.
Die Ergebnisse übertrafen alle Erwartungen. Der Roboter verarbeitet Antworten zehnmal schneller als ein Mensch und beseitigt 37% der Kandidaten. Personalmanager kommunizieren nur mit interessierten Kandidaten, wodurch die Conversion erhöht wird.
Mal sehen, wie es funktioniert
Die Herstellung eines solchen Roboters auf der Voximplant- Plattform ist viel einfacher als es scheint. Lassen Sie uns jetzt einen ähnlichen Roboter schreiben.
, . , , , , -.
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();
};
. , , , , , -.
. , ; . — :)
!