Sample code for 30+ languages & platforms
Go

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 Go Downloads

Go
    success := false

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http := chilkat.NewHttp()

    // 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"
    //           ]
    //         }
    //       ]
    //     }
    //   }
    // }

    json := chilkat.NewJsonObject()
    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.SetAuthToken("YOUR_API_KEY")

    resp := chilkat.NewHttpResponse()
    success = http.HttpJson("POST","https://staging-api.yousign.com/procedures",json,"application/json",resp)
    if success == false {
        fmt.Println(http.LastErrorText())
        http.DisposeHttp()
        json.DisposeJsonObject()
        resp.DisposeHttpResponse()
        return
    }

    sbResponseBody := chilkat.NewStringBuilder()
    resp.GetBodySb(sbResponseBody)
    jResp := chilkat.NewJsonObject()
    jResp.LoadSb(sbResponseBody)
    jResp.SetEmitCompact(false)

    fmt.Println("Response Body:")
    fmt.Println(*jResp.Emit())

    respStatusCode := resp.StatusCode()
    fmt.Println("Response Status Code = ", respStatusCode)
    if respStatusCode >= 400 {
        fmt.Println("Response Header:")
        fmt.Println(resp.Header())
        fmt.Println("Failed.")
        http.DisposeHttp()
        json.DisposeJsonObject()
        resp.DisposeHttpResponse()
        sbResponseBody.DisposeStringBuilder()
        jResp.DisposeJsonObject()
        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 *string = new(string)
    var message *string = new(string)
    var j int
    var count_j int
    var strVal *string = new(string)
    var user *string = new(string)
    var v_type *string = new(string)
first
last
    var email *string = new(string)
    var phone *string = new(string)
    var position int
    var comment *string = new(string)
    var operationLevel *string = new(string)
    var operationModeSmsConfig *string = new(string)
    var fileId *string = new(string)
    var fileName *string = new(string)
    var fileType *string = new(string)
    var fileContentType *string = new(string)
    var fileDescription *string = new(string)
    var fileCreatedAt *string = new(string)
    var fileUpdatedAt *string = new(string)
    var fileSha256 *string = new(string)
    var fileWorkspace *string = new(string)
    var fileCreator *string = new(string)
    var fileProtected bool
    var filePosition int
    var fileParent *string = new(string)
    var page int
    var position_str *string = new(string)
    var fieldName *string = new(string)
    var mention *string = new(string)
    var mention2 *string = new(string)
    var reason *string = new(string)
    var k int
    var count_k int
    var contentType *string = new(string)
    var sha256 *string = new(string)
    var v_protected bool

    id := jResp.StringOf("id")
    name := jResp.StringOf("name")
    description := jResp.StringOf("description")
    createdAt := jResp.StringOf("createdAt")
    updatedAt := jResp.StringOf("updatedAt")
    finishedAt := jResp.StringOf("finishedAt")
    expiresAt := jResp.StringOf("expiresAt")
    status := jResp.StringOf("status")
    creator := jResp.StringOf("creator")
    creatorFirstName := jResp.StringOf("creatorFirstName")
    creatorLastName := jResp.StringOf("creatorLastName")
    workspace := jResp.StringOf("workspace")
    template := jResp.BoolOf("template")
    ordered := jResp.BoolOf("ordered")
    parent := jResp.StringOf("parent")
    relatedFilesEnable := jResp.BoolOf("relatedFilesEnable")
    archive := jResp.BoolOf("archive")
    i := 0
    count_i := jResp.SizeOfArray("metadata")
    for i < count_i {
        jResp.SetI(i)
        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("config.email.\"procedure.started\"")
    for i < count_i {
        jResp.SetI(i)
        subject = jResp.StringOf("config.email.\"procedure.started\"[i].subject")
        message = jResp.StringOf("config.email.\"procedure.started\"[i].message")
        j = 0
        count_j = jResp.SizeOfArray("config.email.\"procedure.started\"[i].to")
        for j < count_j {
            jResp.SetJ(j)
            strVal = jResp.StringOf("config.email.\"procedure.started\"[i].to[j]")
            j = j + 1
        }

        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("config.email.\"member.started\"")
    for i < count_i {
        jResp.SetI(i)
        subject = jResp.StringOf("config.email.\"member.started\"[i].subject")
        message = jResp.StringOf("config.email.\"member.started\"[i].message")
        j = 0
        count_j = jResp.SizeOfArray("config.email.\"member.started\"[i].to")
        for j < count_j {
            jResp.SetJ(j)
            strVal = jResp.StringOf("config.email.\"member.started\"[i].to[j]")
            j = j + 1
        }

        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("members")
    for i < count_i {
        jResp.SetI(i)
        id = jResp.StringOf("members[i].id")
        user = jResp.StringOf("members[i].user")
        v_type = 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
        count_j = jResp.SizeOfArray("members[i].fileObjects")
        for j < count_j {
            jResp.SetJ(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")
            fileProtected = 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")
            position_str = 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
            count_k = jResp.SizeOfArray("members[i].fileObjects[j].file.metadata")
            for k < count_k {
                jResp.SetK(k)
                k = k + 1
            }

            j = j + 1
        }

        j = 0
        count_j = jResp.SizeOfArray("members[i].notificationsEmail")
        for j < count_j {
            jResp.SetJ(j)
            j = j + 1
        }

        j = 0
        count_j = jResp.SizeOfArray("members[i].operationCustomModes")
        for j < count_j {
            jResp.SetJ(j)
            strVal = jResp.StringOf("members[i].operationCustomModes[j]")
            j = j + 1
        }

        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("subscribers")
    for i < count_i {
        jResp.SetI(i)
        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("files")
    for i < count_i {
        jResp.SetI(i)
        id = jResp.StringOf("files[i].id")
        name = jResp.StringOf("files[i].name")
        v_type = 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")
        v_protected = jResp.BoolOf("files[i].protected")
        position = jResp.IntOf("files[i].position")
        parent = jResp.StringOf("files[i].parent")
        j = 0
        count_j = jResp.SizeOfArray("files[i].metadata")
        for j < count_j {
            jResp.SetJ(j)
            j = j + 1
        }

        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("archiveMetadata")
    for i < count_i {
        jResp.SetI(i)
        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("fields")
    for i < count_i {
        jResp.SetI(i)
        i = i + 1
    }

    i = 0
    count_i = jResp.SizeOfArray("permissions")
    for i < count_i {
        jResp.SetI(i)
        i = i + 1
    }


    http.DisposeHttp()
    json.DisposeJsonObject()
    resp.DisposeHttpResponse()
    sbResponseBody.DisposeStringBuilder()
    jResp.DisposeJsonObject()