更新时间:2024-11-21 GMT+08:00
带建议回复消息的多卡片5G消息
代码样例
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 FivegMessageOutBoundMultiCardMessageWithResponse {
// 带有值的返回成功状态码
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 FivegMessageOutBoundMultiCardMessageWithResponse() {
}
/**
* 多卡片发送消息
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger(FivegMessageOutBoundMultiCardMessageWithResponse.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<>();
Map<String, Object> childNextMap = new HashMap<>();
childNextMap.put("capabilityId", "Chatbot");
childNextMap.put("version","*;+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot.sa\"");
childMap.put("senderAddress", "sip:471412.huawei@botplatform.rcs.chinamobile.com");
childMap.put("address", "sip:+8613911111018@ims.mnc000.mcc460.3gppnetwork.org");
childMap.put("destinationAddress", "sip:+8613911111018@ims.mnc000.mcc460.3gppnetwork.org");
childMap.put("bodyText", "\n--next\nContent-Type: application/vnd.gsma.botmessage.v1.0+json\nContent-Disposition: inline; filename=\"Message\"\nContent-Length: [content length]\n\n{\n \"message\": {\n \"generalPurposeCardCarousel\": {\n \"layout\": {\n \"cardWidth\": \"MEDIUM_WIDTH\"\n },\n \"content\": [\n {\n \"media\": {\n \"mediaUrl\": \"https://cdn.server/path/media.mp4\",\n \"mediaContentType\": \"video/mp4\",\n \"thumbnailUrl\": \"https://cdn.server/path/media.png\",\n \"thumbnailContentType\": \"image/png\",\n \"height\": \"SHORT_HEIGHT\"\n },\n \"title\": \"This is the first rich card in a carousel.\",\n \"description\": \"This is the description of the rich card. It's the first field that will be truncated if it exceeds the maximum width or height of a card.\",\n \"suggestions\": [\n {\n \"action\": {\n \"mapAction\": {\n \"showLocation\": {\n \"location\": {\n \"latitude\": 37.4220041,\n \"longitude\": -122.0862515,\n \"label\": \"Googleplex\"\n },\n \"fallbackUrl\": \"https://www.google.com/maps/@37.4219162,-122.078063,15z\"\n }\n },\n \"displayText\": \"Show location on a map\",\n \"postback\": {\n \"data\": \"set_by_chatbot_open_map\"\n }\n }\n },\n {\n \"action\": {\n \"calendarAction\": {\n \"createCalendarEvent\": {\n \"startTime\": \"2017-03-14T00:00:00Z\",\n \"endTime\": \"2017-03-14T23:59:59Z\",\n \"title\": \"Meeting\",\n \"description\": \"GSG review meeting\"\n }\n },\n \"displayText\": \"Schedule Meeting\",\n \"postback\": {\n \"data\": \"set_by_chatbot_create_calendar_event\"\n }\n }\n }\n ]\n },\n {\n \"title\": \"This is the second rich card in the carousel.\",\n \"description\": \"Carousel cards need to specify a card width in the 'layout' section. For small width cards, only short and medium height media are supported.\",\n \"[...]\": \"[...]\"\n }\n ]\n }\n }\n}\n\n--next\nContent-Type: application/vnd.gsma.botsuggestion.v1.0+json\nContent-Disposition: inline; filename=\"Chiplist.lst\"\nContent-Length: [content length]\n\n{\n\"suggestions\": [\n{\n\"reply\": {\n\"displayText\": \"Yes\",\n\"postback\": {\n\"data\": \"set_by_chatbot_reply_yes\"\n}}},\n{\n\"reply\": {\n\"displayText\": \"No\",\n\"postback\": {\n\"data\": \"set_by_chatbot_reply_no\"\n}}},\n{\n\"action\": {\n\"urlAction\": {\n\"openUrl\": {\n\"url\": \"https://www.google.com\"\n}},\n\"displayText\": \"Open website or deep link\",\n\"postback\": {\n\"data\": \"set_by_chatbot_open_url\"\n}}},\n{\n\"action\": {\n\"dialerAction\": {\n\"dialPhoneNumber\": {\n\"phoneNumber\": \"+1650253000\"\n}},\n\"displayText\": \"Call a phone number\",\n\"postback\": {\n\"data\": \"set_by_chatbot_open_dialer\"\n}}}]}\n--next--\n");
childMap.put("destinationTerminal", "Native");
childMap.put("imFormat", "IM");
childMap.put("contentType", "multipart/mixed; boundary=\"next\"");
childMap.put("serviceCapability", childNextMap);
map.put("destinationAddress", "tel:+8613911111030");
map.put("clientCorrelator", "567895");
map.put("outboundIMMessage", childMap);
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"],"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