身份验证预构建组件会从用户处收集信息,以达到所需的身份验证级别。此组件涵盖金融服务 (FSI) 行业常见但并非独有的身份验证要求。它使用信用卡失效日期收集、出生日期收集和电话号码收集预构建组件来收集和验证用户详细信息。
身份验证级别
不同的预构建组件需要不同级别的身份验证,级别越高,需要提供的用户信息越多。
身份验证组件可让用户进行 0 级(ANI 匹配)、1 级(基本)或 2 级(多重身份验证)身份验证,如下表所述:
| 身份验证级别 | 要求 |
|---|---|
| 级别 0:ANI 匹配 | 通过使用与注册账号对应的手机号码拨打电话或提供该手机号码来对用户进行身份验证。 用户可以使用问候语预构建组件进行 0 级身份验证。 |
| 第 1 级:基本 | 通过验证发送到用户邮箱或手机号码的动态密码 (OTP) 验证码来对用户进行身份验证。如果动态密码验证失败,用户可以回答四个安全问题中的三个,以成功完成身份验证:出生日期 (DOB)、用户借记卡或信用卡失效日期的后四位数字(取决于他们是账户持有人还是持卡人)、上一笔交易金额,以及上一笔信用卡账单支付方式。 |
| 级别 2:多重身份验证 | 此外,还会通过验证由外部身份验证器应用或推送通知生成的安全密钥来验证用户身份。 |
支持的用户类型
身份验证组件支持已注册的银行客户,这些客户可以是账号持有人、持卡人或两者兼而有之。该组件还支持对非注册银行客户但拥有银行注册账号授权书的用户进行身份验证。用户可以在银行注册一个或多个账户或卡。
身份验证类型
借助此组件,您可以配置用户应作为账号持有人、持卡人还是两者进行身份验证。您可以使用 $session.params.account_auth_enabled 和 $session.params.card_auth_enabled 输入参数设置这些选项。
下表介绍了账号身份验证和卡身份验证标志的不同值组合对应的组件行为:
account_auth_enabled |
card_auth_enabled |
身份验证类型 |
|---|---|---|
true |
false |
用户已通过账号持有人身份验证,确认其在该银行持有一个或多个账号,并回答了安全问题,包括注册借记卡的最后四位数字。 |
false |
true |
用户已通过持卡人身份验证,确认用户在该银行持有一张或多张信用卡,并确认了安全问题,包括已注册信用卡的失效日期。 |
true |
true |
该组件首先会检查用户是否为注册账号持有人。如果用户在该银行拥有一个或多个账户,该组件会使用账户信息对用户进行身份验证。如果用户在该银行没有任何账户,该组件会尝试使用持卡人信息对用户进行身份验证。 |
false |
false |
该组件首先会检查用户是否为注册账号持有人。如果用户在该银行拥有一个或多个账号,该组件会将用户身份验证为 0 级身份验证。如果用户在该银行没有任何账户,该组件会检查用户是否为持卡人。如果用户在该银行持有一张或多张信用卡,则该组件会将用户身份验证为级别 0 身份验证。 |
限制
除了常见的预构建组件限制之外,此预构建组件还具有以下限制:
- 动态密码只会发送到之前已注册到账号的手机号码或邮箱。该组件不会使用动态密码来对使用未在其账号中注册的备用手机号码致电的客户进行身份验证。使用备用手机号码拨打电话时,系统会通过安全问题验证用户身份。
- 此组件不会加密数据。
对话示例
以下示例对话展示了此预构建组件处理的常见场景。这些对话框显示了电话服务调用组件时的行为,这会在对话开始时触发默认欢迎 intent 和第一个代理回答。
第 1 级身份验证成功:动态密码
- 该组件会验证用户是否已通过 0 级身份验证。
- 该组件会向用户选择的渠道发送动态密码。
- 该组件会要求用户确认动态密码。
- 用户提供有效的动态密码,以通过第 1 级身份验证。
| 用户输入 | 智能体回答 |
|---|---|
| 出于安全考虑,我们需要验证您的身份,因此会向您发送一个验证码。您希望通过手机还是电子邮件接收验证码? | |
| 电话 | |
| 我们已向您注册的尾号为 0000 的手机号码发送验证码。这可能需要几秒钟的时间。请确认代码。 | |
| 验证码是 123457 | |
| 谢谢,您已成功通过身份验证。 |
级别 1 身份验证成功:安全问题
- 该组件通过收集并验证提供的手机号码来确认用户的 0 级身份验证。
- 该组件会要求用户回答三个安全问题,并验证用户的回答是否正确,这些问题包括出生日期、用户借记卡号的最后四位数字以及最后一笔交易金额。
- 用户成功通过第 1 级身份验证。
| 用户输入 | 智能体回答 |
|---|---|
| 您是我们银行的客户吗?或者您有授权书吗?请说“是”或“否”进行确认。 | |
| 是 | |
| 好的,我们需要收集您的手机号码,以便获取您的账号详细信息。 | |
| 代理使用电话号码收集预构建组件收集用户的电话号码。 | |
| 知道了。您提到的号码是 +1 6502530000,对吗? | |
| 是 | |
| 太好了,我们已收集到电话号码。 好的,出于安全考虑,我们需要您提供更多信息来验证您的身份。 |
|
| 代理使用出生日期收集预构建组件收集用户的出生日期。 | |
| 好的,您的出生日期是 1995 年 2 月 3 日,对吗? | |
| 是 | |
| 太好了,我们已收集到您的出生日期。 请告诉我们您借记卡卡号的后四位。 |
|
| 现在是 1234 | |
| 请告诉我们您上一笔交易的金额。例如,如果您的上一笔交易金额为 100.30 元,请说“100”。 | |
| 500 美元 | |
| 谢谢,您已成功通过身份验证。 |
第 2 级身份验证成功:双重身份验证
- 用户之前已通过 1 级身份验证。
- 用户使用其银行应用或身份验证器应用生成安全密钥。
- 用户向组件提供安全密钥,以进行第 2 级身份验证。
| 用户输入 | 智能体回答 |
|---|---|
| 请分享您的安全密钥。 在您的银行应用或身份验证器应用中生成 6 位数安全密钥。然后说出或输入这些数字。 |
|
| 232425 | |
| 谢谢,您已成功通过身份验证。 |
否认信息
- 用户拒绝提供身份验证所需的信息。
- 该组件退出并显示失败消息。
| 用户输入 | 智能体回答 |
|---|---|
| 出于安全考虑,我们需要验证您的身份,因此会向您发送一个验证码。您希望通过手机还是电子邮件接收验证码? | |
| 不,我不想分享 | |
| 好的,出于安全考虑,我们需要您提供更多信息来验证您的身份。 | |
| 代理使用出生日期收集预构建组件收集用户的出生日期。 | |
| 好的,您的出生日期是 1995 年 2 月 3 日,对吗? | |
| 是 | |
| 太好了,我们已收集到您的出生日期。 请告诉我们您借记卡卡号的后四位。 |
|
| 现在是 1234 | |
| 请告诉我们您上一笔交易的金额。例如,如果您的上一笔交易金额为 100.30 元,请说“100”。 | |
| 我不想分享详细信息 | |
| 我们无法验证您的身份,因此无法完成此操作。对于由此给您带来的任何不便,我们深表歉意。 |
命名规则
此预构建组件使用以下命名惯例:
| 功能 | 格式 | 示例 |
|---|---|---|
| Flow | [Component Name] | 身份验证 |
| 组件特定 intent | prebuilt_components_[component_name]_[intent_name] | prebuilt_components_authentication_power_of_attorney |
| 实体类型 | prebuilt_components_[component_name]_[entity_type] | prebuilt_components_authentication_payment_mode |
| 网络钩子 | prebuilt_components_[component_name]:[webhook_action] | prebuilt_components_authentication:telephony_verification |
输入参数
输入参数用于配置组件的某些行为。流程中的一个或多个条件使用这些参数来确定组件的行为。用户必须在组件的起始页面上设置流级作用域参数,如下表所述。调用方可以使用调用流或在此组件的起始页上设置会话级参数。
此预构建组件接受以下输入参数:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.auth_level | (可选)指明用户当前的身份验证级别。 | 整数 |
| $session.params.auth_level_req | 定义用户将通过身份验证的身份验证级别。有效值为 0、1 或 2。 |
整数 |
| $session.params.account_auth_enabled | 指明是否应将用户身份验证为账号持有人。组件行为取决于此值和 $session.params.card_auth_enabled 的值,如身份验证级别中所述。 |
布尔值 |
| $session.params.card_auth_enabled | 指明是否应将用户作为持卡人进行身份验证。组件行为取决于此值和 $session.params.account_auth_enabled 的值,如身份验证级别中所述。 |
布尔值 |
| $session.params.phone_number | (可选)用户的本地手机号码,不含国家/地区代码。如果未提供此参数,组件将从用户处收集手机号码。 | 字符串 |
| $flow.max_retry_telephone_counter | 指定收集用户电话号码时允许的重试次数。默认值为 1。 |
整数 |
| $flow.max_retry_security_ans_count | 指定在收集安全问题答案时允许的重试次数。默认值为 3。 |
整数 |
| $flow.max_retry_security_key | 指定收集安全密钥时允许的重试次数。默认值为 3。 |
整数 |
| $flow.max_retry_otp_not_received | 指定未收到动态密码 (OTP) 时允许的重试次数。默认值为 1。 |
整数 |
| $flow.max_retry_otp_count | 指定收集动态密码 (OTP) 时允许的重试次数。默认值为 3。 |
整数 |
| $flow.security_ans_denial_count | 指定当用户拒绝提供所请求的信息时允许的重试次数。默认值为 1。 |
整数 |
| $flow.security_ans_mid_count | 指定用户可以提供的错误安全问题答案数量。默认值为 2,这意味着,如果来电者对两个不同问题的回答不正确,该组件会退出并显示失败。 |
整数 |
| $flow.max_retry_card_counter | 指定在收集用户借记卡后四位数字时允许的重试次数。默认值为 2。 |
整数 |
| $flow.security_key_length | 指定身份验证器应用为第 2 级身份验证提供的安全密钥的有效长度。默认值为 6。 |
整数 |
| $flow.otp_length | 指定 1 级身份验证的动态密码 (OTP) 的有效长度。默认值为 6。 |
整数 |
如需为此组件配置输入参数,请展开以查看相关说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择构建标签页。
- 在流部分中点击导入的组件。
- 点击页面部分中的“Start Page”。
- 点击“Start Page”中的 true 路由。
- 在“Route”(路线)窗口中,根据需要修改参数预设值。
- 点击保存。
输出参数
输出参数是在用户退出组件后仍保持活跃状态的会话参数。这些参数包含组件收集的重要信息。
此预构建组件会为以下输出参数提供值:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| auth_level | 指明用户当前的身份验证级别。 | 整数 |
| phone_number | 用户提供的本地手机号码,不含国家/地区代码。 | 字符串 |
| transfer_reason | 此参数表示流程退出的原因(如果未成功)。返回的值为以下之一:agent:用户在对话期间的某个时间点请求了人工客服。denial_of_information:用户拒绝分享组件请求的信息。max_no_input:对话达到了无输入事件的最大重试次数。请参阅无输入内置事件。max_no_match:对话达到了不匹配事件的重试次数上限。请参阅不匹配内置事件。webhook_error:发生了 webhook 错误。请参阅 webhook.error 内置事件。webhook_not_found:网络钩子网址无法访问。请参阅 webhook.error.not-found 内置事件。 |
字符串 |
基本设置
如需设置此预构建组件,请执行以下操作:
- 导入预构建组件。
- 使用描述外部服务的设置配置提供的灵活 webhook,请参阅 Webhook 设置。
Webhook 设置
如需使用此组件,用户必须配置包含的灵活网络钩子,以便从其外部服务中检索所需信息。
电话验证
该组件使用 prebuilt_components_authentication:telephony_verification webhook 根据提供的电话号码提取用户账号详细信息。
API 请求参数
该组件提供以下参数作为 API 请求的输入:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.phone_number | 用户的本地手机号码,不含国家/地区代码。 | 字符串 |
API 响应参数
该组件会从 API 响应中提取以下参数:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| account_count | 与已注册电话号码关联的账号数量。这些账户包括用户自己的账户以及用户拥有授权委托书的账户。 | 整数 |
| last_four_digit_of_account_number | 如果用户只有一个账号,系统会返回账号的后四位。如果用户有多个账号,则此参数的值为 null。 |
字符串 |
| 电子邮件 | 与账号关联的邮箱。如果账号未注册电子邮件地址,则此参数的值为 null。 |
字符串 |
如需为此组件配置电话验证网络钩子,请展开以查看说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击 Webhooks。
- 选择 prebuilt_components_authentication:telephony_verification webhook。
- 将 Dialogflow CX 网络钩子网址字段中的网址替换为您要集成的服务的端点。在下拉菜单中选择适当的方法。
- 查看并更新请求正文,为您的网络钩子设置正确的请求格式。
- 查看并更新响应配置,以从 webhook 的响应中提取特定字段。请勿修改参数名称,因为组件需要这些名称来访问返回的字段值。
- 根据需要查看并更新身份验证设置。
- 点击保存。
获取信用卡详细信息
该组件使用 prebuilt_components_account_services:get_credit_card_details 网络钩子检索与用户注册的信用卡相关的信息。
API 请求参数
该组件提供以下参数作为 API 请求的输入:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.phone_number | 用户的本地手机号码,不含国家/地区代码。 | 字符串 |
API 响应参数
该组件会从 API 响应中提取以下参数:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| credit_card_count | 与注册电话号码关联的信用卡数量。 | 整数 |
| last_four_digit_of_credit_card_number | 如果用户只有一张信用卡,则会返回卡号的后四位数字。如果用户有多张卡,则此参数的值为 null。 |
字符串 |
| 电子邮件 | 与账号关联的邮箱。如果账号未注册电子邮件地址,则此参数的值为 null。 |
字符串 |
如需为此组件配置“获取信用卡详细信息”Webhook,请展开以查看说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击 Webhooks。
- 选择 prebuilt_components_account_services:get_credit_card_details webhook。
- 将 Dialogflow CX 网络钩子网址字段中的网址替换为您要集成的服务的端点。在下拉菜单中选择适当的方法。
- 查看并更新请求正文,为您的网络钩子设置正确的请求格式。
- 查看并更新响应配置,以从 webhook 的响应中提取特定字段。请勿修改参数名称,因为组件需要这些名称来访问返回的字段值。
- 根据需要查看并更新身份验证设置。
- 点击保存。
发送动态密码
prebuilt_components_authentication:send_otp webhook 会向您选择的已注册渠道发送动态密码 (OTP)。
API 请求参数
该组件提供以下参数作为 API 请求的输入:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.phone_number | 用户的本地手机号码,不含国家/地区代码。 | 字符串 |
| $flow.channel | 用户选择用于接收动态密码的渠道。有效值由 prebuilt_components_authentication_channel 自定义实体定义。默认情况下,系统支持 email 和 mobile。 |
字符串 |
API 响应参数
该组件会从 API 响应中提取以下参数:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| generated_otp | 通过所选渠道生成并发送给用户的动态密码的值。 | 字符串 |
如需为此组件配置“发送动态密码”Webhook,请展开查看相关说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击 Webhooks。
- 选择 prebuilt_components_authentication:send_otp 网络钩子。
- 将 Dialogflow CX 网络钩子网址字段中的网址替换为您要集成的服务的端点。在下拉菜单中选择适当的方法。
- 查看并更新请求正文,为您的网络钩子设置正确的请求格式。
- 查看并更新响应配置,以从 webhook 的响应中提取特定字段。请勿修改参数名称,因为组件需要这些名称来访问返回的字段值。
- 根据需要查看并更新身份验证设置。
- 点击保存。
安全问题答案
prebuilt_components_authentication:security_answers webhook 会从用户的注册账号中检索其安全问题答案。
API 请求参数
该组件提供以下参数作为 API 请求的输入:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.phone_number | 用户的本地手机号码,不含国家/地区代码。 | 字符串 |
API 响应参数
该组件会从 API 响应中提取以下参数:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| security_last_trans_amount | 表示用户上一笔交易的全额,不含货币符号。例如,如果用户的最后一笔交易金额为 100.30 美元,则此字段的预期值为 "100.30"。 |
字符串 |
| last_payment_mode | 用户上次交易时使用的支付方式,有效值由 prebuilt_components_authentication_payment_mode 自定义实体定义。默认情况下,这些值包括 mobile、upi、online、debit、credit 和 account。 |
字符串 |
| security_card_number | 用户借记卡卡号的后四位数字。 | 字符串 |
| user_dob | 用户的出生日期 (DOB),格式为 YYYY-MM-DD。 | 字符串 |
| cards_exp_date_all | 用户注册的所有信用卡的失效日期,格式为 MMYYYY。 | 列表(字符串) |
如需为此组件配置安全回答 webhook,请展开以查看说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击 Webhooks。
- 选择 prebuilt_components_authentication:security_answers webhook。
- 将 Dialogflow CX 网络钩子网址字段中的网址替换为您要集成的服务的端点。在下拉菜单中选择适当的方法。
- 查看并更新请求正文,为您的网络钩子设置正确的请求格式。
- 查看并更新响应配置,以从 webhook 的响应中提取特定字段。请勿修改参数名称,因为组件需要这些名称来访问返回的字段值。
- 根据需要查看并更新身份验证设置。
- 点击保存。
双重验证
prebuilt_components_authentication:2fa_validation webhook 可让组件验证用户提供的用于双重身份验证的安全密钥。
API 请求参数
该组件提供以下参数作为 API 请求的输入:
| 参数名称 | 说明 | 输入格式 |
|---|---|---|
| $session.params.phone_number | 用户的本地手机号码,不含国家/地区代码。 | 字符串 |
| $flow.security_key | 用户提供的安全密钥,由银行应用或身份验证器应用生成。 | 字符串 |
API 响应参数
该组件会从 API 响应中提取以下参数:
| 参数名称 | 说明 | 输出格式 |
|---|---|---|
| security_key_verified | 指明用户提供的安全密钥是否有效。true 表示提供的安全密钥有效。false 表示提供的安全密钥无效。 |
布尔值 |
如需为此组件配置双重验证 webhook,请展开查看相关说明。
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击 Webhooks。
- 选择 prebuilt_components_authentication:2FA 验证 webhook。
- 将 Dialogflow CX 网络钩子网址字段中的网址替换为您要集成的服务的端点。在下拉菜单中选择适当的方法。
- 查看并更新请求正文,为您的网络钩子设置正确的请求格式。
- 查看并更新响应配置,以从 webhook 的响应中提取特定字段。请勿修改参数名称,因为组件需要这些名称来访问返回的字段值。
- 根据需要查看并更新身份验证设置。
- 点击保存。
完成
预构建组件及其网络钩子现已设置完毕,可以进行测试。