페이지 이동경로
  • 문서>
  • 메시지>
  • 카카오톡 메시지: Android

메시지

카카오톡: Android

이 문서는 Kakao SDK for Android(이하 Android SDK)를 사용한 카카오톡 메시지 API 구현 방법을 안내합니다.

애플리케이션 설정 확인

이 기능을 사용하려면 애플리케이션 설정에 Android 플랫폼 및 키 해시 등 정보가 등록되어 있어야 합니다. 자세한 내용은 애플리케이션 등록 가이드를 참고합니다.

이 문서에 사용된 태그

Tag Description
로그인 필수 카카오 로그인이 필요한 API를 의미합니다. 카카오 로그인을 먼저 구현하고, 카카오 로그인을 통해 발급 받은 액세스 토큰(Access Token)을 이용하여 해당 API를 호출해야 합니다.

시작하기 전에

필요한 모듈 설정하기

카카오톡 메시지 API는 카카오톡 모듈의 TalkApiClient가 제공합니다. 필요한 모듈 설정하기를 참고하여 build.gradle(Module) 파일에 카카오 로그인 모듈인 v2-user, 카카오톡 모듈인 v2-talk을 추가합니다.

카카오 로그인 필수

카카오톡 메시지 API는 현재 로그인한 사용자의 카카오톡 이용 정보를 토대로 동작하므로, 카카오 로그인 후 발급되는 액세스 토큰(Access Token)을 사용합니다. 따라서 카카오 로그인 기능 구현 및 메시지 전송 요청 전 사용자의 로그인이 선행되어야 합니다.

사용할 API 선택하기

Step 1. 메시지 API 선택

메시지 API는 카카오링크와 카카오톡 메시지 두 가지입니다. 이해하기를 참고해 어떤 API로 메시지 보내기를 구현할 것인지 결정합니다.

Step 2. 메시지 종류 및 구성 방법 선택

메시지 템플릿 > 종류를 참고하여 어떤 메시지 템플릿을 사용할지 결정합니다.

보낼 메시지는 기본 템플릿을 바탕으로 객체 형태로 구성하거나, 서비스에 맞게 직접 구성한 사용자 정의 템플릿을 사용하여 구성할 수 있습니다. 자세한 사항은 메시지 구성 방법을 참고합니다.

Step 3. 메시지 전송 대상 선택

카카오톡 메시지의 경우, 수신 대상에 따라 나에게 보내기, 친구에게 보내기로 API가 구분되어 있다는 점에 유의합니다.

  • 에게 보내기: 현재 로그인한 사용자의 카카오톡 '나와의 채팅'에 메시지를 보냅니다. 이 기능으로는 다른 사용자에게 메시지를 보낼 수 없고, 로그인한 사용자 본인에게만 메시지를 보낼 수 있습니다.
  • 친구에게 보내기: 현재 로그인한 사용자의 카카오톡 친구에게 메시지를 보냅니다. 친구 목록 가져오기 API를 통해 수신 대상 정보를 받는 과정을 추가 구현해야 합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다. 카카오톡 메시지 API의 경우, 일간 및 월간 제공량이 정해져 있으므로 운영 정책을 참고합니다.
동의 항목 설정 및 권한 필요

친구에게 카카오톡 메시지를 보내려면 동의 항목 설정을 참고하여 '카카오톡 메시지 전송' 동의 항목을 설정해야 합니다. 또한 이 API는 사용 권한이 필요합니다. 앱에 사용 권한이 부여되기 전에는 팀원을 대상으로만 동작하므로, 사용 권한 신청을 참고해 사용 권한을 신청해야 합니다.

선택 조건에 따른 API
메시지 종류 메시지 구성 방법 전송 대상 사용할 API
피드, 리스트, 위치, 커머스, 텍스트 기본 템플릿 sendDefaultMemo()
피드, 리스트, 위치, 커머스, 텍스트 기본 템플릿 친구 sendDefaultMessage()
피드, 리스트, 커머스 사용자 정의 템플릿 sendCustomMemo()
피드, 리스트, 커머스 사용자 정의 템플릿 친구 sendCustomMessage()
스크랩 기본 템플릿 sendScrapMemo()
스크랩 기본 템플릿 친구 sendScrapMessage()
스크랩 사용자 정의 템플릿 sendScrapMemo()
스크랩 사용자 정의 템플릿 친구 sendScrapMessage()

커스텀 URL 스킴(Custom URL Scheme) 설정하기

사용자가 카카오톡 메시지의 버튼을 통해 앱을 실행할 수 있도록 하려면 AndroidManifest.xml 파일에 앱 실행 스킴 설정을 해야 합니다. 카카오링크: Android > 커스텀 URL 스킴 설정하기를 참고합니다.

메시지 만들기

카카오링크와 카카오톡 메시지 API 사용을 위해 메시지 만드는 방법은 동일합니다. 카카오링크: Android > 메시지 만들기를 참고합니다.

기본 템플릿으로 메시지 보내기 로그인 필수

사용하려는 기본 템플릿에 따라 메시지를 객체로 구성하여 보내는 기능입니다.

친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 친구 목록 가져오기 API를 통해 메시지를 보낼 친구의 uuid 정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid 목록은 receiverUuids 파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.

메시지 전송 결과는 MessageSendResult 객체로 받으며, 메시지 전송에 성공한 친구의 uuid를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo 객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo에 포함된 대상 친구의 목록인 receiverUuids와 오류 원인을 알려주는 code, msg를 확인하여 REST API 레퍼런스를 보고 원인을 파악합니다.

나에게 보내기

Parameter
Name Type Description Required
template DefaultTemplate 전송할 메시지 템플릿 객체
원하는 템플릿에 맞는 클래스로 객체를 생성해야 함
카카오링크: Android > 메시지 만들기 참고
O
Kotlin
RxKotlin
TalkApiClient.instance.sendDefaultMemo(defaultFeed) { error ->
    if (error != null) {
        Log.e(TAG, "나에게 보내기 실패", error)
    } else {
        Log.i(TAG, "나에게 보내기 성공")
    }
}
var disposables = CompositeDisposable()

TalkApiClient.rx.sendDefaultMemo(defaultFeed)
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        Log.i(TAG, "나에게 보내기 성공")
    }, { error ->
        Log.e(TAG, "나에게 보내기 실패", error)
    })
    .addTo(disposables)

친구에게 보내기

Parameter
Name Type Description Required
receiverUuids List<String> 친구 목록 가져오기 API를 통해 얻은 사용자 uuid 값 목록, 최대 5개 O
template DefaultTemplate 전송할 메시지 템플릿 객체
원하는 템플릿에 맞는 클래스로 객체를 생성해야 함
카카오링크: Android > 메시지 만들기 참고
O
Kotlin
RxKotlin
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    }
    else {
        Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")

        if (friends.elements.isEmpty()) {
            Log.e(TAG, "메시지 보낼 친구가 하나도 없어요 ㅠㅠ")
        }
        else {

            // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
            // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
            FriendsActivity.startForResult(
                context,
                friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
            ) { selectedItems ->
                if (selectedItems.isEmpty()) return@startForResult
                Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")


                // 메시지 보낼 친구의 UUID 목록
                val receiverUuids = selectedItems

                // Feed 메시지
                val template = defaultFeed

                // 메시지 보내기
                TalkApiClient.instance.sendDefaultMessage(receiverUuids, template) { result, error ->
                    if (error != null) {
                        Log.e(TAG, "메시지 보내기 실패", error)
                    }
                    else if (result != null) {
                        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

                        if (result.failureInfos != null) {
                            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
                        }
                    }
                }
            }
        }
    }
}
var disposables = CompositeDisposable()

// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()

    // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
    // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
    .flatMap { friends ->
        FriendsActivity.startForResult(
            context,
            friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
        )
    }
    .observeOn(Schedulers.io())
    .flatMap { selectedItems ->

        // 메시지 보낼 친구의 UUID 목록
        val receiverUuids = selectedItems

        // Feed 메시지
        val template = defaultFeed

        TalkApiClient.rx.sendDefaultMessage(receiverUuids, template)
    }
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ result ->
        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

        if (result.failureInfos != null) {
            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
        }
    }, { error ->
        Log.e(TAG, "메시지 보내기 실패", error)
    })
    .addTo(disposables)

사용자 정의 템플릿으로 메시지 보내기 로그인 필수

기본 템플릿으로 메시지 보내기와는 달리, [도구] > [메시지 템플릿]에서 직접 구성한 사용자 정의 템플릿을 사용하여 메시지를 보내는 기능입니다.

메시지 템플릿 도구에서 구성한 템플릿의 ID를 templateId 파라미터로 전달합니다. 메시지에 변동되는 정보를 포함하려면 해당 템플릿에 사용자 인자를 추가한 후, templateArgs 파라미터를 통해 전달합니다. 메시지 템플릿에 사용자 인자가 포함되었음에도 templateArgs 파라미터를 사용하지 않으면 메시지에 ${key}가 글자 그대로 포함됩니다.

친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 친구 목록 가져오기 API를 통해 메시지를 보낼 친구의 uuid 정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid 목록은 receiverUuids 파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.

메시지 전송 결과는 MessageSendResult 객체로 받으며, 메시지 전송에 성공한 친구의 uuid를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo 객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo에 포함된 대상 친구의 목록인 receiverUuids와 오류 원인을 알려주는 code, msg를 확인하여 REST API 레퍼런스를 보고 원인을 파악합니다.

나에게 보내기

Parameter
Name Type Description Required
templateId Long 메시지 템플릿 도구에서 구성한 사용자 정의 템플릿의 ID O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달 X
Kotlin
RxKotlin
// 사용자 정의 메시지 ID
//  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long

TalkApiClient.instance.sendCustomMemo(templateId) { error ->
    if (error != null) {
        Log.e(TAG, "나에게 보내기 실패", error)
    } else {
        Log.i(TAG, "나에게 보내기 성공")
    }
}
var disposables = CompositeDisposable()

// 사용자 정의 메시지 ID
//  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long

TalkApiClient.rx.sendCustomMemo(templateId)
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        Log.i(TAG, "나에게 보내기 성공")
    }, { error ->
        Log.e(TAG, "나에게 보내기 실패", error)
    })
    .addTo(disposables)

친구에게 보내기

Parameter
Name Type Description Required
receiverUuids List<String> 친구 목록 가져오기 API를 통해 얻은 사용자 uuid 값 목록, 최대 5개 O
templateId Long 메시지 템플릿 도구에서 구성한 사용자 정의 템플릿의 ID O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달 X
Kotlin
RxKotlin
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    }
    else if (friends != null) {
        Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends.elements.joinToString("\n")}")

        if (friends.elements.isEmpty()) {
            Log.e(TAG, "메시지 보낼 친구가 하나도 없어요 ㅠㅠ")
        }
        else {

            // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져옵니다.

                // 메시지 보낼 친구의 UUID 목록
                val receiverUuids = selectedItems

                // 사용자 정의 메시지 ID
                //  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
                val templateId = templateIds["customMessage"] as Long

                // 메시지 보내기
                TalkApiClient.instance.sendCustomMessage(receiverUuids, templateId) { result, error ->
                    if (error != null) {
                        Log.e(TAG, "메시지 보내기 실패", error)
                    }
                    else if (result != null){
                        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

                        if (result.failureInfos != null) {
                            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
                        }
                    }
                }
            }
        }
    }
}
var disposables = CompositeDisposable()

// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()

    // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져옵니다.
    
    .observeOn(Schedulers.io())
    .flatMap { selectedItems ->

        // 메시지 보낼 친구의 UUID 목록
        val receiverUuids = selectedItems

        // 사용자 정의 메시지 ID
        //  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
        val templateId = templateIds["customMessage"] as Long

        TalkApiClient.rx.sendCustomMessage(receiverUuids, templateId)
    }
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ result ->
        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

        if (result.failureInfos != null) {
            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
        }
    }, { error ->
        Log.e(TAG, "메시지 보내기 실패", error)
    })
    .addTo(disposables)

기본 템플릿으로 스크랩 메시지 보내기 로그인 필수

스크랩한 웹 페이지 정보를 바탕으로 메시지를 구성하여 보내는 기능입니다.

요청 시, 스크랩할 웹 페이지 URL(url)을 필수로 전달합니다. 이 때, 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.

친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 친구 목록 가져오기 API를 통해 메시지를 보낼 친구의 uuid 정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid 목록은 receiverUuids 파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.

메시지 전송 결과는 MessageSendResult 객체로 받으며, 메시지 전송에 성공한 친구의 uuid를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo 객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo에 포함된 대상 친구의 목록인 receiverUuids와 오류 원인을 알려주는 code, msg를 확인하여 REST API 레퍼런스를 보고 원인을 파악합니다.

나에게 보내기

Parameter
Name Type Description Required
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
Kotlin
RxKotlin
// 공유할 웹페이지 URL
//  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"

TalkApiClient.instance.sendScrapMemo(url) { error ->
    if (error != null) {
        Log.e(TAG, "나에게 보내기 실패", error)
    }
    else {
        Log.i(TAG, "나에게 보내기 성공")
    }
}
var disposables = CompositeDisposable()

// 공유할 웹페이지 URL
//  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"

TalkApiClient.rx.sendScrapMemo(url)
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        Log.i(TAG, "나에게 보내기 성공")
    }, { error ->
        Log.e(TAG, "나에게 보내기 실패", error)
    })
    .addTo(disposables)

친구에게 보내기

Parameter
Name Type Description Required
receiverUuids List<String> 친구 목록 가져오기 API를 통해 얻은 사용자 uuid 값 목록, 최대 5개 O
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
Kotlin
RxKotlin
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    }
    else {
        Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")

        if (friends.elements.isEmpty()) {
            Log.e(TAG, "메시지 보낼 친구가 하나도 없어요 ㅠㅠ")
        } else {

            // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
            // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
            FriendsActivity.startForResult(
                context,
                friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
            ) { selectedItems ->
                if (selectedItems.isEmpty()) return@startForResult
                Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")


                // 메시지 보낼 친구의 UUID 목록
                val receiverUuids = selectedItems

                // 공유할 웹페이지 URL
                //  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
                val url = "https://developers.kakao.com"

                // 메시지 보내기
                TalkApiClient.instance.sendScrapMessage(receiverUuids, url) { result, error ->
                    if (error != null) {
                        Log.e(TAG, "메시지 보내기 실패", error)
                    }
                    else if (result != null) {
                        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

                        if (result.failureInfos != null) {
                            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
                        }
                    }
                }
            }
        }
    }
}
var disposables = CompositeDisposable()

// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()

    // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
    // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
    .flatMap { friends ->
        FriendsActivity.startForResult(
            context,
            friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
        )
    }
    .observeOn(Schedulers.io())
    .flatMap { selectedItems ->

        // 메시지 보낼 친구의 UUID 목록
        val receiverUuids = selectedItems

        // 공유할 웹페이지 URL
        //  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
        val url = "https://developers.kakao.com"

        TalkApiClient.rx.sendScrapMessage(receiverUuids, url)
    }
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ result ->
        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

        if (result.failureInfos != null) {
            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
        }
    }, { error ->
        Log.e(TAG, "메시지 보내기 실패", error)
    })
    .addTo(disposables)

사용자 정의 템플릿으로 스크랩 메시지 보내기 로그인 필수

스크랩한 웹 페이지 정보를 바탕으로 메시지를 구성하여 보내는 기능입니다. 기본 템플릿으로 스크랩 메시지 보내기와 다르게, [도구] > [메시지 템플릿]에서 구성한 사용자 정의 템플릿을 사용하여 메시지를 구성합니다.

요청 시, 스크랩할 웹 페이지 URL(url)을 필수로 전달합니다. 이 때, 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.

또한 [도구] > [메시지 템플릿]에서 구성한 템플릿의 ID를 templateId 파라미터로 전달합니다. 메시지에 변동되는 정보를 포함하려면 해당 템플릿에 사용자 인자를 추가한 후, templateArgs 파라미터를 통해 전달합니다. 메시지 템플릿에 사용자 인자가 포함되었음에도 templateArgs 파라미터를 사용하지 않으면 메시지에 ${key}가 글자 그대로 포함됩니다.

친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 친구 목록 가져오기 API를 통해 메시지를 보낼 친구의 uuid 정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid 목록은 receiverUuids 파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.

메시지 전송 결과는 MessageSendResult 객체로 받으며, 메시지 전송에 성공한 친구의 uuid를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo 객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo에 포함된 대상 친구의 목록인 receiverUuids와 오류 원인을 알려주는 code, msg를 확인하여 REST API 레퍼런스를 보고 원인을 파악합니다.

나에게 보내기

Parameter
Name Type Description Required
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
templateId Long 스크랩한 정보를 반영할 사용자 정의 템플릿의 ID
스크랩 메시지 참고
O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달
스크랩 결과를 덮어쓰기(overwrite) 할 수는 없음
X
Kotlin
RxKotlin
// 공유할 웹페이지 URL
//  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"

// 사용자 정의 메시지 ID
//  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long

TalkApiClient.instance.sendScrapMemo(url, templateId) { error ->
    if (error != null) {
        Log.e(TAG, "나에게 보내기 실패", error)
    }
    else {
        Log.i(TAG, "나에게 보내기 성공")
    }
}
var disposables = CompositeDisposable()

// 공유할 웹페이지 URL
//  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"

// 사용자 정의 메시지 ID
//  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long

TalkApiClient.rx.sendScrapMemo(url, templateId)
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        Log.i(TAG, "나에게 보내기 성공")
    }, { error ->
        Log.e(TAG, "나에게 보내기 실패", error)
    })
    .addTo(disposables)

친구에게 보내기

Parameter
Name Type Description Required
receiverUuids List<String> 친구 목록 가져오기 API를 통해 얻은 사용자 uuid 값 목록, 최대 5개 O
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
templateId Long 스크랩한 정보를 반영할 사용자 정의 템플릿의 ID
스크랩 메시지 참고
O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달
스크랩 결과를 덮어쓰기(overwrite) 할 수는 없음
X
Kotlin
RxKotlin
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    }
    else {
        Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")

        if (friends.elements.isEmpty()) {
            Log.e(TAG, "메시지 보낼 친구가 하나도 없어요 ㅠㅠ")
        } else {

            // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
            // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
            FriendsActivity.startForResult(
                context,
                friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
            ) { selectedItems ->
                if (selectedItems.isEmpty()) return@startForResult
                Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")


                // 메시지 보낼 친구의 UUID 목록
                val receiverUuids = selectedItems

                // 공유할 웹페이지 URL
                //  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
                val url = "https://developers.kakao.com"

                // 사용자 정의 메시지 ID
                //  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
                val templateId = templateIds["customMessage"] as Long

                // 메시지 보내기
                TalkApiClient.instance.sendScrapMessage(receiverUuids, url, templateId) { result, error ->
                    if (error != null) {
                        Log.e(TAG, "메시지 보내기 실패", error)
                    }
                    else if (result != null) {
                        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

                        if (result.failureInfos != null) {
                            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
                        }
                    }
                }
            }
        }
    }
}
var disposables = CompositeDisposable()

// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()

    // 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
    // 이 샘플에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
    .flatMap { friends ->
        FriendsActivity.startForResult(
            context,
            friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
        )
    }
    .observeOn(Schedulers.io())
    .flatMap { selectedItems ->

        // 메시지 보낼 친구의 UUID 목록
        val receiverUuids = selectedItems

        // 공유할 웹페이지 URL
        //  * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
        val url = "https://developers.kakao.com"

        // 사용자 정의 메시지 ID
        //  * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
        val templateId = templateIds["customMessage"] as Long

        TalkApiClient.rx.sendScrapMessage(receiverUuids, url, templateId)
    }
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ result ->
        Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")

        if (result.failureInfos != null) {
            Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
        }
    }, { error ->
        Log.e(TAG, "메시지 보내기 실패", error)
    })
    .addTo(disposables)

이미지 업로드하기

메시지에 넣을 이미지는 URL 형태로 메시지 템플릿 구성 시에 첨부하거나, 메시지 템플릿 도구에서 미리 업로드할 수 있습니다.

URL 형태로 이미지를 추가할 경우, LinkClientimageUpload() API를 사용하기 때문에 카카오링크 모듈을 추가한 후, 호출합니다. 자세한 사항은 카카오링크: Android > 이미지 업로드하기를 참고합니다.

Legacy

메시지 API의 Legacy Kakao SDK for Android(이하 Legacy Android SDK) 개발 가이드는 다음 링크에서 확인할 수 있습니다. 추후 Legacy Android SDK에 대한 지원이 중단될 수 있으므로, 가급적 빠른 시일 내에 최신 버전 Android SDK로 변경할 것을 권장합니다.

더보기