Note: This release is in preview. Features described here don’t become generally available until the latest general availability date that Salesforce announces for this release. Before then, and where features are noted as beta, pilot, or developer preview, we can’t guarantee general availability within any particular time frame or at all. Make your purchase decisions only on the basis of generally available products and features.
Telephony Integration REST API Sample Code
The following JavaScript code sample performs the authorization process and then invokes
the Voice API.
1const jwt = require('jsonwebtoken');
2const SSM = require('aws-sdk/clients/ssm');
3const uuid = require('uuid/v1');
4
5// SCRT EndPoint Base example: https://MyDomainName.my.salesforce-scrt.com/telephony/v1
6// Contact your admin to get the exact URL. This should have been configured as part
7// of the Salesforce Voice Setup.
8
9const axios = require('axios').create({
10 baseURL: "ScrtEndpointBase"
11});
12
13// Example function to retrieve privateKey parameter using Amazon Systems Manager
14async function getSSMParameterValue(paramName, withDecryption) {
15 return await new Promise(resolve => {
16 const ssm = new SSM();
17 const query = {
18 Names: [paramName],
19 WithDecryption: withDecryption
20 };
21
22 ssm.getParameters(query, (err, data) => {
23 let paramValue = null;
24
25 if (!err && data && data.Parameters && data.Parameters.length) {
26 paramValue = data.Parameters[0].Value;
27 }
28
29 resolve(paramValue);
30 });
31 });
32}
33
34// Generate a JWT based on the specified parameters.
35async function generateJWT(params) {
36 const { privateKeyParamName, orgId, callCenterApiName, expiresIn } = params;
37 // Retrieve privateKey from the param store
38 const privateKey = await getSSMParameterValue(privateKeyParamName, true);
39 const signOptions = {
40 issuer: orgId,
41 subject: callCenterApiName,
42 expiresIn: expiresIn,
43 algorithm: 'RS256',
44 jwtid: uuid()
45 };
46
47 return jwt.sign({}, privateKey, signOptions);
48}
49
50// Function to Create VoiceCall
51async function createVoiceCall(fieldValues) {
52 const generateJWTParams = {
53 privateKeyParamName : "YourPrivateKeyParamName",
54 orgId : "YourSalesforceOrganizationId",
55 callCenterApiName : "YourSalesforceCallCenterAPIName",
56 expiresIn : "TokenExpiryTime"
57 };
58
59 const jwt = await generateJWT(generateJWTParams);
60
61 var fieldValues = {
62 "vendorCallKey":"5324881f-1e84-4367-8930-f69a74b30ca6",
63 "callCenterApiName":"HVCC",
64 "to":"8002345678",
65 "from":"4081456688",
66 "initiationMethod":"Inbound",
67 "startTime":"2020-07-13T11:43:01Z",
68 "participants":
69 [{"participantKey":"+18033568299",
70 "type": "END_USER"
71 }]
72 };
73
74 const response = await axios.post('/voiceCalls', fieldValues, {
75 headers: {
76 'Authorization': 'Bearer ${jwt}',
77 'Content-Type': 'application/json',
78 'Telephony-Provider-Name': 'Amazon Connect'
79 }
80 })
81 .then(response => {
82 return response;
83 })
84 .catch(error => {
85 let context = {};
86 if (error.response) {
87 // The request was made and the server responded with
88 // a status code that falls out of the range of 2xx
89 context = error.response.data;
90 } else if (error.request) {
91 // The request was made but no response was received
92 context = error.request;
93 } else {
94 // Something happened in setting up the request that triggered an error
95 context = error.message;
96 }
97 throw new Error('Error creating VoiceCall record');
98 });
99
100 return response.data;
101}