I"m using the DocuSign API and have added a text tab for the recipient to enter their name. When they receive the email it appears as a required field - they can't continue unless they complete this field. However in my request I have not set this field to be mandatory/required.
Here's the data for the textTab:
"textTabs" :
[
{
"documentId" : "1",
"pageNumber" : "6",
"tabLabel" : "Name",
"xPosition" : "86",
"yPosition" : "273"
}
]
I haven't included the "required" parameter so not sure why this is appearing as a required field?
If you do not set "required" property for Text Tab then it is required in DocuSign. To make it optional, set "required":"false"
"textTabs" :
[
{
"documentId" : "12345",
"pageNumber" : "1",
"tabLabel" : "Name",
"xPosition" : "86",
"yPosition" : "273",
"required":"false"
}
]
}
Related
I'm trying to create and send an envelope using a DocuSign Template and In Person Signing with SMS Verification. I'm able to send an envelope using regular recipient signers, but having trouble with the Template/In Person Signers combination. I'm getting this response with my request:
{
"errorCode" : "IDENTITY_WORKFLOW_INVALID_INPUTOPTION_EMPTY_PHONE_NUMBER_LIST",
"message" : "The identity workflow intput option phone number list specified is empty."
}
Here's the JSON for my envelope that I'm sending:
{
"disableResponsiveDocument" : false,
"emailBlurb" : "",
"emailSubject" : "Please DocuSign Company Agreement",
"recipients" :
{
"carbonCopies" : []
},
"status" : "sent",
"templateId" : "xxxx-xxx-xxx-xxx-xxxxxxx",
"templateRoles" :
[
{
"hostEmail" : "host#acmetrading.com",
"hostName" : "John Simpson",
"identityVerification" :
{
"inputOptions" :
[
{
"name" : "phone_number_list",
"phoneNumberList" :
[
{
"countryCode" : "61",
"number" : "0412 345 678"
}
],
"valueType" : "PhoneNumberList"
}
],
"steps" : null,
"workflowId" : "xxxx-xxx-xxx-xxx-xxxxxxx"
},
"inPersonSignerName" : "Jenny Jones",
"roleName" : "Customer",
"routingOrder" : "1",
"tabs" : {}
}
]
}
I've followed the instructions for phone authentication and the same code works for regular signers so not sure what I'm doing wrong here?
Phone numbers cannot include spaces
0412 345 678 - is bad
0412345678 is good
(BTW, if this is your real number, you got an SMS from DocuSign - that was me trying it)
I want to make a app. -> When user a blocks user b user a immediately can't see user b's posts or comments
My structure data doesn't have Users node. Because I'm making app simply.
"Comment" : {
"-MptDdCq-j5JAuqgHkGt" : {
"-Mq8JFEZ5gdJhYIpQ4Vm" : {
"content" : "1",
"timestamp" : 1638686327979,
"uid" : "",
"uimg" : "",
"uname" : ""
}
}
"Posts" : {
"-Mqsc-nqUAOWNb9_kSvl" : {
"description" : "",
"picture" : "",
"postKey" : "-Mqsc-nqUAOWNb9_kSvl",
"timeStamp" : 1639480036785,
"title" : "",
"userId" : "",
"userPhoto" : ""
},
"-MqshZSrx0aO8OPMGC2M" : {
"description" : "",
"picture" : "",
"postKey" : "-MqshZSrx0aO8OPMGC2M",
"timeStamp" : 1639481493534,
"title" : "",
"userId" : "",
"userPhoto" : ""
}
Here is my structure. Can I make a blocking function without Users node?
I learned solution by How to block users on Firebase in a social media app? for iOS
But that solution needs Users node.. Is there no other way?
I updated BlockUser node.
Here is a new structure.
"BlockUser" : {
"k1kn0JF5idhrMzuw46GarEIBgPw2" : "OMBueDmbXdQhePnVaVH2teyOGzl2",
"kVAREcjmrHgLlvOldJetBCoiLx93" : "kVAREXdQhePnVaVH2JetBCoiLx93"}
left part is user id who blocks and right part is user id who have been blocked.
Then can I make block user function? Using firebase rules.
My firebase rule
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"}
I'm trying to use AQL to get a list of all build not promoted to "release".
Our binaries pass through status integration-> aat -> release
I want to get a list of those with promotion status integration and aat but not release.
One example of a build has statuses:
"statuses" : [ {
"status" : "integration",
"timestamp" : "2016-04-20T08:36:42.009+0000",
"user" : "user",
"ciUser" : "changes",
"timestampDate" : 1461141402009
}, {
"status" : "aat",
"repository" : "repo-aat",
"timestamp" : "2016-04-20T08:56:11.843+0000",
"user" : "user",
"ciUser" : "changes",
"timestampDate" : 1461142571843
}, {
"status" : "aat",
"repository" : "repo-aat",
"timestamp" : "2016-04-20T08:58:55.417+0000",
"user" : "user",
"ciUser" : "changes",
"timestampDate" : 1461142735417
}, {
"status" : "aat",
"repository" : "repo-aat",
"timestamp" : "2016-04-20T09:20:32.619+0000",
"user" : "user",
"ciUser" : "changes",
"timestampDate" : 1461144032619
}, {
"status" : "release",
"repository" : "repo-release",
"timestamp" : "2016-04-20T09:30:12.143+0000",
"user" : "user",
"ciUser" : "changes",
"timestampDate" : 1461144612143
}, {
"status" : "release",
"repository" : "repo-release",
"timestamp" : "2016-04-20T09:40:50.595+0000",
"user" : "admin",
"ciUser" : "changes",
"timestampDate" : 1461145250595
} ],
This build is matched regardless if we set:
{"promotion.status": {"$nmatch":"aat"}}
to
{"promotion.status": {"$nmatch":"release"}}
{"promotion.status": {"$nmatch":"integration"}}
with the request:
builds.find({
"$and" : [
{"name": {"$match": "test"}},
{"created": {"$lt": "2016-12-01"}},
{"promotion.status": {"$nmatch":"release"}}
]
}).include("promotion.status").limit(10)
we get this response:
{
"results" : [ {
"build.created" : "2016-04-20T10:12:46.905Z",
"build.created_by" : "test",
"build.modified" : "2016-04-20T11:45:12.309Z",
"build.modified_by" : "admin",
"build.name" : "user",
"build.number" : "2551",
"build.promotions" : [ {
"build.promotion.status" : "aat"
}, {
"build.promotion.status" : "integration"
} ],
"build.url" : "URL"
} ],
"range" : {
"start_pos" : 0,
"end_pos" : 1,
"total" : 1,
"limit" : 10
}
If you do not need to use wildcards with $nmatch, you can use $ne instead, for example:
builds.find({
"$and" : [
{"name": {"$match": "test"}},
{"created": {"$lt": "2016-12-01"}},
{"promotion.status": {"$ne":"release"}}
]
}).include("promotion.status").limit(10)
With $nmatch, the following will also work:
builds.find({
"$and" : [
{"name": {"$match": "test"}},
{"created": {"$lt": "2016-12-01"}},
{"promotion.status": {"$nmatch":"releas*"}}
]
}).include("promotion.status").limit(10)
What you are trying to do, is to ask Artifactory for the "most recent" status of a build, and filter based on that. However this is not how Artifactory treats your AQL query.
Please note that your build does not have a property "build.promotion.status". Instead, your build has a property of type array with the name "build.promotions". Within this array, any number of promotion history items may be set for your build, including the property "build.promotion.status".
Now suppose your AQL query is going to select builds that have "build.promotion.status" : "aat", what you are really asking Artifactory is this: please return any build for which any of the elements of the build.promotions array has a matching property "build.promotion.status" : "aat".
So eventhough the build #2551 in your example has been promoted from "aat" to "released", you are asking AQL if it did - at any point in time - have promotion status "aat", which it did.
To add to the confusion, when you include("promotion.status"), you are going to see a filtered subset of the promotion history items.
If you are trying to work around this by asking for the reverse question: which builds do not have any build status history item with "build.promotion.status" = "released", even if that would be possible with AQL, it would not tell you what the current status is. Nor would it work correctly if you build is ever "Rolled-back".
I think JFROG should actually introduce a "build.promotion.status" field, which does what people reasonably expect: to give you the current status to display and to query on. Until that time, the only solution I can think of is to fetch all the build promotion items and then do the magic in a higher order language.
I am trying to send a document for signing via the DocuSign REST API. I'm using Sign Here tabs with an Anchor text string.
The JSON Object request:
"emailSubject" : "This is email subject",
"emailBlurb" : "This is email body",
"recipients" : {
"signers" : [ {
"routingOrder" : "1",
"name" : "Recipeient Name",
"email" : "Recipeient Email Address",
"recipientId" : "1",
"tabs" : {
"signHereTabs" : [ {
"anchorString" : "By:",
"anchorXOffset" : "1",
"anchorYOffset" : "1",
"anchorIgnoreIfNotPresent" : "true",
"anchorUnits" : "inches"
} ]
}
} ]
},
"documents" : [ {
"name" : "document.pdf",
"documentId" : "1",
"bytes" : "Byte Representaton of document"
} ],
"status" : "sent"
}
This is working perfectly fine with a minor glitch: The document has two matching strings "By:", and the Sign Here tab is placed on both of them.
Is there a way I can restrict this to only add the Sign Here tab to the first instance of the string "By:" in the document?
Unfortunately, no. The anchor strings on your document must be unique, otherwise that tag will be placed anywhere that string is found. See the Rules for working with anchors section here.
Is it possible to switch a signer (with tabs), on a shared document, once an envelope's In Process?
Our process goes like this:
A single shared PDF document is generated (not using a DocuSign template) with signing placeholders for all signers.
We create and send an envelope for the document PDF.
One or more customers sign the document (using an embedded signing page).
The last signer (our employee) signs the document (also using an embedded signing page).
The employee signer could be one of several employees, but, whomever it is, they'll always sign the same locations on the document. We'd like to be able to delay the choice of which employee signs the document until the end of the process, instead having to specify them at envelope creation.
Once the envelope is In Process, I'm able to add and delete employee recipients, but I can't find a way to include their tabs too. I include the tabs in the request, but the added employee is always in a draft-like 'created' state without tabs. The embedded view still asks the viewer to manually place their tabs. I need the tabs to be already placed and locked in position on the document so the employee can sign.
We're using the REST API and this needs to be an automated solution (no manual envelope corrections). Is there some way to achieve this or something similar?
Here's my add-recipient request
POST https://demo.docusign.net/restapi/v2/accounts/<account>/envelopes/<envelope-id>/recipients?resend_envelope=true
{
"signers" : [{
"recipientId" : 4,
"email" : "john#example.com",
"name" : "John Citizen",
"tabs" : {
"initialHereTabs" : [{
"documentId" : "1",
"recipientId" : 4,
"name" : "InitialHere_3",
"pageNumber" : 1,
"xPosition" : 282,
"yPosition" : 454,
"tabName" : "InitialHere_3"
}
],
"signHereTabs" : [{
"documentId" : "1",
"recipientId" : 4,
"name" : "SignHere_3",
"pageNumber" : 1,
"xPosition" : 81,
"yPosition" : 447,
"tabName" : "SignHere_3"
}
],
},
"clientUserId" : "LTEST_Resident4",
"routingOrder" : 2,
}
]
}
(I've also tried the same request with PUT instead of POST. The result is the same)
It sounds like your workflow needs to do the following:
Create Envelope with a "Blocker Recipient"
Add Additional Recipient when they're identified
Add Tags to new Recipient
Delete "Blocker Recipient" when you want the document sent on
I'll assume you have 1. taken care of and I'll go through quick examples of 2-4.
2. Create Additional Recipient
POST: https://demo.docusign.net/restapi/v2/accounts/{accountId}/envelopes/{envelopeId}/recipients
{
"signers": [
{
"email": "email#domain.com",
"name": "Andrew Wilson",
"recipientId": "3",
"defaultRecipient": "true",
"routingOrder": "3"
}
]
}
3. Add Tags to Recipient
POST: https://demo.docusign.net/restapi/v2/accounts/{accountId}/envelopes/{envelopeId}/recipients/{recipientId}/tabs
{
"signHereTabs": [
{
"xPosition": "100",
"yPosition": "200",
"documentId": "1",
"pageNumber": "1"
},
{
"xPosition": "200",
"yPosition": "200",
"documentId": "1",
"pageNumber": "1"
}
]
}
4. Delete Blocker Recipient
DELETE: https://demo.docusign.net/restapi/v2/accounts/{accountId}/envelopes/{envelopeId}/recipients/{recipientId}
It sounds like you are trying to Modify or Correct and Resend Recipient Information.
https://www.docusign.com/sites/default/files/REST_API_Guide_v2.pdf Page 137
Modify or Correct and Resend Recipient Information
This lets you modify recipients in a draft envelope or correct recipient information for an in process envelope.For draft envelopes, you can edit: email, userName, routingOrder, faxNumber, deliveryMethod,accessCode and requireIdLookup. Once an envelope has been sent, you can only edit: email, userName, signerName, routingOrder,faxNumber, and deliveryMethod.You can also select to resend an envelope by using the resend_envelope option.
Example Request:
PUT https://{server}/restapi/{apiVersion}/accounts/{accountId}/envelopes/{envelopeId}/recipients?resend_envelope=true
X-DocuSign-Authentication:<DocuSignCredentials><Username>{name}</Username><Password>{password}</Password><IntegratorKey>{integrator_key}</IntegratorKey></DocuSignCredentials>
Accept: application/json
Content-Type: application/json
{
"signers": [
{
"email": "email#domain.com",
"name": "John Smith",
"recipientId": "1"
}
]
}
Response
The response returns if the correction was successful.The following example shows the response json body.
Example Response:
{
"recipientUpdateResults": [
{
"errorDetails": {
"errorCode": "SUCCESS",
"message": ""
},
"recipientId": "1"
}
]
}