createContact
This interface is invoked whenever a new contact needs to be created in the target CRM. This happens when a user of App Connect has elected to create a "placeholder contact."
This function is to create a placeholder contact, ONLY in the following case: * User adds a new call/message log against a number with no matched contact. In another words, create placeholder contact is tied to call/message logging action
Manifest elements
Every CRM can define a different set of contact types, or data elements that can be associated with an activity (call or SMS) log. Within the platforms.[crm name]
section of your manifest, provide the list of contact types supported by the target CRM.
..snip..
"contactTypes": [
{
"display": "TestContactType",
"value": "testContact"
},
{
"display": "Contact",
"value": "cta"
}
],
..snip..
Request parameters
Parameter | Description |
---|---|
user |
An object describing the Chrome extension user associated with the action that triggered this interface. |
authHeader |
The HTTP Authorization header to be transmitted with the API request to the target CRM. |
phoneNumber |
The phone number of the contact in E.164 format, e.g. +1231231234. |
newContactName |
The name of the contact as entered by the user. |
newContactType |
The contact type the user selected to indicate what kind of contact to create. |
Return value(s)
This interface returns a single object. That object describes the contact that was created. It has following properties:
Parameter | Description |
---|---|
contactInfo |
Contain id and name |
returnMessage |
message , messageType and ttl |
Example
{
contactInfo:{
id: "xxxx-xxxxx", // ID of the contact in the target
name: "John Doe" // Display name of the contact. This name will appear and be associated with all users with the same `phoneNumber`.
},
returnMessage:{
message: 'Contact created',
messageType: 'success', // 'success', 'warning' or 'danger'
ttl: 30000 // in miliseconds
}
}
Reference
if (!!aiNote && (user.userSettings?.addCallLogAiNote?.value ?? true)) { logBody = upsertAiNote({ body: logBody, aiNote }); }
if (!!transcript && (user.userSettings?.addCallLogTranscript?.value ?? true)) { logBody = upsertTranscript({ body: logBody, transcript }); }
// const existingLogId = existingCallLog.thirdPartyLogId;
// const getLogRes = await axios.get(
// `https://api.crm.com/activity/${existingLogId}`,
// {
// headers: { 'Authorization': authHeader }
// });
// const originalNote = getLogRes.data.body;
// let patchBody = {};
// patchBody = {
// data: {
// subject: subject,
// body: note
// }
// }
// const patchLogRes = await axios.patch(
// `https://api.crm.com/activity/${existingLogId}`,
// patchBody,
// {
// headers: { 'Authorization': authHeader }
// });
mockCallLog.subject = mockCallLog.subject;
mockCallLog.note = body;
const patchLogRes = {
data: {
id: mockCallLog.id
}
}
//-----------------------------------------------------------------------------------------
//---CHECK.6: In extension, for a logged call, click edit to see if info can be updated ---
//-----------------------------------------------------------------------------------------
return {
updatedNote: note,
returnMessage: {
message: 'Call log updated.',
messageType: 'success',
ttl: 2000
}
};
}
// - contactInfo: { id, type, phoneNumber, name }
// - message : same as in https://developers.ringcentral.com/api-reference/Message-Store/readMessage
// - recordingLink: recording link of voice mail
// - additionalSubmission: all additional fields that are setup in manifest under call log page
async function createMessageLog({ user, contactInfo, authHeader, message, additionalSubmission, recordingLink, faxDocLink }) {
// ---------------------------------------
// ---TODO.7: Implement message logging---
// ---------------------------------------
// const postBody = {
// data: {
// subject: `[SMS] ${message.direction} SMS - ${message.from.name ?? ''}(${message.from.phoneNumber}) to ${message.to[0].name ?? ''}(${message.to[0].phoneNumber})`,
// body: `${message.direction} SMS - ${message.direction == 'Inbound' ? `from ${message.from.name ?? ''}(${message.from.phoneNumber})` : `to ${message.to[0].name ?? ''}(${message.to[0].phoneNumber})`} \n${!!message.subject ? `[Message] ${message.subject}` : ''} ${!!recordingLink ? `\n[Recording link] ${recordingLink}` : ''}\n\n--- Created via RingCentral App Connect`,
// type: 'Message'
// }
// }
// const addLogRes = await axios.post(
// `https://api.crm.com/activity`,
// postBody,
// {
// headers: { 'Authorization': authHeader }
// });
const messageType = !!recordingLink ? 'Voicemail' : (!!faxDocLink ? 'Fax' : 'SMS');
console.log(`adding message log... \n\n${JSON.stringify(message, null, 2)}`);
mockMessageLog = {
}
matchedContactInfo.push({
id: 'createNewContact',
name: 'Create new contact...',
isNewContact: true
});
return { matchedContactInfo };
}
function formatContact(rawContactInfo, relatedDeals) {
return {
id: rawContactInfo.id,
name: rawContactInfo.name,
phone: rawContactInfo.phones[0],
organization: rawContactInfo.organization?.name ?? '',
additionalInfo: relatedDeals ? { deals: relatedDeals } : null
}
}
async function createContact({ user, authHeader, phoneNumber, newContactName }) {
const postBody = {
name: newContactName,