developers.kakao.com/docs/latest/ko/message/common
카카오톡 메세지를 발송하는 방법은 크게 두가지가 있습니다. 본 포스트에는 카카오톡 메세지 API 를 설명하겠습니다.
- 카카오 링크 : 카카오에서 제공한 SDK를 이용하여 사용가능. 대상 선택과 메세지 발송을 카카오톡을 통해 처리
- 카카오톡 메세지 API : 카카오 API 서버에 요청하여 목록 조회와 발송 처리
1. 나에게 기본 메세지 보내기
POST /v2/api/talk/memo/default/send HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {ACCESS_TOKEN}
$_SESSION["accessToken"]에 액세스 토큰이 저장되었다고 전제 합니다. 카카오 로그인으로 액세스 토큰을 세션에 저장하는 방법은 [여기]를 참고하세요. 메세지 보내기의 작동하는 화면은 [여기]를 참고하세요.
- 호출 순서 : kakao_talk_message.php ▶ KakaoAPIService.php (extends KakaoService)
kakao_talk_message.php
<?php
require('KakaoAPIService.php');
$KakaoAPIService = new KakaoAPIService();
$data = 'template_object={
"object_type": "text",
"text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
"link": {
"web_url": "https://developers.kakao.com",
"mobile_web_url": "https://developers.kakao.com"
},
"button_title": "바로 확인"
}';
$res = $KakaoAPIService->sendMessage($data);
echo($res->result_code);
?>
KakaoAPIService.php
<?php
require('KakaoService.php');
class KakaoAPIService extends KakaoService
{
public function __construct($return_type="")
{
parent::__construct($return_type);
}
public function sendTalk($data)
{
$callUrl = "https://kapi.kakao.com/v2/api/talk/memo/default/send";
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $_SESSION["accessToken"];
return $this->excuteCurl($callUrl, "POST", $headers, $data);
}
}
?>
KakaoService.php
<?php
class KakaoService
{
public $JAVASCRIPT_KEY;
protected $REST_API_KEY;
protected $ADMIN_KEY;
protected $CLIENT_SECRET;
protected $REDIRECT_URI;
protected $LOGOUT_REDIRECT_URI;
protected $RETURN_TYPE;
public function __construct($return_type)
{ //★ 수정 할 것
$this->JAVASCRIPT_KEY = ""; // https://developers.kakao.com > 내 애플리케이션 > 앱 설정 > 요약 정보
$this->REST_API_KEY = ""; // https://developers.kakao.com > 내 애플리케이션 > 앱 설정 > 요약 정보
$this->ADMIN_KEY = ""; // https://developers.kakao.com > 내 애플리케이션 > 앱 설정 > 요약 정보
$this->CLIENT_SECRET = ""; // https://developers.kakao.com > 내 애플리케이션 > 제품 설정 > 카카오 로그인 > 보안
$this->RETURN_TYPE = $return_type;
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https://" : "http://");
$this->REDIRECT_URI = urlencode($protocol . $_SERVER['HTTP_HOST'] . "/your_callback_page"); // 내 애플리케이션 > 제품 설정 > 카카오 로그인
$this->LOGOUT_REDIRECT_URI = urlencode($protocol . $_SERVER['HTTP_HOST'] . "/your_logout_callback_page"); // 내 애플리케이션 > 제품 설정 > 카카오 로그인 > 고급 > Logout Redirect URI
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
}
protected function excuteCurl($callUrl, $method, $headers = array(), $data = array(), $session_type="")
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $callUrl);
if ($method == "POST") {
curl_setopt($ch, CURLOPT_POST, true);
} else {
curl_setopt($ch, CURLOPT_POST, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($session_type=="accessToken"){
//Custom Session설정 : refreshToken은 2개월 보존되며, 1개월 남았을 때 갱신 가능하므로 세션이 아닌 개별 저장소에 저장하는 것이 좋음
if(isset(json_decode($response["response"])->access_token)){
$_SESSION["accessToken"] = json_decode($response["response"])->access_token;
}
if(isset(json_decode($response["response"])->refresh_token)){
$_SESSION["refreshToken"] = json_decode($response["response"])->refresh_token;
}
}
if($session_type=="profile"){
//Custom Session설정
if(isset(json_decode($response["response"])->id)){
$_SESSION["loginProfile"] = json_decode($response["response"]);
}
}
return $this->rtn(json_decode($response), $status_code);
}
}
?>
kakao_talk_message.php에서 template_object를 교체하면 메세지를 표시 유형별로 발송 할 수 있습니다.
* 피드 템플릿
template_object={
"object_type": "feed",
"content": {
"title": "디저트 사진",
"description": "아메리카노, 빵, 케익",
"image_url": "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net",
"android_execution_params": "contentId=100",
"ios_execution_params": "contentId=100"
}
},
"social": {
"like_count": 100,
"comment_count": 200,
"shared_count": 300,
"view_count": 400,
"subscriber_count": 500
},
"buttons": [
{
"title": "웹으로 이동",
"link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net"
}
},
{
"title": "앱으로 이동",
"link": {
"android_execution_params": "contentId=100",
"ios_execution_params": "contentId=100"
}
}
]
}
* 리스트 템플릿
template_object={
"object_type": "list",
"header_title": "WEEKELY MAGAZINE",
"header_link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net",
"android_execution_params": "main",
"ios_execution_params": "main"
},
"contents": [
{
"title": "자전거 라이더를 위한 공간",
"description": "매거진",
"image_url": "http://mud-kage.kakao.co.kr/dn/QNvGY/btqfD0SKT9m/k4KUlb1m0dKPHxGV8WbIK1/openlink_640x640s.jpg",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "http://www.daum.net/contents/1",
"mobile_web_url": "http://m.daum.net/contents/1",
"android_execution_params": "/contents/1",
"ios_execution_params": "/contents/1"
}
},
{
"title": "비쥬얼이 끝내주는 오레오 카푸치노",
"description": "매거진",
"image_url": "http://mud-kage.kakao.co.kr/dn/boVWEm/btqfFGlOpJB/mKsq9z6U2Xpms3NztZgiD1/openlink_640x640s.jpg",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "http://www.daum.net/contents/2",
"mobile_web_url": "http://m.daum.net/contents/2",
"android_execution_params": "/contents/2",
"ios_execution_params": "/contents/2"
}
},
{
"title": "감성이 가득한 분위기",
"description": "매거진",
"image_url": "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "http://www.daum.net/contents/3",
"mobile_web_url": "http://m.daum.net/contents/3",
"android_execution_params": "/contents/3",
"ios_execution_params": "/contents/3"
}
}
],
"buttons": [
{
"title": "웹으로 이동",
"link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net"
}
},
{
"title": "앱으로 이동",
"link": {
"android_execution_params": "main",
"ios_execution_params": "main"
}
}
]
}
* 위치 템플릿
template_object={
"object_type": "location",
"content": {
"title": "카카오 판교오피스",
"description": "카카오 판교오피스 위치입니다.",
"image_url": "https://mud-kage.kakao.com/dn/drTdbB/bWYf06POFPf/owUHIt7K7NoGD0hrzFLeW0/kakaolink40_original.png",
"image_width": 800,
"image_height": 800,
"link": {
"web_url": "https://developers.kakao.com",
"mobile_web_url": "https://developers.kakao.com/mobile",
"android_execution_params": "platform=android",
"ios_execution_params": "platform=ios"
}
},
"buttons": [
{
"title": "웹으로 보기",
"link": {
"web_url": "https://developers.kakao.com",
"mobile_web_url": "https://developers.kakao.com/mobile"
}
}
],
"address": "경기 성남시 분당구 판교역로 235 에이치스퀘어 N동 7층",
"address_title": "카카오 판교오피스"
}
* 커머스 템플릿
template_object={
"object_type": "commerce",
"content": {
"title": "Ivory long dress (4 Color)",
"image_url": "http://mud-kage.kakao.co.kr/dn/RY8ZN/btqgOGzITp3/uCM1x2xu7GNfr7NS9QvEs0/kakaolink40_original.png",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "https://style.kakao.com/main/women/contentId=100",
"mobile_web_url": "https://style.kakao.com/main/women/contentId=100",
"android_execution_params": "contentId=100",
"ios_execution_params": "contentId=100"
}
},
"commerce": {
"regular_price": 208800,
"discount_price": 146160,
"discount_rate": 30
},
"buttons": [
{
"title": "구매하기",
"link": {
"web_url": "https://style.kakao.com/main/women/contentId=100/buy",
"mobile_web_url": "https://style.kakao.com/main/women/contentId=100/buy",
"android_execution_params": "contentId=100&buy=true",
"ios_execution_params": "contentId=100&buy=true"
}
},
{
"title": "공유하기",
"link": {
"web_url": "https://style.kakao.com/main/women/contentId=100/share",
"mobile_web_url": "https://style.kakao.com/main/women/contentId=100/share",
"android_execution_params": "contentId=100&share=true",
"ios_execution_params": "contentId=100&share=true"
}
}
]
}
* 텍스트 템플릿
template_object={
"object_type": "text",
"text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
"link": {
"web_url": "https://developers.kakao.com",
"mobile_web_url": "https://developers.kakao.com"
},
"button_title": "바로 확인"
}
'카카오 REST API & SDK > 카카오톡 메세지' 카테고리의 다른 글
카카오톡 메시지 API 사용 신청/통과 방법 (0) | 2022.11.23 |
---|---|
카카오톡 친구 API 사용 신청/통과 방법 (0) | 2022.11.15 |
[JavaScript SDK] 카카오톡 메세지 발송 해보기 (0) | 2021.01.19 |
카카오톡 메세지에 관하여 자주 하는 질문 (0) | 2020.11.30 |
댓글