更新时间:2024-11-21 GMT+08:00
码流转成json的多卡片+悬浮菜单
代码样例
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import com.fasterxml.jackson.databind.ObjectMapper;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* 多卡片发送消息悬浮菜单
*/
public class FivegMessageOutBoundMultiCardAndFloatMenu {
// 带有值的返回成功状态码
static final int SUCCESS_200_RES = 200;
// 带有值的返回成功状态码
static final int SUCCESS_201_RES = 201;
// 不带值的返回成功状态码
static final int SUCCESS_204_RES = 204;
/**
* 设置不验证主机
*/
private static final HostnameVerifier DO_NOT_VERIFY = (hostname, session) -> true;
private FivegMessageOutBoundMultiCardAndFloatMenu() {
}
/**
* 多卡片发送消息悬浮菜单
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger(FivegMessageOutBoundMultiCardMessage.class.getName());
logger.setLevel(Level.WARNING);
trustAllHttpsCertificates();
URL realUrl = getUrl();
HttpsURLConnection connection = (HttpsURLConnection) realUrl.openConnection();
// 设置请求方式
connection.setDoOutput(true);
connection.setHostnameVerifier(DO_NOT_VERIFY);
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Username=\"chatbottest12swt96\", Password=\"******\"");
connection.setRequestProperty("Content-Type", "application/json");
ObjectMapper objectMapper = new ObjectMapper();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), UTF_8));
pw.write(objectMapper.writeValueAsString(getMap()));
pw.flush();
connection.connect();
int status = connection.getResponseCode();
logger.warning("5GMessageResponse status: " + status);
InputStream is;
if (status != SUCCESS_200_RES) {
if (status == SUCCESS_201_RES) {
is = connection.getInputStream();
} else if (status == SUCCESS_204_RES) {
logger.warning("No Content Success");
is = connection.getInputStream();
} else { // error
logger.warning("Error, DELETE status: " + status);
is = connection.getErrorStream();
}
} else { // 200
logger.warning("OK,DELETE Success, DELETE status: " + status);
is = connection.getInputStream();
}
if (is != null) {
BufferedReader br;
br = new BufferedReader(new InputStreamReader(is, UTF_8));
String line;
StringBuilder result = new StringBuilder();
// 读取数据
while ((line = br.readLine()) != null) {
result.append(line + System.lineSeparator().intern());
}
br.close();
logger.warning("Content: " + result.toString());
// 关流
is.close();
}
// 关闭连接
connection.disconnect();
}
/**
* 获取URL
*
* @return url
* @throws MalformedURLException
*/
public static URL getUrl() throws MalformedURLException {
URL realUrl;
// CSP接口 不需要sag带tid字段
String cspUrl = "https://10.120.207.128:18323/openchatbot/v2/"
+ "sip:888.chatbot@botplatform.rcs.chinamobile.com/outbound";
return new URL(cspUrl);
}
/**
* 返回Body体
*
* @return Body
*/
public static Map<String, Object> getMap() {
Map<String, Object> map = new HashMap<>();
Map<String, Object> childMap = new HashMap<>();
childMap.put("imFormat", "IM");
childMap.put("contentType", "multipart/mixed; boundary=\"next\"");
childMap.put("bodyText", "<![CDATA[--next\r\nContent-Type: application/vnd.gsma.botmessage.v1.0+json\r\nTransfer-Encoding: chunked\r\n\r\n{\r\n \"generalPurposeCardCarousel\":{\r\n \"layout\":{\r\n \"cardOrientation\":\"VERTICAL\",\r\n \"imageAlignment\":\"LEFT\",\r\n \"titleFontStyle\":[\r\n \"underline\",\r\n \"bold\"\r\n ],\r\n \"descriptionFontStyle\":[\r\n \"calibri\"\r\n ]\r\n },\r\n \"content\":[\r\n\t\t\t{\r\n \"media\":{\r\n \"mediaUrl\":\"http://120.198.247.156:9090/Access/PF?ID=MzdCQjE4RjcwQzM0RkZENzkyNkIyNEI3MDUwRDAwOUIyOUQ3Qzk2QTNBQkIzQzI2QTE2RDQ3OEZGOTY1NEE3QkQ5NDQwNDNGNjc3RDE1NzU3OEExN0E3ODEzQjNDMDYw\",\r\n \"mediaContentType\":\"image/png\",\r\n \"thumbnailUrl\":\"http://120.198.247.156:9090/Access/PF?ID=QjZBQjE0QjUxRjA4NEZFRjhDQ0MyRkE4MzhENTM1Mzc5MTY5RkM0Qjk0QzgzREM5ODZGQzk1QUM1QkJGNkVGNjQ3RDYwNURDQkI3MTMwQjU2QUVEOTQ4OUM0NjA5N0M1\",\r\n \"thumbnailContentType\":\"image/png\",\r\n \"height\":\"MEDIUM_HEIGHT\",\r\n \"contentDescription\":\"VR旅游\"\r\n },\r\n\t\t\t\t\"suggestions\":[\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"action\": {\r\n\t\t\t\t\t\t\"urlAction\": {\r\n\t\t\t\t\t\t\"openUrl\": {\r\n\t\t\t\t\t\t\"url\": \"http://webapp.vizen.cn/gugong_app/index.html\",\r\n\t\t\t\t\t\t\"application\": \"webview\",\r\n\t\t\t\t\t\t\"viewMode\": \"half\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"displayText\": \"VR旅游\",\r\n\t\t\t\t\t\t\"postback\": {\r\n\t\t\t\t\t\t\"data\": \"set_by_chatbot_open_url\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t]\r\n },\r\n {\r\n \"media\":{\r\n \"mediaUrl\":\"http://120.198.247.156:9090/Access/PF?ID=OERDMDk3OUM3RjRENkE1MzNENkVFMUVENTgwNzM5MzE0QzdFRjk2NjAwMEQ3MDNGRkI5MUE2MTMwNDk3MkYxMzY2MzQxRjdBRTg5MUUzNzRDNUY3NDU0NEY3MTgzREQ3\",\r\n \"mediaContentType\":\"image/png\",\r\n \"thumbnailUrl\":\"http://120.198.247.156:9090/Access/PF?ID=MTM1MTMyMjg0ODlGRjUzNThCNjcyODg4ODkxNzBDRDgwMTIyRTM4ODE4RUM1MjFEMzczN0Q4RTE4NDUxRjMzNjlBNjdDODI2MThDRUVGQkE0QkM4NDZGNUQyQTRGMDM2\",\r\n \"thumbnailContentType\":\"image/png\",\r\n \"height\":\"MEDIUM_HEIGHT\",\r\n \"contentDescription\":\"云游戏\"\r\n },\r\n\t\t\t\t\"suggestions\":[\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"action\": {\r\n\t\t\t\t\t\t\"displayText\": \"敬请期待\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t]\r\n },\t\t\t\r\n\t\t\t{\r\n \"media\":{\r\n \"mediaUrl\":\"http://120.198.247.156:9090/Access/PF?ID=QjRCMTgzQUFDNTJGNzRDOUZEN0VEOTY0QzVEODAyNDA5QTUwQjAwRUI3NEZEQUREMjhCREIwRjJDQjdCMUZDN0RFRTAzOUE4N0VERkVCNTVBRjY1ODc2QUUxRTU0RjA0\",\r\n \"mediaContentType\":\"image/png\",\r\n \"thumbnailUrl\":\"http://120.198.247.156:9090/Access/PF?ID=QzBGRDRBRTk2MTkwNzcwMjVCRUMwOEM3MDdFOUI2MDBENjQ0RTU0RkVGRTZENjI3M0IzQjREOTM1ODAwRkMyOTNGNjU3Mjc2MUVDQjU0QjU2RDhENzkyRDgxNkQyMzZC\",\r\n \"thumbnailContentType\":\"image/png\",\r\n \"height\":\"MEDIUM_HEIGHT\",\r\n \"contentDescription\":\"直播间\"\r\n },\r\n\t\t\t\t\"suggestions\":[\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"action\": {\r\n\t\t\t\t\t\t\"displayText\": \"敬请期待\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t]\r\n },\r\n {\r\n \"media\":{\r\n \"mediaUrl\":\"http://120.198.247.156:9090/Access/PF?ID=MzJENTJERDg4QTFBRTNBQjNCRTFGRjE5RUExMzUzNjE1NTVCMTZBMTg2Q0RBQzZCMEYzNzNENEJFN0VGOTE2MTA2MjQ2NzE5N0JBMzVEQkU1NDQ5MzZCRkM5RTgwRThG\",\r\n \"mediaContentType\":\"image/png\",\r\n \"thumbnailUrl\":\"http://120.198.247.156:9090/Access/PF?ID=ODk0QjhCQUJBM0ZENjk5NkQ0OEFFMzczRTI4NEYwNkE3NTg4RTQ4MjAwMkU1Qzc0RDlENzdBM0EwRjU2NUU3OUJBRUU5QzBDOTIwMzNEOUJERERCQjZDRDg2RDYyQzQ0\",\r\n \"thumbnailContentType\":\"image/png\",\r\n \"height\":\"MEDIUM_HEIGHT\",\r\n \"contentDescription\":\"一起看\"\r\n },\r\n\t\t\t\t\"suggestions\":[\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"action\": {\r\n\t\t\t\t\t\t\"displayText\": \"敬请期待\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t]\r\n }\r\n ]\r\n }\r\n}\r\n--next\r\nContent-Type: application/vnd.gsma.botsuggestion.v1.0+json\r\nTransfer-Encoding: chunked\r\n\r\n{\r\n \"suggestions\":[\r\n {\r\n \"reply\":{\r\n \"displayText\":\"好看\",\r\n \"postback\":{\r\n \"data\":\"好看\"\r\n }\r\n }\r\n },\r\n\t\t{\r\n \"reply\":{\r\n \"displayText\":\"好玩\",\r\n \"postback\":{\r\n \"data\":\"好玩\"\r\n }\r\n }\r\n },\r\n\t\t{\r\n \"reply\":{\r\n \"displayText\":\"好聊\",\r\n \"postback\":{\r\n \"data\":\"好聊\"\r\n }\r\n }\r\n } \r\n ]\r\n}\r\n--next--]]>");
childMap.put("contentEncoding", "11");
childMap.put("shortMessageSupported", "1222");
childMap.put("storeSupported", "str22ing");
map.put("address", "sip:+8615914400969@ims.mnc000.mcc460.3gppnetwork.org");
map.put("destinationAddress", "sip:+8615914400969@ims.mnc000.mcc460.3gppnetwork.org");
map.put("senderAddress", "sip:90100@botplatform.rcs.chinamobile.com");
map.put("senderName", "MyName");
map.put("outboundIMMessage", childMap);
map.put("smsBodyText", "5gsms");
return map;
}
static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
return;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
return;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
}
|
参数名称 |
参数说明 |
|---|---|
|
url |
请求地址 |
|
Map |
封装请求发送的信息、参数 |
|
Connection |
封装建立连接的认证信息、请求方式等 |
消息样例
resultMsg.toString(){"senderAddress":"******","senderName":"Default Name","address":"******","destinationAddress":"******","clientCorrelator":"567895","outboundIMMessage":{"contributionID":"c67771cf-bd31-483e-8f8a-479df74db92e","storeSupported":"true","bodyText":"******","reportRequest":["Delivered","Displayed","Failed","SMS"],"conversationID":"fSFDSFDR$%#$%$%$%","subject":"Default Subject","shortMessageSupported":"false","contentEncoding":"utf8","contentType":"multipart/mixed; boundary=\"next\"","serviceCapability":[{"capabilityId":"ChatbotSA","version":"+g.gsma.rcs.botversion=\"#=1\""},{"capabilityId":"ChatbotSA222","version":"+g.gsma.rcs.botversion=\"#=1\""}]}}
父主题: JAVA