如何使用Java实现DocuSign延迟调度?配置后未生效求助
Java实现DocuSign延迟调度的正确方式
核心配置修正
你之前的问题出在信封状态设置错误,且缺少关键的调度时间配置。正确的参数组合如下:
- 信封状态必须设为
"sent",而非"created"。"created"仅会生成草稿信封,不会触发调度逻辑。 - 工作流(Workflow)需明确指定调度时间:创建
Workflow对象,设置workflowStatus为"scheduled",同时在scheduleDetails中配置sendDateTime(必须是UTC时区的未来时间)。 - 调度发送状态(
scheduledSending.setStatus())设为"started"是正确的,但必须配合上述两个条件。
完整代码示例
import com.docusign.esign.api.EnvelopesApi; import com.docusign.esign.client.ApiClient; import com.docusign.esign.client.ApiException; import com.docusign.esign.model.*; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.Arrays; public class DelayedEnvelopeSender { public static void main(String[] args) throws ApiException { // 初始化API客户端(替换为你的集成密钥、基础路径、访问令牌) ApiClient apiClient = new ApiClient("https://demo.docusign.net/restapi"); apiClient.addDefaultHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN"); EnvelopesApi envelopesApi = new EnvelopesApi(apiClient); String accountId = "YOUR_ACCOUNT_ID"; // 创建收件人 Signer signer = new Signer(); signer.setEmail("recipient@example.com"); signer.setName("Recipient Name"); signer.setRecipientId("1"); signer.setTabs(new Tabs().signHereTabs(Arrays.asList(new SignHere().setDocumentId("1").setPageNumber("1").setXPosition("100").setYPosition("100")))); // 创建文档(替换为你的文档路径) Document document = new Document(); document.setDocumentBase64("BASE64_ENCODED_DOCUMENT"); document.setName("Sample Document.pdf"); document.setDocumentId("1"); // 配置调度工作流 ScheduleDetails scheduleDetails = new ScheduleDetails(); // 设置UTC未来时间,比如1小时后 OffsetDateTime sendTime = OffsetDateTime.now(ZoneOffset.UTC).plusHours(1); scheduleDetails.setSendDateTime(sendTime.toString()); Workflow workflow = new Workflow(); workflow.setWorkflowStatus("scheduled"); workflow.setScheduleDetails(scheduleDetails); // 配置调度发送状态 ScheduledSending scheduledSending = new ScheduledSending(); scheduledSending.setStatus("started"); // 创建信封定义 EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition(); envelopeDefinition.setEmailSubject("请签署这份文档"); envelopeDefinition.setDocuments(Arrays.asList(document)); envelopeDefinition.setRecipients(new Recipients().signers(Arrays.asList(signer))); envelopeDefinition.setStatus("sent"); // 关键:必须设为sent envelopeDefinition.setWorkflow(workflow); envelopeDefinition.setScheduledSending(scheduledSending); // 发送信封 EnvelopeSummary envelopeSummary = envelopesApi.createEnvelope(accountId, envelopeDefinition); System.out.println("信封已创建,ID:" + envelopeSummary.getEnvelopeId()); System.out.println("调度状态:" + envelopeSummary.getWorkflowStatus()); } }
排查要点
- 验证
sendDateTime格式:必须是ISO 8601格式的UTC时间,且时间点在当前时间之后。DocuSign会忽略过去的调度时间。 - 检查账号权限:确认你的DocuSign账号已启用延迟调度功能(部分免费或基础套餐可能不支持)。
- 查看返回结果:调用
createEnvelope后,返回的EnvelopeSummary中workflowStatus应为scheduled,同时sendDateTime需与你设置的一致。若返回created,说明参数仍有错误。
内容的提问来源于stack exchange,提问作者user2745702
相关产品推荐
相关产品推荐

