Как выгрузить все чаты через API
Выгрузка чатов — это способ забрать все чаты бота разом: в таблицу, в свою CRM или базу данных. Она читает снимок чатов на момент начала, поэтому ничего не пропускает и не повторяет, сколько бы чатов
Выгрузка чатов — это способ забрать все чаты бота разом: в таблицу, в свою CRM или базу данных. Она читает снимок чатов на момент начала, поэтому ничего не пропускает и не повторяет, сколько бы чатов ни было.
В статье — как выгрузить все чаты, готовый скрипт для сохранения в CSV и как потом забирать только изменения.
Что понадобится
- API-ключ с ролью Space controller или выше — для выгрузки нужно право
chat.export. Подробнее — Права API-ключа: какую роль выдать.
- id бота — Первый запрос к API за 5 минут.
Чем выгрузка чатов отличается от поиска
| Поиск `/chats/v1/search` | Выгрузка `/chats/v1/export` |
|---|---|---|
Сколько чатов можно пролистать | До 10 000 | Без ограничения |
Повторы и пропуски | Возможны: список меняется, пока вы его читаете | Нет: читается снимок на момент первого запроса |
Сколько живёт cursor | Без ограничения | 5 минут после каждой страницы |
Для чего | Показать список, найти чат | Забрать всё целиком |
Выгрузите все чаты бота
Все чаты бота выгружает
POST /chats/v1/export с bot_id в теле — страница за страницей, через cursor, без предела в 10 000 чатов. Между страницами должно пройти не больше 5 минут.Посчитайте чаты
Так вы узнаете, сколько чатов ждать. Фильтр — тот же, что будет в выгрузке, или без фильтра:Запросbashcurl -X POST 'https://api.chatterfy.ai/public-api/chats/v1/stats' \ -H 'ApiKey: ВАШ_КЛЮЧ' \ -H 'Content-Type: application/json' \ -d '{"bot_id": "ID_БОТА"}'Общее число — в полеtotal.Запросите первую страницу
Запросbashcurl -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.Листайте страницы без пауз
Повторяйте тот же запрос, добавляя в телоcursorсо значениемnext_cursorиз прошлого ответа.Остановитесь на последней странице
Когда придётhas_more: false, выгрузка закончена.
Cursor живёт 5 минут
Если между страницами пройдёт больше 5 минут, API вернёт ошибку
cursor_expired. Тогда начните выгрузку заново, без cursor.В выгрузке тоже работает фильтр — например, только чаты за октябрь или только с тегом. Как его составить — в статье Фильтры чатов в API.
Готовый скрипт на Python: все чаты в CSV
Скрипт выгружает все чаты бота в файл
chats.csv, который открывается в Excel и Google Таблицах. Нужен только Python 3 — устанавливать ничего больше не надо.Сохраните скрипт
Скопируйте код в файлexport_chats.py. В строкеBOT_IDвместоID_БОТАвставьте id своего бота.export_chats.pypythonimport 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")Передайте ключ и запустите
Терминалbashexport CHATTERFY_API_KEY='ВАШ_КЛЮЧ' python3 export_chats.pyPowerShellpowershell$env:CHATTERFY_API_KEY = "ВАШ_КЛЮЧ" python export_chats.pyОткройте файл
Файлchats.csvпоявится в той же папке. В нём id чата, имя, username, статус, дата появления и текст последнего сообщения.
Ключ передаётся через переменную окружения
CHATTERFY_API_KEY, а не записывается в файл, — так скрипт можно показывать и пересылать без риска. Если API ответит 429, скрипт сам подождёт и продолжит.Забирайте только изменённые чаты
После первой полной выгрузки не нужно каждый раз забирать всё. Запрашивайте только чаты, в которых появились сообщения с прошлого раза:
Запомните время запуска
Перед каждой синхронизацией сохраните текущее время.Запросите изменённые чаты
В следующий раз отправьте поиск с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"] } }Обновите записи по id
Если чат уже есть у вас, замените его новой версией. Так повторы из-за запаса по времени ничего не испортят.
Используйте
between, а не after: between включает границы, поэтому чат с сообщением ровно в момент границы не потеряется.Частые вопросы
Связанное
Эта статья была полезна?

