Для AI-агентов: markdown этой страницы — /docs-content/polls.md индекс документации — /llms.txt
Опросы
Опросы в Ленте через API не создаются: в REST API Битрикс24 создание опроса в Ленте официально не поддерживается. Существующие опросы можно читать и управлять ими. В чате опрос можно создать через API.
Скоуп: vote | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Доступ
Все операции требуют скоуп vote. При создании в личном диалоге, когда dialogId — ID пользователя или me, дополнительно нужен im, для chatN достаточно vote. Права текущего пользователя в Битрикс24 продолжают действовать. Опросом чата управляет автор сообщения, в Ленте нужны права управления постом.
| Ключ | Чтение | Запись |
|---|---|---|
| КлючОбычный ключ «только чтение» | ЧтениеВсе четыре GET-операции | ЗаписьЗапрещена |
| КлючКлюч Коворка «портал только для чтения» | ЧтениеЗапрещено | ЗаписьЗапрещена |
| КлючКлюч компании | ЧтениеЗапрещено | ЗаписьЗапрещена |
Все четыре GET-операции читают опрос и подписывают пользователя на события Битрикс24, поэтому для ключа Коворка с запретом записи в портал они недоступны. Методы опросов также недоступны через пакетные запросы.
Как найти опрос
В списке постов (GET /v1/posts) выберите записи с hasPoll: true. Затем передайте ID постов в GET /v1/polls?postIds=42.
В сообщениях чата (GET /v1/chats/:dialogId/messages) опрос отмечен полем data.messages[].params.componentId = "VoteMessage". Значение params.componentParams.id — это voteId, номер опроса Битрикс24. Для поиска прикрепления передавайте ID сообщения, а не voteId, в GET /v1/polls?messageIds=42.
В полученном объекте id — идентификатор прикрепления (pollId в путях API). Он отличается от voteId, ID поста и ID сообщения. Если прикрепление не распознано, source может отсутствовать.
Объект опроса
| Поле | Тип | Описание |
|---|---|---|
Полеid |
Типnumber | ОписаниеID прикрепления для pollId |
ПолеvoteId |
Типnumber | ОписаниеНомер опроса Битрикс24 |
Полеsource |
Типobject | ОписаниеНеобязательно: {type: "post", postId} или {type: "chatMessage", messageId} |
Полеstatus |
Типstring | Описаниеactive или finished |
Полеanonymous |
Типboolean | ОписаниеАнонимный опрос |
ПолеallowRevote |
Типboolean | ОписаниеРазрешено переголосование |
ПолеresultsHidden |
Типboolean | ОписаниеПризнак скрытия результатов в Битрикс24 |
ПолеresultsVisible |
Типboolean | ОписаниеДоступны ли итоги текущему пользователю по правилам Битрикс24 |
ПолеvotersCount |
Типnumber | null | ОписаниеСчётчик участников |
Полеquestions |
Типarray | ОписаниеТолько активные вопросы и ответы, в порядке сортировки Битрикс24 |
Полеquestions[].id |
Типnumber | ОписаниеID вопроса |
Полеquestions[].text |
Типstring | ОписаниеТекст вопроса |
Полеquestions[].multipleChoice |
Типboolean | ОписаниеМожно выбрать несколько ответов |
Полеquestions[].required |
Типboolean | ОписаниеОтвет обязателен |
Полеquestions[].votesCount |
Типnumber | null | ОписаниеСчётчик голосов вопроса |
Полеquestions[].answers |
Типarray | ОписаниеВарианты ответа |
Полеquestions[].answers[].id |
Типnumber | ОписаниеID ответа для голосования и списка участников |
Полеquestions[].answers[].text |
Типstring | ОписаниеТекст ответа |
Полеquestions[].answers[].votesCount |
Типnumber | null | ОписаниеСчётчик голосов ответа |
Полеquestions[].answers[].percent |
Типnumber | null | ОписаниеПроцент из Битрикс24 |
ПолеmyVote.voted |
Типboolean | ОписаниеГолосовал ли текущий пользователь |
ПолеmyVote.answerIds |
Типnumber[] | ОписаниеВыбранные текущим пользователем ответы |
Полеpermissions.canVote |
Типboolean | ОписаниеМожно проголосовать |
Полеpermissions.canRevote |
Типboolean | ОписаниеМожно переголосовать |
Полеpermissions.canManage |
Типboolean | ОписаниеМожно управлять опросом |
Результаты и анонимность
Итоги закрыты при resultsHidden: true или пока опрос активен, пользователь может голосовать и ещё не голосовал. Исключение — автор опроса, если Битрикс24 сообщает об авторстве: так бывает в опросах чатов на поддерживающих версиях портала. Права управления постом или сообщением итоги не открывают. Автору опроса Ленты скрытые итоги доступны в интерфейсе Битрикс24. При недостающих данных о правах итоги закрываются, а завершённый опрос без скрытия итогов доступен. При resultsVisible: false поля votersCount, questions[].votesCount, questions[].answers[].votesCount и percent равны null, а у ответов voters: [] и votersComplete: false во всех ответах API с объектом опроса.
В анонимном опросе проголосовавших не видно никому, включая автора и администратора: счётчики доступны, если resultsVisible: true. В результатах voters всегда пуст и votersComplete равен false. Для открытого опроса результаты содержат ограниченную выборку участников по каждому ответу, полный список читается отдельной операцией. Счётчики не кэшируются.
Отчёт Excel и ссылки на итоги через API не отдаются. Выгрузить отчёт можно в интерфейсе Битрикс24.
Безопасное выполнение записи
idempotencyKey при создании — только UUID. Повтор с тем же ключом и тем же телом на поддерживающей версии портала возвращает уже созданный опрос в data.poll. Поле data.voteId при повторе приходит новым числом, которое не находит ни один опрос, поэтому номер опроса берите из data.poll.voteId. Новый опрос — новый ключ. Битрикс24 не сравнивает тела: не меняйте вопрос, ответы или настройки при повторе. Если ключ не задан, сервер генерирует новый UUID для каждого запроса. Защита от дублей зависит от версии портала.
Платформа не повторяет записи автоматически. При 502 POLL_CREATE_OUTCOME_UNKNOWN сначала посмотрите чат: сообщение могло появиться. При других 502 …_OUTCOME_UNKNOWN прочитайте опрос и решите, нужна ли повторная запись. Не создавайте новый ключ сразу после неизвестного исхода.
При переголосовании в Ленте, если опрос правят в момент голоса, Битрикс24 может стереть прежний голос — так же, как в интерфейсе. После ошибки проверьте myVote.
Удаление
Отдельного удаления опроса нет. Удалите содержащий его пост или сообщение существующим маршрутом.
Быстрый старт
Прочитать опрос по ID прикрепления:
curl -H "X-Api-Key: YOUR_API_KEY" "https://vibecode.bitrix24.tech/v1/polls/25"
Поля ответа — Получить опрос.
Полный пример
Создать опрос в чате, проголосовать, прочитать итоги и остановить опрос:
const BASE = 'https://vibecode.bitrix24.tech/v1'
const headers = { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' }
async function call(method, path, body) {
const res = await fetch(`${BASE}${path}`, {
method,
headers: body ? headers : { 'X-Api-Key': headers['X-Api-Key'] },
body: body ? JSON.stringify(body) : undefined,
})
const json = await res.json()
if (!json.success) throw new Error(`${res.status} ${json.error.code}: ${json.error.message}`)
return json
}
// 1. Создать опрос в чате
const created = await call('POST', '/chats/chat5/polls', {
question: 'When?',
answers: ['Now', 'Later'],
idempotencyKey: crypto.randomUUID(),
})
const poll = created.data.poll
console.log('Опрос', poll.id, 'в сообщении', created.data.messageId)
// 2. Проголосовать за первый ответ
const firstAnswer = poll.questions[0].answers[0].id
await call('POST', `/polls/${poll.id}/vote`, { answerIds: [firstAnswer] })
// 3. Прочитать итоги
const results = await call('GET', `/polls/${poll.id}/results`)
for (const answer of results.data.questions[0].answers) {
console.log(answer.text, answer.votesCount, `${answer.percent}%`)
}
// 4. Остановить опрос
await call('POST', `/polls/${poll.id}/stop`)
const finished = await call('GET', `/polls/${poll.id}`)
console.log('Статус:', finished.data.status)
Справочник эндпоинтов
| Метод | Путь | Bitrix24 метод | Описание |
|---|---|---|---|
| МетодPOST | Путь/v1/chats/:dialogId/polls |
Bitrix24 методvote.Integration.Im.send | ОписаниеСоздать опрос в чате |
| МетодGET | Путь/v1/polls/:pollId |
Bitrix24 методvote.AttachedVote.get | ОписаниеПолучить опрос |
| МетодGET | Путь/v1/polls |
Bitrix24 методvote.AttachedVote.getMany | ОписаниеНайти опросы по постам или сообщениям |
| МетодGET | Путь/v1/polls/:pollId/results |
Bitrix24 методvote.AttachedVote.getWithVoted | ОписаниеРезультаты опроса |
| МетодGET | Путь/v1/polls/:pollId/answers/:answerId/voters |
Bitrix24 методvote.AttachedVote.getAnswerVoted | ОписаниеСписок проголосовавших за ответ |
| МетодPOST | Путь/v1/polls/:pollId/vote |
Bitrix24 методvote.AttachedVote.vote | ОписаниеПроголосовать или переголосовать |
| МетодDELETE | Путь/v1/polls/:pollId/vote |
Bitrix24 методvote.AttachedVote.recall | ОписаниеОтозвать голос |
| МетодPOST | Путь/v1/polls/:pollId/stop |
Bitrix24 методvote.AttachedVote.stop | ОписаниеОстановить опрос |
| МетодPOST | Путь/v1/polls/:pollId/resume |
Bitrix24 методvote.AttachedVote.resume | ОписаниеВозобновить опрос |
Коды ошибок
Ошибки опросов
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_ANSWERS |
ОписаниеНабор answerIds не подходит к вопросам опроса |
| HTTP403 | КодPOLL_ACCESS_DENIED |
ОписаниеБитрикс24 запретил операцию с опросом |
| HTTP403 | КодCHAT_ACCESS_DENIED |
ОписаниеНет доступа к чату, в котором создаётся опрос |
| HTTP403 | КодRESULTS_HIDDEN |
ОписаниеИтоги закрыты по правилам Битрикс24 |
| HTTP404 | КодPOLL_NOT_FOUND |
ОписаниеОпрос не найден или недоступен ключу |
| HTTP404 | КодANSWER_NOT_FOUND |
ОписаниеБитрикс24 явно отказал в доступе к списку участников ответа |
| HTTP404 | КодCHAT_NOT_FOUND |
ОписаниеНе удалось определить личный диалог |
| HTTP409 | КодPOLL_FINISHED |
ОписаниеБитрикс24 сообщил, что опрос завершён |
| HTTP409 | КодPOLL_CREATE_IN_PROGRESS |
ОписаниеСоздание с этим idempotencyKey ещё выполняется |
| HTTP409 | КодIDEMPOTENCY_KEY_CONFLICT |
ОписаниеidempotencyKey уже использован другим пользователем или в другом чате |
| HTTP502 | КодPOLL_CREATE_OUTCOME_UNKNOWN, POLL_VOTE_OUTCOME_UNKNOWN, POLL_RECALL_OUTCOME_UNKNOWN, POLL_STOP_OUTCOME_UNKNOWN, POLL_RESUME_OUTCOME_UNKNOWN |
ОписаниеЗапись ушла в Битрикс24, а исход не подтверждён. Порядок действий — раздел «Безопасное выполнение записи» выше |
Системные ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_PARAMS |
ОписаниеНекорректный ID в пути или параметр запроса |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеНет пользовательской сессии Битрикс24 |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеНет скоупа vote или, для личного диалога, im |
| HTTP403 | КодCOWORK_READONLY |
ОписаниеОперация запрещена для ключа Коворка «портал только для чтения» |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеКлюч разрешает только чтение |
| HTTP422 | КодBITRIX_ERROR |
ОписаниеБитрикс24 отклонил запрос |
Полный список общих ошибок API — Ошибки.