Create Template
Purpose
To create a new template in Zoho Writer.
HTTP Request URL
https://{api.office-integrator_domain}/writer/officeapi/v1/templates
Request Parameters
Parameter | Value | Description |
Mandatory Parameter | ||
apikey | 423s***** | Uniquely identifies the web application in which the Writer editor is integrated. |
callback_settings | { "save_format":"zdoc", "save_url":<Your Save URL>, "http_method_type": "post", "retries": <Integer>, "timeout": <Integer>, "save_url_params": { .... } } | Using this param, you will be able to specify the following; save_format -> Specify the output format in which the edited document needs to be saved. save_url -> Provide your server location to which the latest content needs to be pushed back when the 'Save' is performed. The below key values are optional; http_method_type -> Specify the http method in which the save request has to be triggered. retries -> Specify the number of retries required when the 'Save' fails. timeout -> Specify the timeout for the given saveurl. save_url_params -> To customize the output parameters in which the document details will be pushed from our end.
|
Optional Parameters - Editor Customization | ||
document_defaults | { "orientation":"portrait", "paper_size":"Letter", "font_name":"Lato", "font_size":14, "track_changes": "disabled", "margin": {"left":"1.5in","right":"1.5in","top":"0.25in","bottom":"0.25in"}, "date_format":"MM/DD/YY" } | Set document defaults such as font name and size, custom date format, paper size / orientation, enable/disable track changes and apply custom margins.. |
editor_settings | { "unit":"in", "language":"en", "view":"webview" } | Set Editor preferences like Unit in inch/mm, interface language and view as pageview/webview for new documents. |
permissions | { "document.export":true, "document.print":true, "document.edit":true, "review.changes.resolve": false, "review.comment":true, "collab.chat":true "document.pausecollaboration":false, "document.fill":true } | Define document permissions for the users. |
document_info | { "document_name":"New", "document_id":"1349" } | Set a unique id and specify display name of the new document. |
user_info | { "user_id":"1973", "display_name":"Ken" } | Identify the user in the document with "user_id" and "display_name". |
ui_options | { "save_button":"show", "chat_panel":"show", "dark_mode":"show", "file_menu":"show" } | Specify whether the "Save button", "Chat panel", "File menu" and the "Dark mode" option needs to be shown or hidden. |
Body Parameters
Parameter | Value | Description |
Mandatory Parameters | ||
You can provide the data in any one of the below formats | ||
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 | ||
document or url | File or String | Method of providing the input file depending on its location. document - if the input file is from your local drive or desktop. url - if the input file is from a publicly accessible Web URL. |
Note:
Editor customization parameters and their values are case-sensitive.
Custom margin is applicable to new documents only.
Editor Customization Parameters
document_defaults
Parameter | Type | Possible Values | Default Value |
font_name | string | Trebuchet | Arial |
font_size | integer | 9 / 10 / 11 /13 / 16 / 18 (in pixels) | 12 (in pixels) |
orientation | string | portrait / landscape | portrait |
paper_size | string | Letter, A4, Legal, Executive | Letter |
track_changes | boolean | enabled / disabled | disabled |
margin | string | in / mm | 1in |
date_format | string | For example: EEEE, MMMM DD, YYYY at HH:mm Output: Monday, July 15, 2024 at 21:06 | Date format will be displayed based on the document language value. |
editor_settings
Parameter | Type | Possible Values | Default Value |
unit | string | in/mm | in (inch) |
language | string | en / de / es / fr / ja / nl more... | en |
view | string | webview / pageview | pageview ("view" param is applicable to new documents only) |
permissions
Parameter | Type | Possible Values | Default Value | Description |
document.export | boolean | true / false | true | To enable or disable document download option |
document.print | boolean | true / false | true | To enable or disable document print option |
document.edit | boolean | true / false | false | Provide option to allow edit access to the document |
review.comment | boolean | true / false | false | Provide option to manage comments |
review.changes.resolve | boolean | true / false | false | Provide option to resolve track changes |
collab.chat | boolean | true / false | true | To enable or disable chat panel for the collaborators |
document.pausecollaboration | boolean | true / false | false | Provide option to manage collaboration |
document.fill | boolean | true / false | true | Provide option to allow edit access for the fillable fields |
callback_settings
Parameter | Type | Possible Values | Default Value |
Mandatory Keys | |||
save_format | string | zdoc / doc / docx / odt / html / pdf and more ... | zdoc |
save_url | string | URL - Maximum length -> 65535 | URL |
Optional Keys | |||
save_url_params | JSON |
| |
http_method_type | string | post / put | post |
retries | integer | 0 to 3 | 0 |
timeout | integer | 1 to 120000 milliseconds | 120000 |
document_info
Parameter | Type | Possible Values | Default Value |
document_id | string | 24eru24960v | |
document_name | string | Sample | Untitled |
user_info
Parameter | Type | Possible Values | Default Value |
user_id | integer | 03588563264 | |
display_name | string | Ken/James/Adam | Guest |
ui_options
Parameter | Type | Possible Values | Default Value |
save_button | string | show/hide | show |
chat_panel | string | show/hide | show |
dark_mode | string | show/hide | show |
file_menu | string | show/hide | show |
save_url usage:
Zoho Office Integrator allows partners and businesses to save the document content back to their specified storage server through "saveurl" method.
A saveurl is a publicly accessible web URL/Service to which Zoho will push the updated document content from Writer editor to the partner's server.
In order to use the saveurl method, partners should fulfill the below requirements:
- Partner's remote servers need to expose one of their ports - port 443 (https) or port 80 (http) - from their location, for Zoho Writer to push the data back.
- The saveurl value specified in the HTTPS/HTTP POST request should be a proper domain name and publicly accessible over the web. Example: https://yourdomain.com/save.php
save_url_params usage:
By default, when the 'Save' is performed, we will be pushing back the information with the following key names:
Key Name | Type | Description |
content | File | Document content will be pushed back in the form of bytes. |
filename | String | Document name |
format | String | Specifies the format in which the document has been exported. |
If you wish to customize the above key names that you need to send back during save call, you can make use of the 'save_url_params' key inside 'callback_settings' parameter.
Once the 'save_url_params' key is configured, only the key values defined inside will be pushed back to your server. The default key names (like filename and format) will not be included. To include them, you need to define your own keys for format and filename by using the system variable $format and $filename respectively.
If the 'save_url_params' is passed as an empty JSON or the system variable $content is not configured, the document bytes will be pushed back with the multipart name 'content' by default.
Syntax:
"save_url_params": {
<custom_content_key>: $content,
<custom_format_key>: $format,
<custom_filename_key>: $filename,
<additional_user_key>: <value>,
<additional_user_key>: <value>,
....
<additional_user_key>: <value>
},
Example:
"save_url_params": {
file: $content,
extension: $format,
document_name: $filename,
<additional_user_key>: <value>,
<additional_user_key>: <value>
},
In the above example, the document bytes will be pushed back in the multipart name 'file', document format in the key name 'extension' and document filename in the key name 'document_name'.
Sample Request
Copiedcurl -X POST \
'https://api.office-integrator.com/writer/officeapi/v1/templates' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'apikey=423s*****' \
-F 'document_defaults={"font_size":"12","font_name":"Roboto","orientation":"portrait","paper_size":"A4","track_changes":"disabled","margin":
{"left":"1.5in","right":"1.5in","top":"0.25in","bottom":"0.25in"},"date_format":"MM/DD/YY"}' \
-F 'editor_settings={"unit":"in","language":"en","view":"webview"}' \
-F 'permissions={'\''document.export'\'':true,'\''document.print'\'':true,'\''document.edit'\'':true,'\''review.changes.resolve'\'':false,'\''review.comment'\'':true,'\''collab.chat'\'':true,'\''document.pausecollaboration'\'':false,'\''document.fill'\'':true }' \
-F 'callback_settings={"save_format":"docx","save_url":"https://domain.com/save.php"}' \
-F 'document_info={"document_name":"New","document_id":1349}' \
-F 'user_info={"user_id":"1973","display_name":"Ken"}' \
--form "document=@" \
--form "merge_data_csv_content=@/Users/amelia-1200/Documents/test.csv" \
Copiedconst Levels = require("zoi-nodejs-sdk/routes/logger/logger").Levels;
const Constants = require("zoi-nodejs-sdk/utils/util/constants").Constants;
const APIKey = require("zoi-nodejs-sdk/models/authenticator/apikey").APIKey;
const Environment = require("zoi-nodejs-sdk/routes/dc/environment").Environment;
const LogBuilder = require("zoi-nodejs-sdk/routes/logger/log_builder").LogBuilder;
const UserSignature = require("zoi-nodejs-sdk/routes/user_signature").UserSignature;
const InitializeBuilder = require("zoi-nodejs-sdk/routes/initialize_builder").InitializeBuilder;
const fs = require("fs");
const StreamWrapper = require("zoi-nodejs-sdk/utils/util/stream_wrapper").StreamWrapper;
const Margin = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/margin").Margin;
const UserInfo = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/user_info").UserInfo;
const DocumentInfo = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/document_info").DocumentInfo;
const EditorSettings = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/editor_settings").EditorSettings;
const DocumentDefaults = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/document_defaults").DocumentDefaults;
const CallbackSettings = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/callback_settings").CallbackSettings;
const CreateDocumentResponse = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/create_document_response").CreateDocumentResponse;
const MailMergeTemplateParameters = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/mail_merge_template_parameters").MailMergeTemplateParameters;
const OfficeIntegratorSDKOperations = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/office_integrator_sdk_operations").OfficeIntegratorSDKOperations;
const InvaildConfigurationException = require("zoi-nodejs-sdk/core/com/zoho/officeintegrator/office_integrator_sdk/invaild_configuration_exception").InvaildConfigurationException;
class CreateMergeTemplate {
//Include zoi-nodejs-sdk package in your package json and the execute this code.
static async initializeSdk() {
let user = new UserSignature("john@zylker.com");
let environment = new Environment("https://api.office-integrator.com", null, null);
let apikey = new APIKey("2ae438cf864488657cc9754a27daa480", Constants.PARAMS);
let logger = new LogBuilder()
.level(Levels.INFO)
.filePath("./app.log")
.build();
let initialize = await new InitializeBuilder();
await initialize.user(user).environment(environment).token(apikey).logger(logger).initialize();
console.log("SDK initialized successfully.");
}
static async execute() {
//Initializing SDK once is enough. Calling here since code sample will be tested standalone.
//You can place SDK initializer code in your application and call once while your application start-up.
await this.initializeSdk();
try {
var sdkOperations = new OfficeIntegratorSDKOperations();
var templateParameters = new MailMergeTemplateParameters();
//Either use url as document source or attach the document in request body and use below methods
templateParameters.setUrl("https://demo.office-integrator.com/zdocs/Graphic-Design-Proposal.docx");
templateParameters.setMergeDataJsonUrl("https://demo.office-integrator.com/data/candidates.json");
// var fileName = "OfferLetter.zdoc";
// var filePath = "./sample_documents/OfferLetter.zdoc";
// var fileStream = fs.readFileSync(filePath);
// var streamWrapper = new StreamWrapper(fileName, fileStream, filePath);
// var streamWrapper = new StreamWrapper(null, null, filePath)
// templateParameters.setDocument(streamWrapper);
// var jsonFileName = "candidates.json";
// var jsonFilePath = "./sample_documents/candidates.json";
// var jsonFileStream = fs.readFileSync(jsonFilePath);
// var jsonStreamWrapper = new StreamWrapper(jsonFileName, jsonFileStream, jsonFilePath);
// templateParameters.setMergeDataJsonContent(jsonStreamWrapper);
var documentInfo = new DocumentInfo();
//Time value used to generate unique document every time. You can replace based on your application.
documentInfo.setDocumentId("" + new Date().getTime());
documentInfo.setDocumentName("Graphic-Design-Proposal.docx");
templateParameters.setDocumentInfo(documentInfo);
var userInfo = new UserInfo();
userInfo.setUserId("1000");
userInfo.setDisplayName("Amelia");
templateParameters.setUserInfo(userInfo);
var margin = new Margin();
margin.setTop("2in");
margin.setBottom("2in");
margin.setLeft("2in");
margin.setRight("2in");
var documentDefaults = new DocumentDefaults();
documentDefaults.setFontName("Arial");
documentDefaults.setFontSize(12);
documentDefaults.setOrientation("landscape");
documentDefaults.setPaperSize("A4");
documentDefaults.setTrackChanges("enabled");
documentDefaults.setMargin(margin);
templateParameters.setDocumentDefaults(documentDefaults);
var editorSettings = new EditorSettings();
editorSettings.setUnit("mm");
editorSettings.setLanguage("en");
editorSettings.setView("pageview");
templateParameters.setEditorSettings(editorSettings);
var permissions = new Map();
permissions.set("document.export", true);
permissions.set("document.print", false);
permissions.set("document.edit", true);
permissions.set("review.comment", false);
permissions.set("review.changes.resolve", false);
permissions.set("collab.chat", false);
permissions.set("document.pausecollaboration", false);
permissions.set("document.fill", false);
templateParameters.setPermissions(permissions);
var callbackSettings = new CallbackSettings();
var saveUrlParams = new Map();
saveUrlParams.set("auth_token", "1234");
saveUrlParams.set("id", "123131");
callbackSettings.setSaveUrlParams(saveUrlParams);
callbackSettings.setHttpMethodType("post");
callbackSettings.setRetries(1);
callbackSettings.setTimeout(100000);
callbackSettings.setSaveUrl("https://officeintegrator.zoho.com/v1/api/webhook/savecallback/601e12157a25e63fc4dfd4e6e00cc3da2406df2b9a1d84a903c6cfccf92c8286");
callbackSettings.setSaveFormat("pdf");
templateParameters.setCallbackSettings(callbackSettings);
var responseObject = await sdkOperations.createMailMergeTemplate(templateParameters);
if(responseObject != null) {
//Get the status code from response
console.log("\nStatus Code: " + responseObject.statusCode);
//Get the api response object from responseObject
let writerResponseObject = responseObject.object;
if(writerResponseObject != null){
//Check if expected CreateDocumentResponse instance is received
if(writerResponseObject instanceof CreateDocumentResponse){
console.log("\nDocument ID - " + writerResponseObject.getDocumentId());
console.log("\nDocument session ID - " + writerResponseObject.getSessionId());
console.log("\nDocument session URL - " + writerResponseObject.getDocumentUrl());
console.log("\nDocument save URL - " + writerResponseObject.getSaveUrl());
console.log("\nDocument delete URL - " + writerResponseObject.getDocumentDeleteUrl());
console.log("\nDocument session delete URL - " + writerResponseObject.getSessionDeleteUrl());
} else if (writerResponseObject instanceof InvaildConfigurationException) {
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);
}
}
}
CreateMergeTemplate.execute();
Sample Response
Copied{
"document_url": "https://api.office-integrator.com/writer/officeapi/v1/document/d26aa7b8029bf4f8d34c7dd0013939234a6e15dac88646f02a69582375b8da130efffac249d086aae4667dcbcfb7ac1d/edit",
"document_id": "1349",
"save_url": "https://api.office-integrator.com/writer/officeapi/v1/documents/d26aa7b8029bf4f8d34c7dd0013939234a6e15dac88646f02a69582375b8da130efffac249d086aae4667dcbcfb7ac1d/save",
"session_id": "d26aa7b8029bf4f8d34c7dd0013939234a6e15dac88646f02a69582375b8da130efffac249d086aae4667dcbcfb7ac1d",
"session_delete_url": "https://api.office-integrator.com/writer/officeapi/v1/session/d26aa7b8029bf4f8d34c7dd0013939234a6e15dac88646f02a69582375b8da130efffac249d086aae4667dcbcfb7ac1d",
"document_delete_url": "https://api.office-integrator.com/writer/officeapi/v1/document/1349",
}