1. 연재기사 소개
이 연재기사에서는 LG U+ IMS 센트릭스 기업 인터넷 전화로 전화가 올 때에, 구글 챗으로 알림을 보내는 방법을 소개합니다.
고객 응대를 위해서 기업 인터넷 전화를 사용하는 경우, 전화가 올 때에 고객이 우리 DB에 이미 있는 고객인지 또는 신규 고객인지 구글 챗을 통해 알 수 있다면 좋지 않을까요? LG U+ IMS 센트릭스 기업 인터넷 전화의 Open API를 활용하면 여러 가지 편의 기능들을 구현할 수 있습니다. 기사에서 필요한 부분을 확인해보세요.
이번 포스트는 2번째 포스트로 서버에 릴레이용 php 파일을 세팅하는 방법을 다룹니다.
2. 구글 앱스 스크립트 doPost(e) 생성하기
이제 고정 IP의 서버는 세팅하였습니다. 이제 다음과 같은 프로세스를 준비해야 합니다.
1.
서버에서 callback URL로 사용할 php 파일
2.
php 파일이 수신할 데이터를 앱스 스크립트로 릴레이해 줄 때 이를 수신할 doPost(e) 앱스 스크립트 웹앱
3.
doPost(e)에서 수신한 정보를 구글 챗에 보내주는 앱스 스크립트
이번 포스트에서는 1, 2번을 다루고 다음 포스트에서 3번을 다룹니다.
php 파일을 만들 때에, doPost(e) 앱스 스크립트 웹앱을 주소가 필요하기 때문에 먼저 doPost(e)를 만들겠습니다.
function doPost(e) {
const data = JSON.parse(e.postData.contents);
sendChatMessage(data)
}
PHP
복사
코드를 작성하고 배포를 진행합니다. 권한은 현재 로그인한 사용자로 해야 문제가 없습니다. (웹 앱을 액세스하는 사용자로 하면 실행이 안될 수 있습니다.) 액세스 권한은 모든 사용자로 합니다.
배포한 웹 앱 URL을 복사해둡니다.
3. 릴레이용 PHP 파일 생성하기
이제 다음과 같이 릴레이용 php 파일을 생성합니다. 중간에 $gasUrl에 배포한 웹 앱 URL을 입력합니다.
LG U+에서 callback URL로 정보를 보내준 것을 json 형태로 변환해서 앱스 스크립트 웹 앱으로 릴레이하는 스크립트 입니다. 서버에 SSL 설정은 하지 않았기 때문에 해당 옵션은 curl에서 무시하는 것으로 처리되어 있습니다.
<?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);
PHP
복사
파일을 FTP를 통해 업로드합니다.
이제 정상적으로 동작하는지 테스트 코드를 작성해서 실행해보겠습니다.
LG U+에서 보내주는 GET 방식으로 파라미터들을 추가한 callback URL을 호출합니다.
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)
}
JavaScript
복사
올바르게 세팅이 되었다면 다음과 같은 응답을 받게 됩니다. 그리고 doPost가 한 번 실행 됩니다. sendChatMessage(data) 함수를 정의하지 않았기 때문에 당연히 실패로 표시됩니다.
{"sender":"01011112222","receiver":"0211112222","kind":"0","inner_num":"2222","message":"default_message"}
JavaScript
복사
웹앱으로 doPost가 실행되는 경우에는 실행 메뉴에서 로그를 볼 수 없습니다. 로그를 보기 위해서는 설정에서 프로젝트를 클라우드 프로젝트로 전환해야 합니다.
3. LG U+ 센트릭스에 callback URL 등록하기
이제 준비한 callback URL 을 LG U+ 센트릭스 서버에 등록합니다.
1.
id: 숫자로 된 전화번호. 하이픈 있으면 안됩니다.
2.
password: 전화번호의 비밀번호입니다. 잊어버린 경우에는 센트릭스 관리자 페이지에서 리셋합니다. 여기서 비밀번호는 SHA512로 해시합니다. 아래에 앱스 스크립트에서 SHA512 해시하는 함수를 추가해두었습니다.
3.
callbackurl: FTP에 올린 php 파일의 url입니다.
4.
callbackhost: 고정 ip 주소입니다. IP만 넣으세요.
5.
callbackport: ‘80’ 으로 설정합니다.
유플러스 매뉴얼 보기
/**
* 유플러스에 콜백 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 등록 종료`)
}
}
PHP
복사
/**
* 주어진 입력 문자열에 대한 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 해시 계산 종료`);
}
}
PHP
복사
setUplusCallbackUrl 함수로 callback URL이 올바르게 등록되었다면 성공메시지를 회신 받게 됩니다.
이제 전화를 걸어봅니다. 정상적으로 세팅이 되었다면, doPost가 실행됩니다. (여전히 실패라고 나오지만 정상적으로 동작하는 것입니다.)
여기까지 진행하셨다면, 거의 다 오신 것입니다.
이제 LG U+ 센트릭스로 전화가 들어오면, 가비아의 릴레이 서버를 거쳐서 구글 앱스 스크립트 doPost로 정보가 들어옵니다. 이 정보를 사용해서 구글 챗으로 메시지를 보내면 됩니다.
이어지는 포스트에서 구글 챗으로 메시지를 보내는 마지막 부분을 다루겠습니다.