@phonal-technologies/drafterai-js
v1.0.6
Published
Javascript SDK for Drafter AI
Downloads
42
Readme
drafterai-js
Javascript SDK for Drafter AI
// example.js
import fetch from 'node-fetch'
import {
initialize,
WORKFLOW_EXAMPLE,
WORKFLOW_EXECUTION_EXAMPLE,
} from '@phonal-technologies/drafterai-js'
// Init an API with apikey and fetch provider
const accessKey = process.env.DRAFTER_ACCESS_KEY
const drafterApi = initialize(accessKey, {
fetch,
url: 'http://localhost:3030',
})
/**
* Example
* const drafterApi = initialize(
* 'pro_Vs1zz0Le.fX1F5KlLvqeZzzzeLhot6lXEE',
* { fetch: fetch, }
* )
*/
;(async () => {
console.log('WORKFLOW_EXAMPLE', WORKFLOW_EXAMPLE)
console.log('WORKFLOW_EXECUTION_EXAMPLE', WORKFLOW_EXECUTION_EXAMPLE)
const workflows = await drafterApi.workflows.find(
{ $limit: 10, '$sort[id]': -1 },
{ all: true }
)
const workflowExecutions = await drafterApi.workflowExecutions.find(
{ $limit: 10, '$sort[id]': -1 },
{ all: true }
)
console.log('First 10 workflows', workflows)
console.log('First 10 workflowExecutions', workflowExecutions)
const [queuedExecution] = await drafterApi.workflowExecutions.create({
workflowId: 88,
context: {
url: 'https://drafter.ai',
},
})
console.log('queuedExecution', queuedExecution)
const intervalId = setInterval(async () => {
const [execution] = await drafterApi.workflowExecutions.find(
{ $limit: 10, '$sort[id]': -1, datagroup: queuedExecution.datagroup },
{ all: true }
)
if (['completed', 'failed'].includes(execution.status)) {
clearInterval(intervalId)
}
console.log('execution', execution)
}, 3000)
})()
Alternative example with axios
const axios = require('axios');
const DRAFTER_EXECUTION_COMPLETED_STATUS = 'completed'
const DRAFTER_EXECUTION_FAILED_STATUS = 'failed'
const DRAFTER_FINAL_STATUS = [DRAFTER_EXECUTION_COMPLETED_STATUS, DRAFTER_EXECUTION_FAILED_STATUS]
const DRAFTER_WORKFLOW_ID = 1269
/* Utils */
const objectToQueryStringUtil = (query) => {
return Object.entries(query)
.map(([key, value]) =>`${key}=${value}`)
.join('&')
}
/* Drafter Api Methods */
/* Drafter Executions Create */
const drafterAiWorkflowExecutionsCreate = async (xAccessKey, data) => {
const resp = await axios({
url: 'https://api.drafter.ai/workflow-executions',
method: 'POST',
headers: {
'User-Agent': `DrafterAI jssdk/1.0 (nodejs18)`,
'Content-Type': 'application/json',
'X-Access-Key': xAccessKey,
},
data,
})
return resp.data
}
/* Drafter Executions Find All */
const drafterAiWorkflowExecutionsFindAll = async (xAccessKey, query) => {
const resp = await axios({
url: `https://api.drafter.ai/workflow-executions?${objectToQueryStringUtil(query)}`,
method: 'GET',
headers: {
'User-Agent': `DrafterAI jssdk/1.0 (nodejs18)`,
'Content-Type': 'application/json',
'X-Access-Key': xAccessKey,
'X-No-Paginate': 1
},
})
return resp.data
}
;(async () => {
const drafterAiAccessKey = '...'
// Payload for Drafter AI
const payload = {
"workflowId": DRAFTER_WORKFLOW_ID,
"context": {
"yourName_": ownerName,
"yourProspectsName_": firstName,
"yourWebsite_": userWebsite,
"prospectWebsite_": prospectWebsite,
},
};
console.log('Executing Drafter AI workflow with payload:', payload);
const queuedExecution = await drafterAiWorkflowExecutionsCreate(drafterAiAccessKey, payload);
console.log('Workflow execution queued:', queuedExecution);
// Poll for execution status
console.log('Polling for execution status...');
const intervalId = setInterval(async () => {
const [execution] = await drafterAiWorkflowExecutionsFindAll(
drafterAiAccessKey,
{ $limit: 1, datagroup: queuedExecution.datagroup },
);
console.log('Execution status:', execution.status);
if (DRAFTER_FINAL_STATUS.includes(execution.status)) {
clearInterval(intervalId);
if (execution.status === DRAFTER_EXECUTION_FAILED_STATUS) {
console.error('Execution Failed')
return
}
console.log('Execution completed. Updating HubSpot contact properties...');
// Update HubSpot contact properties
const { subjectline, emailbody, emailsignature } = execution.pipeline[0]; // Adjust according to response structure
console.log('Got response:', { subjectline, emailbody, emailsignature } );
}
}, 3000);
})(); // Immediately invoke the function