polls.question.add
Scope:
pollsКто может вызывать: Редактирование опроса:
canEditVote(администратор модуля/опроса или права на канал). Подробнее: Права доступа
Создание вопроса. fieldType — xmlId или numeric id из polls.question.type.list.
HTTP: POST
Побочные эффекты: Для типов NUMBER, FLOAT, SCALE автоматически создаются служебные ответы (min/max и т.п.) — см. раздел Ответы.
Параметры метода
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
voteId |
int |
да | ID родительского опроса (обязательно при создании) |
question |
string |
да | Текст вопроса (alias: title; обязательно при создании) |
fieldType |
string |
нет | Тип: xmlId или числовой ID из polls.question.type.list (alias: type) |
active |
string |
нет | Y/N или bool |
cSort |
int |
нет | Сортировка (alias: sort) |
required |
string |
нет | Y/N или bool |
diagram |
string |
нет | Показывать на диаграмме: Y/N |
diagramType |
string |
нет | Тип диаграммы |
questionType |
string |
нет | html или text |
imageId |
int |
нет | ID файла изображения |
dependsOnQuestionId |
int |
нет | ID вопроса-условия (alias: dependedQuestionId) |
dependsOnAnswerId |
int |
нет | ID ответа-условия; первый/основной ответ для зависимости |
dependsOnAnswerIds |
array |
нет | ID ответов-условий для мультивыбора |
ufDiagramColumnCount |
string |
нет | Количество колонок диаграммы (UF) |
fields |
object |
нет | Необязательная обёртка с теми же полями |
Ответы
RADIO, CHECKBOX, DROPDOWN и др.
polls.question.add создаёт только вопрос. Варианты добавляйте отдельными вызовами polls.answer.add — поля элемента те же, что у метода (проверено на voteId 11, questionId 53):
{
"questionId": 53,
"message": "Option A",
"cSort": 100,
"active": "Y"
}
После двух таких вызовов polls.answer.list?filter[questionId]=53 вернул:
[
{ "id": 205, "message": "Option A", "cSort": 100, "active": "Y", "counter": 0, "imageId": 0, "comment": 0, "color": "" },
{ "id": 206, "message": "Option B", "cSort": 200, "active": "Y", "counter": 0, "imageId": 0, "comment": 0, "color": "" }
]
NUMBER, FLOAT, SCALE
Служебные ответы создаются из полей верхнего уровня запроса. Aliases: min/minVal, max/maxVal, mantissa/floatCount, scaleStep/dotCount, scaleLeft/scaleSignL, scaleRight/scaleSignR.
NUMBER — запрос:
{
"voteId": 11,
"question": "REST doc test NUMBER v2",
"fieldType": "NUMBER",
"minVal": "1",
"maxVal": "100"
}
polls.answer.list?filter[questionId]=56 → два ответа с message "1" (cSort 100) и "100" (cSort 200).
SCALE — запрос:
{
"voteId": 11,
"question": "REST doc test SCALE",
"fieldType": "SCALE",
"minVal": "0",
"maxVal": "10",
"scaleStep": "1",
"scaleLeft": "Bad",
"scaleRight": "Good"
}
polls.answer.list?filter[questionId]=55 → пять ответов: min "0", max "10", step "1", подписи "Bad" / "Good".
FLOAT — дополнительно mantissa (число знаков после запятой); при minVal/maxVal/mantissa: "0"/"5"/"2" создаются три служебных ответа с теми же message.
Возвращаемые данные
Ответ в конверте модуля: result.result — созданный вопрос (как polls.question.get); result.error. Ключи total/next для не-list методов могут отсутствовать в сериализации, если не переданы.
Обработка ошибок
Справочник кодов: Коды ошибок.
| Код | Описание |
|---|---|
UNAUTHORIZED |
Пользователь не авторизован |
INTERNAL_ERROR |
Внутренняя ошибка сервера |
ACCESS_DENIED |
Нет прав на операцию |
VALIDATION_ERROR |
Некорректные или неполные параметры |
Пример запроса (POST)
curl -X POST "https://{портал}/rest/{user_id}/{webhook_code}/polls.question.add.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"voteId": 15,
"question": "Ваш вариант?",
"fieldType": "RADIO",
"active": "Y"
}'
Пример ответа
{
"result": {
"result": {
"id": 69,
"question": "Doc Q?",
"fieldType": {
"id": 0,
"xmlId": "RADIO"
},
"cSort": 100,
"required": "N",
"diagram": "Y",
"counter": 0,
"imageId": 0,
"dependsOnQuestionId": 0,
"dependsOnAnswerId": 0
},
"error": null
},
"time": {
"start": 1787319174,
"finish": 1787319174.118574,
"duration": 0.11857390403747559,
"processing": 0,
"date_start": "2026-08-21T16:32:54+03:00",
"date_finish": "2026-08-21T16:32:54+03:00"
}
}