구글 챗으로 LG U+ 센트릭스 전화 알림 받기 2/3
1. 연재기사 소개
이 연재기사에서는 LG U+ IMS 센트릭스 기업 인터넷 전화로 전화가 올 때에, 구글 챗으로 알림을 보내는 방법을 소개합니다.
고객 응대를 위해서 기업 인터넷 전화를 사용하는 경우, 전화가 올 때에 고객이 우리 DB에 이미 있는 고객인지 또는 신규 고객인지 구글 챗을 통해 알 수 있다면 좋지 않을까요? LG U+ IMS 센트릭스 기업 인터넷 전화의 Open API를 활용하면 여러 가지 편의 기능들을 구현할 수 있습니다. 기사에서 필요한 부분을 확인해보세요.
이번 포스트는 2번째 포스트로 서버에 릴레이용 php 파일을 세팅하는 방법을 다룹니다.
구글 챗으로 LG U+ 센트릭스 전화 알림 받기 1/3
구글 챗으로 LG U+ 센트릭스 전화 알림 받기 2/3
구글 챗으로 LG U+ 센트릭스 전화 알림 받기 3/3
2. 구글 앱스 스크립트 doPost(e) 생성하기
이제 고정 IP의 서버는 세팅하였습니다. 이제 다음과 같은 프로세스를 준비해야 합니다.
- 서버에서 callback URL로 사용할 php 파일
- php 파일이 수신할 데이터를 앱스 스크립트로 릴레이해 줄 때 이를 수신할 doPost(e) 앱스 스크립트 웹앱
- doPost(e)에서 수신한 정보를 구글 챗에 보내주는 앱스 스크립트
이번 포스트에서는 1, 2번을 다루고 다음 포스트에서 3번을 다룹니다. php 파일을 만들 때에, doPost(e) 앱스 스크립트 웹앱을 주소가 필요하기 때문에 먼저 doPost(e)를 만들겠습니다.
1 2 3 4 |
function doPost(e) { const data = JSON.parse(e.postData.contents); sendChatMessage(data) } |
코드를 작성하고 배포를 진행합니다. 권한은 현재 로그인한 사용자로 해야 문제가 없습니다. (웹 앱을 액세스하는 사용자로 하면 실행이 안될 수 있습니다.) 액세스 권한은 모든 사용자로 합니다.
배포한 웹 앱 URL을 복사해둡니다.
3. 릴레이용 PHP 파일 생성하기
이제 다음과 같이 릴레이용 php 파일을 생성합니다. 중간에 $gasUrl에 배포한 웹 앱 URL을 입력합니다.
LG U+에서 callback URL로 정보를 보내준 것을 json 형태로 변환해서 앱스 스크립트 웹 앱으로 릴레이하는 스크립트 입니다. 서버에 SSL 설정은 하지 않았기 때문에 해당 옵션은 curl에서 무시하는 것으로 처리되어 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php $sender = isset($_GET['sender']) ? $_GET['sender'] : 'default_sender'; $receiver = isset($_GET['receiver']) ? $_GET['receiver'] : 'default_receiver'; $kind = isset($_GET['kind']) ? $_GET['kind'] : 'default_kind'; $inner_num = isset($_GET['inner_num']) ? $_GET['inner_num'] : 'default_inner_num'; $message = isset($_GET['message']) ? $_GET['message'] : 'default_message'; $data = array( 'sender' => $sender, 'receiver' => $receiver, 'kind' => $kind, 'inner_num' => $inner_num, 'message' => $message ); $payload = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); echo $payload; $gasUrl = "https://script.google.com/macros/s/AKfycbxlNJuVeaHcsQVPkwm9B72DfjwVgccT-7rM6KKNpIgTZxXL-63C6nx1NeW-pO3qDBAl/exec"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $gasUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $callBackResponse = curl_exec($ch); if (curl_errno($ch)) { echo 'cURL error: ' . curl_error($ch); } curl_close($ch); |
파일을 FTP를 통해 업로드합니다.
이제 정상적으로 동작하는지 테스트 코드를 작성해서 실행해보겠습니다. LG U+에서 보내주는 GET 방식으로 파라미터들을 추가한 callback URL을 호출합니다.
1 2 3 4 5 6 7 8 9 |
function test() { const url = 'http://117.52.84.240/callbackRelay.php?sender=01011112222&receiver=0211112222&kind=0&inner_num=2222' const options = { method: 'get', muteHttpExceptions: true } const res = UrlFetchApp.fetch(url, options) Logger.log(res) } |
올바르게 세팅이 되었다면 다음과 같은 응답을 받게 됩니다. 그리고 doPost가 한 번 실행 됩니다. sendChatMessage(data) 함수를 정의하지 않았기 때문에 당연히 실패로 표시됩니다.
1 |
{"sender":"01011112222","receiver":"0211112222","kind":"0","inner_num":"2222","message":"default_message"} |
웹앱으로 doPost가 실행되는 경우에는 실행 메뉴에서 로그를 볼 수 없습니다. 로그를 보기 위해서는 설정에서 프로젝트를 클라우드 프로젝트로 전환해야 합니다.
3. LG U+ 센트릭스에 callback URL 등록하기
이제 준비한 callback URL 을 LG U+ 센트릭스 서버에 등록합니다. API에서 호출할 URL은 https://icentrex.uplus.co.kr/RestApi/setringcallback 입니다. 그리고 다음의 변수들이 필요합니다.
- id: 숫자로 된 전화번호. 하이픈 있으면 안됩니다.
2. password: 전화번호의 비밀번호입니다. 잊어버린 경우에는 센트릭스 관리자 페이지에서 리셋합니다. 여기서 비밀번호는 SHA512로 해시합니다. 아래에 앱스 스크립트에서 SHA512 해시하는 함수를 추가해두었습니다.
3. callbackurl: FTP에 올린 php 파일의 url입니다.
4. callbackhost: 고정 ip 주소입니다. IP만 넣으세요.
5. callbackport: ‘80’ 으로 설정합니다.
유플러스 매뉴얼은 다음 이미지를 참고해주세요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/** * 유플러스에 콜백 URL을 등록하는 함수입니다. * POST 요청을 통해 유플러스 콜백 API에 필요한 정보를 전달합니다. */ function setUplusCallbackUrl() { Logger.log(`===== 유플러스 콜백URL 등록 시작`) const id = '숫자로된 전화번호' const password = '비밀번호' const url = `https://icentrex.uplus.co.kr/RestApi/setringcallback` const pass = getSHA512Hash(password) const callbackurl = `/callbackRelay.php` const callbackhost = '117.52.84.240' const callbackport = '80' const setUrl = `${url}?id=${id}pass=${pass}&callbackurl=${callbackurl}&callbackhost=${callbackhost}&callbackport=${callbackport}` Logger.log(`매개변수는 ${setUrl}`) const options = { 'method': 'POST', 'muteHttpExceptions': true } try { const response = UrlFetchApp.fetch(setUrl, options) const resCode = response.getResponseCode() const resBody = response.getContentText() if (resCode == 200) { Logger.log(`Fetch 성공: ${resBody}`) return response } else { Logger.log(`Fetch 오류 발생: ${resCode}`); throw new Error('Fetch 오류 발생') } } catch (e) { Logger.log(`오류 발생: ${e.stack}`) } finally { Logger.log(`===== 유플러스 콜백URL 등록 종료`) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/** * 주어진 입력 문자열에 대한 SHA-512 해시를 계산합니다. * * @param {string} input - 해시를 계산할 입력 문자열입니다. * @returns {string} 계산된 해시의 16진수 문자열입니다. */ function getSHA512Hash(input) { Logger.log(`===== SHA-512 해시 계산 시작: ${input}`); try { // 입력 문자열을 UTF-8 바이트로 변환 const bytes = Utilities.newBlob(input).getBytes(); // SHA-512 해시 바이트 계산 const sha512Bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_512, bytes); // 해시 바이트를 16진수 문자열로 변환 const hexHash = sha512Bytes.reduce((str, byte) => { const hexByte = (byte & 0xFF).toString(16).padStart(2, '0'); return str + hexByte; }, ''); Logger.log(`SHA-512 해시 결과: ${hexHash}`); return hexHash; } catch (e) { Logger.log(`오류 발생: ${e.stack}`); } finally { Logger.log(`===== SHA-512 해시 계산 종료`); } } |
setUplusCallbackUrl 함수로 callback URL이 올바르게 등록되었다면 성공메시지를 회신 받게 됩니다.
이제 전화를 걸어봅니다. 정상적으로 세팅이 되었다면, doPost가 실행됩니다. (여전히 실패라고 나오지만 정상적으로 동작하는 것입니다.)
여기까지 진행하셨다면, 거의 다 오신 것입니다. 이제 LG U+ 센트릭스로 전화가 들어오면, 가비아의 릴레이 서버를 거쳐서 구글 앱스 스크립트 doPost로 정보가 들어옵니다. 이 정보를 사용해서 구글 챗으로 메시지를 보내면 됩니다.
이어지는 포스트에서 구글 챗으로 메시지를 보내는 마지막 부분을 다루겠습니다.