Ответы на комментарии TikTok через API: проверка публикации и цели
Чтобы ответить на комментарий TikTok через UnifyPort, выберите публикацию, принадлежность которой подключённому аккаунту подтверждена, затем подтверждённый комментарий верхнего уровня. Вызовите POST /v1/accounts/{account_id}/posts/comments/reply, передав post_id, comment_id и text. Это не отправка личного сообщения и не инструмент для комментариев к любому видео. Результат accepted означает принятие запроса, но не гарантирует публичное отображение, доставку или webhook.
Главное
- Храните идентификаторы аккаунта, публикации и комментария вместе; ID провайдера оставляйте строками.
- Список охватывает комментарии верхнего уровня к собственным публикациям, а не полную историю вложенных ответов.
- Отсутствие
parent_comment_idсамо по себе не доказывает, что комментарий верхнего уровня. - Разделяйте повторяемое чтение и запись с неопределённым исходом. Тайм-аут ответа или неподтверждённая квитанция не должны запускать автоматическую повторную отправку.
Не путайте комментарии с личными сообщениями
Официальная документация TikTok Query Video Comments описывает чтение через Research API: video_id выбирает комментарии, comment_id — ответы, используется scope research.data.basic. Это другой контракт, не публикация ответа от подключённого аккаунта. Не переносите его числовые ID, параметры пагинации и заголовки авторизации в запросы UnifyPort.
Сравнение TikTok Business Messaging и QR-подключения входящих сообщений также посвящено другой задаче — личной переписке. Публичный комментарий не является адресатом диалога для универсального метода отправки сообщений.
Здесь используется неофициальный интерфейс UnifyPort для собственных публикаций авторизованного аккаунта TikTok. Если аккаунт ещё не подключён, сначала пройдите настройку QR-авторизации TikTok. Перед операциями проверьте авторизацию и runtime_status: running. Ключ рабочего пространства храните на сервере, а доступ оператора к выбранному аккаунту проверяйте отдельно.
Сначала прочитайте публикацию и комментарии
| Задача | Метод и путь API | Граница |
|---|---|---|
| Найти свои публикации | GET /v1/accounts/{account_id}/posts | Только публикации авторизованного аккаунта |
| Проверить публикацию | POST /v1/accounts/{account_id}/posts/info | post_id в JSON, с проверкой принадлежности |
| Получить комментарии | POST /v1/accounts/{account_id}/posts/comments/list | Только верхний уровень; пагинация в JSON |
| Ответить | POST /v1/accounts/{account_id}/posts/comments/reply | Подтверждённая цель верхнего уровня в своей публикации |
Начните со списка публикаций аккаунта, затем проверьте выбранную публикацию через Get account post. Вставленная ссылка на видео не доказывает принадлежность аккаунту.
В запрос списка комментариев верхнего уровня передавайте выбранный post_id и limit. Значение limit по умолчанию — 20, допустимый диапазон — 1–50. На первой странице опускайте cursor: пустая строка недопустима. Если data.has_more равно true, передайте data.next_cursor без изменений как cursor следующего запроса. На последней странице курсор отсутствует.
Привязывайте цепочку пагинации к аккаунту и публикации. Выбирайте цель по возвращённым ID, а не по позиции в массиве или отображаемому имени. Короткая страница не отменяет has_more, а ошибка чтения не означает пустой список.
Необязательные поля текста и автора возвращаются при наличии достоверных данных. Отсутствующий text означает неизвестное значение, а не пустой комментарий. Не подставляйте время наблюдения вместо отсутствующего created_at. Сохраняйте post_id как строку положительного десятичного целого без ведущих нулей. Не преобразуйте ID публикации и комментария в JavaScript number.
Отправьте один согласованный ответ
Перед отправкой покажите оператору публикацию, комментарий, аккаунт и черновик. Рекомендуется связать эти цели с утверждённым текстом в локальной записи: обновление списка не должно менять адресат записи.
Пример ниже один раз вызывает метод ответа на комментарий верхнего уровня. Передавайте реальные ID из проверенного выбора и серверный API-ключ. Это не полноценная система согласования: функция не проверяет принадлежность локально и не выполняет автоматические повторы.
async function replyToTikTokComment({
apiKey, accountId, postId, commentId, text
}) {
if (typeof postId !== 'string' || !/^[1-9][0-9]*$/.test(postId)) {
throw new Error('Use the returned post ID string');
}
if (typeof commentId !== 'string' || !commentId.trim() ||
typeof text !== 'string' || !text.trim()) {
throw new Error('Select a comment and provide reply text');
}
if (typeof accountId !== 'string' || !accountId.trim()) {
throw new Error('Select the connected account');
}
const response = await fetch(
`https://api.unifyport.ai/v1/accounts/${encodeURIComponent(accountId)}/posts/comments/reply`,
{
method: 'POST',
headers: {
'X-Api-Key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
post_id: postId, comment_id: commentId, text
})
}
);
const result = await response.json();
return { httpStatus: response.status, result };
}
Проверка пробелов отклоняет пустой ввод, но не меняет утверждённый текст. Если после отправки произошла ошибка сети или разбора ответа, сохраните неопределённый исход. Не оборачивайте функцию в универсальный цикл повторных POST-запросов.
Не приписывайте результату лишние гарантии
| Результат | Значение | Рекомендуемое действие |
|---|---|---|
200, data.status: accepted | Запрос принят | Сохранить результат, не помечать как «публично отображается» |
Необязательное data.comment | Есть достоверная квитанция о новом комментарии | Сохранить, если есть; не требовать для признания принятия |
403 post_inaccessible | Публикация недоступна, причина не определена | Остановиться и проверить доступ, не помечать как удалённую |
404 post_not_found | Отсутствие публикации подтверждено | Обновить выбор |
404 comment_not_found | Цель не найдена после проверки | Выбрать заново; это не означает поиск во всех вложенных ответах |
501 unsupported_by_provider | Провайдер не поддерживается либо цель подтверждена как вложенная | Остановить операцию, не переключаться незаметно на DM |
502 reply_post_comment_failed при неподтверждённой квитанции после записи | Исход записи неизвестен | Передать на проверку, не отправлять повторно автоматически |
Неполная проверка останавливает запись. Неполную проверку при чтении можно повторить, но это не делает повтор неопределённой отправки безопасным. Если последующее чтение не показывает ответ, это не доказательство, что он не был создан. Тем более список охватывает только верхний уровень.
Последовательно выполняйте локальные записи для одной цели, блокируйте двойные нажатия и сохраняйте request_id вместе с HTTP-результатом. Это меры приложения, а не гарантия идемпотентности API. Не записывайте тексты клиентских комментариев и API-ключи в общие журналы.
Уведомления — отдельный слой приёма
В каталоге стандартных событий есть post.comment.created. Подписка сама по себе не включает опрос комментариев: он выключен по умолчанию. Для provider_data.enable_comment: true нужен запуск или переподключение; изменение во время работы требует переподключения. Сначала проверьте доступность в окружении и готовность приёмника. Успешный запуск сам по себе не доказывает применение настройки, а отключение не отзывает уже поставленные в очередь события.
Считайте уведомления сигналами best-effort: возможны задержки, дубли, изменение порядка и пропуски. Это не полный архив и не гарантированная квитанция каждого ответа. Проверяйте подпись по контракту доставки webhook и удаляйте дубли по ID события. Отсутствие parent_comment_id в уведомлении не отменяет проверку цели перед ответом.
Частые вопросы
Можно отвечать под любым видео TikTok?
Не через этот сценарий. Операции проверяют принадлежность публикации авторизованному аккаунту и разрешают ответы только на подтверждённые комментарии верхнего уровня.
accepted означает, что ответ виден?
Нет. Принятие не гарантирует отображение или доставку. Достоверная квитанция о комментарии необязательна, webhook тоже не гарантирован.
Можно получить все вложенные ответы постранично?
Нет. Список UnifyPort охватывает верхний уровень, а не полную пагинацию ответов. Research API TikTok — отдельный контракт чтения, не взаимозаменяемый метод.
Что проверить перед включением функции?
Свою и недоступную публикации, несколько страниц, сохранение строковых ID, вложенную цель, повторные нажатия и неопределённый сетевой исход. Это предложенные приёмочные проверки, а не отчёт о выполненных тестах.
Следующий шаг и источники
Сначала реализуйте выбор без записи через список комментариев верхнего уровня, затем включайте отправку ответов.
Источники проверены 2026-10-26:
Превратите интеграцию сообщений в стабильный продуктовый pipeline.
Начните с отправки через единый API, затем возвращайте входящие сообщения в бизнес-систему стандартными событиями.