Merge and Deliver via Webhook
Purpose
To send or post the merged document to the given webhook URL.
HTTP Request URL
https://{api.office-integrator_domain}/writer/officeapi/v1/document/merge/webhook
Request Parameters
Parameter | Value | Description |
Mandatory Parameters | ||
apikey | 423s****** | Uniquely identifies the web application in which the Writer editor is integrated. |
Body Parameters
Parameter | Data Type | Description |
Mandatory Parameters | ||
output_format | String | Supported formats are pdf or docx. Specify a format in which you would like to download the merged document. |
file_content or file_url | File or String | Below are the methods to provide the input file that needs to merged with the data depending on its location. file_content - if the input file is from your local drive or desktop. file_url - if the input file is from a publicly accessible Web URL. |
webhook | { "invoke_url" : <url>, "invoke_period": "oneveryrecord/oncomplete" } | Pass the values for invoke_url and invoke_period via this parameter as JSON. Provide the webhook url in which the merged documents needs to be posted in invoke_url and when the merged documents needs to be posted in invoke_period. |
merge_to | String | Supported merge types are separatedoc and singledoc. Specify in which type you would like to merge the document. separatedoc - If you would like to merge each record as a separate document. singledoc- If you would like to merge all the records as a single document. |
You can provide the data in any one of the below formats | ||
merge_data | JSONObject | Pass a String value through 'data' key as JSON Array. |
merge_data_csv_content | File | Provide the required csv content in your API request body. |
merge_data_json_content | File | Provide the required json content in your API request body. |
merge_data_csv_url | url | Provide the required csv url in your API request body. |
merge_data_json_url | url | Provide the required json url in your API request body. |
Optional Parameters | ||
password | String | Specify a password if you would like to protect the merged document. |
webhook
Parameter | Type | Possible Values | Default Value |
invoke_url | string | URL | URL |
invoke_period | string | oncomplete and oneveryrecord. oncomplete - If you would like to post the merged documents after merging all the records. oneveryrecord - If you would like to post the merged document of each record once done. | oncomplete |
Sample Request
Copiedcurl --location --request POST "https://api.office-integrator.com/writer/officeapi/v1/document/merge/webhook" \
--form "apikey=423s*****" \
--form "output_format=pdf" \
--form "password=***" \
--form "webhook={\"invoke_period\":\"oncomplete\",\"invoke_url\":\"https://domain.com/xyz.php\"}" \
--form "merge_to=separatedoc" \
--form "file_content=@" \
--form "merge_data={\"data\":[{\"name\":\"Amelia\",\"email\":\"amelia@zylker.com\"}]}"
Copiedimport * as SDK from "@zoho-corp/office-integrator-sdk";
import { readFileSync, writeFileSync } from 'fs';
const __dirname = import.meta.dirname;
class MergeAndDeliver {
static async execute() {
//Initializing SDK once is enough. Calling here since code sample will be tested standalone.
//You can place SDK initializer code in you application and call once while your application start-up.
await this.initializeSdk();
try {
var sdkOperations = new SDK.V1.V1Operations();
var parameters = new SDK.V1.MergeAndDeliverViaWebhookParameters();
//Either use url as document source or attach the document in request body use below methods
parameters.setFileUrl("https://demo.office-integrator.com/zdocs/OfferLetter.zdoc");
parameters.setMergeDataJsonUrl("https://demo.office-integrator.com/data/candidates.json");
// var fileName = "OfferLetter.zdoc";
// var filePath = __dirname + "/sample_documents/OfferLetter.zdoc";
// var fileStream = readFileSync(filePath);
// var streamWrapper = new SDK.StreamWrapper(fileName, fileStream, filePath);
// parameters.setFileContent(streamWrapper);
// var jsonFileName = "candidates.json";
// var jsonFilePath = __dirname + "/sample_documents/candidates.json";
// var jsonFileStream = readFileSync(jsonFilePath);
// var jsonStreamWrapper = new SDK.StreamWrapper(jsonFileName, jsonFileStream, jsonFilePath);
// parameters.setMergeDataJsonContent(jsonStreamWrapper);
parameters.setOutputFormat("zdoc");
parameters.setMergeTo("separatedoc");
parameters.setPassword("***");
var webhookSettings = new SDK.V1.MailMergeWebhookSettings();
webhookSettings.setInvokeUrl("https://officeintegrator.zoho.com/v1/api/webhook/savecallback/601e12157a25e63fc4dfd4e6e00cc3da2406df2b9a1d84a903c6cfccf92c8286");
webhookSettings.setInvokePeriod("oncomplete");
parameters.setWebhook(webhookSettings);
//var mergeData = new Map();
//parameters.setMergeData(mergeData);
//var csvFileName = "csv_data_source.csv";
//var csvFilePath = __dirname + "/sample_documents/csv_data_source.csv";
//var csvFileStream = readFileSync(csvFilePath);
//var csvStreamWrapper = new SDK.StreamWrapper(csvFileName, csvFileStream, csvFilePath);
//parameters.setMergeDataCsvContent(csvStreamWrapper);
//parameters.setMergeDataCsvUrl("https://demo.office-integrator.com/data/csv_data_source.csv");
var responseObject = await sdkOperations.mergeAndDeliverViaWebhook(parameters);
if(responseObject != null) {
console.log("\nStatus Code: " + responseObject.statusCode);
let writerResponseObject = responseObject.object;
if(writerResponseObject != null) {
if(writerResponseObject instanceof SDK.V1.MergeAndDeliverViaWebhookSuccessResponse) {
console.log("\nRecords - " + JSON.stringify(writerResponseObject.getRecords()));
console.log("\nMerge report data url - " + writerResponseObject.getMergeReportDataUrl());
} else if (writerResponseObject instanceof SDK.V1.InvalidConfigurationException) {
console.log("\nInvalid configuration exception. Exception json - ", writerResponseObject);
} else {
console.log("\nRequest not completed successfullly");
}
}
}
} catch (error) {
console.log("\nException while running sample code", error);
}
}
//Include office-integrator-sdk package in your package json and the execute this code.
static async initializeSdk() {
// Refer this help page for api end point domain details - https://www.zoho.com/officeintegrator/api/v1/getting-started.html
let environment = await new SDK.DataCenter.Production("https://api.office-integrator.com");
let auth = new SDK.AuthBuilder()
.addParam("apikey", "2ae438cf864488657cc9*********") //Update this apikey with your own apikey signed up in office integrator service
.authenticationSchema(await new SDK.V1.Authentication().getTokenFlow())
.build();
let tokens = [ auth ];
//Sdk application log configuration
let logger = new SDK.LogBuilder()
.level(SDK.Levels.INFO)
//.filePath("<file absolute path where logs would be written>") //No I18N
.build();
let initialize = await new SDK.InitializeBuilder();
await initialize.environment(environment).tokens(tokens).logger(logger).initialize();
console.log("SDK initialized successfully.");
}
}
MergeAndDeliver.execute();
Sample Response
Copied{
"merge_report_data_url": "https://api.office-integrator.com/writer/officeapi/v1/document/merge/job/0tq5n465132106580437abe99b6f56f2b0c85/data",
"records": [
{
"name": "Amelia",
"email": "amelia@zylker.com",
"download_link": "{url}",
"status": "inprogress"
}
],
}
Note:
1. merge_report_data_url -> helps to get or retrieve the status of the report by passing the {apikey} in 'GET' method.
2. download_link -> helps to download the merged document of a particular record by passing the {apikey} in 'GET' method.