package com.huawei.demo;
import com.huawei.demo.enums.TemplateAuditState;
import com.huawei.demo.enums.TemplateState;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.core.utils.StringUtils;
import com.huaweicloud.sdk.koomessage.v1.KooMessageClient;
import com.huaweicloud.sdk.koomessage.v1.model.AIMResolveTask;
import com.huaweicloud.sdk.koomessage.v1.model.AIMTemplate;
import com.huaweicloud.sdk.koomessage.v1.model.AimPersonalTemplateContent;
import com.huaweicloud.sdk.koomessage.v1.model.AimPersonalTemplateContentAction;
import com.huaweicloud.sdk.koomessage.v1.model.AimPersonalTemplateFactory;
import com.huaweicloud.sdk.koomessage.v1.model.AimPersonalTemplatePage;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimPersonalTemplateRequest;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimPersonalTemplateRequestBody;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimPersonalTemplateResponse;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimSendTaskRequest;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimSendTaskRequestBody;
import com.huaweicloud.sdk.koomessage.v1.model.CreateAimSendTaskResponse;
import com.huaweicloud.sdk.koomessage.v1.model.CreateResolveTaskParam;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimSendDetailsRequest;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimSendDetailsResponse;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimSendTasksRequest;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimSendTasksResponse;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimTemplatesRequest;
import com.huaweicloud.sdk.koomessage.v1.model.ListAimTemplatesResponse;
import com.huaweicloud.sdk.koomessage.v1.model.SmsChannel;
import com.huaweicloud.sdk.koomessage.v1.model.UploadAimTemplateMaterialRequest;
import com.huaweicloud.sdk.koomessage.v1.model.UploadAimTemplateMaterialRequestBody;
import com.huaweicloud.sdk.koomessage.v1.model.UploadAimTemplateMaterialResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
public class SendAimTask {
private static final Logger logger = LoggerFactory.getLogger(SendAimTask.class);
public static void main(String[] args) {
String ak = "<YOUR AK>";
String sk = "<YOUR SK>";
BasicCredentials credentials = new BasicCredentials().withAk(ak).withSk(sk);
HttpConfig config = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true);
KooMessageClient kmClient = KooMessageClient.newBuilder()
.withCredential(credentials)
.withEndpoints(Arrays.asList("koomessage.myhuaweicloud.com"))
.withHttpConfig(config)
.build();
UploadAimTemplateMaterialRequest uploadAimTemplateMaterialRequest = buildUploadAimTemplateMaterialRequest();
UploadAimTemplateMaterialResponse uploadAimTemplateMaterialResponse = uploadAimTemplateMaterial(kmClient,
uploadAimTemplateMaterialRequest);
String aimResourceId;
if (uploadAimTemplateMaterialResponse != null && uploadAimTemplateMaterialResponse.getData() != null
&& !StringUtils.isEmpty(uploadAimTemplateMaterialResponse.getData().getAimResourceId())) {
aimResourceId = uploadAimTemplateMaterialResponse.getData().getAimResourceId();
System.out.println(aimResourceId);
}
CreateAimPersonalTemplateRequest createAimPersonalTemplateRequest = buildCreateAimPersonalTemplateRequest();
CreateAimPersonalTemplateResponse createAimPersonalTemplateResponse = createAimPersonalTemplate(kmClient,
createAimPersonalTemplateRequest);
if (createAimPersonalTemplateResponse != null && createAimPersonalTemplateResponse.getData() != null
&& !StringUtils.isEmpty(createAimPersonalTemplateResponse.getData().getTplId())) {
String tplId = createAimPersonalTemplateResponse.getData().getTplId();
System.out.println(tplId);
}
String tplId = "<YOUR tplId>";
AIMTemplate template = getAimTemplateById(kmClient, tplId);
if (template != null && TemplateAuditState.APPROVED.getCode() == template.getAuditState()
&& TemplateState.ENABLE.getCode() == template.getTplState()) {
CreateAimSendTaskResponse sendTask = createSendTask(kmClient, tplId);
assert sendTask != null;
String taskId = sendTask.getTaskId();
ListAimSendTasksRequest listAimSendTasksRequest = new ListAimSendTasksRequest();
listAimSendTasksRequest.setOffset(0);
listAimSendTasksRequest.setLimit(10);
listAimSendTasksRequest.setTaskId(taskId);
ListAimSendTasksResponse response = kmClient.listAimSendTasks(listAimSendTasksRequest);
System.out.println(JsonUtils.toJSON(response));
ListAimSendDetailsRequest listAimSendDetailsRequest = new ListAimSendDetailsRequest();
listAimSendDetailsRequest.setOffset(0);
listAimSendDetailsRequest.setLimit(10);
listAimSendDetailsRequest.setTaskId(taskId);
ListAimSendDetailsResponse listAimSendDetailsResponse = kmClient.listAimSendDetails(
listAimSendDetailsRequest);
System.out.println(JsonUtils.toJSON(listAimSendDetailsResponse));
}
}
* 构建上传智能信息模板素材请求
*
* @return UploadAimTemplateMaterialRequest 上传智能信息模板素材请求
*/
public static UploadAimTemplateMaterialRequest buildUploadAimTemplateMaterialRequest() {
UploadAimTemplateMaterialRequestBody body = new UploadAimTemplateMaterialRequestBody()
.withResourceType("image")
.withFileType("url")
.withFileUrl("<YOUR fileUrl>")
.withMaterialId(UUID.randomUUID().toString())
.withImageRate("sixteenToNine")
.withDescription("<YOUR description>");
UploadAimTemplateMaterialRequest request = new UploadAimTemplateMaterialRequest();
request.withBody(body);
return request;
}
* 智能信息上传模板素材
*
* @param kmClient KooMessage sdk 客户端
* @param request 上传模板素材请求
* @return UploadAimTemplateMaterialResponse 上传模板素材响应
*/
public static UploadAimTemplateMaterialResponse uploadAimTemplateMaterial(KooMessageClient kmClient,
UploadAimTemplateMaterialRequest request) {
UploadAimTemplateMaterialResponse response = new UploadAimTemplateMaterialResponse();
try {
response = kmClient.uploadAimTemplateMaterial(request);
logger.info(response.toString());
return response;
} catch (ConnectionException | RequestTimeoutException e) {
logger.error("uploadAimTemplateMaterial error.", e);
} catch (ServiceResponseException e) {
logger.error("httpStatusCode: {}, requestId: {}, errorCode: {}, errorMsg: {}", e.getHttpStatusCode(),
e.getRequestId(), e.getErrorCode(), e.getErrorMsg());
}
return response;
}
* 构建创建智能信息个人模板请求
*
* @return CreateAimPersonalTemplateRequest 创建智能信息个人模板请求
*/
public static CreateAimPersonalTemplateRequest buildCreateAimPersonalTemplateRequest() {
CreateAimPersonalTemplateRequest request = new CreateAimPersonalTemplateRequest();
List<AimPersonalTemplatePage> pages = buildAimPersonalTemplatePages();
List<AimPersonalTemplateFactory> templateFactories = buildAimPersonalTemplateFactories();
CreateAimPersonalTemplateRequestBody body = new CreateAimPersonalTemplateRequestBody()
.withUseId(2)
.withCardId("StandardImageAndText")
.withTplName("<YOUR tplName>")
.withPages(pages)
.withParams(Collections.emptyList()).withFactorys(templateFactories);
request.withBody(body);
return request;
}
* 构建智能信息个人模板支持厂商列表
*
* @return List<AimPersonalTemplateFactory> 模板支持厂商列表
*/
private static List<AimPersonalTemplateFactory> buildAimPersonalTemplateFactories() {
List<AimPersonalTemplateFactory> templateFactories = new ArrayList<>(3);
AimPersonalTemplateFactory huaweiFactory = new AimPersonalTemplateFactory().withFactoryType("HUAWEI")
.withState(1);
templateFactories.add(huaweiFactory);
AimPersonalTemplateFactory xiaomiFactory = new AimPersonalTemplateFactory().withFactoryType("XIAOMI")
.withState(1);
templateFactories.add(xiaomiFactory);
AimPersonalTemplateFactory oppoFactory = new AimPersonalTemplateFactory().withFactoryType("OPPO").withState(1);
templateFactories.add(oppoFactory);
return templateFactories;
}
* 构建智能信息个人模板协议
*
* @return List<AimPersonalTemplatePage> 模板协议
*/
private static List<AimPersonalTemplatePage> buildAimPersonalTemplatePages() {
List<AimPersonalTemplatePage> pages = new ArrayList<>(1);
AimPersonalTemplatePage page = new AimPersonalTemplatePage();
List<AimPersonalTemplateContent> contents = new ArrayList<>(4);
AimPersonalTemplateContent imageContent = new AimPersonalTemplateContent()
.withType("image")
.withSrcType(1)
.withSrc("<YOUR aimResourceId>")
.withActionType("OPEN_BROWSER")
.withAction(new AimPersonalTemplateContentAction()
.withTarget("<YOUR targetUrl>"))
.withPositionNumber(1);
contents.add(imageContent);
AimPersonalTemplateContent titleContent = new AimPersonalTemplateContent().withType("text")
.withContent("<YOUR templateTitle>")
.withIsTextTitle("true")
.withPositionNumber(2);
contents.add(titleContent);
AimPersonalTemplateContent mainContent = new AimPersonalTemplateContent().withType("text")
.withContent("<YOUR templateText>")
.withIsTextTitle("false")
.withPositionNumber(3);
contents.add(mainContent);
AimPersonalTemplateContent buttonContent = new AimPersonalTemplateContent().withType("button")
.withContent("<YOUR templateButton>")
.withActionType("OPEN_BROWSER")
.withPositionNumber(4)
.withAction(new AimPersonalTemplateContentAction().withTarget("<YOUR targetUrl>"));
contents.add(buttonContent);
page.withContents(contents).withPageOrder(1);
pages.add(page);
return pages;
}
* 创建智能信息个人模板
*
* @param kmClient KooMessage sdk 客户端
* @param request 创建智能信息个人模板请求
* @return CreateAimPersonalTemplateResponse 创建智能信息个人模板响应
*/
public static CreateAimPersonalTemplateResponse createAimPersonalTemplate(KooMessageClient kmClient,
CreateAimPersonalTemplateRequest request) {
CreateAimPersonalTemplateResponse response = new CreateAimPersonalTemplateResponse();
try {
response = kmClient.createAimPersonalTemplate(request);
logger.info(response.toString());
return response;
} catch (ConnectionException | RequestTimeoutException e) {
logger.error("createAimPersonalTemplate error.", e);
} catch (ServiceResponseException e) {
logger.error("httpStatusCode: {}, requestId: {}, errorCode: {}, errorMsg: {}", e.getHttpStatusCode(),
e.getRequestId(), e.getErrorCode(), e.getErrorMsg());
}
return response;
}
* 根据模板ID查询智能信息模板
*
* @param kmClient 请求客户端
* @param tplId 模板ID
* @return AIMTemplate 智能信息模板信息
*/
public static AIMTemplate getAimTemplateById(KooMessageClient kmClient, String tplId) {
AIMTemplate aimTemplate = new AIMTemplate();
try {
ListAimTemplatesRequest request = new ListAimTemplatesRequest();
request.setTplId(tplId);
ListAimTemplatesResponse listAIMTemplatesResponse = kmClient.listAimTemplates(request);
logger.info(listAIMTemplatesResponse.toString());
List<AIMTemplate> templates = listAIMTemplatesResponse.getTemplates();
if (templates != null && templates.size() > 0) {
return templates.get(0);
}
} catch (ConnectionException | RequestTimeoutException e) {
logger.error("getAimTemplateById error.", e);
} catch (ServiceResponseException e) {
logger.error("httpStatusCode: {}, requestId: {}, errorCode: {}, errorMsg: {}", e.getHttpStatusCode(),
e.getRequestId(), e.getErrorCode(), e.getErrorMsg());
}
return aimTemplate;
}
* 创建智能信息发送任务
*
* @param kmClient 请求客户端
* @param tplId 模板ID
* @return CreateAimSendTaskResponse 发送任务响应
*/
public static CreateAimSendTaskResponse createSendTask(KooMessageClient kmClient, String tplId) {
CreateAimSendTaskResponse sendTaskResponse = new CreateAimSendTaskResponse();
try {
AIMResolveTask resolve = buildAimResolveTask(tplId);
SmsChannel smsChannel = buildSmsChannel();
CreateAimSendTaskRequestBody body = new CreateAimSendTaskRequestBody()
.withTaskName("<YOUR taskName>")
.withSmsChannel(smsChannel)
.withResolveTask(resolve);
CreateAimSendTaskRequest request = new CreateAimSendTaskRequest();
request.setBody(body);
sendTaskResponse = kmClient.createAimSendTask(request);
System.out.println(sendTaskResponse);
return sendTaskResponse;
} catch (ConnectionException | RequestTimeoutException e) {
logger.error("createSendTask error.", e);
} catch (ServiceResponseException e) {
logger.error("httpStatusCode: {}, requestId: {}, errorCode: {}, errorMsg: {}", e.getHttpStatusCode(),
e.getRequestId(), e.getErrorCode(), e.getErrorMsg());
}
return sendTaskResponse;
}
* 构建短链生成配置
*
* @param tplId 智能信息模板ID
* @return AIMResolveTask 短链生成配置
*/
private static AIMResolveTask buildAimResolveTask(String tplId) {
String targetPhone = "<YOUR targetPhone>";
CreateResolveTaskParam param = new CreateResolveTaskParam()
.withCustFlag(targetPhone);
List<CreateResolveTaskParam> params = new ArrayList<>();
AIMResolveTask resolve = new AIMResolveTask()
.withTplId(tplId)
.withAimCodeType("individual")
.withResolveTimes(1)
.withParams(params)
.withExpirationTime(7);
params.add(param);
return resolve;
}
* 构建短信发送通道参数
*
* @return SmsChannel 短息发送通道参数
*/
private static SmsChannel buildSmsChannel() {
return new SmsChannel()
.withChannelNumber("<YOUR smsChannelNumber>")
.withSmsSign("<YOUR smsSign>")
.withSmsTplId("<YOUR smsTplId>")
.withSmsAppName("<YOUR smsAppName>");
}
}