Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Sv translation
languageen

Implementation

Classic

To create a new Apex class, access Setup in SalesForce, and type in "Apex" in the quick search box. 

Select "Build ... Develop ... Apex Classes".

Lightning

Access Setup, and search for "Apex" in the search box.

Classic and Lightning

Create a new class. Add the following code:


Translations Ignore


Code Block
languagejava
titleSample Apex getCallerInformation
@RestResource(urlMapping='/jtelACD/createCallbackcreateVoiceMail')
global with sharing class JTELACD_CreateCallbackCreateVoiceMail {
      
          
    public class JTELCallbackJTELVoiceMail {
        public Integer  ID;
        public Integer  AcdEventsID;
        public String   Caller;
        public String   ServiceNumbersNumber;
        public String   ServiceNumbersName;
        public Integer CallbackNumber AcdGroupsID;
        public String   ServiceNumbersNumberAcdGroupsName;
        public String   ServiceNumbersNameAcdGroupsForeignSystemID;
        public IntegerString   AcdGroupsIDdtCallStart;
        public String   AcdGroupsNamedtCallEnd;
        public String   AcdGroupsForeignSystemIDSubject;
        public String   dtCallStartBody;
        public String   dtCallEndAttachment1;
        public String   SubjectAttachment2;
        public String   BodyAttachment3;
        public Integer  CreatingUsersID;
        public String   CreatingUsersUID;
        public String   CreatingUsersNickName;
        public String   TargetUsersID;
        public String   TargetUsersUID;
        public String   TargetUsersNickName;
        public String   SalesforceId;
        public Integer  SalesforceQueryResult;
    }
      
    @HttpPost
    global static void doPost() {
        RestRequest req = RestContext.request;
        RestResponse res = RestContext.response;
  
        try {
            // Deserialize the JSON
            JTELCallbackJTELVoiceMail callbackvoiceMail = (JTELCallbackJTELVoiceMail) System.JSON.deserialize( req.requestBody.toString(), JTELCallbackJTELVoiceMail.class );
            res.statusCode = 200;
            Case newCase = new Case ( subject = callbackvoiceMail.Subject,
                                      ContactId = callbackvoiceMail.SalesforceId,
                                      Description = callbackvoiceMail.Body + '\r\nFile: ' + voiceMail.Attachment1,
                                      SuppliedPhone = '+' + callbackvoiceMail.CallbackNumberCaller );
            insert newCase;
            res.responseBody = Blob.valueOf( System.JSON.serialize( newCase ) );
        }
        catch( Exception e ) {
            res.statusCode = 500; // Internal server error
            res.responseBody = Blob.valueOf( e.getMessage() );
        }
    }
}


This sample class will create a Case object, and attach it to the supplied ContactId provided in the SalesforceId field. The telephone number will be added to the field SuppliedPhone.

Warning

Note: this will NOT work if the SalesforceId field is not a valid contact in your Salesforce instance. Please bear this in mind, when executing the examples below.

CURL Test

First of all, obtain an OAUTH Token, see Testing with CURL.

Next, create a file on your local disk, containing the following example Callback VoiceMail event data in JSON:

Translations Ignore


Code Block
{
	"ID": 2496,
	"Body": "Caller: +4919998764321\nCall Start: 2021-11-07 18:38:19.031\nACD Group: Group 1 - BigShoes\nCallbacknVoice Reason:Mail Hangupleft inby queuecaller",
	"Caller": "+4919998764321",
	"Subject": "ACD: automaticvoice callbackmail (hangup in queue) forfrom caller +4919998764321",
 	"Attachment1": "https://myjtelserver/CarrierPortal/ResourceDispatcher/clients/1/recordings/vm_anewfilename.wav",
    "dtCallEnd": "2021-11-07T18:38:32",
	"AcdEventsID": 2496,
	"AcdGroupsID": 235,
	"dtCallStart": "2021-11-07T18:38:19",
	"SalesforceId": "00Q1n00000LSL4WEAX",
	"AcdGroupsName": "Group 1 - BigShoes",
	"TargetUsersID": null,
	"CallbackNumber": "+4919998764321",
	"TargetUsersUID": null,
	"CreatingUsersID": null,
	"CreatingUsersUID": null,
	"ServiceNumbersName": "Big Shoes Hotline",
	"TargetUsersNickName": null,
	"ServiceNumbersNumber": "49199510",
	"CreatingUsersNickName": null,
	"SalesforceQueryResult": 1,
	"AcdGroupsForeignSystemID": null
}



The following CURL command can be used to test this API, assuming the file created above was named: c:\temp\eventJSONData.json

Translations Ignore


Code Block
titleCURL - getCallerInformation Test
curl.exe -L --post302 --silent -i -X POST -d '@C:\temp\eventJSONData.json' --header "Content-Type: application/json" --header "Authorization: Bearer <OAUTH_TOKEN>" --header "Connection: Close" "https://<SALES_FORCE_INSTANCE_URL>/services/apexrest/jtelACD/createCallback"createVoiceMail"



Warning

Note: it will not be possible to download the voicemail file from this example. In a real voice-mail example, the file will have a different name. Also, note that it is necessary to be logged into jtel from within the salesforce instance otherwise the jtel portal will not allow downloading of the file.



Sv translation
languagede

Status
colourRed
titleThis page is only available in English

Sv translation
languagefr
Mise en œuvre

Status

Classique

Pour créer une nouvelle classe Apex, accédez à Setup dans SalesForce, et tapez "Apex" dans la boîte de recherche rapide. 

Sélectionnez "Construire ... Développer ... Apex Classes".

Image Removed

Foudre

Configuration de l'accès, et recherchez "Apex" dans la boîte de recherche.

Image Removed

Classique and Foudre

Créez une nouvelle classe. Ajoutez le code suivant :

Translations Ignore
colourRed
titleTHIS PAGE IS ONLY AVAILABLE IN ENGLISH

Code Block
languagejava
titleExemple Apex getCallerInformation
@RestResource(urlMapping='/jtelACD/getCallerInformation') global with sharing class JTELACD_GetCallerInformation { @HttpGet global static String doGet() { RestRequest req = RestContext.request; RestResponse res = RestContext.response; // This is how to access URLParams if required // List<String> URLParams = req.requestURI.split('/'); // Example: ["","jtelACD","getCallerInformation"] // Extract the request parameters String CallerID = req.params.get('CallerID'); String ServiceNumber = req.params.get('ServiceNumber'); String ServiceName = req.params.get('ServiceName'); // From release 3.25 - 2021-07-02 and upwards String Function = req.params.get('Function'); String UserData = req.params.get('UserData'); String UserData2 = req.params.get('UserData2'); String UserData3 = req.params.get('UserData3'); // Specifying a Function is intended to allow the developer to perform different types of query. // As an example, we just return the data back if a function is specified. // In a real world case, a query for example to search for and return a ticket, contract or some other record would be performed. if( Function != null && Function != '' ) { JSONGenerator gen = JSON.createGenerator( true ); gen.writeStartObject(); gen.writeStringField( 'CallerID', CallerID ); gen.writeStringField( 'ServiceNumber', ServiceNumber ); gen.writeStringField( 'ServiceName', ServiceName ); gen.writeStringField( 'Function', Function ); gen.writeStringField( 'UserData', UserData ); gen.writeStringField( 'UserData2', UserData2 ); gen.writeStringField( 'UserData3', UserData3 ); gen.writeEndObject(); return gen.getAsString(); } // Perform SOSL Query over contacts and leads, searching for the phone number with *wildcards* String soslSearchString = '*' + CallerID + '*'; List<List<SObject>> searchList = [FIND :soslSearchString IN ALL FIELDS RETURNING Contact, Lead]; List<Contact> contacts = ( (List<Contact>) searchList[0] ); List<Lead> leads = ( (List<Lead>) searchList[1] ); // Multple hits? if( contacts.size() + leads.size() > 1 ) { // Multiple hits res.statusCode = 300; return null; } if( contacts.size() > 0 ) { // Query for exact contact String Id = (String) contacts.get(0).get('Id'); Set<String> fieldSet = schema.describeSObjects(new String[] { 'Contact' } )[0].fields.getMap().keyset(); List<String> fieldList = new List<String>( fieldSet ); String query = 'SELECT ' + String.join( fieldList, ',' ) + ' FROM Contact WHERE Id = \'' + Id + '\''; Contact contact = Database.query( query ); // 200 OK will be returned by default return JSON.serialize( contact ); } if( leads.size() > 0 ) { // Query for exact lead String Id = (String) leads.get(0).get('Id'); Set<String> fieldSet = schema.describeSObjects(new String[] { 'Lead' } )[0].fields.getMap().keyset(); List<String> fieldList = new List<String>( fieldSet ); String query = 'SELECT ' + String.join( fieldList, ',' ) + ' FROM Lead WHERE Id = \'' + Id + '\''; Lead lead = Database.query( query ); // 200 OK will be returned by default return JSON.serialize( lead ); } // Nothing found res.statusCode = 404; return null; } }

Test CURL

Tout d'abord, obtenez un jeton OAUTH, voir Testing with CURL.

La commande CURL suivante peut être utilisée pour tester cette API :

Translations Ignore
Code Block
titleCURL - Test getCallerInformation
curl.exe --silent -i -X GET --header "Authorization: Bearer <OAUTH_TOKEN>" --header "Connection: Close" "https://<SALES_FORCE_INSTANCE_URL>/services/apexrest/jtelACD/getCallerInformation?CallerID=4989461495000&ServiceNumber=4980012345678&ServiceName=test"

La commande CURL suivante peut être utilisée pour tester cette API avec les paramètres supplémentaires de la version 3.25 - 2021-07-02 et suivantes :

Translations Ignore Code Block
titleCURL - Test getCallerInformation
curl.exe --silent -i -X GET --header "Authorization: Bearer <OAUTH_TOKEN>" --header "Connection: Close" "https://<SALES_FORCE_INSTANCE_URL>/services/apexrest/jtelACD/getCallerInformation?CallerID=4989461495000&ServiceNumber=4980012345678&ServiceName=test&Function=testFunction&UserData=testUserData&UserData2=testUserData2&UserData3=testUserData3"