Перейти к содержимому

Уведомления после ответа Claude Code ​

Claude Code поддерживает хук Stop, который запускается после завершения ответа основного агента. Через него можно отправить последний ответ в Депешер и получить уведомление на телефоне или в командном чате. Формат хука описан в официальной документации Claude Code.

Подготовьте Депешер ​

Сначала создайте и подтвердите исходящий канал: Email, Telegram, группу Telegram, Пачку или Depesher Desktop. Затем создайте входящий канал для этого инструмента, свяжите его с выбранным получателем и скопируйте публичный URL. Выполните проверку из статьи «Первое уведомление».

Сохраните скрипт отправки ​

В Python-примере замените DEPESHER_URL адресом своего канала. Для защищённого канала заполните DEPESHER_TOKEN токеном без префикса Bearer; иначе оставьте пустую строку. Нужен Python 3, дополнительных Python-пакетов для HTTP-запроса не требуется.

Сохраните следующий код как ~/.claude/notify-depesher.py. Claude Code передаёт JSON-событие через стандартный ввод:

python
import json
import sys
from urllib.request import Request, urlopen

DEPESHER_URL = "https://depesher.ru/w/ВАШ_PUBLIC_ID"
DEPESHER_TOKEN = ""


def send_notification(message):
    headers = {"Content-Type": "text/plain"}
    if DEPESHER_TOKEN:
        headers["Authorization"] = f"Bearer {DEPESHER_TOKEN}"

    request = Request(
        DEPESHER_URL,
        data=message.encode("utf-8"),
        headers=headers,
        method="POST",
    )
    with urlopen(request, timeout=15):
        pass


event = json.load(sys.stdin)
message = event.get("last_assistant_message") or "Claude Code завершил ответ"
send_notification(message)

Подключите Stop hook ​

Добавьте обработчик в ~/.claude/settings.json. Если файл содержит другие настройки или хуки, объедините записи, сохранив существующие:

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 /home/user/.claude/notify-depesher.py"
          }
        ]
      }
    ]
  }
}

Замените путь к скрипту и при необходимости команду Python. Не передавайте текст ответа через подстановку в shell-команду: скрипт читает его как данные из JSON.

Проверьте отправку ​

Пример ручной проверки для Bash:

bash
printf '%s' '{"last_assistant_message":"Проверка уведомления Claude Code"}' |
  python3 /home/user/.claude/notify-depesher.py

Затем откройте новую сессию Claude Code, выполните короткое задание и проверьте уведомление после ответа.

Ограничения сценария ​

Stop не срабатывает при ручном прерывании ответа. Ошибки API покрываются отдельным событием StopFailure, поэтому этот пример не является обработчиком всех сбоев. Завершение ответа также не гарантирует успешность задачи: смотрите присланный текст.

Если обработчик запускается, но сообщение не приходит, проверьте URL, токен и доставку Депешера. Если вручную всё работает, проверьте путь к скрипту и настройки хука в Claude Code.

Связанные сценарии ​

Если приложение формирует отдельные JSON-события ошибки, ожидания решения и завершения, используйте состояния AI и workflow для разных получателей. Этот рецепт требует соответствующего события от источника; он не добавляет новые события к описанному здесь обработчику. Настройка сравнений — условия правил, проверка принятого сообщения — история.