mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
💄 create lead UI done
This commit is contained in:
parent
8d886e3766
commit
7a19837833
45
packages/nodes-base/nodes/Intercom/GenericFunctions.ts
Normal file
45
packages/nodes-base/nodes/Intercom/GenericFunctions.ts
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import { OptionsWithUri } from 'request';
|
||||||
|
|
||||||
|
import {
|
||||||
|
IExecuteFunctions,
|
||||||
|
IHookFunctions,
|
||||||
|
ILoadOptionsFunctions,
|
||||||
|
IExecuteSingleFunctions
|
||||||
|
} from 'n8n-core';
|
||||||
|
|
||||||
|
export async function intercomApiRequest(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, resource: string, method: string, body: any = {}, headers?: object): Promise<any> { // tslint:disable-line:no-any
|
||||||
|
const credentials = this.getCredentials('intercomApi');
|
||||||
|
|
||||||
|
if (credentials === undefined) {
|
||||||
|
throw new Error('No credentials got returned!');
|
||||||
|
}
|
||||||
|
|
||||||
|
const headerWithAuthentication = Object.assign({}, headers,
|
||||||
|
{ Authorization: `Bearer ${credentials.apiKey}`, Accept: 'application/json' });
|
||||||
|
|
||||||
|
const endpoint = 'api.intercom.io';
|
||||||
|
|
||||||
|
const options: OptionsWithUri = {
|
||||||
|
headers: headerWithAuthentication,
|
||||||
|
method,
|
||||||
|
uri: `https://${endpoint}${resource}`,
|
||||||
|
body,
|
||||||
|
json: true
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(options)
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await this.helpers.request!(options);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
|
||||||
|
const errorMessage = error.response.body.message || error.response.body.Message;
|
||||||
|
|
||||||
|
if (errorMessage !== undefined) {
|
||||||
|
throw errorMessage;
|
||||||
|
}
|
||||||
|
throw error.response.body;
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,6 +9,13 @@ import {
|
||||||
ILoadOptionsFunctions,
|
ILoadOptionsFunctions,
|
||||||
INodePropertyOptions,
|
INodePropertyOptions,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
import {
|
||||||
|
leadOpeations,
|
||||||
|
leadFields,
|
||||||
|
} from './LeadDescription';
|
||||||
|
import {
|
||||||
|
intercomApiRequest,
|
||||||
|
} from './GenericFunctions';
|
||||||
|
|
||||||
export class Intercom implements INodeType {
|
export class Intercom implements INodeType {
|
||||||
|
|
||||||
|
@ -47,9 +54,37 @@ export class Intercom implements INodeType {
|
||||||
default: '',
|
default: '',
|
||||||
description: 'Resource to consume.',
|
description: 'Resource to consume.',
|
||||||
},
|
},
|
||||||
|
...leadOpeations,
|
||||||
|
...leadFields,
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
methods = {
|
||||||
|
loadOptions: {
|
||||||
|
// Get all the available companies to display them to user so that he can
|
||||||
|
// select them easily
|
||||||
|
async getCompanies(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
||||||
|
const returnData: INodePropertyOptions[] = [];
|
||||||
|
let companies, response;
|
||||||
|
try {
|
||||||
|
response = await intercomApiRequest.call(this, '/companies', 'GET');
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error(`Intercom Error: ${err}`);
|
||||||
|
}
|
||||||
|
companies = response.companies;
|
||||||
|
for (const company of companies) {
|
||||||
|
const companyName = company.name;
|
||||||
|
const companyId = company.id;
|
||||||
|
returnData.push({
|
||||||
|
name: companyName,
|
||||||
|
value: companyId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return returnData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
async executeSingle(this: IExecuteSingleFunctions): Promise<INodeExecutionData> {
|
async executeSingle(this: IExecuteSingleFunctions): Promise<INodeExecutionData> {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
172
packages/nodes-base/nodes/Intercom/LeadDescription.ts
Normal file
172
packages/nodes-base/nodes/Intercom/LeadDescription.ts
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
import { INodeProperties } from "n8n-workflow";
|
||||||
|
|
||||||
|
export const leadOpeations = [
|
||||||
|
{
|
||||||
|
displayName: 'Operation',
|
||||||
|
name: 'operation',
|
||||||
|
type: 'options',
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
resource: [
|
||||||
|
'lead',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: 'Create',
|
||||||
|
value: 'create',
|
||||||
|
description: 'Create a new lead',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default: '',
|
||||||
|
description: 'The operation to perform.',
|
||||||
|
},
|
||||||
|
] as INodeProperties[];
|
||||||
|
|
||||||
|
export const leadFields = [
|
||||||
|
{
|
||||||
|
displayName: 'Email',
|
||||||
|
name: 'email',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
required: true,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
resource: [
|
||||||
|
'lead',
|
||||||
|
],
|
||||||
|
operation: [
|
||||||
|
'create',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: 'The email of the user.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'JSON Parameters',
|
||||||
|
name: 'jsonParameters',
|
||||||
|
type: 'boolean',
|
||||||
|
default: false,
|
||||||
|
description: '',
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'create',
|
||||||
|
],
|
||||||
|
resource: [
|
||||||
|
'lead'
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Options',
|
||||||
|
name: 'options',
|
||||||
|
type: 'collection',
|
||||||
|
placeholder: 'Add Option',
|
||||||
|
default: {},
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'create',
|
||||||
|
],
|
||||||
|
resource: [
|
||||||
|
'lead'
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
displayName: 'Phone',
|
||||||
|
name: 'phone',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
required: false,
|
||||||
|
description: 'The phone number of the user',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Name',
|
||||||
|
name: 'name',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
placeholder: '',
|
||||||
|
description: 'Name of the user',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Unsubscribed From Emails',
|
||||||
|
name: 'unsubscribedFromEmails',
|
||||||
|
type: 'boolean',
|
||||||
|
default: '',
|
||||||
|
placeholder: '',
|
||||||
|
description: 'Whether the Lead is unsubscribed from emails',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Update Last Request At',
|
||||||
|
name: 'updateLastRequestAt',
|
||||||
|
type: 'boolean',
|
||||||
|
default: false,
|
||||||
|
options: [],
|
||||||
|
required: false,
|
||||||
|
description: `A boolean value, which if true, instructs Intercom to update the users' last_request_at value to the current API service time in UTC. default value if not sent is false.`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Companies',
|
||||||
|
name: 'companies',
|
||||||
|
type: 'multiOptions',
|
||||||
|
typeOptions: {
|
||||||
|
loadOptionsMethod: 'getCompanies',
|
||||||
|
},
|
||||||
|
default: [],
|
||||||
|
required: false,
|
||||||
|
description: 'Identifies the companies this user belongs to.',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Custom Attributes',
|
||||||
|
name: 'customAttributes',
|
||||||
|
type: 'fixedCollection',
|
||||||
|
default: '',
|
||||||
|
placeholder: 'Add Attribute',
|
||||||
|
typeOptions: {
|
||||||
|
multipleValues: true,
|
||||||
|
},
|
||||||
|
required: false,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
resource: [
|
||||||
|
'lead',
|
||||||
|
],
|
||||||
|
operation: [
|
||||||
|
'create',
|
||||||
|
],
|
||||||
|
jsonParameters: [
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: 'customAttributesValues',
|
||||||
|
displayName: 'Attributes',
|
||||||
|
values: [
|
||||||
|
{
|
||||||
|
displayName: 'Name',
|
||||||
|
name: 'name',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Value',
|
||||||
|
name: 'value',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
description: 'A hash of key/value pairs to represent custom data you want to attribute to a user.',
|
||||||
|
},
|
||||||
|
] as INodeProperties[];
|
||||||
|
|
Loading…
Reference in a new issue