$customHeader
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

To automate call recording for Vonage for SCV using Apex, follow the instructions in Automating call recording for outbound calls using Apex. In addition, you can choose which participants are recorded.

To choose which participants are recorded, use the VCCCore.CallRecordingResult constructor with the following signature:

  • global CallRecordingResult(Boolean isRecordingRequired, RecordingParticipant callRecordingParticipant)

This constructor returns a value for callRecordingParticipant in the CallRecordingResult object. Vonage uses callRecordingParticipant to determine which participants to record (if recording is required):

Value
Data Type
Description
callRecordingParticipantVCCCore.CallRecordingResult.RecordingParticipant

Determines which participants are included in the recording if the call is recorded.

  • AccountDefault — The default values for your account will be used.
  • All — All participants on the call will be included in the recording.
  • AgentsOnly — Only agent participants on the call will be included in the recording.
  • If the value is null, the default values for your account will be used.
 Example 1

In our example, the dialed number for the outbound call is supplied to the implementing class as the context parameter of the GetCustomValue method. The rules about which participants to record the call are stored in a Map object: Map<String,VCCCore.CallRecordingResult.RecordingParticipant> called regionRules. The keys of the Map are the area codes and the recording participant values to provide the decisions.

global class CallRecordingParticipantsByAreaCode implements VCCCore.ISelectCallRecording{
     
    // Build a regular expression to extract the area code from a full phone number   
    private static final String leftBracketPatternSegment = Pattern.quote('(');
    private static final String rightBracketPatternSegment = Pattern.quote(')');
    private static final String captureAreaCodePatternSegment = '([0-9]{3})';
    private static final String restOfPhoneNumberPatternSegment = '.*';
     
    private static final Pattern areaCodePattern = Pattern.compile(
            leftBracketPatternSegment +
            captureAreaCodePatternSegment +
            rightBracketPatternSegment +
            restOfPhoneNumberPatternSegment);
     
    // A map contains your rules for deciding which participants to include when recording a call
    private static final Map<String,VCCCore.CallRecordingResult.RecordingParticipant> regionRules = new Map<String,Boolean>{
        // Fresno, CA
        '209' => VCCCore.CallRecordingResult.RecordingParticipant.AgentsOnly,
        // Atlanta, GA
        '404' => VCCCore.CallRecordingResult.RecordingParticipant.All,
        // Chicago, IL
        '708' => VCCCore.CallRecordingResult.RecordingParticipant.All,
        // Boston, MA
        '978' => VCCCore.CallRecordingResult.RecordingParticipant.AccountDefault           
    };
         
         
    // This method is your implementation of our interface
    global VCCCore.CallRecordingResult GetIsCallRecordingRequired(String clickToDialJson);{
     
        VCCCore.CallRecordingResult.RecordingParticipant decision = null;
        String outboundNumber = getOutboundNumberFromJson(clickToDialJson);
         
        String areaCode = getAreaCodeFromPhoneNumber(outboundNumber);       
        decision = regionRules.get(areaCode);
     
        return new VCCCore.CallRecordingResult(true, decision);       
    }
    
    private static String getOutboundNumberFromJson(String context){
        Map<String, String> mapFromJson = (Map<String,String>)System.JSON.deserialize(context, Map<String,String>.class);
        String outboundNumber = mapFromJson.get('outboundNumber');
        System.debug(outboundNumber);
        return outboundNumber;
    }     
     
    private static String getAreaCodeFromPhoneNumber(String phoneNumber){
        String areaCode = null;     
        Matcher areaCodeMatcher = areaCodePattern.matcher(phoneNumber);
         
        if(areaCodeMatcher.matches()){
            areaCode = areaCodeMatcher.group(1);
            System.debug('area code: ' + areaCode);
        }
         
        return areaCode;
    }
}
  • No labels