Перейти к содержимому
ChatterfyСправочный центр
ГлавнаяGeneralCRMAI ManagerTrackerПлатформыAPIFAQUpdate log
Начало работы
Инструкции
Чаты и сообщения
Отправка сообщений
Изменение чата
Фильтры чатов
Выгрузка чатов
Реальное время
Аналитика и Tracker
Справочник
API и AI
  1. API
  2. Инструкции
  3. Как выгрузить все чаты через API

Как выгрузить все чаты через API

Выгрузка чатов — это способ забрать все чаты бота разом: в таблицу, в свою CRM или базу данных. Она читает снимок чатов на момент начала, поэтому ничего не пропускает и не повторяет, сколько бы чатов

Обновлено 2 ноября 2026 г.3 мин
Выгрузка чатов — это способ забрать все чаты бота разом: в таблицу, в свою CRM или базу данных. Она читает снимок чатов на момент начала, поэтому ничего не пропускает и не повторяет, сколько бы чатов ни было.
В статье — как выгрузить все чаты, готовый скрипт для сохранения в CSV и как потом забирать только изменения.



Что понадобится

  1. API-ключ с ролью Space controller или выше — для выгрузки нужно право chat.export. Подробнее — Права API-ключа: какую роль выдать.
  1. id бота — Первый запрос к API за 5 минут.



Чем выгрузка чатов отличается от поиска


Поиск `/chats/v1/search`
Выгрузка `/chats/v1/export`
Сколько чатов можно пролистать
До 10 000
Без ограничения
Повторы и пропуски
Возможны: список меняется, пока вы его читаете
Нет: читается снимок на момент первого запроса
Сколько живёт cursor
Без ограничения
5 минут после каждой страницы
Для чего
Показать список, найти чат
Забрать всё целиком



Выгрузите все чаты бота

Все чаты бота выгружает POST /chats/v1/export с bot_id в теле — страница за страницей, через cursor, без предела в 10 000 чатов. Между страницами должно пройти не больше 5 минут.
  1. 1

    Посчитайте чаты

    Так вы узнаете, сколько чатов ждать. Фильтр — тот же, что будет в выгрузке, или без фильтра:
    Запросbash
    curl -X POST 'https://api.chatterfy.ai/public-api/chats/v1/stats' \
      -H 'ApiKey: ВАШ_КЛЮЧ' \
      -H 'Content-Type: application/json' \
      -d '{"bot_id": "ID_БОТА"}'
    Общее число — в поле total.
  2. 2

    Запросите первую страницу

    Запросbash
    curl -X POST 'https://api.chatterfy.ai/public-api/chats/v1/export' \
      -H 'ApiKey: ВАШ_КЛЮЧ' \
      -H 'Content-Type: application/json' \
      -d '{"bot_id": "ID_БОТА", "limit": 100}'
    Ответ устроен так же, как у поиска: чаты в data, следующая страница — в pagination.
  3. 3

    Листайте страницы без пауз

    Повторяйте тот же запрос, добавляя в тело cursor со значением next_cursor из прошлого ответа.
  4. 4

    Остановитесь на последней странице

    Когда придёт has_more: false, выгрузка закончена.
Cursor живёт 5 минут
Если между страницами пройдёт больше 5 минут, API вернёт ошибку cursor_expired. Тогда начните выгрузку заново, без cursor.
В выгрузке тоже работает фильтр — например, только чаты за октябрь или только с тегом. Как его составить — в статье Фильтры чатов в API.



Готовый скрипт на Python: все чаты в CSV

Скрипт выгружает все чаты бота в файл chats.csv, который открывается в Excel и Google Таблицах. Нужен только Python 3 — устанавливать ничего больше не надо.
  1. 1

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

    Скопируйте код в файл export_chats.py. В строке BOT_ID вместо ID_БОТА вставьте id своего бота.
    export_chats.pypython
    import csv
    import json
    import os
    import time
    import urllib.error
    import urllib.request
    
    API = "https://api.chatterfy.ai/public-api"
    KEY = os.environ["CHATTERFY_API_KEY"]
    BOT_ID = "ID_БОТА"
    
    
    def call(path, body):
        request = urllib.request.Request(
            API + path,
            data=json.dumps(body).encode("utf-8"),
            method="POST",
            headers={"ApiKey": KEY, "Content-Type": "application/json"},
        )
        try:
            with urllib.request.urlopen(request, timeout=30) as response:
                return json.load(response)
        except urllib.error.HTTPError as error:
            if error.code == 429:
                time.sleep(int(error.headers.get("Retry-After", "5")))
                return call(path, body)
            raise
    
    
    body = {"bot_id": BOT_ID, "limit": 100}
    total = 0
    
    with open("chats.csv", "w", newline="", encoding="utf-8-sig") as file:
        writer = csv.writer(file)
        writer.writerow(["id", "name", "username", "status", "created_at", "last_message"])
        while True:
            page = call("/chats/v1/export", body)
            for chat in page["data"]:
                last_message = (chat.get("last_message") or {}).get("content", "")
                writer.writerow([chat["id"], chat.get("name", ""), chat.get("username", ""),
                                 chat["status"], chat["created_at"], last_message])
            total += len(page["data"])
            print("Выгружено чатов:", total)
            if not page["pagination"]["has_more"]:
                break
            body["cursor"] = page["pagination"]["next_cursor"]
    
    print("Готово: chats.csv")
  2. 2

    Передайте ключ и запустите

    Терминалbash
    export CHATTERFY_API_KEY='ВАШ_КЛЮЧ'
    python3 export_chats.py
    PowerShellpowershell
    $env:CHATTERFY_API_KEY = "ВАШ_КЛЮЧ"
    python export_chats.py
  3. 3

    Откройте файл

    Файл chats.csv появится в той же папке. В нём id чата, имя, username, статус, дата появления и текст последнего сообщения.
Ключ передаётся через переменную окружения CHATTERFY_API_KEY, а не записывается в файл, — так скрипт можно показывать и пересылать без риска. Если API ответит 429, скрипт сам подождёт и продолжит.



Забирайте только изменённые чаты

После первой полной выгрузки не нужно каждый раз забирать всё. Запрашивайте только чаты, в которых появились сообщения с прошлого раза:
  1. 1

    Запомните время запуска

    Перед каждой синхронизацией сохраните текущее время.
  2. 2

    Запросите изменённые чаты

    В следующий раз отправьте поиск с sort: asc и фильтром по updated_at — времени последнего сообщения. Нижняя граница — время прошлого запуска с запасом в несколько минут, верхняя — текущее время:
    Тело запроса /chats/v1/searchjson
    {
      "bot_id": "ID_БОТА",
      "limit": 100,
      "sort": "asc",
      "filter": {
        "field": "updated_at",
        "operator": "between",
        "value": ["2026-10-29T11:55:00Z", "2026-10-30T12:00:00Z"]
      }
    }
  3. 3

    Обновите записи по id

    Если чат уже есть у вас, замените его новой версией. Так повторы из-за запаса по времени ничего не испортят.
Используйте between, а не after: between включает границы, поэтому чат с сообщением ровно в момент границы не потеряется.



Частые вопросы

Выгрузка идёт со скоростью до 12 000 чатов в минуту: одна страница — до 100 чатов, а ключ делает до 120 запросов в минуту.

В выгрузку чатов попадает только последнее сообщение каждого чата, в поле last_message. Всю переписку запрашивайте по каждому чату через POST /messages/v1/search — Как получить чаты и сообщения через API.

Ошибка cursor_expired значит, что между страницами выгрузки прошло больше 5 минут. Начните выгрузку заново без cursor и листайте страницы подряд.

Нет, один запрос выгрузки — один бот, чаты нескольких ботов сразу не выгружаются. Выгрузите каждого бота по очереди.

Ответ 403 на выгрузку значит, что у роли нет права chat.export. Оно есть у ролей Space controller, Space manager и выше, но не у Space viewer.



Связанное

Как получить чаты и сообщения через API
Чаты и сообщения через API читаются двумя запросами: сначала список чатов бота, потом сообщения нужного чата. Это то же самое, что открыть бота в приложении и нажать на диалог. В статье — как получить
Фильтры чатов в API
Фильтр чатов — это условия, по которым API отбирает чаты: например, «непрочитанные», «с тегом Оплатил» или «пришли из Google». Один и тот же фильтр работает в поиске, подсчёте, выгрузке и подписке на
Ошибки и лимиты API
Ошибка API — это ответ, в котором Chatterfy объясняет, почему не выполнил запрос. У всех ошибок одинаковый вид, поэтому разобраться можно по двум полям: коду ответа и code . В статье — как читать ошиб
Как подключить Chatterfy API к своему AI
Подключить API к своему AI — значит дать Claude, Cursor, ChatGPT или другому ассистенту инструкцию и ключ, чтобы он сам отправлял запросы в Chatterfy по вашей просьбе. Вы пишете «покажи, кому не ответ

Эта статья была полезна?

НазадФильтры чатов в APIДалееНовые сообщения в реальном времени через API

На этой странице

  • Что понадобится
  • Чем выгрузка чатов отличается от поиска
  • Выгрузите все чаты бота
  • Готовый скрипт на Python: все чаты в CSV
  • Забирайте только изменённые чаты
  • Частые вопросы
  • Связанное