AI&GameDev

AI와 게임개발에 관련된 이야기

Tasker 카카오톡 자동응답 봇 만들기: AutoNotification으로 방 제목 추출부터 AI 답장까지 (2026)

카카오톡 알림에는 방 제목이 보이지만 %ansubtext는 비어 있고, ConversationShortcut.longLabel에서 방 제목을 복구하는 구조를 나타낸 그림

카카오톡 방에 메시지가 올라오면 서버가 대신 답하는 Tasker 카카오톡 자동응답 봇을 안드로이드 폰 한 대로 만들 수 있습니다. 별도의 카카오 비즈니스 계정이나 루팅은 필요 없고 Tasker와 AutoNotification 두 앱만 있으면 됩니다.

문제는 예전 글들이 알려주는 방식이 지금은 그대로 동작하지 않는다는 점입니다. 최근 카카오톡 알림에서는 방 제목이 들어오던 %ansubtext 변수가 비어 있어서 어느 방의 메시지인지 구분할 수 없습니다. 이 글에서는 제가 실제 기기에서 확인한 이 현상의 원인과 해결 코드까지 포함해, AutoNotification 카카오톡 봇의 전체 구성을 처음부터 끝까지 정리합니다.

이 글에서 얻을 수 있는 것

  • 카카오톡 알림 가로채기 → 웹훅/AI 서버 호출 → 빠른 답장까지 이어지는 완성된 Tasker 작업 구조
  • %ansubtext가 비어 있을 때 Android Conversation Shortcut에서 방 제목을 복구하는 Java Code
  • 다른 방으로 잘못 답장하거나, 봇이 자기 답장에 반응하는 사고를 막는 안전장치
  • 실제 알림으로 테스트하는 절차와 상황별 문제 해결 방법

이 글의 대상 독자

Tasker 프로필과 작업을 한 번이라도 만들어 본 분을 기준으로 설명합니다. 웹훅을 받아 문자열을 돌려주는 서버(n8n, 자체 API, LLM 서버 등)는 이미 있다고 가정합니다.

Tasker 카카오톡 자동응답 봇이란?

Tasker 카카오톡 자동응답 봇은 Android의 알림 접근 권한을 이용해 카카오톡 메시지 알림을 읽고 그 내용을 외부 서버에 보낸 뒤, 서버가 돌려준 문장을 카카오톡 알림의 빠른 답장(Quick Reply) 기능으로 전송하는 자동화입니다. 카카오톡 앱 자체를 건드리지 않고 알림에 이미 붙어 있는 답장 기능을 Tasker가 대신 눌러 주는 방식이라고 이해하면 됩니다.

전체 흐름은 다음과 같습니다.

적용 환경과 사전 준비

이 글의 구성은 아래 환경에서 직접 확인한 것입니다.

항목기준
Tasker6.6.20
AutoNotification최신 버전
Android12 (API 31) 이상
카카오톡빠른 답장을 지원하는 메시지 알림
서버요청을 처리하고 응답 문자열을 반환하는 웹훅 또는 AI 서버

버전이 중요한 이유가 두 가지 있습니다.

  • Tasker의 Java Code 액션은 6.6.18부터 추가됐습니다. 그 이전 버전에서는 이 글의 방 제목 복구 코드를 쓸 수 없습니다.
  • 방 제목 복구에 사용하는 Android API getConversationShortcutInfo()Android 12, API 31부터 제공됩니다.

Android 11 이하 기기라면

Conversation Shortcut 정보를 읽는 API 자체가 없으므로 이 글의 Java Code는 동작하지 않습니다. 이 경우 %antitle(발신자)만으로 조건을 거는 우회 방법을 써야 하며 방 단위 구분은 불가능합니다.

1단계: 알림 접근 권한과 배터리 설정

알림 접근 권한 켜기

삼성 One UI 기준 경로는 다음과 같습니다.

설정
→ 애플리케이션
→ 오른쪽 위 ⋮
→ 특별한 접근
→ 알림 접근 허용

여기서 Tasker와 AutoNotification 두 앱 모두 권한을 켜야 합니다.

자주 놓치는 부분

AutoNotification만 켜고 Tasker는 켜지 않는 경우가 많습니다. Tasker 자체의 알림 접근 권한이 없으면 이 글의 Java Code에서 tasker.getNotificationListener()null을 반환해, 알림 목록과 Conversation Shortcut 정보를 읽을 수 없습니다.

백그라운드 실행 허용

알림을 간헐적으로 놓친다면 두 앱의 배터리 설정을 제한 없음으로 바꿉니다.

설정 → 애플리케이션 → Tasker → 배터리 → 제한 없음
설정 → 애플리케이션 → AutoNotification → 배터리 → 제한 없음

메뉴 이름은 One UI 버전에 따라 조금 다를 수 있습니다.

2단계: AutoNotification Intercept 프로필 만들기

Tasker에서 카카오톡 알림을 이벤트로 받는 프로필을 만듭니다.

Profiles
→ +
→ Event
→ Plugin
→ AutoNotification
→ Intercept

권장 설정은 다음과 같습니다.

Event Behaviour: 켬
Notification Type: Only Created Notifications
Persistency Type: Non-Persistent Only
Notification Apps: 카카오톡
Package Name: com.kakao.talk
Get All Fields: 켬

특정 기기에서 확인한 카카오톡 메시지 알림 ID가 2라면 Notification Id: 2 필터를 추가할 수 있습니다. 다만 알림 ID는 카카오톡 버전이나 기기에 따라 달라질 수 있으므로, 프로필이 실행되지 않으면 Notification Id를 비운 상태에서 먼저 테스트하세요.

같은 메시지가 두 번 처리된다면

카카오톡은 개별 메시지 알림과 그룹 요약 알림을 함께 띄우기도 합니다. Ignore Group Summaries를 켜서 요약 알림을 제외해 보세요.

3단계: Intercept 이벤트가 제공하는 변수 이해하기

Intercept가 실행한 Entry Task 안에서는 다음 변수를 쓸 수 있습니다.

변수의미
%anpackage알림을 생성한 패키지 이름
%anid알림 ID
%antag같은 ID를 사용하는 알림을 구분하는 Tag
%antitle현재 카카오톡 알림에서 확인된 발신자 닉네임
%antext메시지 내용
%ansubtext이전 알림 형식에서는 방 제목이었지만 현재는 비어 있을 수 있음
%antexts()Get All Fields가 수집한 일반 텍스트 배열
%antextsbig()확장 알림의 텍스트 배열
%anextras()Android Notification extras의 JSON 표현
%anreplyaction제공되는 경우 현재 알림의 빠른 답장 액션 ID

작업 편집 화면의 실행 버튼으로는 테스트할 수 없습니다

이 변수들은 Intercept 이벤트가 연결한 Entry Task 안에서만 유효합니다. 작업 편집 화면의 ▶ 버튼으로 수동 실행하면 %anid, %antag, %anreplyaction 등이 아예 생성되지 않습니다. 반드시 실제 카카오톡 알림으로 테스트해야 합니다.

왜 %ansubtext에 카카오톡 방 제목이 안 들어올까?

여기가 이 글의 핵심입니다. 과거에는 아래 조건 하나로 대상 방을 구분할 수 있었습니다.

%ansubtext eq <자동응답할 방 제목>

그런데 제가 현재 카카오톡 알림에서 변수를 하나씩 찍어 본 결과는 이랬습니다.

  • %antitle: 발신자 닉네임
  • %antext: 메시지 내용
  • %ansubtext: 비어 있음
  • %antitlebig: 발신자 닉네임
  • %antexts()%antextsbig(): 방 제목 없음
  • %anextras(): android.conversationTitle 없음

알림 창에는 분명히 방 제목이 보이는데 AutoNotification의 어떤 텍스트 필드에서도 방 제목을 찾을 수 없는 상태입니다.

원인: Conversation Shortcut

현재 카카오톡 알림은 Android의 Notification.MessagingStyleConversation Shortcut을 사용합니다. Android 11부터 대화 알림은 이 둘을 함께 쓰도록 되어 있고 제가 확인한 카카오톡 알림에서는 화면에 보이는 방 제목이 conversationTitle이 아니라 이 Shortcut의 longLabel에 들어 있었습니다.

즉 방 제목은 알림 본문(extras)에 들어 있는 것이 아니라 알림에 연결된 Shortcut 객체에 들어 있습니다. 그래서 Get All Fields%anextras()로는 아무리 뒤져도 나오지 않고 Android Notification Ranking에 붙어 있는 ConversationShortcutInfo를 직접 읽어야 합니다.

4단계: Java Code로 카카오톡 방 제목 추출하기

Entry Task의 첫 번째 액션으로 Java Code를 추가합니다.

Task Edit
→ +
→ Code
→ Java Code

다음 코드를 입력합니다.

listener = tasker.getNotificationListener();

if (listener == null) {
    return "";
}

wantedPackage = tasker.getVariable("anpackage");
wantedIdText = tasker.getVariable("anid");
wantedTag = tasker.getVariable("antag");

if (wantedPackage == null || wantedIdText == null) {
    return "";
}

try {
    wantedId = Integer.parseInt(wantedIdText);
} catch (Exception e) {
    return "";
}

notifications = listener.getActiveNotifications();
rankings = listener.getCurrentRanking();

for (int i = 0; i < notifications.length; i++) {
    sbn = notifications[i];

    if (!wantedPackage.equals(sbn.getPackageName())) {
        continue;
    }

    if (sbn.getId() != wantedId) {
        continue;
    }

    actualTag = sbn.getTag();

    tagMatches =
        (wantedTag == null && actualTag == null) ||
        (wantedTag != null && wantedTag.equals(actualTag));

    if (!tagMatches) {
        continue;
    }

    ranking =
        new android.service.notification.NotificationListenerService.Ranking();

    if (!rankings.getRanking(sbn.getKey(), ranking)) {
        continue;
    }

    shortcut = ranking.getConversationShortcutInfo();

    if (shortcut == null) {
        continue;
    }

    label = shortcut.getLongLabel();

    if (label == null || label.length() == 0) {
        label = shortcut.getShortLabel();
    }

    if (label != null) {
        return label.toString();
    }
}

return "";

Java Code 액션의 Return 칸에는 다음 로컬 변수를 입력합니다.

%room_title

코드가 하는 일

이 코드는 Intercept 이벤트가 넘겨준 세 값을 조합해 지금 이벤트를 발생시킨 알림 하나를 찾습니다.

%anpackage + %anid + %antag

그다음 그 알림의 Ranking에서 ConversationShortcutInfo를 꺼내 longLabel을, 없으면 shortLabel을 방 제목으로 돌려줍니다.

%antag까지 비교해야 하는 이유

카카오톡은 여러 대화방 알림이 같은 ID를 쓸 수 있습니다. %anid만 비교하면 엉뚱한 방의 제목이 나올 수 있으므로 %antag까지 함께 비교하는 것이 중요합니다.

5단계: 자동응답할 방 제한하기

Java Code 뒤에 If 액션을 추가합니다.

Task Edit → + → Task → If

조건 예시는 다음과 같습니다.

%room_title eq <자동응답할 방 제목>

< >는 이 글에서 자리표시자를 구분하기 위한 표기입니다. Tasker에는 괄호 없이 실제 방 제목을 정확히 입력합니다. 예를 들어 대상 방 제목이 우리팀 프로젝트방이라면 다음과 같습니다.

%room_title eq 우리팀 프로젝트방

봇이 자기 답장에 반응하지 않게 하기

봇이 보낸 답장도 알림으로 다시 들어올 수 있습니다. 무한 루프를 막기 위해 발신자 조건을 반드시 추가하세요.

%room_title eq <자동응답할 방 제목>
AND
%antitle neq <내 카카오톡 닉네임>

더 안전하게 운영하려면 다음 제한도 고려합니다.

  • 특정 명령어(예: !질문)로 시작하는 메시지만 처리
  • 허용된 방 목록만 처리
  • 동일 메시지 중복 처리 방지
  • 연속 요청에 대한 쿨다운 설정
  • 서버 응답 길이 제한

6단계: 메시지 저장과 URL 검사

대상 방 조건 안에서 메시지를 로컬 변수에 저장합니다.

Task Edit → + → Variables → Variable Set
Name: %input_text
To: %antext

메시지에 URL이 들어 있는지에 따라 처리를 나누고 싶다면 Simple Match/Regex를 사용합니다.

Task Edit → + → Variables → Simple Match/Regex
Text: %input_text
Regex: https?://[^\s]+
Output Variables Prefix: url

결과는 %url_mt_match_found 변수로 확인하며 URL이 발견되면 true가 됩니다.

If %url_mt_match_found eq true
    URL 포함 메시지 처리
Else
    일반 메시지 처리
End If

7단계: 웹훅 또는 AI 서버 호출하기

HTTP 요청 액션을 추가합니다.

Task Edit → + → Net → HTTP Request
Method: POST
URL: https://example.com/webhook
Headers:
Content-Type:application/json

Body 예시입니다.

{
  "room": "%room_title",
  "sender": "%antitle",
  "message": "%input_text"
}

https://example.com/webhook 자리에 자신이 관리하는 웹훅 주소를 넣습니다. HTTP 응답 본문은 기본적으로 %http_data에 저장되며 응답이 있을 때만 답장하도록 If %http_data Set 조건을 걸 수 있습니다.

다만 서버가 500 오류와 함께 에러 본문을 돌려주면 %http_data도 Set 상태가 되어 오류 메시지가 그대로 답장으로 나갑니다. If %http_response_code ~ 2*처럼 HTTP 상태 코드로 거르는 편이 더 정확합니다.

주소와 토큰을 노출하지 마세요

인증 토큰이나 실제 웹훅 주소를 TaskerNet 공유, 화면 캡처, 공개 문서에 남기지 않도록 주의하세요. 알림 내용이 그대로 서버로 전달되는 구조이므로 서버 쪽 인증도 반드시 두어야 합니다.

JSON 문자열 깨짐 주의

메시지에 큰따옴표나 줄바꿈이 포함되면 JSON Body가 깨질 수 있습니다. Variable Search Replace로 서버가 요구하는 형식에 맞게 이스케이프하거나, 서버가 지원한다면 JSON 대신 폼 데이터 같은 다른 전송 형식을 사용하세요.

8단계: 카카오톡으로 답장하기

마지막으로 AutoNotification Reply 액션을 추가합니다.

Task Edit
→ +
→ Plugin
→ AutoNotification
→ Reply
Notification Apps: 카카오톡
Reply Text: %http_data

AutoNotification Reply 화면에서 Reply ID를 지정할 수 있고 Intercept 이벤트가 Reply Action 변수를 제공한다면, 다음 값을 사용합니다.

Reply ID: %anreplyaction

Reply ID를 꼭 지정하세요

Reply ID 없이 앱 이름만으로 답장하면, 카카오톡 알림이 여러 개 떠 있을 때 다른 방에 답장을 보낼 수 있습니다. 변수 선택 버튼에서 현재 Intercept가 제공하는 Reply Action ID를 확인해 쓰는 것이 안전합니다.

카카오톡 알림에 빠른 답장 액션이 존재해야 하며 처리 중 알림이 사라지면 답장이 실패할 수 있습니다.

완성된 Tasker 작업 구조

지금까지의 단계를 하나로 합치면 Tasker 카카오톡 자동응답 봇의 작업 구조는 다음과 같습니다.

Profile
└─ Event → Plugin → AutoNotification → Intercept
   ├─ Only Created Notifications
   ├─ Notification Apps: 카카오톡
   ├─ Package Name: com.kakao.talk
   └─ Get All Fields: true

Entry Task
├─ Java Code → %room_title
├─ If %room_title eq <자동응답할 방 제목>
│  ├─ If %antitle neq <내 카카오톡 닉네임>
│  │  ├─ Variable Set: %input_text = %antext
│  │  ├─ Simple Match/Regex: URL 검사
│  │  ├─ Variable Search Replace: %input_text의 줄바꿈 이스케이프
│  │  ├─ Variable Search Replace: %input_text의 큰따옴표 이스케이프
│  │  ├─ HTTP Request: 웹훅 또는 AI 서버 호출
│  │  ├─ If %http_response_code ~ 2*
│  │  │  └─ AutoNotification Reply: %http_data
│  │  └─ End If
│  └─ End If
└─ End If

실제 운영 중인 태스크 예시

아래는 제가 실제로 돌리고 있는 태스크의 액션 목록입니다. 위 최소 구성에 슬래시 명령어(/ask) 처리와 URL 스크래핑 분기를 덧붙인 형태라, 이 글의 범위를 넘는 액션이 함께 들어 있습니다.

스크린샷에서 함께 볼 것

  • 실제 태스크는 서버 구성상 GET을 쓰고 있습니다. 다만 대화 내용이 서버 액세스 로그에 남고 긴 메시지에서 URL 길이 제한에 걸릴 수 있어, 이 글의 7단계는 POST 기준으로 설명합니다.
  • 답장은 If %http_response_code ~ 2* 조건이 붙은 AutoNotification Reply로 나갑니다.
  • 18번 Popup은 값 확인용으로 넣어 두고 평소에는 비활성으로 꺼 둔 것입니다. 바로 아래 “실제 알림으로 테스트하는 방법”에서 쓰는 방식입니다.

실제 알림으로 테스트하는 방법

Tasker 카카오톡 자동응답 봇은 반드시 실제 알림으로 테스트해야 합니다. 초기 테스트에서는 Java Code 바로 다음에 Popup 또는 Flash 액션을 임시로 넣어 값을 눈으로 확인합니다.

방: %room_title
발신자: %antitle
내용: %antext
ID: %anid
Tag: %antag

테스트 절차는 다음과 같습니다.

  1. 대상 카카오톡 방의 기존 알림을 정리합니다.
  2. 상대방이 대상 방에 새 메시지를 보냅니다.
  3. 실제 카카오톡 알림으로 프로필이 실행되게 합니다.
  4. %room_title, %antitle, %antext 값을 확인합니다.
  5. 웹훅으로 전달된 요청을 서버 쪽에서 확인합니다.
  6. %http_data에 응답이 들어오는지 확인합니다.
  7. AutoNotification Reply가 같은 방에 응답하는지 확인합니다.

다시 강조하지만, Tasker 작업 편집 화면의 실행 버튼으로 테스트하면 Intercept 이벤트 변수가 만들어지지 않아 방 제목 추출과 Reply ID 테스트가 정상적으로 진행되지 않습니다.

자주 발생하는 문제와 해결 방법

Java Code 결과가 “Tasker 알림 접근 권한이 없습니다”로 나옵니다

Tasker 자체의 알림 접근 권한을 켜야 합니다. AutoNotification의 권한만 켜서는 Java Code의 tasker.getNotificationListener()를 사용할 수 없습니다.

%room_title이 비어 있습니다

아래 항목을 순서대로 확인하세요.

  • Tasker 실행 버튼이 아니라 실제 카카오톡 알림으로 테스트했는지
  • Tasker의 알림 접근 권한이 켜져 있는지
  • Android 12 / API 31 이상인지
  • 해당 알림이 Android Conversation Shortcut을 사용하는지
  • Notification Id 필터를 비웠을 때 프로필이 실행되는지
  • 알림이 Java Code 실행 전에 사라지지 않았는지
모든 대화방 제목이 한꺼번에 나옵니다

활성 알림 전체를 단순 조회하는 코드를 쓴 경우입니다. 이 글의 코드는 %anpackage, %anid, %antag를 비교해 현재 Intercept 이벤트를 발생시킨 알림 하나만 선택합니다.

다른 방으로 답장이 갑니다
  • AutoNotification Reply에 현재 알림의 Reply ID(%anreplyaction)를 지정하세요.
  • 앱 이름만으로 알림을 검색하는 Reply 설정을 피하세요.
  • 웹훅 처리 시간이 너무 길어 그 사이에 알림 상태가 바뀌지 않았는지 확인하세요.
같은 메시지가 두 번 처리됩니다
  • Intercept에서 Ignore Group Summaries를 켜세요.
  • 메시지 ID 또는 본문과 시간을 이용한 중복 방지 로직을 추가하세요.
  • Tasker 작업의 충돌 처리(Collision Handling) 설정을 확인하세요.

보안과 운영 시 주의사항

쓰기 전에 알아 둘 것 (2026년 9월 기준)

계정 — 카카오톡 운영정책은 “프로토콜·API 등을 악용한 프로그램(봇, 매크로 등)”의 개발·유포를 금지합니다. 이 글의 방식은 Android 알림 접근 권한과 알림에 이미 붙어 있는 빠른 답장만 사용하므로, 열거된 금지 행위에 문자 그대로 해당하지는 않습니다. 다만 개인 사용 목적을 허용한다는 예외 조항도 없고 카카오는 “특별한 이용환경 및 이용패턴이 감지되는 경우” 이용을 한시적·영구적으로 제한할 수 있다고 밝히고 있습니다. 낮은 빈도로, 영업·홍보·대량 발송이 아닌 용도로만 쓰세요.

상대방 — 이 구조에서는 대화방에 올라온 메시지가 그대로 웹훅 서버로, 구성에 따라 외부 LLM API로까지 전달됩니다. 같은 방에 있는 상대방은 이 사실을 알지 못합니다. 테스트용 방이나 참여자가 사정을 아는 방에서만 쓰세요.

알림 접근 권한은 강력한 권한입니다. 운영 전에 다음 항목을 점검하세요.

  • 알림 접근 권한을 가진 앱은 다른 앱의 알림 내용도 읽을 수 있다는 점을 인지한다.
  • 프로필의 앱 필터를 카카오톡 또는 com.kakao.talk로 제한한다.
  • 자동답장할 방을 명시적으로 허용 목록에 넣는다.
  • 자신의 메시지를 제외해 무한 응답을 방지한다.
  • 웹훅 주소, API 키, 인증 토큰을 공개하지 않는다.
  • 서버 응답을 그대로 실행 가능한 명령으로 사용하지 않는다.
  • 외부 입력의 길이와 빈도를 제한한다.
  • 운영 전에 테스트용 방에서 충분히 검증한다.

마무리

기존 Tasker 카카오톡 자동응답 방식은 %ansubtext에 방 제목이 들어오는 것을 전제로 했습니다. 현재 카카오톡 대화 알림에서는 방 제목이 일반 Notification extras가 아니라 Android Conversation Shortcut의 라벨로 표시되기 때문에, 이 값을 직접 읽어야 방 단위 자동응답이 가능합니다.

핵심만 정리하면 다음과 같습니다.

  1. AutoNotification Intercept로 카카오톡 알림을 받는다.
  2. %anpackage, %anid, %antag로 현재 알림을 특정한다.
  3. Tasker Java Code에서 Notification Ranking을 가져온다.
  4. getConversationShortcutInfo()longLabel 또는 shortLabel%room_title에 저장한다.
  5. %room_title로 자동응답 대상 방을 제한한다.
  6. %antext를 웹훅에 전달하고 %http_data를 AutoNotification Reply로 전송한다.

서버 쪽을 n8n이나 로컬 LLM으로 구성하면 개인용 카카오톡 AI 비서가 됩니다. 다음 글에서는 이 봇 뒤에 붙는 n8n 웹훅 워크플로우와 Ollama 응답 생성 부분을 다룰 예정입니다.

함께 보면 좋은 글

서버 쪽 구성은 아래 글들을 참고하세요.

참고 자료

Tasker 카카오톡 자동응답 봇 만들기: AutoNotification으로 방 제목 추출부터 AI 답장까지 (2026)

답글 남기기

Scroll to top