DocuSign演示环境:邮件正常送达但短信未收到问题求助
DocuSign SDK短信通知未送达问题排查与修复
我使用DocuSign SDK发送包含邮件与短信通知的信封,已联系官方确认演示环境的短信功能已激活。但发送信封后SDK无错误返回,邮件可正常接收,短信却始终未收到。以下是相关Java代码及结构片段:
public java.util.List<com.docusign.esign.model.Signer> getInSmsSigners() throws Exception { java.util.List<com.docusign.esign.model.Signer> signers = new java.util.LinkedList<com.docusign.esign.model.Signer>(); String READ_SIGNERS_QUERY = "SELECT eap.*, e.in_open_cc" + " FROM envelope_assinatura_proposta eap " + " INNER JOIN envelope e ON e.cd_envelope = eap.cd_envelope " + " WHERE eap.cd_pessoa_governanca IS NULL " + " AND eap.cd_envelope = ?; "; PreparedStatement ps = connection.getConnection().prepareStatement(READ_SIGNERS_QUERY); ps.setDouble(1, Double.parseDouble(numProposta)); ResultSet rs = ps.executeQuery(); SignersPhones signersPhones = new SignersPhones(); while (rs.next()) { com.docusign.esign.model.Signer sms = new com.docusign.esign.model.Signer(); com.docusign.esign.model.RecipientPhoneNumber phone = new com.docusign.esign.model.RecipientPhoneNumber(); if (rs.getString("nr_telefone") != null) { com.docusign.esign.model.Signer signer = new com.docusign.esign.model.Signer(); signer.setName(rs.getString("nm_pessoa")); signer.setRecipientId(rs.getString("seq_envelope")); signer.setRoutingOrder(rs.getString("ordem_ass")); signer.setDeliveryMethod("SMS"); RecipientAdditionalNotification smsDelivery = new RecipientAdditionalNotification(); smsDelivery.secondaryDeliveryMethod("SMS"); RecipientPhoneNumber telefonesms = new RecipientPhoneNumber(); telefonesms.setCountryCode("+".concat(rs.getString("nr_ddi"))); telefonesms.setNumber(rs.getString("nr_ddd").concat(rs.getString("nr_telefone"))); smsDelivery.phoneNumber(telefonesms); signer.setAdditionalNotifications(Arrays.asList(smsDelivery)); signer.setPhoneNumber(telefonesms); signers.add(signer); System.out.println("Telefone é " + telefonesms); } } return signers; } // 后续代码片段 List<com.docusign.esign.model.Signer> phoneNumbers = this.getInSmsSigners(); if (phoneNumbers.size() > 0) { signerTabs.setNumberTabs((List) phoneNumbers); } List<Checkbox> checkboxes = this.getCheckbox(numProposta, rs.getString("seq_envelope")); if (checkboxes.size() > 0) { signerTabs.setCheckboxTabs(checkboxes); } signer.setTabs(signerTabs); signers.add(signer);
输出的Signer对象结构片段
signers: [class Signer { accessCode: null deliveryMethod: null phoneNumber: null name: IGOR ROMAO SANTOS recipientId: 1 routingOrder: 101 tabs: class Tabs { listTabs: [...] numberTabs: [class Signer { additionalNotifications: [class RecipientAdditionalNotification { phoneNumber: class RecipientPhoneNumber { countryCode: +55 number: 43996519226 } secondaryDeliveryMethod: SMS }] }] } }]
问题根源
- API用法错误:你把配置好的短信Signer对象错误地放到了
numberTabs中,numberTabs是用于添加数字输入框的字段,完全不应该用来存储签名者的短信配置。 - 主Signer参数缺失:最终加入信封的主Signer对象,其
deliveryMethod和phoneNumber都为null,说明短信配置根本没有关联到正确的签名者实体上。
修复方案
直接在主Signer对象上配置短信相关参数,不需要单独创建Signer列表:
// 重构后的短信配置方法,直接给主Signer赋值 private void setupSmsNotification(com.docusign.esign.model.Signer mainSigner, ResultSet rs) throws SQLException { mainSigner.setDeliveryMethod("SMS"); RecipientPhoneNumber phoneNumber = new RecipientPhoneNumber(); phoneNumber.setCountryCode("+".concat(rs.getString("nr_ddi"))); phoneNumber.setNumber(rs.getString("nr_ddd").concat(rs.getString("nr_telefone"))); mainSigner.setPhoneNumber(phoneNumber); // 如需额外短信通知,可添加以下配置 RecipientAdditionalNotification smsNotification = new RecipientAdditionalNotification(); smsNotification.secondaryDeliveryMethod("SMS"); smsNotification.phoneNumber(phoneNumber); mainSigner.setAdditionalNotifications(Arrays.asList(smsNotification)); } // 调用示例 ResultSet rs = ...; // 你的数据库查询结果 if (rs.next() && rs.getString("nr_telefone") != null) { setupSmsNotification(signer, rs); // signer是你要添加到信封的主签名者对象 } // 保留原有的tabs配置,但移除错误的numberTabs设置 List<Checkbox> checkboxes = this.getCheckbox(numProposta, rs.getString("seq_envelope")); if (checkboxes.size() > 0) { signerTabs.setCheckboxTabs(checkboxes); } signer.setTabs(signerTabs); signers.add(signer);
额外检查项
- 确认手机号格式正确:巴西号码需为
+55DDDNUMERO格式,无空格或特殊字符。 - 登录DocuSign控制台查看信封日志,检查短信通知的发送状态及失败原因(如有)。
- 演示环境可能存在短信发送频率限制,可间隔一段时间后重试测试。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

