DocuSign: How to send a radio group selection in recipient tabs? - docusignapi

I have radio groups set up in my template and I want to pre-fill these tags using the REST API.
Please don't ask for code and/or request/response dumps. I don't have any code to show and I am asking for this because it is not documented. I want to know what sort of JSON I need to be producing so this is really not about my code or programming language.
(Anything below this line is half rant and half describes my failed attempts at finding the documentation for this feature. It might still be useful if somebody else has the exact same problem with me.)
Here is the documentation for the API I am trying to use. There is an example for textTabs but radioGroupTabs is not even mentioned here. It is mentioned here but I can't make much out of the "null", obviously I should be sending something other than null.
Moving on, the only useful information I can find on the radio groups is about how to create them in a template, it's here. This page also doesn't mention anything about pre-filling the values for a recipient. But it's linked from here (see tabs) anyway. There is a bit of information here:
value: if an X, this is the selected radio button. Only one radio button in a group can be selected.
And then just before this it says:
selected: Sets if this is radio button is selected. Use true/false to show the value is selected or not. Only one radio button can be true.
So we learn there are only just two ways to specify a radio widget selected. Of course this applies when you are creating the widget.
Nevertheless I tried to make requests assuming this would also work for pre-filling I got this helpful error message:
{
"errorCode": "UNSPECIFIED_ERROR",
"message": "Object reference not set to an instance of an object."
}
When I search the support forum I've found this, it's not exactly the same with my problem, I'd be happy to be able to set the wrong radio widget selected (as opposed to getting the UNSPECIFIED_ERROR) but this post is about the XML API.
I started my frantical search for the new topic button, it is so well placed you can usually find it in less than 10 minutes. I remember I used to go to my profile and then click something there... Then I did what every rational developer would do in the first place and went back to the post URL and read the breadcrumbs; Dev Zone section was renamed as Dev Zone (MOVED TO STACK OVERFLOW - Use tag DocuSignAPI). So here I am.
Could anyone please tell where this feature is documented or maybe provide a sample JSON please?

You've found the correct page for how to create radio buttons, not sure why you're having trouble using that resource. You've mentioned that's the code to CREATE the radio button tabs and not send them. That's not correct - the request body to send them is the same exact body only that the status property of the request changes from created to sent.
I just tested sending two radio buttons with the first button selected by default and it worked fine for me. Here is the full request body I used for my document signature request, this should work for you as well:
{
"emailBlurb": "Testing DocuSign radio buttons",
"emailSubject": "Custom PHP script",
"status": "sent",
"documents": [
{
"documentId": "1",
"name": "test.pdf"
}
],
"recipients": {
"signers": [
{
"email": "john.doe#docusign.com",
"name": "John Doe",
"recipientId": "1",
"tabs": {
"signHereTabs": [
{
"xPosition": "100",
"yPosition": "200",
"documentId": "1",
"pageNumber": "1"
}
],
"radioGroupTabs": [
{
"documentId": "1",
"groupName": "RadioGroup1",
"radios": [
{
"pageNumber": "1",
"selected": "true",
"value": "X",
"xPosition": "300",
"yPosition": "75"
},
{
"pageNumber": "1",
"selected": "false",
"xPosition": "350",
"yPosition": "75"
}
]
}
]
}
}
]
}
}
To add to this, the above example uses absolute positioning to position the radio buttons on the document. The other way of specifying tab locations in DocuSign is by using what's called "Anchor Tagging". With anchor tagging, instead of positioning based on coordinate systems, you can you can position your tabs with respect to document content. Please see the following two links to learn how to use anchor tagging, it's quite easy to switch to this method:
Anchor Tagging Introduction - Look at the "Tab Positioning" section
Related Stack Overflow Link

Related

Dialogflow buttons in Slack generating separate session from typed entries

My Dialogflow sessions seem to change by whether I manually type in text or click on a button. My backend function generates the buttons in a payload for slack that is displayed in Dialogflow.
The buttons show properly and work as expected except when I need something from the output contexts and existing session. The problem seems to be that when I am manually entering text in Slack, it is one session and when I click on a button, it is another session. I don't know why that would be the case, but I obviously want them to be treated as one session.
I created a simple intent and webhook call which simply returns the current session ID when called. I created a "what session" intent. I created a "what session" button with a value of "what session". When I type "what session" (or "which session"), the session comes back as a certain session with the buttons as expected. When I click on the "what session" button, I get the same result EXCEPT it is a DIFFERENT session. Every time I click on the button, I am in one session and when I manually type in "what session" again, I get the original session.
In the history, you can see two different conversation streams.
So, how do I have the buttons, when clicked, keep the user in the same session?
Here is the format for the buttons (pretty straight forward). The backend function also populates the "text" field with the session value, but doesn't change anything else.
{
"slack": {
"text": "",
"attachments": [
{
"blocks": [
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "test"
},
"value": "test"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "what session"
},
"value": "what session"
}
]
}
]
}
]
}
}
Here is what the interaction looks like on slack (on mobile):
Here is the history in Dialogflow showing the two separate streams:
Google support helped me on this - thank you!
The solution was to add the Request URL into the Interactivity & Shortcuts section.
Now, imagine my embarrassment when I reread the last step in the instructions to do exactly this:
"To use rich messages, copy the ‘Events Request URL' value below and paste it into the 'Request URL' field from the Interactive Messages section of your Slack app settings."
HOWEVER, in my defense, I wondered how I had missed this twice (since I set up everything again for testing to see what I was missing). I know I would have done this. The weird thing was that when I completed the step in Slack, I realized that my changes were not being saved on that page. I clicked on the "Save Changes" and assumed it had saved, but the button had not turned green so the changes had not been saved. So, my advice to anyone experiencing the issue above is to ensure that all their changes were saved in Slack.

Adaptive Cards - Get PostBack for actions

I have to use adaptive cards in certain situation. When I use these cards, I need to have some buttons that can perform different actions when clicked. Previously, I have been using Hero Cards to return data and create the buttons. I have found that postBack (for hero cards) is the way to accept the button output most effectively for me. Unfortunately, adaptive cards doesn’t seem to have postBack. Instead, I need to use Action.Submit. However, when I do this, I end up with the text from the button showing as part of the conversation. I don’t want that and need it to be consistent with postBack. I tried to use the method from this comment https://github.com/Microsoft/AdaptiveCards/issues/558 (the guy has the exact same ask as me) but, it doesn’t seem to work anymore (from 2017). Any suggestions? I'm using SDK V4 and the basic bot NodeJS build found in the Azure portal.
Thanks for the help in advance
Adding the code for more detail:
var card = {
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{"type": "TextBlock",
"text": answer},
table],
"actions" : [{
"type": "Action.Submit",
"title": wrap(promptQuestions[0]),
"data": promptQuestions[0]
},
{
"type": "Action.Submit",
"title": wrap(promptQuestions[1]),
"data": promptQuestions[1]
}]
}
console.log(card)
return CardFactory.adaptiveCard(card);
Submit action data is supposed to be an object and not a string. See my blog post for more information: https://blog.botframework.com/2019/07/02/using-adaptive-cards-with-the-microsoft-bot-framework/

How to Specify Text Box to Sign on PDF via API/SDK?

I have a white-text on a white-background text box on a PDF. The text in that text box is set to "<signature>". This is the area on the PDF that I want a signer's signature to go.
Please note, this is not a TEXT FIELD, but is a TEXT BOX. They're different things in Adobe PDF. For one thing, text boxes only have text and don't have actual field names like fields do.
I don't want to specific X and Y coordinates of this textbox. I don't want to use a DocuSign template. I do want to use our pre-defined text box. I do want to define the signature area entirely using the API/SDK, associating it to my text box.
This is what I've tried:
I'm using the eSign model from the SDK. I instantiated a new DocuSign.eSign.Model.SignHere object. Do I need to associate that sign here tab somehow to my text box on the PDF? I've tried setting each of the properties seperately (like below), but did not get the result I expected. Again, I want to associate a DocuSign.eSign.Model.SignHere tab with a pre-defined textbox on my PDF called.
var SignHereTab = new DocuSign.eSign.Model.SignHere();
SignHereTab.TabId = "<signature>";
SignHereTab.Name = "<signature>";
SignHereTab.AnchorCaseSensitive = "<signature>";
SignHereTab.CustomTabId = "<signature>";
Or, am I going about this all wrong? If I can't do this with a TEXT BOX, can I do it with TEXT FIELD? If it's better to use a FIELD, what code do I use to associate a sign here tab with a field? Again, I'd rather not use X/Y or Templates.
Do I understand correctly that this is what you want to accomplish?
Use the API to create an Envelope, with the PDF you specify as the document
Have a SignHere tab automatically placed in the document based on where the string <signature> appears in the PDF
If that's the case, then you'll want to use what DocuSign refers to as anchor text -- this is a string that exists in the document as normal text (i.e.,, not within a text box, but rather, as normal text on the page). The "Get the Document to be Signed" section of this page provides a description of how to use anchor text (and even provides a sample doc that contains anchor text). An excerpt from that page:
Open Mutual_NDA.pdf in a PDF viewer. Search for the strings “signer1name”, “signer1sig”, and “signer1date”. You’ll notice that the search matches but that the text is not visible. These strings are regular text in the document. Their text color has been set to white, so they can’t be see in the document. But DocuSign can find them, and use them as anchor text to place the tabs (the signature, name, and date fields).
So, simply add the text string <signature> as white text (on white background) within your PDF. Then when specifying the SignHere tab in the "Create Envelope" API request, set the following properties for that tab:
"recipients": {
"signers": [
{
"roleName": "Signer1",
"recipientId": "1",
"name": "John Doe",
"email": "johnDoe#test.com",
"tabs": {
"signHereTabs": [
{
"anchorString": "<signature>",
"anchorIgnoreIfNotPresent": true,
"documentId": "1",
"optional": false,
"tabLabel": "Signature"
}
]
}
}
]
}
When used within a "Create Envelope" request (POST https://{{env}}.docusign.net/restapi//v2/accounts/{{accountId}}/envelopes), the JSON above will result in a (required) SignHere tab being automatically placed for recipient John Doe anywhere that the string <signature> appears in the document.
(I'm not very familiar with the node SDK, but I imagine that knowing what properties need to be set will get you going in the right direction.)
UPDATE #1
If it's important that the signature appear inside a textbox on the PDF, you can still accomplish this using anchor text. For example, simply place the anchor text string (ex: ) in the PDF just below the textbox where you want the signature tag to appear, the specify the anchorYOffset property and the anchorUnits property to tell DocuSign where you want the signature tab to appear relative to the position of the anchor string. In that example, here's the structure of the signature tab in the API request:
"signHereTabs": [
{
"anchorString": "<signature>",
"anchorXOffset": "0",
"anchorYOffset": "-10",
"anchorUnits": "pixels",
"anchorIgnoreIfNotPresent": true,
"documentId": "1",
"optional": false,
"tabLabel": "Signature"
}
]
Finally (for your reference), here's the full list of the tab properties related to anchor strings:
I'm not sure you'll be able to do this using a text box instead of text field. See this page on the REST API guide:
Document Parameters
Only the FieldTypes and FieldProperties listed below are extrapolated from the forms:
FieldTypes that are extrapolated are: CheckBox, DateTime, ListBox, Numeric, Radio, Text, Signature, and Password.
FieldProperties that are extrapolated are: ReadOnly, Required, MaxLength, Positions, and Initial Data.
There's an example of how to do the transform in the Dev Center website (you need to use composite templates) but as mentioned I think you need to use text fields for it to work. See the Transform PDF Fields section:
Transform PDF Fields

Radio Button Tab Selection via API using Template

I've got a really strange problem. I have created a template which contains one Radio Button Group (rdoAction) with 3 separate radio buttons (DepositTo, Reissue, Other). When I create my envelope via the API I pass the radio group tab, with the specific radio button I want selected. Here is the strange part, it works perfectly when I pass the information to select either the Reissue or Other radio Button, but when the signing session loads, the DepositTo radio button is never selected.
I tried deleting that radio button from my template and then adding a new one in its place with no luck. I also tried deleting it and then copied and pasted one of the working ones in its place and changed the value accordingly. Using that method got the DepositTo radio button working but broke the one I originally copied.
Also, all of the radio buttons have the same attributes in my template aside from the value and location.
I know I am sending the correct XML down because I use the same function to build the XML for each of the radio buttons. Any ideas on why only 2 of the 3 will work?
UPDATE:
Here is the radio Group Tabs from the GetEnvelopeRecipients:
"radioGroupTabs": [
{
"documentId": "1",
"recipientId": "1",
"groupName": "rdoAction",
"radios": [
{
"pageNumber": "1",
"xPosition": "72",
"yPosition": "240",
"value": "Reissue",
"selected": "false",
"tabId": "206e8111-6cf9-4c79-b821-11f6958199c6"
},
{
"pageNumber": "1",
"xPosition": "74",
"yPosition": "255",
"value": "Other",
"selected": "false",
"tabId": "9705c14c-964e-4721-8f1b-35e4319794d4"
},
{
"pageNumber": "1",
"xPosition": "72",
"yPosition": "221",
"value": "DepositTo",
"selected": "false",
"tabId": "2352005b-d4f1-4be9-9c51-2fef2205739e"
}
]
}
]
Here is my trace for that radio button selection:
<TabStatus>
<TabType>Custom</TabType>
<Status>Active</Status>
<XPosition>150</XPosition>
<YPosition>500</YPosition>
<TabLabel>rdoAction</TabLabel>
<TabName>Reissue</TabName>
<TabValue />
<DocumentID>1</DocumentID>
<PageNumber>1</PageNumber>
<ValidationPattern />
<CustomTabType>Radio</CustomTabType>
</TabStatus>
<TabStatus>
<TabType>Custom</TabType>
<Status>Active</Status>
<XPosition>154</XPosition>
<YPosition>531</YPosition>
<TabLabel>rdoAction</TabLabel>
<TabName>Other</TabName>
<TabValue />
<DocumentID>1</DocumentID>
<PageNumber>1</PageNumber>
<ValidationPattern />
<CustomTabType>Radio</CustomTabType>
</TabStatus>
<TabStatus>
<TabType>Custom</TabType>
<Status>Active</Status>
<XPosition>150</XPosition>
<YPosition>460</YPosition>
<TabLabel>rdoAction</TabLabel>
<TabName>DepositTo</TabName>
<TabValue />
<DocumentID>1</DocumentID>
<PageNumber>1</PageNumber>
<ValidationPattern />
<CustomTabType>Radio</CustomTabType>
</TabStatus>
</TabStatuses>
If you need any additional information, let me know and I can provide it.
Here is the XML I send to set the radio button, the value changes based on the radio button selection.
Thanks. Here is the strange thing. I am not setting the tabValue to X for any of the radio buttons. I am sending down the following XML based on the radio button selection:
<radioGroupTabs>
<radioGroup>
<groupName>rdoAction</groupName>
<radios>
<radio>
<value>DepositTo</value>
<selected>true</selected>
</radio>
</radios>
</radioGroup>
</radioGroupTabs>
Thanks for adding the additional info to your question.
So, your issue (the DepositTo radio button not being selected in the Envelope) is most certainly being caused by the fact that the Create Envelope XML request you're sending to DocuSign doesn't specify to select that radio button -- i.e., <TabValue /> element is empty for the DepositTo radio button in the request.
If you can get your code to generate an XML request that puts an X in the <TabValue> element for the DepositTo radio button, then DocuSign should select that radio button, just as you specify in the XML request. Perhaps step through your code in Debug mode to determine why the "X" isn't being added to the request when the DepositTo is the button should be selected?
I got it working as desired. Here is my solution, well actually more of a workaround.
It looks like it wasn't related to the radio buttons but related to the conditional text fields I had attached to the radio button selection. 2 of the 3 radio buttons had text fields that were conditional based on the radio button selection. I could not find anything in my trace that looked out of place, but once I set one of the text fields to be conditional on my DepositTo radio button, the selection would no longer work. So what I did was remove the conditional attributes from the text fields on my template and am now controlling whether I send data down for those text fields in my front end code.
All 3 radio buttons are now being selected accurately and the text fields associated with them are populating data as desired.
Not sure if I found some sort of bug or if I am just not familiar enough with the process to see what mistake I might have been making in my template. Regardless here is a workaround if you experience the same issue.

how to get "envelope ID" displayed in the bottom corner in docusign completed Document

I am trying to understand if it would be possible to display the "Envelope ID" generated on the final PDF to be displayed in the bottom corner of the page instead of top corner.
The issue i am facing it the display is cutting of the LOGO of the page.
Any reference would be greatly appreciated!!!
It's not possible to control the placement (location) of the Envelope ID stamp that DocuSign automatically places on the documents -- but you can disable (remove) it altogether. See the answer in this post for information on how that's done: DocuSign REST API Remove EnvelopeID from PDF.
Once you disable DocuSign's auto-stamping of the Envelope ID, you can use the Envelope ID tab to place the Envelope ID whereever you want it to appear in the Envelope. Simply specify the Envelope ID tabs as part of your Create Envelope request:
"envelopeIdTabs": [{
"anchorString": null,
"anchorXOffset": null,
"anchorYOffset": null,
"anchorIgnoreIfNotPresent": null,
"anchorUnits": null,
"documentId": "#",
"pageNumber": "#",
"xPosition": "#",
"yPosition": "#",
"tabLabel": "Envelope ID,
}]
See page 352 of the REST API guide (https://10226ec94e53f4ca538f-0035e62ac0d194a46695a3b225d72cc8.ssl.cf2.rackcdn.com/rest-api-guide-v2.pdf) for details about the Envelope ID tab type.

Resources