You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
                }]
            }]
        }
}]

问题根源

  1. API用法错误:你把配置好的短信Signer对象错误地放到了numberTabs中,numberTabs是用于添加数字输入框的字段,完全不应该用来存储签名者的短信配置。
  2. 主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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:31:04