如需检查用户的设备是否支持 RCS 且能够与 RBM 代理通信,您可以请求设备的各项功能。确定设备支持哪些功能(如果有),有助于代理根据设备的功能调整对话,避免提供用户难以完成或无法完成的互动。
如果用户的设备根本无法接收 RCS 消息,您可以通过其他服务(例如短信/彩信)与用户沟通。
检查设备功能
以下代码会发送功能检查并等待响应。如需了解格式设置和值选项,请参阅 getCapabilities。
cURL
curl -X GET "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/capabilities?requestId=REQUEST_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Send a capability check to the device rbmApiHelper.checkCapability('+12223334444', function(response) { // Print capabilities of the device console.log(response); });
Java
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Check the capabilities of the device boolean capability = rbmApiHelper.getCapability("+12223334444");
Python
# Reference to RBM Python client helper from rcs_business_messaging import rbm_service # Send the tester invite to a device response = rbm_service.make_cap_request('+12223334444')
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Register the device as a tester Capabilities capabilities = rbmApiHelper.GetCapability("+12223334444");
功能响应
运行功能检查后,RBM 平台会返回指定设备支持的功能的 JSON 格式列表。
{ "features": [ "RICHCARD_STANDALONE", "RICHCARD_CAROUSEL", "ACTION_CREATE_CALENDAR_EVENT", "ACTION_DIAL", "ACTION_OPEN_URL", "ACTION_SHARE_LOCATION", "ACTION_VIEW_LOCATION", "ACTION_OPEN_URL_IN_WEBVIEW", "PDF_IN_RICH_CARDS" ] }
请求会返回响应或错误。
仅当 MSISDN(电话号码)在过去 31 天内连接到 RCS 服务时,才会返回成功响应。这意味着用户设备已在该时间范围内向我们的 RCS 服务器签到。在线设备和启用 RCS 的设备平均每 1-4 小时签到一次。
如果用户将 SIM 卡移至其他支持 RCS 的设备,系统会移除之前的设备关联,并创建新的关联,从而更新 RCS 服务中的设备功能。
如果将 SIM 卡插入到运营商或制造商已停用 RCS 的设备中,或者 SIM 卡一直处于未使用状态,RCS 服务仍会尝试将消息递送到之前关联的设备,最长可达 31 天。
以下是导致 404 错误的原因:
用户无法通过 RBM 联系到,例如,用户的设备不支持 RCS。
用户已启用 RCS,但您的代理未在其移动网络上启动。
离线排队
消息最多会排队 31 天,并在设备重新上线时传送。这意味着,即使设备离线时间较长(最长可达 31 天),只要 MSISDN 在过去 31 天内连接过 RCS 服务,排队的消息仍会在重新连接后送达。
批量功能检查
如需估算可接收 RBM 消息的用户数量,请进行批量功能检查。批量检查可指示电话号码是否可接通,但无法指示电话号码支持哪些功能。
每次批量检查功能时,您必须提供 500-10,000 个唯一的电话号码。如需检查更多号码,请执行多次检查。您每分钟最多可以进行 600 次调用。使用批量功能检查脚本将 CSV 文件用作输入格式。批量检查从功能缓存读取,该缓存由客户端使用 RCS 有机地更新。代理不会直接请求每个设备的功能。因此,结果可能不是最新的。
批量功能检查会返回以下信息:您的代理可以在已发布该代理的运营商处联系到的号码列表,以及所有运营商的可触达用户总数估计值。请参阅批量功能检查响应。
估算可覆盖的总用户数
虽然批量检查响应包含可在代理已启动的运营商 (reachableUsers) 上立即联系到的电话号码列表,但响应还包含两个值,可帮助您估计所有运营商中可联系到的用户总数。
运作方式
当代理执行批量功能检查时,RBM 会随机抽样检查约 75% 的这些号码,以检查所有运营商(报告在 totalRandomSampleUserCount 中)。无论运营商的发布状态如何,RBM 还会返回随机抽样中可访问 RBM 的号码数量 (reachableRandomSampleUserCount)。通过将 reachableRandomSampleUserCount 除以 totalRandomSampleUserCount,您可以估计代理在所有运营商上发布时可覆盖的号码百分比。
例如,如果您在批量功能检查中指定 5,000 个电话号码,而 RBM 随机抽样约 75% 的指定号码,则 totalRandomSampleUserCount 可能为 3750。如果 reachableRandomSampleUserCount 为 3000,则表示 80% 的抽样号码可接通。
考虑随机抽样
测试随机样本可能会导致百分比出现差异。为了考虑随机抽样的影响,请使用大量电话号码运行批量功能检查。您还可以多次使用相同的号码批次执行检查,然后对结果求平均值,以使随机抽样行为正常化。
发送批量功能检查
以下代码会发送批量功能检查并等待响应。如需了解格式设置和值选项,请参阅 users.batchGet。
电话号码必须采用 E.164 格式(例如“+12223334444”),并且该列表必须包含 500 到 10,000 个唯一的电话号码。
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/users:batchGet?agentId=AGENT_ID \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "users": [ "PHONE_NUMBER", ] }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Specify phone numbers let phoneNumbers = ['+12223334444', '+12223334444']; // Perform a bulk capability check rbmApiHelper.getUsers(phone_numbers, function(response) { // Print the bulk capability check response console.log(response); });
Java
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Perform a bulk capability check BatchGetUsersResponse batchGetUsersResponse = rbmApiHelper.getUsers(Arrays.asList("+12223334444", "+12223334444"));
Python
# Reference to RBM Python client helper from rcs_business_messaging import rbm_service # Perform a bulk capability check response = rbm_service.make_batch_cap_request(['+12223334444', '+12223334444'])
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Perform a bulk capability check BatchGetUsersResponse batchGetUsersResponse = rbmApiHelper.GetUsers(new List({"+12223334444", "+12223334444"}));
批量功能检查响应
运行批量功能检查后,RBM 会返回 JSON 格式的响应。
{
"reachableUsers": [
"PHONE_NUMBER"
],
"totalRandomSampleUserCount": "COUNT_OF_SAMPLE",
"reachableRandomSampleUserCount": "REACHABLE_FROM_SAMPLE"
}| 字段 | 说明 |
|---|---|
reachableUsers
|
代理已发布运营商的可触达用户列表。 |
totalRandomSampleUserCount
|
指定数字的随机样本的计数。通常约为指定数量的 75%。 |
reachableRandomSampleUserCount
|
随机样本中在所有运营商上均可实现 RBM 可达性的号码数量,无论代理是在哪个运营商上启动的。此数量用于大致估算所有运营商的可触达用户总数。 |
reachableUsersMap
|
仅限输出。运营商 ID 与相应运营商上可联系的用户列表的映射。此字段仅针对美国电话号码进行填充。 |
工具:批量功能检查脚本
Buck 功能检查脚本(登录以进行下载) 使用 CSV 文件作为输入和输出格式执行批量功能检查。该脚本会解析 MSISDN 的 CSV 文件,并使用 RBM SDK 检查每个列出的设备的功能。
如果虚拟机配备 2 个 CPU 和 4GB RAM,并以 500 个线程运行脚本,则可达到大约 1K QPS,但总体 QPS 取决于所用机器、设备所在国家/地区、代理的区域配置和所用 API 端点。
前提条件
在使用该工具执行批量功能检查之前,请获取以下信息:
- 包含要执行功能检查的 MSISDN 的 CSV 文件的路径
- 开发机器上的代理服务账号密钥的路径
此外,您需要在开发机器上安装以下软件:
- Apache Maven 3.3.9 或更高版本
- Java 8
设置
如需设置开发机器以进行批量功能检查,请执行以下操作:
- 下载并提取 批量功能检查脚本(登录以进行下载)。
- 按照 README 中的步骤操作。
运行批量功能检查
如需运行批量检查,请按以下步骤操作:
- 在终端中,前往脚本的根目录。
运行以下命令:
export MAVEN_OPTS="-Xms1024m -Xmx3000m"mvn compile && mvn exec:java -Dexec.args="AGENT_ID INPUT_FILE OUTPUT_FILE NUM_OF_THREADS START_INDEX END_INDEX"将变量替换为您确定的值。
替换 为 示例 AGENT_ID RCS for Business 代理的 ID。 welcome-botINPUT_FILE 输入 CSV 文件的路径。 input.csvOUTPUT_FILE 输出 CSV 文件的路径。 output.csvNUM_OF_THREADS 要专用于功能检查的线程数。 500START_INDEX 可选。CSV 文件中开始运行检查的值。 5END_INDEX 可选。CSV 文件中用于结束检查的值。 500脚本完成后,打开输出 CSV 文件以查看结果。