두레이 (https://dooray.com/main/) 라는 협업 툴이 있습니다.
해당 툴을 사용해서 회원에게 메시지를 보내는 API 연동을 개발 하였습니다.
API문서는 아래와 같습니다.
그중 "메신저 1:1 메시지 전송 API" 을 참고하였습니다.
curl -H 'Authorization: dooray-api {TOKEN}' -H 'Content-Type: application/json' -d '{"text":"Hello World","organizationMemberId":"{ORGANIZATION_MEMBER_ID}"}' https://api.dooray.com/messenger/v1/channels/direct-send
curl로 테스트 하도록 되어 있는 부분을 Java의 HttpClient로 구현해 보았습니다.
하지만 굳이 Dooray 가 아니더라도 curl을 HttpClient로 구현하고 싶은분은 해당 소스를 확인하시면 됩니다.
일단 HttpClient 관련 jar를 다운받거나 maven에 라이브러리 추가 해줘야 합니다.
해당 jar파일 입니다. 다운로드 받으세요.
이메일을 조건으로 아이디를 조회합니다.
아이디로 메시지를 보낼수 있기 때문입니다.
get방식으로 아이디를 조회하고 post방식으로 메시지를 보냅니다.
소스를 참고 하시고 필요한 부분은 주석을 달았습니다.
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.simple.parser.JSONParser;
import org.springframework.util.StringUtils;
public class CallUrl {
public static void main(String[] args) {
String id = "id"; //아이디
String pw = "pw"; //패스워드
String certification = id+":"+pw; //두레이 발급코드를 자세히 보면 : 구분자로 아이디 패스워드가 붙어있음
//필요하다면 Base64로 인코딩, 해당 API에서 인코딩 하면 에러가 발생하여 생략
//String encodedValue = Base64.encodeBase64String(certification.getBytes());
//아이디 검색을 위한 URL
String getInfoUrl = "https://api.dooray.com/common/v1/members?externalEmailAddresses=";
String searchInfo = "test@test.co.kr";
//메시지를 보내기 위한 URL
String sendMessageUrl = "https://api.dooray.com/messenger/v1/channels/direct-send";
String text = "Hello World 한글테스트";
String organizationMemberId = "";
try {
getInfoUrl = getInfoUrl+searchInfo; //메시지 전송을 위해 회원 아이디를 이메일로 검색 하는 URL
HttpGet httpGet = new HttpGet(getInfoUrl); //조회는 get방식
String authorization = "dooray-api "+certification; //dooray-api 대신 기본 인증이면 Base 사용
httpGet.setHeader("Authorization", authorization); //인증
httpGet.setHeader("Content-Type", "application/json"); //Content-Type 설정
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
CloseableHttpResponse response = httpClient.execute(httpGet);
//HTTP 상태 코드
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
ResponseHandler<String> handler = new BasicResponseHandler();
String responseBody = handler.handleResponse(response);
System.out.println(responseBody); //응답
JSONParser jsonParser = new JSONParser();
//응답받아서 json파서로 아이디 추출
org.json.simple.JSONObject jsonObj = (org.json.simple.JSONObject) jsonParser.parse(responseBody);
org.json.simple.JSONArray resultArray = (org.json.simple.JSONArray) jsonObj.get("result");
for (int i = 0; i < resultArray.size(); i++) {
org.json.simple.JSONObject resultObject = (org.json.simple.JSONObject) resultArray.get(i);
organizationMemberId = (String) resultObject.get("id"); //아이디 추출
}
if(!StringUtils.isEmpty(organizationMemberId)) { //아이디가 널이 아니면
HttpPost httpPost = new HttpPost(sendMessageUrl); //메시지는 post방식
httpPost.setHeader("Authorization", authorization); //인증
httpPost.setHeader("Content-Type", "application/json"); //Content-Type 설정
String entity = "{\"text\":\""+text+"\",\"organizationMemberId\":\""+organizationMemberId+"\"}"; //entity값 설정 문자, 아이디
httpPost.setEntity(new StringEntity(entity, "UTF-8")); //한글깨짐 방지 UTF-8
httpClient = HttpClientBuilder.create().build();
response = httpClient.execute(httpPost);
//HTTP 상태 코드
statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { //성공
handler = new BasicResponseHandler();
responseBody = handler.handleResponse(response);
}else {
System.out.println("statusCode ==> "+statusCode);
}
}
System.out.println(responseBody);
}else {
System.out.println("statusCode ==> "+statusCode);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java Json 읽기, 쓰기 예제 (Jackson) (0) | 2023.02.07 |
---|---|
Java Excel 읽기, 쓰기 (Apache POI) (0) | 2023.02.07 |
Java 대소문자 영어, 숫자 포함 난수 생성 (0) | 2023.02.07 |
java 문자열 href 링크 추가 (0) | 2020.11.26 |
85.6 ASCII 코드표 (0) | 2020.11.26 |
댓글 영역