Блог Горошко Андрея Bitrix24 Проголосовать в прикрепленном голосовании vote.AttachedVote.vote (vote.attach…

Проголосовать в прикрепленном голосовании vote.AttachedVote.vote (vote.attach…

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Проголосовать в прикрепленном голосовании vote.AttachedVote.vote (vote.attach…». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции.

Проголосовать в прикрепленном голосовании vote.AttachedVote.vote

> Scope: vote
>
> Кто может выполнять метод: пользователь с правами участия в голосовании

Метод vote.AttachedVote.vote позволяет проголосовать в прикрепленном голосовании.

Параметры метода

Доступно два варианта вызова метода.

1. Через идентификатор прикрепленного опроса

Название
тип
Описание
attachId
integer
Идентификатор прикрепленного голосования, получить можно методами vote.AttachedVote.get или vote.AttachedVote.getMany
ballot
object
Данные голоса в формате:

{
    "1": ["2", "3"],
    "2": ["5"]
}

Ключ — ID вопроса, значение — массив ID выбранных ответов. Получить ID вопроса и ответов можно методами vote.AttachedVote.get или vote.AttachedVote.getMany.
Несколько вопросов в одном голосовании доступно в постах ленты, в сообщении чата в опросе доступен только один вопрос

2. Через элемент с опросом

Название
тип
Описание
moduleId
string
Идентификатор модуля, возможные значения:
— Im для опроса в чате,
— blog для опроса в ленте
entityType
string
Тип объекта, возможные значения:
— Bitrix\\Vote\\Attachment\\ImMessageConnector для опроса в чате,
— Bitrix\\Vote\\Attachment\\BlogPostConnector для опроса в ленте
entityId
integer
Идентификатор элемента, возможные значения:
— id сообщения чата с опросом, получить можно методом vote.Integration.Im.send,
— id поста с опросом в ленте, получить можно методом log.blogpost.get
ballot
object
Данные голоса в формате:

{
    "1": ["2", "3"],
    "2": ["5"]
}

Ключ — ID вопроса, значение — массив ID выбранных ответов. Получить ID вопроса и ответов можно методами vote.AttachedVote.get или vote.AttachedVote.getMany.
Несколько вопросов в одном голосовании доступно в постах ленты, в сообщении чата в опросе доступен только один вопрос

3. Через подписанный идентификатор

Название
тип
Описание
signedAttachId
string
Подписанный идентификатор прикрепления, получить можно методом vote.AttachedVote.get, параметр ответа signedAttachId
ballot
object
Данные голоса в формате:

{
    "1": ["2", "3"],
    "2": ["5"]
}

Ключ — ID вопроса, значение — массив ID выбранных ответов. Получить ID вопроса и ответов можно методами vote.AttachedVote.get или vote.AttachedVote.getMany.
Несколько вопросов в одном голосовании доступно в постах ленты, в сообщении чата в опросе доступен только один вопрос

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"attachId":**put_attach_id**,"ballot":{"1":["2","3"],"2":["5"]}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/vote.AttachedVote.vote
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"attachId":**put_attach_id**,"ballot":{"1":["2","3"],"2":["5"]},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/vote.AttachedVote.vote
  • JS
    try
    {
        const response = await $b24.callMethod(
            'vote.AttachedVote.vote',
            {
                attachId: **put_attach_id**,
                ballot: {
                    '1': ['2', '3'],
                    '2': ['5']
                }
            }
        );
        
        const result = response.getData().result;
        console.log('Created element with ID:', result);
        
        processResult(result);
    }
    catch( error )
    {
        console.error('Error:', error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'vote.AttachedVote.vote',
                [
                    'attachId' => **put_attach_id**,
                    'ballot' => [
                        '1' => ['2', '3'],
                        '2' => ['5']
                    ]
                ]
            );

        $result = $response
            ->getResponseData()
            ->getResult();

        echo 'Success: ' . print_r($result, true);
        processData($result);

    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error adding product row: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        "vote.AttachedVote.vote",
        {
            "attachId": **put_attach_id**,
            "ballot": {
                "1": ["2", "3"],
                "2": ["5"]
            }
        },
        function(result)
        {
            if(result.error())
            {
                console.error(result.error());
            }
            else
            {
                console.dir(result.data());
            }
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'vote.AttachedVote.vote',
        [
            'attachId' => **put_attach_id**,
            'ballot' => [
                '1' => ['2', '3'],
                '2' => ['5']
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Обработка ответа

HTTP-статус: 200

{
    "result": {
        "attach": {
            "ID": 1,
            "VOTE_ID": 1,
            "COUNTER": 1,
            "QUESTIONS": {
                "1": {
                    "ID": "1",
                    "ACTIVE": "Y",
                    "TIMESTAMP_X": "2025-08-05T09:08:31+03:00",
                    "VOTE_ID": "1",
                    "C_SORT": "10",
                    "COUNTER": 1,
                    "QUESTION": "Как дела?",
                    "QUESTION_TYPE": "text",
                    "IMAGE_ID": null,
                    "DIAGRAM": "Y",
                    "DIAGRAM_TYPE": "histogram",
                    "REQUIRED": "N",
                    "FIELD_TYPE": "0",
                    "FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                    "IMAGE": null,
                    "ANSWERS": {
                        "1": {
                            "ID": "1",
                            "ACTIVE": "Y",
                            "TIMESTAMP_X": "2025-08-05T09:08:31+03:00",
                            "QUESTION_ID": "1",
                            "C_SORT": "10",
                            "IMAGE_ID": null,
                            "MESSAGE": "Отлично!",
                            "MESSAGE_TYPE": "text",
                            "COUNTER": 1,
                            "FIELD_TYPE": "0",
                            "FIELD_WIDTH": "0",
                            "FIELD_HEIGHT": "0",
                            "FIELD_PARAM": null,
                            "COLOR": "",
                            "REACTION": "",
                            "~FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "MESSAGE_FIELD_NAME": "bx_vote_event[1][MESSAGE][1][1]",
                            "~PERCENT": 100,
                            "PERCENT": 100
                        },
                        "3": {
                            "ID": "3",
                            "ACTIVE": "Y",
                            "TIMESTAMP_X": "2025-08-05T09:08:31+03:00",
                            "QUESTION_ID": "1",
                            "C_SORT": "20",
                            "IMAGE_ID": null,
                            "MESSAGE": "Лучше всех!",
                            "MESSAGE_TYPE": "text",
                            "COUNTER": "0",
                            "FIELD_TYPE": "0",
                            "FIELD_WIDTH": "0",
                            "FIELD_HEIGHT": "0",
                            "FIELD_PARAM": null,
                            "COLOR": "",
                            "REACTION": "",
                            "~FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "MESSAGE_FIELD_NAME": "bx_vote_event[1][MESSAGE][1][3]",
                            "~PERCENT": 0,
                            "PERCENT": 0
                        },
                        "5": {
                            "ID": "5",
                            "ACTIVE": "Y",
                            "TIMESTAMP_X": "2025-08-05T09:08:31+03:00",
                            "QUESTION_ID": "1",
                            "C_SORT": "30",
                            "IMAGE_ID": null,
                            "MESSAGE": "Какие дела??",
                            "MESSAGE_TYPE": "text",
                            "COUNTER": "0",
                            "FIELD_TYPE": "0",
                            "FIELD_WIDTH": "0",
                            "FIELD_HEIGHT": "0",
                            "FIELD_PARAM": null,
                            "COLOR": "",
                            "REACTION": "",
                            "~FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "FIELD_NAME": "bx_vote_event[1][BALLOT][1]",
                            "MESSAGE_FIELD_NAME": "bx_vote_event[1][MESSAGE][1][5]",
                            "~PERCENT": 0,
                            "PERCENT": 0
                        }
                    }
                }
            },
            "ANONYMITY": 1,
            "OPTIONS": 1,
            "userAnswerMap": {
                "1": {
                    "1": {
                        "EVENT_ID": "27",
                        "EVENT_QUESTION_ID": "27",
                        "ANSWER_ID": "1",
                        "ID": "27",
                        "MESSAGE": ""
                    }
                }
            },
            "canEdit": true,
            "canVote": false,
            "canRevote": true,
            "isVoted": true,
            "signedAttachId": "1.52280488561bf567f33cf03b5ce353e154a9c3552b51b2ffb67be3bb7f26f986",
            "resultUrl": "/vote-result/me7hn922bm011mbf",
            "downloadUrl": "/bitrix/services/main/ajax.php?action=vote.AttachedVote.download&SITE_ID=s1&signedAttachId=1.52280488561bf567f33cf03b5ce353e154a9c3552b51b2ffb67be3bb7f26f986",
            "entityId": 13,
            "isFinished": false
        }
    },
    "time": {
        "start": 1754466663.090774,
        "finish": 1754466663.180457,
        "duration": 0.08968305587768555,
        "processing": 0.07362222671508789,
        "date_start": "2025-08-06T10:51:03+03:00",
        "date_finish": "2025-08-06T10:51:03+03:00",
        "operating_reset_at": 1754467263,
        "operating": 0
    }
}

Возвращаемые данные

Название
тип
Описание
result
object
Корневой элемент ответа. Содержит объект attach с информацией о голосовании, структура описана ниже
time
time
Информация о времени выполнения запроса

Элемент ответа attach {#attach}

Название
тип
Описание
ID
integer
Идентификатор прикрепленного голосования
VOTE_ID
integer
Идентификатор самого голосования
COUNTER
integer
Счетчик голосов
QUESTIONS
array
Массив с вопросами опроса
ANONYMITY
integer
Уровень анонимности опроса
OPTIONS
integer
Доступность переголосования
userAnswerMap
array
Карта ответов текущего пользователя
canEdit
bool
Может ли текущий пользователь редактировать опрос
canVote
bool
Может ли текущий пользователь проголосовать
canRevote
bool
Может ли текущий пользователь переголосовать
isVoted
bool
Проголосовал ли уже текущий пользователь
signedAttachId
string
Подписанный идентификатор
resultUrl
string
URL-адрес для просмотра результатов опроса
downloadUrl
string
URL-адрес для скачивания результатов опроса
entityId
integer
Идентификатор элемента, к которому прикреплен опрос
isFinished
bool
Завершен ли опрос

Обработка ошибок

HTTP-статус: 403

{
    "error": "403",
    "error_description": "Опрос неактивен."
}

Возможные коды ошибок

КодОписание
400Не удалось сохранить голосование
ATTACH_READ_ACCESS_DENIEDНет прав для участия в голосовании
403Опрос неактивен
  • [](./index)
  • [](./vote.attachedvote.download)
  • [](./vote.attachedvote.get)
  • [](./vote.attachedvote.getAnswerVoted)
  • [](./vote.attachedvote.getMany)
  • [](./vote.attachedvote.getWithVoted)
  • [](./vote.attachedvote.recall)
  • [](./vote.attachedvote.resume)
  • [](./vote.attachedvote.stop)
  • [](./vote.integration.im.send)

💡 Экспертное мнение и рекомендации

Практические рекомендации:

  • При написании кастомных компонентов для «Проголосовать в прикрепленном голосовании vote.AttachedVote.vote (vote.attach…» всегда разделяйте бизнес-логику и представление (шаблон).
  • Используйте отладку SQL-запросов через конструкцию $wpdb->last_query или стандартный трекер Битрикса, чтобы контролировать нагрузку.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Как использовать метод SDK crm.requisite.bankdetail.update в Битрикс24Как использовать метод SDK crm.requisite.bankdetail.update в Битрикс24

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Как использовать метод SDK crm.requisite.bankdetail.update в Битрикс24», разберем

Создать источник biconnector.source.addСоздать источник biconnector.source.add

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Создать источник biconnector.source.add». Вы узнаете экспертные методики работы с biconnector.source.add и научитесь избегать

Запустить спринт tasks.api.scrum.sprint.startЗапустить спринт tasks.api.scrum.sprint.start

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Запустить спринт tasks.api.scrum.sprint.start», проанализируем лучшие практики и покажем,