Dart
Dart
Yousign - Setup email notifications
See more Yousign Examples
Demonstrates how to setup email notifications based on events. An event is triggered when a user (or our API) make an action or when a status has changed.Chilkat Dart Downloads
import 'package:chilkat/chilkat.dart';
void main() {
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
final http = CkHttp();
// Implements the following CURL command:
// curl --location --request POST 'https://staging-api.yousign.com/procedures' \
// --header 'Authorization: Bearer YOUR_API_KEY' \
// --header 'Content-Type: application/json' \
// --data-raw '{
// "name": "My first procedure with emails",
// "description": "Powerful! Here is the description of my first procedure with emails",
// "members": [
// {
// "firstname": "John",
// "lastname": "Doe",
// "email": "john.doe@yousign.fr",
// "phone": "+33612345678",
// "fileObjects": [
// {
// "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "page": 2,
// "position": "230,499,464,589",
// "mention": "Read and approved",
// "mention2": "Signed by John Doe"
// }
// ]
// }
// ],
// "config": {
// "email": {
// "member.started": [
// {
// "subject": "Hey! You are invited to sign!",
// "message": "Hello <tag data-tag-type=\"string\" data-tag-name=\"recipient.firstname\"></tag> <tag data-tag-type=\"string\" data-tag-name=\"recipient.lastname\"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type=\"button\" data-tag-name=\"url\" data-tag-title=\"Access to documents\">Access to documents</tag>",
// "to": ["@member"]
// }
// ],
// "procedure.started": [
// {
// "subject": "John, created a procedure your API have.",
// "message": "The content of this email is totally awesome.",
// "to": ["@creator", "@members", "billing@yousign.fr"]
// }
// ]
// }
// }
// }'
// Use the following online tool to generate HTTP code from a CURL command
// Convert a cURL Command to HTTP Source Code
// Use this online tool to generate code from sample JSON:
// Generate Code to Create JSON
// The following JSON is sent in the request body.
// {
// "name": "My first procedure with emails",
// "description": "Powerful! Here is the description of my first procedure with emails",
// "members": [
// {
// "firstname": "John",
// "lastname": "Doe",
// "email": "john.doe@yousign.fr",
// "phone": "+33612345678",
// "fileObjects": [
// {
// "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "page": 2,
// "position": "230,499,464,589",
// "mention": "Read and approved",
// "mention2": "Signed by John Doe"
// }
// ]
// }
// ],
// "config": {
// "email": {
// "member.started": [
// {
// "subject": "Hey! You are invited to sign!",
// "message": "Hello <tag data-tag-type=",
// " data-tag-name=": <tag,
// "button": [
// "@member"
// ]
// }
// ],
// "procedure.started": [
// {
// "subject": "John, created a procedure your API have.",
// "message": "The content of this email is totally awesome.",
// "to": [
// "@creator",
// "@members",
// "billing@yousign.fr"
// ]
// }
// ]
// }
// }
// }
final json = CkJsonObject();
json.updateString('name', 'My first procedure with emails');
json.updateString('description', 'Powerful! Here is the description of my first procedure with emails');
json.updateString('members[0].firstname', 'John');
json.updateString('members[0].lastname', 'Doe');
json.updateString('members[0].email', 'john.doe@yousign.fr');
json.updateString('members[0].phone', '+33612345678');
// Use the actual file ID here...
json.updateString('members[0].fileObjects[0].file', '/files/23686fbe-3ae1-4de9-9e01-58bbf29b2b18');
json.updateInt('members[0].fileObjects[0].page', 2);
json.updateString('members[0].fileObjects[0].position', '230,499,464,589');
json.updateString('members[0].fileObjects[0].mention', 'Read and approved');
json.updateString('members[0].fileObjects[0].mention2', 'Signed by John Doe');
json.updateString('config.email."member.started"[0].subject', 'Hey! You are invited to sign!');
json.updateString('config.email."member.started"[0].message', 'Hello <tag data-tag-type="string" data-tag-name="recipient.firstname"></tag> <tag data-tag-type="string" data-tag-name="recipient.lastname"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type="button" data-tag-name="url" data-tag-title="Access to documents">Access to documents</tag>');
json.updateString('config.email."member.started"[0].to[0]', '@member');
json.updateString('config.email."procedure.started"[0].subject', 'John, created a procedure your API have.');
json.updateString('config.email."procedure.started"[0].message', 'The content of this email is totally awesome.');
json.updateString('config.email."procedure.started"[0].to[0]', '@creator');
json.updateString('config.email."procedure.started"[0].to[1]', '@members');
json.updateString('config.email."procedure.started"[0].to[2]', 'billing@yousign.fr');
// Adds the "Authorization: Bearer YOUR_API_KEY" header.
http.authToken = 'YOUR_API_KEY';
final resp = CkHttpResponse();
try {
http.httpJson('POST', 'https://staging-api.yousign.com/procedures', json, 'application/json', resp);
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
final sbResponseBody = CkStringBuilder();
resp.getBodySb(sbResponseBody);
final jResp = CkJsonObject();
jResp.loadSb(sbResponseBody);
jResp.emitCompact = false;
print('Response Body:');
print(jResp.emit());
final respStatusCode = resp.statusCode;
print('Response Status Code = $respStatusCode');
if (respStatusCode >= 400) {
print('Response Header:');
print(resp.header);
print('Failed.');
return;
}
// Sample JSON response:
// (Sample code for parsing the JSON response is shown below)
// {
// "id": "/procedures/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "name": "My first procedure with emails",
// "description": "Powerful! Here is the description of my first procedure with emails",
// "createdAt": "2018-12-05T06:53:34+01:00",
// "updatedAt": "2018-12-05T06:53:34+01:00",
// "finishedAt": null,
// "expiresAt": null,
// "status": "active",
// "creator": null,
// "creatorFirstName": null,
// "creatorLastName": null,
// "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "template": false,
// "ordered": false,
// "parent": null,
// "metadata": [
// ],
// "config": {
// "email": {
// "procedure.started": [
// {
// "subject": "John, created a procedure your API have.",
// "message": "The content of this email is totally awesome.",
// "to": [
// "@creator",
// "@members",
// "billing@yousign.fr"
// ]
// }
// ],
// "member.started": [
// {
// "subject": "Hey! You are invited to sign!",
// "message": "Hello <tag data-tag-type=\"string\" data-tag-name=\"recipient.firstname\"></tag> <tag data-tag-type=\"string\" data-tag-name=\"recipient.lastname\"></tag>, <br><br> You have ben invited to sign a document, please click on the following button to read it: <tag data-tag-type=\"button\" data-tag-name=\"url\" data-tag-title=\"Access to documents\">Access to documents</tag>",
// "to": [
// "@member"
// ]
// }
// ]
// }
// },
// "members": [
// {
// "id": "/members/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "user": null,
// "type": "signer",
// "firstname": "John",
// "lastname": "Doe",
// "email": "john.doe@yousign.fr",
// "phone": "+33612345678",
// "position": 1,
// "createdAt": "2018-12-05T06:53:34+01:00",
// "updatedAt": "2018-12-05T06:53:34+01:00",
// "finishedAt": null,
// "status": "pending",
// "fileObjects": [
// {
// "id": "/file_objects/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "file": {
// "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "name": "The best name for my file.pdf",
// "type": "signable",
// "contentType": "application/pdf",
// "description": null,
// "createdAt": "2018-12-05T06:52:54+01:00",
// "updatedAt": "2018-12-05T06:53:34+01:00",
// "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
// "metadata": [
// ],
// "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "creator": null,
// "protected": false,
// "position": 0,
// "parent": null
// },
// "page": 2,
// "position": "230,499,464,589",
// "fieldName": null,
// "mention": "Read and approved",
// "mention2": "Signed by John Doe",
// "createdAt": "2018-12-05T06:53:34+01:00",
// "updatedAt": "2018-12-05T06:53:34+01:00",
// "parent": null,
// "reason": "Signed by Yousign"
// }
// ],
// "comment": null,
// "notificationsEmail": [
// ],
// "operationLevel": "custom",
// "operationCustomModes": [
// "sms"
// ],
// "operationModeSmsConfig": null,
// "parent": null
// }
// ],
// "subscribers": [
// ],
// "files": [
// {
// "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "name": "The best name for my file.pdf",
// "type": "signable",
// "contentType": "application/pdf",
// "description": null,
// "createdAt": "2018-12-05T06:52:54+01:00",
// "updatedAt": "2018-12-05T06:53:34+01:00",
// "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
// "metadata": [
// ],
// "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
// "creator": null,
// "protected": false,
// "position": 0,
// "parent": null
// }
// ],
// "relatedFilesEnable": false,
// "archive": false,
// "archiveMetadata": [
// ],
// "fields": [
// ],
// "permissions": [
// ]
// }
// Sample code for parsing the JSON response...
// Use the following online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
var subject = '';
var message = '';
var j = 0;
var countJ = 0;
var strVal = '';
var user = '';
var vType = '';
var firstname = '';
var lastname = '';
var email = '';
var phone = '';
var position = 0;
var comment = '';
var operationLevel = '';
var operationModeSmsConfig = '';
var fileId = '';
var fileName = '';
var fileType = '';
var fileContentType = '';
var fileDescription = '';
var fileCreatedAt = '';
var fileUpdatedAt = '';
var fileSha256 = '';
var fileWorkspace = '';
var fileCreator = '';
var filePosition = 0;
var fileParent = '';
var page = 0;
var positionStr = '';
var fieldName = '';
var mention = '';
var mention2 = '';
var reason = '';
var k = 0;
var countK = 0;
var contentType = '';
var sha256 = '';
var id = jResp.stringOf('id');
var name = jResp.stringOf('name');
var description = jResp.stringOf('description');
var createdAt = jResp.stringOf('createdAt');
var updatedAt = jResp.stringOf('updatedAt');
var finishedAt = jResp.stringOf('finishedAt');
final expiresAt = jResp.stringOf('expiresAt');
var status = jResp.stringOf('status');
var creator = jResp.stringOf('creator');
final creatorFirstName = jResp.stringOf('creatorFirstName');
final creatorLastName = jResp.stringOf('creatorLastName');
var workspace = jResp.stringOf('workspace');
var parent = jResp.stringOf('parent');
var i = 0;
var countI = jResp.sizeOfArray('metadata');
while (i < countI) {
jResp.i = i;
i++;
}
i = 0;
countI = jResp.sizeOfArray('config.email."procedure.started"');
while (i < countI) {
jResp.i = i;
subject = jResp.stringOf('config.email."procedure.started"[i].subject');
message = jResp.stringOf('config.email."procedure.started"[i].message');
j = 0;
countJ = jResp.sizeOfArray('config.email."procedure.started"[i].to');
while (j < countJ) {
jResp.j = j;
strVal = jResp.stringOf('config.email."procedure.started"[i].to[j]');
j++;
}
i++;
}
i = 0;
countI = jResp.sizeOfArray('config.email."member.started"');
while (i < countI) {
jResp.i = i;
subject = jResp.stringOf('config.email."member.started"[i].subject');
message = jResp.stringOf('config.email."member.started"[i].message');
j = 0;
countJ = jResp.sizeOfArray('config.email."member.started"[i].to');
while (j < countJ) {
jResp.j = j;
strVal = jResp.stringOf('config.email."member.started"[i].to[j]');
j++;
}
i++;
}
i = 0;
countI = jResp.sizeOfArray('members');
while (i < countI) {
jResp.i = i;
id = jResp.stringOf('members[i].id');
user = jResp.stringOf('members[i].user');
vType = jResp.stringOf('members[i].type');
firstname = jResp.stringOf('members[i].firstname');
lastname = jResp.stringOf('members[i].lastname');
email = jResp.stringOf('members[i].email');
phone = jResp.stringOf('members[i].phone');
position = jResp.intOf('members[i].position');
createdAt = jResp.stringOf('members[i].createdAt');
updatedAt = jResp.stringOf('members[i].updatedAt');
finishedAt = jResp.stringOf('members[i].finishedAt');
status = jResp.stringOf('members[i].status');
comment = jResp.stringOf('members[i].comment');
operationLevel = jResp.stringOf('members[i].operationLevel');
operationModeSmsConfig = jResp.stringOf('members[i].operationModeSmsConfig');
parent = jResp.stringOf('members[i].parent');
j = 0;
countJ = jResp.sizeOfArray('members[i].fileObjects');
while (j < countJ) {
jResp.j = j;
id = jResp.stringOf('members[i].fileObjects[j].id');
fileId = jResp.stringOf('members[i].fileObjects[j].file.id');
fileName = jResp.stringOf('members[i].fileObjects[j].file.name');
fileType = jResp.stringOf('members[i].fileObjects[j].file.type');
fileContentType = jResp.stringOf('members[i].fileObjects[j].file.contentType');
fileDescription = jResp.stringOf('members[i].fileObjects[j].file.description');
fileCreatedAt = jResp.stringOf('members[i].fileObjects[j].file.createdAt');
fileUpdatedAt = jResp.stringOf('members[i].fileObjects[j].file.updatedAt');
fileSha256 = jResp.stringOf('members[i].fileObjects[j].file.sha256');
fileWorkspace = jResp.stringOf('members[i].fileObjects[j].file.workspace');
fileCreator = jResp.stringOf('members[i].fileObjects[j].file.creator');
jResp.boolOf('members[i].fileObjects[j].file.protected');
filePosition = jResp.intOf('members[i].fileObjects[j].file.position');
fileParent = jResp.stringOf('members[i].fileObjects[j].file.parent');
page = jResp.intOf('members[i].fileObjects[j].page');
positionStr = jResp.stringOf('members[i].fileObjects[j].position');
fieldName = jResp.stringOf('members[i].fileObjects[j].fieldName');
mention = jResp.stringOf('members[i].fileObjects[j].mention');
mention2 = jResp.stringOf('members[i].fileObjects[j].mention2');
createdAt = jResp.stringOf('members[i].fileObjects[j].createdAt');
updatedAt = jResp.stringOf('members[i].fileObjects[j].updatedAt');
parent = jResp.stringOf('members[i].fileObjects[j].parent');
reason = jResp.stringOf('members[i].fileObjects[j].reason');
k = 0;
countK = jResp.sizeOfArray('members[i].fileObjects[j].file.metadata');
while (k < countK) {
jResp.k = k;
k++;
}
j++;
}
j = 0;
countJ = jResp.sizeOfArray('members[i].notificationsEmail');
while (j < countJ) {
jResp.j = j;
j++;
}
j = 0;
countJ = jResp.sizeOfArray('members[i].operationCustomModes');
while (j < countJ) {
jResp.j = j;
strVal = jResp.stringOf('members[i].operationCustomModes[j]');
j++;
}
i++;
}
i = 0;
countI = jResp.sizeOfArray('subscribers');
while (i < countI) {
jResp.i = i;
i++;
}
i = 0;
countI = jResp.sizeOfArray('files');
while (i < countI) {
jResp.i = i;
id = jResp.stringOf('files[i].id');
name = jResp.stringOf('files[i].name');
vType = jResp.stringOf('files[i].type');
contentType = jResp.stringOf('files[i].contentType');
description = jResp.stringOf('files[i].description');
createdAt = jResp.stringOf('files[i].createdAt');
updatedAt = jResp.stringOf('files[i].updatedAt');
sha256 = jResp.stringOf('files[i].sha256');
workspace = jResp.stringOf('files[i].workspace');
creator = jResp.stringOf('files[i].creator');
jResp.boolOf('files[i].protected');
position = jResp.intOf('files[i].position');
parent = jResp.stringOf('files[i].parent');
j = 0;
countJ = jResp.sizeOfArray('files[i].metadata');
while (j < countJ) {
jResp.j = j;
j++;
}
i++;
}
i = 0;
countI = jResp.sizeOfArray('archiveMetadata');
while (i < countI) {
jResp.i = i;
i++;
}
i = 0;
countI = jResp.sizeOfArray('fields');
while (i < countI) {
jResp.i = i;
i++;
}
i = 0;
countI = jResp.sizeOfArray('permissions');
while (i < countI) {
jResp.i = i;
i++;
}
}