from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.preview_resubmission(
"11111111-2222-3333-4444-555555555555",
nodes_to_resubmit=[{
"node_id": "feature_poa_1",
"feature": "POA",
}],
email_language="en",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.previewResubmission("11111111-2222-3333-4444-555555555555", {
nodes_to_resubmit: [{
node_id: "feature_poa_1",
feature: "POA",
}],
email_language: "en",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.PreviewResubmission(ctx, "11111111-2222-3333-4444-555555555555", didit.SessionsPreviewResubmissionParams{
NodesToResubmit: didit.Some([]didit.SessionsPreviewResubmissionParamsNodesToResubmit{{
NodeID: "feature_poa_1",
Feature: "POA",
}}),
EmailLanguage: didit.String("en"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.SessionsPreviewResubmissionParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().previewResubmission("11111111-2222-3333-4444-555555555555", SessionsPreviewResubmissionParams.builder()
.nodesToResubmit(List.of(SessionsPreviewResubmissionParams.NodesToResubmit.builder()
.nodeId("feature_poa_1")
.feature(SessionsPreviewResubmissionParams.NodesToResubmit.Feature.of("POA"))
.build()))
.emailLanguage("en")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->previewResubmission('11111111-2222-3333-4444-555555555555', [
'nodes_to_resubmit' => [[
'node_id' => 'feature_poa_1',
'feature' => 'POA',
]],
'email_language' => 'en',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.preview_resubmission(
"11111111-2222-3333-4444-555555555555",
nodes_to_resubmit: [{
node_id: "feature_poa_1",
feature: "POA",
}],
email_language: "en"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Sessions.PreviewResubmissionAsync("11111111-2222-3333-4444-555555555555", new SessionsPreviewResubmissionParams
{
NodesToResubmit = new SessionsPreviewResubmissionParamsNodesToResubmit[]
{
new()
{
NodeId = "feature_poa_1",
Feature = "POA",
},
},
EmailLanguage = "en",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/resubmission-preview/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"nodes_to_resubmit": [
{
"node_id": "feature_poa_1",
"feature": "POA"
}
],
"email_language": "en"
}
'{
"recipient": "person@example.com",
"recipient_source": "email_verification",
"sender": "Example App <no-reply@mail.example.com>",
"sender_name": "Example App",
"sender_email": "no-reply@mail.example.com",
"sender_kind": "customer",
"subject": "Action Required: Complete your verification in Example App",
"html": "<!DOCTYPE html><html><body>...</body></html>",
"language": "en",
"will_be_sent": true,
"not_sent_reason": null,
"nodes_to_resubmit": [
{
"node_id": "feature_poa_1",
"feature": "PROOF_OF_ADDRESS"
}
],
"requires_user_action": true,
"preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
}预览重新提交邮件
在 Didit 中预览重新提交请求的收件人、发件人、本地化邮件内容和验证链接,确认无误后再发送。
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.preview_resubmission(
"11111111-2222-3333-4444-555555555555",
nodes_to_resubmit=[{
"node_id": "feature_poa_1",
"feature": "POA",
}],
email_language="en",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.previewResubmission("11111111-2222-3333-4444-555555555555", {
nodes_to_resubmit: [{
node_id: "feature_poa_1",
feature: "POA",
}],
email_language: "en",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.PreviewResubmission(ctx, "11111111-2222-3333-4444-555555555555", didit.SessionsPreviewResubmissionParams{
NodesToResubmit: didit.Some([]didit.SessionsPreviewResubmissionParamsNodesToResubmit{{
NodeID: "feature_poa_1",
Feature: "POA",
}}),
EmailLanguage: didit.String("en"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.SessionsPreviewResubmissionParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().previewResubmission("11111111-2222-3333-4444-555555555555", SessionsPreviewResubmissionParams.builder()
.nodesToResubmit(List.of(SessionsPreviewResubmissionParams.NodesToResubmit.builder()
.nodeId("feature_poa_1")
.feature(SessionsPreviewResubmissionParams.NodesToResubmit.Feature.of("POA"))
.build()))
.emailLanguage("en")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->previewResubmission('11111111-2222-3333-4444-555555555555', [
'nodes_to_resubmit' => [[
'node_id' => 'feature_poa_1',
'feature' => 'POA',
]],
'email_language' => 'en',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.preview_resubmission(
"11111111-2222-3333-4444-555555555555",
nodes_to_resubmit: [{
node_id: "feature_poa_1",
feature: "POA",
}],
email_language: "en"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Sessions.PreviewResubmissionAsync("11111111-2222-3333-4444-555555555555", new SessionsPreviewResubmissionParams
{
NodesToResubmit = new SessionsPreviewResubmissionParamsNodesToResubmit[]
{
new()
{
NodeId = "feature_poa_1",
Feature = "POA",
},
},
EmailLanguage = "en",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/resubmission-preview/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"nodes_to_resubmit": [
{
"node_id": "feature_poa_1",
"feature": "POA"
}
],
"email_language": "en"
}
'{
"recipient": "person@example.com",
"recipient_source": "email_verification",
"sender": "Example App <no-reply@mail.example.com>",
"sender_name": "Example App",
"sender_email": "no-reply@mail.example.com",
"sender_kind": "customer",
"subject": "Action Required: Complete your verification in Example App",
"html": "<!DOCTYPE html><html><body>...</body></html>",
"language": "en",
"will_be_sent": true,
"not_sent_reason": null,
"nodes_to_resubmit": [
{
"node_id": "feature_poa_1",
"feature": "PROOF_OF_ADDRESS"
}
],
"requires_user_action": true,
"preview_token": "eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000"
}preview_token 作为 email_preview_token 传入。
回执 15 分钟后过期。
回执已更改或已过期时,接口会在修改会话或发送邮件之前返回 409。
发生冲突后,请重新生成预览。
现有 API 集成可以省略回执;在控制台中确认预览时,控制台会自动提供回执。
发件人和品牌信息遵循您现有的白标配置。
邮件内容来自已翻译的验证模板;模板输入不接受任意主题、邮件正文或操作 URL。
谁会收到邮件
email_address 为可选项。
如果未传入,邮件将发送到用户本人的邮箱:即其在流程中通过邮箱验证步骤验证的地址;若没有,则使用创建会话时 contact_details 中提供的地址。
您在 email_address 中传入的地址优先。
recipient_source 用于说明适用的是哪个地址:
recipient_source | recipient 的来源 |
|---|---|
email_verification | 用户在流程中验证的地址 |
contact_details | 创建会话时在 contact_details 中提供的地址 |
request | 您传入的 email_address |
""(空) | 没有已知地址:recipient 和 preview_token 为空,无法发送邮件 |
是否会发送邮件
使用send_email: true 确认重新提交时,若会发送邮件,则 will_be_sent 为 true。
为 false 时,not_sent_reason 说明原因:
not_sent_reason | 含义 |
|---|---|
no_user_action | 所选的每个步骤都无需用户参与即可运行(例如 AML 筛查或数据库核验),因此重新提交会自动完成,且不会发送邮件。requires_user_action 同样为 false。 |
no_recipient | 没有该用户的已知地址,且您也未传入地址。 |
sandbox | 该会话为沙盒会话,且收件人未选择接收沙盒邮件,因此邮件仅为模拟发送。参见邮件选择加入。 |
确认重新提交
使用以下字段调用更新会话状态:| 更新会话状态字段 | 值 |
|---|---|
new_status | Resubmitted |
nodes_to_resubmit | 与您在预览中使用的选择相同(如果您在预览中省略了该字段,此处也省略) |
send_email | true |
email_address | 预览中的 recipient |
email_language | 与您传给预览的 email_language 相同 |
email_preview_token | 预览中的 preview_token |
language 表示邮件所用的语言:当您请求的语言不可用时,为英语。
重复的仅后端重新提交
当需要重新提交的所有步骤都无需用户参与(AML 筛查、数据库核验或 IP 分析)时,每 30 秒只能为用户重新提交一次会话。 在该时间窗口内,预览会返回429,与更新会话状态的行为一致,等待时间通过 Retry-After 响应头返回。
相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
要更新的验证会话的 UUID。支持用户(KYC)和企业(KYB)会话 ID,服务会跨两种会话类型解析该 ID。
"11111111-2222-3333-4444-555555555555"
请求体
要预览的步骤,使用与重新提交相同的验证、选择和工作流排序。省略此项将自动选择需要重新提交的已记录尝试。
Show child attributes
Show child attributes
可选。将邮件发送至此地址,而非此人的地址。如未提供,收件人为该人在流程中验证的地址,否则为 contact_details 中提供的地址。此调用不会发送邮件。
"user@example.com"
通知邮件的语言。在 schema 层面接受任何字符串;不支持的代码将以静默方式回退为英语(en)。
"en"
响应
仅供预览。会话保持不变且不会发送电子邮件。
邮件发送的目标地址。若该人员无已知地址,则为空字符串:此时无法发送邮件,且 preview_token 同样为空。确认时请将其作为 email_address 传递。
"person@example.com"
recipient 的来源。request:您传递的 email_address。email_verification:用户在流程的邮箱验证步骤中验证的地址。contact_details:创建会话时在 contact_details 中提供的地址。没有地址时为空字符串。
email_verification, contact_details, request, "email_verification"
发送邮件时使用的 From 请求头。
"Example App <no-reply@mail.example.com>"
sender 的显示名称部分。
"Example App"
sender 的地址部分。
"no-reply@mail.example.com"
customer:邮件从您应用的已验证发送方域名发出(白标)。didit:从 Didit 自己的发送方发出。
customer, didit "customer"
与发送时完全一致的主题行。
"Action Required: Complete your verification in Example App"
发送时完全一致的电子邮件 HTML,其徽标作为 data URL 嵌入。请在沙盒 frame 中渲染,切勿直接在您的应用 DOM 中渲染。
"<!DOCTYPE html><html><body>...</body></html>"
电子邮件的纯文本内容,与该用户的“消息”会话中保留的一致,用于紧凑预览(HTML 仍为该用户收到的电子邮件形式)。
"Almost there\n\nSome steps need to be completed again.\nHere’s what to fix:\n\nhttps://verify.didit.me/session/abc123"
邮件所用的语言。如果您请求的 email_language 不支持,则为英语(en)。
"en"
使用 send_email: true 确认更改是否会发送此电子邮件。当设置了 not_sent_reason 时为 false。
true
确认操作不会发送电子邮件的原因;若将发送邮件,则为 null。no_user_action:所有选定步骤均无需该用户参与即可运行,因此重新提交会自动完成且不发送任何电子邮件。no_recipient:未获知该用户的地址,且您未传入任何地址。sandbox:接收者未选择接收沙盒邮件投递的沙盒会话,因此发送仅为模拟。
no_user_action, no_recipient, sandbox, null null
Show child attributes
Show child attributes
所选检查中是否至少有一项需要用户交互。这并不预示最终的工作流结果。