채널연동메뉴얼
1.1. 엠싱크채널개요 MThink ( 엠씽크 ) 는채널 API 를제공하여 Legacy System 에서발생하는정보및메시지를채널을통해공유함으로써 Mobile Single View 를제공합니다. IT Monitoring Legacy System e-mail Cloud GroupWar e SMS, DB Mon, NMS DR Sol. APM ERP CRM Securit y All Event & Message ㆍㆍㆍㆍㆍ System N Channel Service 1 2 3 ㆍㆍㆍㆍㆍ N Feed User ㆍㆍㆍㆍㆍㆍ 1
1.2. 채널관리 채널종류 - 오픈채널 : 사용자들이자유롭게구독을할수있습니다. - 관리자지정 : 관리자가구독자를지정합니다. - 사용자인증 : 별도의사용자인증이필요한채널입니다. 메뉴에서 [ 사이트관리 > 사이트정보 > 채널관리 ] 메뉴로이동합니다. 2
1.2. 채널관리 채널을생성하거나변경, 채널구독자를관리할수있습니다. 구분항목설명 채널추가 ( ) 새로운채널을생성합니다. 채널목록 채널정보 ( ) 채널정보를수정합니다. 채널명, 썸네일이미지등을변경합니다. 삭제 ( ) 해당채널을삭제합니다. 단, 구독자가있는채널은삭제핛수없습니다. 해당채널서비스를중지하려면미사용으로변경하기바랍니다. 구독자추가 ( ) 관리자지정채널은구독자를관리자가지정핛수있습니다. 채널구독자 변경 ( ) 해당구독자의정보를변경합니다. 삭제 ( ) 해당사용자를채널구독자목록에서제거합니다. 3
1.3. 채널생성 채널을생성합니다. 1 2 3 6 4 5 7 항목 설명 채널 ID 채널의 ID 입니다. 시스템에서의해서자동적으로부여됩니다. 사용 해당채널의서비스상태를설정합니다. 미사용채널은구독싞청을핛수없습니다. 채널이름채널의이름을지정합니다. 채널주소 채널종류 소식을젂달해줄주소를입력합니다. 채널주소는사용자인증채널일경우인증이필요핚경우정의합니다. 채널의종류를선택합니다. - 오픈채널 : 사용자들이자유롭게구독을핛수있습니다. - 관리자지정 : 관리자가구독자를지정합니다. - 사용자인증 : 별도의사용자인증이필요핚채널입니다. 채널이미지채널썸네일에사용핛이미지를등록합니다. 채널설명채널에대핚설명을입력합니다. 4
1.3. 채널생성 관리자지정채널의구독자를지정합니다. 관리자지정유형의채널은관리자가구독자를지정합니다. 1. 채널구독자의추가 ( ) 버튼을클릭합니다. 2. 좌측조직도에서추가하고자하는사람이있는조직을클릭합니다. 3. 우측사용자목록에서구독자로추가핛사용자를체크 ( ) 합니다. 추가핚사용자를 [X] 버튼을클릭하여선택취소가능합니다. 4. 사용자선택이완료되었으면팝업창의추가 ( ) 버튼을클릭하여선택을완료합니다. 5
1.4. 채널구독방법 ( 일반사용자메뉴 ) PC 에서오픈형채널의구독신청을합니다. 1. 메뉴 > 채널을클릭하여구독싞청가능핚채널목록을확인합니다. 2. 구독싞청을원하는채널의구독 ( ) 버튼을클릭합니다. 3. 나타나는팝업에서확인버튼을클릭하여구독싞청을완료합니다. 6
1.4. 채널구독방법 ( 일반사용자메뉴 ) 모바일에서오픈형채널의구독신청을합니다. 1. 메뉴 > 채널목록에서구독싞청을원하는채널을클릭합니다. 2. 구독싞청화면에서 [ 구독싞청 ] 버튼을클릭합니다. 7
1.5. 채널 API 스펙 채널 API 스펙은다음과같습니다. 구분 설명 경로 Produces Consumes Headers https://[ 엠싱크URL]/rest/channel application/json application/x-www-form-urlencoded X-Auth-Token [ 채널관리에생성된 Access Key] Query parameters 필수설명 chnlid 필수시스템에서부여하는채널 ID chnluserids 선택 채널을젂달핛사용자입니다. 입력하지않으면해당채널을구독중인모든사용자열람가능엠싱크에정의핚사용자번호를지정하면됩니다. ( 일반적으로고객사인사번호, 학번등 ) title 필수채널에서젂송될피드의제목 content 필수채널피드의본문. html 태그사용가능 htmlyn 필수 Content 의내용이 html 태그이면 1, 일반텍스트는 0 contentlink 선택 채널내용 ( 본문 ) 에링크를작성하여동작실행이나 URL 링크 ( 서비스준비중 ) 8
1.5. 채널 API 스펙 채널메시지전송시입력하는값과채널정보의값의비교입니다. chnlid 에해당하는채널명 chnluserids title Content contentlink : 현재미사용 ( 서비스준비중 ) 9
1.6. 채널연동 API 샘플.NET 샘플 (VB.Net) <%@ Page Language="VisualBasic" EnableSessionState="true" AutoEventWireup="false" %> <%@ Import Namespace="System.Net" %> <%@ Import Namespace="System.IO" %> <% Dim spostdata As String Dim sdatabankpushurl As String Dim sauthtoken As String Dim schnlid As String Dim schnluserids As String Dim stitle As String Dim scontent As String Dim scontentlink As String Dim shtmlyn As String sdatabankpushurl = "https://mthink.idatabank.com/rest/channel/" sauthtoken = "GINNw3yhPZbrpvCRTwKqDWTD3DziP7AjVNLkZ11q2sMHRw98OtatcHqEAaYbiBVIvVvpJFQDPt8Wp9RtjX5 Q1LQQL65FBdFEt8suoVQnETVFa7o4bhlpiawZ25BXWq9N schnlid = "101" schnluserids = dbs044,dbs001" stitle = " 채널타이틀입니다." scontent = "<p> 그룹웨어채널피드테스트입니다.</p><p> 테스트내용을입력합니다.</p>" scontentlink = "" shtmlyn = 1 Try spostdata = " spostdata += "chnlid=" + HttpUtility.UrlEncode(sChnlId) spostdata += "&" spostdata += "chnluserids=" + HttpUtility.UrlEncode(sChnlUserIds) spostdata += "& spostdata += "title=" + HttpUtility.UrlEncode(sTitle) spostdata += "& spostdata += "content=" + HttpUtility.UrlEncode(sContent) spostdata += "& spostdata += "contentlink=" + HttpUtility.UrlEncode(sContentLink) spostdata += "& spostdata += "htmlyn=" + HttpUtility.UrlEncode(sHtmlYn) Using client As New WebClient() client.headers(httprequestheader.contenttype) = "application/x-www-form-urlencoded client.headers("x-auth-token") = sauthtoken client.headers("accept") = "application/json client.encoding = UTF8Encoding.UTF8 result = client.uploadstring(sdatabankpushurl, "POST", spostdata) End Using Catch result_err = Err.Description End Try %> 10
1.6. 채널연동 API 샘플.NET 샘플 (C#) 1/2 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace ChannelApiDemoCsharp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnchannelsave_click(object sender, EventArgs e) { // 테스트채널 3 String sdatabankpushurl = "https://mtdev.idatabank.com/rest/channel/"; String sauthtoken = @"Jmao7ybbqBuwa4fSYDBlxP302x0vkcz8ulEValtRp6dEPhO5GTveJmOWW0p4TmWojZW5Ln33Spz9h3k97K Q0Om3H1qqOVVRAyKogD2YHTYdz83C3lXcnmbdyxNHFKGwP"; String channelid = "3"; String userids = "dbs250,dbs251,dbs252,databank1,databank2"; String title = " 채널타이틀입니다. 테스트채널 3"; String content = "<p> 그룹웨어채널피드테스트입니다.</p><p> 테스트내용을입력합니다.</p>"; String contentlink = ""; String htmlyn = "1"; HttpWebRequest request = HttpWebRequest.Create(sDataBankPushUrl) as HttpWebRequest; Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.add("chnlid", channelid); parameters.add("chnluserids", userids); // 수싞자사번목록 parameters.add("title", title); // 제목 parameters.add("content", content); // 내용 parameters.add("contentlink", contentlink); // 내용 Link parameters.add("htmlyn", htmlyn); // HTML 여부 : 1 - HTML, 0 Plain // Reuse the login cookie request.cookiecontainer = new CookieContainer(); request.headers.add("x-auth-token", sauthtoken); HttpWebResponse response = apipost(request, parameters); ( 뒷장계속 ) 11
1.6. 채널연동 API 샘플.NET 샘플 (C#)( 계속 ) 2/2 Stream stream = response.getresponsestream(); StreamReader reader = new StreamReader(stream, Encoding.UTF8); string strreturn = reader.readtoend().trim(); // 리턴값 {\n \"status\" : 200\n} Console.WriteLine("strReturn:{0}", strreturn); // 소켓클로즈 reader.close(); stream.close(); response.close(); } /// <summary> /// Post 방식으로서버젂송하기위핚함수 /// </summary> /// <param name="request"></param> /// <param name="parameters"></param> /// <returns></returns> private HttpWebResponse apipost( HttpWebRequest request, IDictionary<string, string> parameters) { request.contenttype = "application/x-www-form-urlencoded"; request.method = "POST"; // ASCIIEncoding encoding = new ASCIIEncoding(); StringBuilder postdata = new StringBuilder(); foreach (var parameter in parameters) { postdata = postdata.append(string.concat(parameter.key, "=", parameter.value, "&")); } postdata.remove(postdata.length - 1, 1); byte[] rawdata = Encoding.UTF8.GetBytes(postData.ToString()); //byte[] rawdata = encoding.getbytes(postdata.tostring()); request.contentlength = rawdata.length; Stream stream = request.getrequeststream(); stream.write(rawdata, 0, rawdata.length); stream.close(); stream.dispose(); } } } return request.getresponse() as HttpWebResponse; 12
1.6. 채널연동 API 샘플 Java 샘플 1/2 package mthink.demo.channel_push; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.unsupportedencodingexception; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.closeablehttpresponse; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.closeablehttpclient; import org.apache.http.impl.client.httpclients; import org.apache.http.message.basicnamevaluepair; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.value; import org.springframework.stereotype.service; @Service public class ChannelService { private static final Logger LOGGER = LoggerFactory.getLogger(ChannelService.class); // 채널 URL : ex. https ://mthink.idatabank.com/rest/channel @Value("${channel.url}") private String channelendpoint = null; // 채널인증키 @Value("${channel.accessToken}") private String accesstoken = null; // 채널 ID : ex. 165 @Value("${channel.channelId}") private String channelid = null; ( 뒷장계속 ) 13
1.6. 채널연동 API 샘플 Java 샘플 ( 계속 ) 2/2 public void dochannelpush(string userids, String title, String content, String contentlink, String htmlyn) { LOGGER.info("Channel EndPoint : " + channelendpoint); LOGGER.info("Channel AccessToken : " + accesstoken); LOGGER.info("Channel ID : " + channelid); CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(channelEndPoint); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("chnlId", channelid)); nvps.add(new BasicNameValuePair("chnlUserIds", userids)); // 수싞자사번목록 nvps.add(new BasicNameValuePair("title", title)); // 제목 nvps.add(new BasicNameValuePair("content", content)); // 내용 nvps.add(new BasicNameValuePair("contentLink", contentlink)); // 내용 Link nvps.add(new BasicNameValuePair("htmlYn", htmlyn)); // HTML 여부 : 1 - HTML, 0 Plain try { httppost.setentity(new UrlEncodedFormEntity(nvps, "UTF-8")); httppost.setheader("content-type", "application/x-www-form-urlencoded"); httppost.setheader("x-auth-token", accesstoken); CloseableHttpResponse response = httpclient.execute(httppost); BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while ((line = br.readline())!= null) { LOGGER.info(line); } } catch (UnsupportedEncodingException e) { LOGGER.warn(e.getMessage(), e); } catch (ClientProtocolException e) { LOGGER.warn(e.getMessage(), e); } catch (IOException e) { LOGGER.warn(e.getMessage(), e); } } } 14
1.7. 채널테스트 Chrome 확장프로그램설치를통한채널 API 테스트안내입니다. 1. 구글 Chrome 브라우저를설치합니다. 2. Chrome 을실행핚후메뉴 -> 설정을클릭하여설정메뉴로들어갑니다. 15
1.7. 채널테스트 채널메시지전송테스트를위한 Chrome 확장프로그램설치입니다. 1. 설정화면에서 [ 확장프로그램 ] 메뉴로이동합니다. 2. [ 더많은확장프로그램다운로드 ] 를클릭합니다. 16
1.7. 채널테스트 채널메시지전송테스트를위한 Chrome 확장프로그램설치입니다. 1. Chrome 웹스토어에서 postman 을검색합니다. 2. 검색결과에서확장프로그램에있는 [Postman - REST Client] 를 [CHROME 에추가 ] 버튼을클릭하고나타난확인창에서 [ 확장프로그램추가 ] 를클릭하여설치합니다. 17
1.7. 채널테스트 채널메시지전송테스트입니다. 1 2 3 4 5 6 7 1. 우측상단의 [Postman - REST Client] 아이콘을클릭합니다. 2. 나타나는화면에서 [Enter request URL here] 부분에 [https://mthink.idatabank.com/rest/channel] 을입력합니다. <-고객홖경에따라다름 3. URL입력후 [POST] 를선택합니다. 4. Headers( ) 아이콘을클릭하여나타나는부분에 Header : X-Auth-Token Value : 채널의 Access-Key값을입력합니다. -> 메뉴 > 사이트관리 > 사이트정보 > 채널관리에서확인 18
1.7. 채널테스트 채널메시지전송테스트입니다. 1 2 3 4 5 6 7 5. x-www-form-urlencoded버튼 ( ) 을클릭합니다. 6. 하단에해당항목을입력합니다. chnlid : 채널ID chnluserids : 채널수싞자ID ( 여러개면 ',' 로구분 ), 입력하지않으면구독자젂원에게젂송 title : 피드제목 content : 피드내용, html코드를넣는경우하단의 htmlyn을 1로입력해야함 contentlink : 피드원본링크, 없는경우입력하지않아도됨 htmlyn : html여부 (1 : html, 0 : 일반텍스트 ) 7. 내용을모두입력하면 Send 버튼을클릭하여젂송합니다. 19
1.7. 채널테스트 채널 API 전송을위한 Header 값정보찾는방법을설명합니다. 20
1.7. 채널테스트 1 채널메시지예시값입니다. 2 3 4 5 6 1. Enter request url here : http://mthink.idatabank.com/rest/channel 2. [POST] 선택 3. [Headers] 버튼을클릭 4. Header : X-Auth-Token / Value : tzvkpnutau4...gd2mwigfb0ms 5. [x-www-form-urlencoded] 버튼을클릭 6. Key와 Value 입력 chnlid : 184 title : DR-ARK content : <!doctype html> <html> </html> htmlyn : 1 chnluserids, contentlink값은입력하지않음 7. 입력을완료후 [Send] 버튼을클릭 21
1.7. 채널테스트 채널메시지를수신했을때화면입니다. PC 화면 모바일화면 22