Hi @user147
I wasn’t able to replicate this…
I’ve created 10 signature request with the following result:
Simple sign request: f025d707-42a9-4b0e-bc3a-bed548e979a6
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+0@gmail.com
Simple sign request: 7917303c-b6b7-463d-8fcd-b11c91e31d52
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+1@gmail.com
Simple sign request: 31b868b1-5646-44fd-826e-60712db78535
Status: created
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+2@gmail.com
Simple sign request: 3f9e5131-67a2-4c43-a93b-51677ec8a909
Status: created
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+3@gmail.com
Simple sign request: 0d60e646-db23-4fc2-83a0-565302e3eb6d
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+4@gmail.com
Simple sign request: b09b01b5-a7fe-455f-82ed-19aa456db908
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+5@gmail.com
Simple sign request: fb4a05e7-bf68-4684-ad9e-9697fe76da5c
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+6@gmail.com
Simple sign request: f3556afe-829a-40bf-a2a2-287d8bdeb1fe
Status: sent
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+7@gmail.com
Simple sign request: fe49835f-0ab6-40a2-88ff-60d1ff43b17e
Status: created
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+8@gmail.com
Simple sign request: c2242ce6-b3d5-40ee-9069-01d2d15aa22f
Status: created
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+9@gmail.com
Notice, some of the status are sent, and some were created, this is an asynchronous process so it may take some time to actually send all the requests.
After getting the email, and signing each one of them, I listed the details from the user requests using this script:
def check_sign_request_by_id(client: Client, sign_request_id: str):
"""Check sign request by id"""
sign_request = client.sign_requests.get_sign_request_by_id(sign_request_id)
print(f"\nSimple sign request: {sign_request.id}")
print(f" Status: {sign_request.status.value}")
print(f" Signers: {len(sign_request.signers)}")
for signer in sign_request.signers:
print(f" {signer.role.value}: {signer.email}")
for input in signer.inputs:
content_type = input.content_type
value = None
if content_type == SignRequestSignerInputContentTypeField.CHECKBOX:
value = input.checkbox_value
elif content_type == SignRequestSignerInputContentTypeField.TEXT:
value = input.text_value
elif (
content_type
== SignRequestSignerInputContentTypeField.FULL_NAME
):
value = input.text_value
elif content_type == SignRequestSignerInputContentTypeField.DATE:
value = input.date_value
print(
f" {input.type.value}: {value if value is not None else '<other>'}"
)
and in the main script:
# list sign requests
user_sign_requests = client.sign_requests.get_sign_requests()
print(f"\nSign requests: {len(user_sign_requests.entries)}")
for sign_request in user_sign_requests.entries:
check_sign_request_by_id(client, sign_request.id)
Resulting in:
Sign requests: 10
Simple sign request: c2242ce6-b3d5-40ee-9069-01d2d15aa22f
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+9@gmail.com
date: 2023-12-08
text: jjjj
signature: <other>
Simple sign request: fe49835f-0ab6-40a2-88ff-60d1ff43b17e
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+8@gmail.com
date: 2023-12-08
text: iii
signature: <other>
Simple sign request: f3556afe-829a-40bf-a2a2-287d8bdeb1fe
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+7@gmail.com
date: 2023-12-08
text: hhh
signature: <other>
Simple sign request: fb4a05e7-bf68-4684-ad9e-9697fe76da5c
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+6@gmail.com
text: ggg
signature: <other>
date: 2023-12-08
Simple sign request: b09b01b5-a7fe-455f-82ed-19aa456db908
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+5@gmail.com
signature: <other>
text: fff
date: 2023-12-08
Simple sign request: 0d60e646-db23-4fc2-83a0-565302e3eb6d
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+4@gmail.com
date: 2023-12-08
text: eee
signature: <other>
Simple sign request: 3f9e5131-67a2-4c43-a93b-51677ec8a909
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+3@gmail.com
date: 2023-12-08
text: ddd
signature: <other>
Simple sign request: 31b868b1-5646-44fd-826e-60712db78535
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+2@gmail.com
text: ccc
date: 2023-12-08
signature: <other>
Simple sign request: 7917303c-b6b7-463d-8fcd-b11c91e31d52
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+1@gmail.com
signature: <other>
text: bbb
date: 2023-12-08
Simple sign request: f025d707-42a9-4b0e-bc3a-bed548e979a6
Status: signed
Signers: 2
final_copy_reader: ...@gmail.com
signer: ...+0@gmail.com
date: 2023-12-08
signature: <other>
text: aaa
Notice that all status are sent
, meaning the sign request is complete and without errors, and I can access the input data.
So what could possibly be wrong?
Each input has a type and stores the value in different properties. For example an input type of full_name
stores the data under input.text_value
, however an input type of date
, stored the data under input.date_value
.
Could there be a miss match between the input types and where your app is getting the values from?
The other option, but I haven’t been able to replicate, is that the sign request is not finished yet or has an error. Have your app check for the signed
state before getting the values.
I’m running out of options here, so if this doesn’t yield any results on your side, my recommendation is to open a support ticket.
Finally I’ve created this sample script using the Gen Python SDK, and a modified sign workshop script (see below).
import logging
from utils.box_client_oauth import ConfigOAuth, get_client_oauth
from box_sdk_gen.client import BoxClient as Client
from box_sdk_gen.schemas import (
SignRequest,
SignRequestCreateSigner,
SignRequestSignerInputContentTypeField,
FolderBaseTypeField,
FolderMini,
)
# from utils.oauth_callback import open_browser
logging.basicConfig(level=logging.INFO)
logging.getLogger("box_sdk_gen").setLevel(logging.CRITICAL)
SIGN_DOCS_FOLDER = "234102987614"
SIMPLE_PDF = "1355143830404"
SIMPLE_DOC = "1358077513913"
CONTRACT = "1358047520478"
SIGNER_A = "YOUR_EMAIL+A@gmail.com"
SIGNER_A_PHONE = "+15554443322"
SIGNER_B = "YOUR_EMAIL+B@gmail.com"
APPROVER = "YOUR_EMAIL+APPROVER@gmail.com"
FINAL_COPY = "YOUR_EMAIL+FINAL_COPY@gmail.com"
TEMPLATE_SIMPLE = "94e3815b-f7f5-4c2c-8a26-e9ba5c486031"
def create_sign_request(client: Client, template_id: str, signer_email: str):
"""Create sign request from template"""
parent_folder = FolderMini(
id=SIGN_DOCS_FOLDER, type=FolderBaseTypeField.FOLDER
)
signer = SignRequestCreateSigner(
email=signer_email,
)
sign_request = client.sign_requests.create_sign_request(
signers=[signer],
parent_folder=parent_folder,
template_id=template_id,
)
return sign_request
def check_sign_request_by_id(client: Client, sign_request_id: str):
"""Check sign request by id"""
sign_request = client.sign_requests.get_sign_request_by_id(sign_request_id)
print(f"\nSimple sign request: {sign_request.id}")
print(f" Status: {sign_request.status.value}")
print(f" Signers: {len(sign_request.signers)}")
for signer in sign_request.signers:
print(f" {signer.role.value}: {signer.email}")
for input in signer.inputs:
content_type = input.content_type
value = None
if content_type == SignRequestSignerInputContentTypeField.CHECKBOX:
value = input.checkbox_value
elif content_type == SignRequestSignerInputContentTypeField.TEXT:
value = input.text_value
elif (
content_type
== SignRequestSignerInputContentTypeField.FULL_NAME
):
value = input.text_value
elif content_type == SignRequestSignerInputContentTypeField.DATE:
value = input.date_value
print(
f" {input.type.value}: {value if value is not None else '<other>'}"
)
def main():
"""Simple script to demonstrate how to use the Box SDK"""
conf = ConfigOAuth()
client = get_client_oauth(conf)
user = client.users.get_user_me()
print(f"\nHello, I'm {user.name} ({user.login}) [{user.id}]")
# # create 10 sign request from template
# for i in range(10):
# sign_request = create_sign_request(
# client, TEMPLATE_SIMPLE, "your_email+" + str(i) + "@gmail.com"
# )
# check_sign_request_by_id(client, sign_request.id)
# list sign requests
user_sign_requests = client.sign_requests.get_sign_requests()
print(f"\nSign requests: {len(user_sign_requests.entries)}")
for sign_request in user_sign_requests.entries:
check_sign_request_by_id(client, sign_request.id)
if __name__ == "__main__":
main()
Let us know if this helps
Cheers