更新时间:2024-07-22 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