Бизнес-информация

Совет.

Сначала запустите проект в Песочнице. Так вы сможете избежать ошибок и потраченных средств, если окажется, что ваше задание не работает.

В Customizable-проектах этого типа исполнители ищут в сети объект или информацию о нем. Вы можете использовать их для:
  • поиска объекта по описанию, например товара ли услуги;
  • поиска информации на определенном сайте, например городов доставки на сайте магазина;
  • поиска информации об объекте в интернете, например контактных данных организации.

В этой инструкции вы создадите задание, в котором исполнители будут искать данные об организациях. Допустим, у вас есть список организаций и нужно найти их телефоны и адреса электронных почт. В этом задании исполнители увидят названия и ссылки на сайты организаций и найдут необходимую информацию о них.

  1. Создайте Customizable-проект
  2. Создайте пул
  3. Загрузите TSV-файл с заданиями
  4. Получите результаты
  5. Поручите проверку исполнителям
  6. Решение проблем

Создайте Customizable-проект

В интерфейсе:
  1. Выберите шаблон:

    1. Нажмите Создать проект.

    2. Выберите шаблон Поиск данных в сети .

  2. Заполните общую информацию:

    1. Дайте проекту понятное название и краткое описание. Их увидят исполнители в списке доступных заданий.

    2. По желанию добавьте Приватный комментарий.

    3. Нажмите Сохранить.

  3. Отредактируйте интерфейс задания в выбранном редакторе:

    Конструктор шаблонов
    Редактор HTML/CSS/JS
    1. Интерфейс задания описывает, как будут расположены элементы задания.

      Воспользуйтесь готовым кодом для этого проекта, где уже настроена валидация и внешний вид задания.

      Подробнее о настройке условий в конструкторе шаблонов.

    2. Чтобы увидеть поля входных и выходных данных, нажмите Показать спецификации.

      Поля входных данных создаются из кода на вкладке Пример входных данных.

      Поля выходных данных создаются на основе того, в каких компонентах используется data.output, а также какие значения в нем разрешены.

      Подробнее о полях входных и выходных данных в Справке конструктора шаблонов.

      • Поля входных данных:
        • title — строка c названием организации;

        • url — адрес сайт организации, тип url.

      • Поля выходных данных:
        • phone — строка, в которую будет записан номер телефона организации;
        • email — строка, в которую будет записан адрес электронной почты организации;
        • not_found — флажок, обозначающий отсутствие контактов организации.
    3. Сохраните изменения.

    В разделе Спецификация данных можно настроить поля входных и выходных данных.

    Что такое входные и выходные данные?

    Входные данные — типы объектов, которые будут подаваться исполнителю для выполнения задания. Например, текст, картинка, географические координаты.

    Выходные данные — типы объектов, которые будут получены после выполнения задания. Например, один из нескольких вариантов ответа, введенный текст или загруженный файл.

    Подробнее о полях входных и выходных данных.

    Примечание.

    Вы можете настроить валидацию выходных данных с помощью регулярных выражений. Это позволит формализовать ответы пользователей. В примере ниже использованы регулярные выражения, позволяющие задать необходимый формат электронных почт и телефонных номеров.

    Если вы используете регулярные выражения, то проект можно запустить с перекрытием больше единицы — чтобы каждое задание выполнило несколько человек. Тогда можно будет не использовать отложенную приемку и не проверять каждое задание, а довериться усредненным данным.

    1. Нажмите кнопку , чтобы переключить графический режим на формат JSON.

    2. В поле Входные данные введите следующий код:

      {
        "url": {
          "type": "url",
          "hidden": false,
          "required": true
        },
        "title": {
          "type": "string",
          "hidden": false,
          "required": false
        }
      }
      Скопировано
    3. В поле Выходные данные введите следующий код:

      {
        "email": {
          "type": "string",
          "hidden": false,
          "pattern": "^[a-zA-Zа-яА-ЯёЁ0-9\\._-]+@[a-zA-Zа-яА-ЯёЁ0-9\\._-]+\\.[a-zA-Zа-яА-ЯёЁ]{2,}$",
          "required": false
        },
        "phone": {
          "type": "string",
          "hidden": false,
          "pattern": "^\\+?[0-9()\\s-]{4,}$",
          "required": false
        },
        "not_found": {
          "type": "boolean",
          "hidden": false,
          "required": false
        }
      }
      Скопировано
    4. В разделе Интерфейс задания вы можете настроить внешний вид заданий для исполнителей.

      Подробнее об интерфейсе заданий.

      Заполните блоки HTML, JS и CSS.

      Код для блока HTML
      <!-- Кнопки для перехода на сайт организации и поиска по ее названию в Яндексе-->
      <div class="left">
        <div class="title">{{title}}
        </div>
        <div class="site-buttons">
          {{button label="Перейти на сайт" action=false href=url}}
          <a href="https://yandex.ru/search/?text={{title}}" target="_blank" class="btn_ya">Найти в Яндексе</a>
        </div>
      <!-- Поля для ввода телефона и электронной почты. Формат данных проверяется с помощью регулярных выражений. Выражение записано в параметр "Паттерн" выходных полей "phone" и "email". -->
        <div class="output-fields">
          <label><span>Телефон</span>{{field type="input" name="phone" placeholder="8 800 800 88 88"}}</label>
           <!-- Можно ввести только цифры, дефисы, знак +, пробелы и скобки. Символ "+" допустим только в первой позиции. Общий формат: +7(459)123-45-67, 8 800 123 45 67 -->
          <label><span>Почта</span>{{field type="input" name="email" placeholder="example@example.com"}}</label>
           <!-- Можно ввести только латинские буквы, точки, символы минус, плюс и нижнее подчеркивание. Общий формат: test.example@example.com -->
        </div>
      <!-- Чекбокс -->
       {{field class="site-buttons"type="checkbox" name="not_found" label="Нет контактов"}}
      </div>
      Скопировано
      Код для блока JS
      exports.Task = extend(TolokaHandlebarsTask, function (options) {
        TolokaHandlebarsTask.call(this, options);
      }, {
        // Показываем сообщение об ошибке, если данные введены неверно или поля не заполнены.
        _addError: function (message, field, errors) {
          errors || (errors = {
            task_id: this.getOptions().task.id,
            errors: {}
          });
      
          errors.errors[field] = {
            message: message
          };
      
          return errors;
        },
      
        // Дописываем `https://` в начало ссылки, если его нет.
        _prepareURL: function (url) {
          if (!/^\s*https?:\/\//i.test(url)) {
            url = 'http://' + url.trim();
          }
      
          return url;
        },
      
        // Устанавливаем состояния полей.
        _renderField: function(values) {
          if (this.getWorkspaceOptions().isReadOnly) return;
      
          for (const field of ['email', 'phone']) {
            if (this.getField(field)) {
              const impl = this.getField(field).getImplementation();
              if (impl.options.disabled !== values.not_found) {
                impl.options.disabled = values.not_found;
                impl.render();
              }
      
              $('[name="' + field + '"]', this.getDOMElement())
                .parents('.field')
                .toggleClass('field_readonly', values.not_found);
            }
          }
          $('.popup_type_error', this.getDOMElement()).removeClass('popup_visible');
        },
      
        setSolutionOutputValues: function (values) {
          this._renderField(values);
      
          TolokaHandlebarsTask.prototype.setSolutionOutputValues.call(this, values);
        },
      
        onRender: function() {
          this._renderField(this.getSolution().output_values);
        },
      
        // Эти данные будут переданы в Handlebars-часть шаблона.
        getTemplateData: function () {
          const data = TolokaHandlebarsTask.prototype.getTemplateData.call(this);
      
          // Дописываем `http://` в начало ссылки, если нужно.
          data.url = this._prepareURL(data.url);
      
          return data;
        },
      
        // Проверяем ответы при отправке задания.
        validate: function (solution) {
          let errors;
          const output = solution.output_values;
      
          if (output.not_found) {
            delete output.email;
            delete output.phone;
      
          } else {
            const fields = ['email', 'phone'];
      
            // Показываем ошибку, если ни одно из полей не заполнено.
            if (!Object.entries(solution.output_values).find(e => fields.includes(e[0]) && e[1])) {
              for (const field of fields) {
                errors = this._addError(this.getWorkspaceOptions().translations['field:error:REQUIRED'], field, errors);
              }
            }
      
            delete output.not_found;
          }
      
          solution.output_values = output;
          return errors || TolokaHandlebarsTask.prototype.validate.call(this, solution);
        }
      });
      
      function extend(ParentClass, constructorFunction, prototypeHash) {
        constructorFunction = constructorFunction || function () { };
        prototypeHash = prototypeHash || {};
      
        if (ParentClass) {
          constructorFunction.prototype = Object.create(ParentClass.prototype);
        }
      
        for (var i in prototypeHash) {
          constructorFunction.prototype[i] = prototypeHash[i];
        }
      
        return constructorFunction;
      }
      Скопировано
      Код для блока CSS
      /* Задание на странице */
      .task {
        width: 450px;
      }
      
      /* Кнопка "Найти в Яндексе" */
      .btn_ya {
        font-size: 13px;
        margin-left: 10px;
        color: #0065D9;
      }
      
      /* Заголовок с названием организации */
      .title {
        padding: 10px;
        border-radius: 5px;
        font-size: 18px;
        line-height: 24px;
      }
      
      /* Поля для ввода телефона и электронной почты */
      .output-fields {
        display: table;
        font-size: 13px;
        border-spacing: 0 5px;
      }
      
      .output-fields > label {
        display: table-row;
        margin-bottom: 5px;
      }
      
      .output-fields > label > span {
        display: table-cell;
        text-align: left;
        padding-right: 10px;
        padding-left: 10px;
      }
      
      .output-fields > label > .field {
        margin: 0;
        display: table-cell;
        width: 100%;
      }
      
      /* Кнопка для перехода на сайт организации */
      .site-buttons {
        margin: 10px;
        margin-left: 5;
      }
      
      /* Отображение задания на мобильных устройствах. */
      
      @media (pointer: coarse) {
        .field__hotkey {
          display:none;
        }
      }
      
      @media (max-width: 980px) {
        .task {
          width: initial;
        }
        .popup__text {
          width: auto;
        }
      }
      
      
      Скопировано
    5. Нажмите кнопку , чтобы увидеть получившееся задание.

      Примечание. В предварительном просмотре проекта отображается одно задание со стандартными данными. Количество заданий на странице вы сможете настроить далее.
    6. В открывшемся окне проверьте работу опций задания:

      1. Ответьте на вопрос.

      2. В правом нижнем углу нажмите кнопку Отправить.

      3. Выйдите из режима предпросмотра.

    7. Сохраните изменения.

    1. Напишите краткую и ясную инструкцию. Опишите в ней, что надо сделать, и приведите примеры.

      Вы можете подготовить инструкцию в формате HTML и вставить ее в редактор. Чтобы переключиться в режим HTML, нажмите <>.

    2. Нажмите Завершить.

Подробнее о работе с проектом читайте в разделе Customizable-проект.

Создайте пул

Пул — это набор оплачиваемых заданий, которые одновременно выдаются исполнителям.

  1. Откройте страницу проекта по поиску информации в интернете.

  2. Нажмите кнопку Добавить пул.

  3. Укажите Название пула.

  4. В блоке Аудитория в разделе Исполнители отфильтруйте исполнителей.

    Чтобы задание было доступно только исполнителям, владеющим русским языком:

    1. Нажмите Добавить фильтр.

    2. Найдите в списке блок Готовые наборы аудиторий и выберите набор фильтров Русскоязычные исполнители.

    3. Присвойте навык исполнителям, которые участвуют в проекте по поиску информации в интернете. В дальнейшем это позволит поручить проверку выполненных заданий только исполнителям без навыка — то есть тем, кто не выполнял задания этого проекта.

      Нажмите кнопку +Добавить навык и укажите название навыка, например Поиск информации.

    Задания в пулах по умолчанию будут доступны для веб-версии Толоки и мобильного приложения. Если вы хотите изменить настройки по умолчанию и ограничить видимость задачи для любой из версий, добавьте фильтр Клиент и выберите нужное значение: Веб-версия Толоки или Мобильная Толока.

  5. (опционально) В разделе Соотношение скорости и качества укажите желаемый уровень качества. Повышение уровня качества может снизить скорость выполнения заданий, так как пул будет доступен меньшему числу исполнителей. Подробнее об этом читайте в разделе Соотношение скорости и качества.

  6. В блоке Цена в поле Цена за страницу заданий укажите цену. Например, 0.01.

    Что такое страница заданий?

    На одной странице может отображаться одно или несколько заданий. Если задания простые, то можно добавлять 10–20 заданий на одну страницу. Не рекомендуем создавать длинные страницы, поскольку это снизит скорость загрузки данных у исполнителя.

    Исполнитель получит оплату, только если выполнил все задания на странице.

    Количество заданий на странице вы определите при загрузке заданий.

    Подробнее о том, как установить справедливую цену.

  7. Правила контроля качества позволяют отсеивать невнимательных исполнителей.

    В блоке Контроль качества задайте Частоту показа капчи, например Среднюю.

    Добавьте следующие правила контроля качества:

    1. Контрольные задания — отсеивает исполнителей, которые часто ошибаются в контрольных заданиях.

      1. Нажмите Добавить правило контроля качества.

      2. Найдите в списке блок Правила и выберите пункт Контрольные задания.

      3. Задайте правило для контрольного задания: если количество ответов на контрольные вопросы ≥ 3 и процент правильных ответов на контрольные вопросы < 60, то заблокировать исполнителя на проекте на 10 дней. В качестве причины укажите Контрольное задание.



        Это означает, что если исполнитель выполнил более трех контрольных заданий и дал неправильные ответы более чем в 60% из них, он будет заблокирован и не сможет выполнять задания на этом проекте в течение 10 дней.

    2. Быстрые ответы — отсеивает исполнителей, которые отвечают слишком быстро.

      1. В поле Учитывать последних страниц заданий введите количество последних страниц заданий, выполненных исполнителем. Например, 10.
      2. В поле Минимальное время на страницу заданий укажите время в секундах. Например, 20.
      3. Задайте правило для быстрого ответа: если количество быстрых ответов ≥ 1, то заблокировать у меня на 10 дней. В поле Причина введите Быстрые ответы.



        Это означает, что если исполнитель выполнит хотя бы одну страницу заданий быстрее, чем за 20 секунд, он не сможет выполнять ваши задания 10 дней.

    3. Капча — предотвращает выполнение заданий роботами.

      1. В поле Учитывать последних вводов капчи введите количество последних страниц заданий, выполненных исполнителем. Например, 10.
      2. Задайте правило для капчи: если количество ответов ≥ 5 и процент правильных ответов< 65, то заблокировать на проекте на 10 дней. В поле Причина введите Капча.



        Это означает, что если исполнитель верно вводит капчу менее чем в 65% случаев, он не сможет выполнять задания на проекте в течение 10 дней.

    4. Пропуск заданий — отсеивает исполнителей, которые пропускают несколько страниц заданий подряд.

      Задайте правило для пропущенных заданий: если пропущенных подряд страниц заданий ≥ 4, то приостановить в пуле на 10 дней. В поле Причина введите Пропуск заданий.



      Это означает, что если исполнитель пропустит 4 и более страниц заданий, он потеряет доступ к пулу на 10 дней.

    5. Установите перекрытие — количество исполнителей, которые должны выполнить задание. В блоке Контроль качества в разделе Перекрытие задания укажите значение поля Количество исполнителей, которые должны выполнить каждое задание. Для заданий этого типа, как правило, 3-5.

    Примечание.

    Вы можете скопировать настройки контроля качества из другого пула. Для этого в блоке Аудитория в разделе Исполнители нажмите перенесите их из другого пула.

  8. Настройте Параметры пула.

    В блоке Дополнительные настройки укажите значение поля Время на страницу заданий. Времени должно быть достаточно для чтения инструкции, загрузки задания, поиска информации и ответа. Например, 1200 секунд.

  9. Нажмите кнопку Создать пул.

Загрузите TSV-файл с заданиями

Подготовьте собственный файл с заданиями. Ознакомьтесь с примером в демонстрационном TSV-файле. В интерфейсе Толоки под названием пула есть ссылки на шаблоны TSV-файлов с обычными, контрольными и обучающими заданиями.

  1. На странице пула нажмите кнопку Загрузить. В открывшемся окне также можно скачать пример TSV-файла по ссылке Пример загрузочного файла.

  2. В открывшемся окне настройте параметры загрузки файла.

      1. Выберите Умное смешивание.

      2. В поле Основных заданий укажите 9.

      3. В поле Обучающих заданий укажите 0.

      4. В поле Контрольных заданий укажите 1.

      5. Нажмите кнопку Загрузить.

      6. В открывшемся окне выберите TSV-файл с заданиями для загрузки и нажмите кнопку Открыть.

      7. В открывшемся окне проверьте количество заданий и нажмите кнопку Добавить.

    1. Создайте контрольное задание:

      1. Нажмите кнопку Разметить.

        Примечание. Если вместо умного смешивания было выбрано другое, необходимо нажать кнопку Разметить. Если такой кнопки нет, удалите файл и загрузите заново.
      2. В открывшемся окне нажмите кнопку Создать контрольные.

      3. В открывшемся окне в разделе Создать контрольное задание слева отметьте пункт result.

      4. Выберите правильный ответ на вопрос.

      5. Нажмите кнопку Сохранить и перейти к следующему.

      6. Выйдите из режима разметки заданий.

      Примечание.

      В небольших пулах контрольные задания должны составлять около 10% от всех заданий. Включайте разные варианты правильных ответов в равных количествах. Посмотрите распределение ответов на странице Разметить задания на вкладке Контрольные.

    Нажмите кнопку , чтобы запустить пул.

Получите результаты

Когда исполнители выполнили ваши задания, получите результаты.

На странице пула нажмите кнопку Скачать результаты. В открывшемся окне нажмите кнопку Скачать результаты.

Поручите проверку исполнителям

Если в проекте по поиску информации в интернете вы использовали Отложенную приемку, отдайте результаты на проверку исполнителям в качестве задания. Подробнее об отложенной приемке.

  1. Создайте еще один проект с помощью Пустого шаблона. О том, какие настройки нужно задать для этого проекта, написано ниже.
  2. Создайте интерфейс задания, чтобы исполнитель увидел:
    • название организации;
    • электронную почту и номер телефона организации;
    • переключатель с вариантами ответов:
      • Электронная почта и номер телефона указаны верно.
      • Электронная почта указана неверно.
      • Номер телефона указан неверно.
      • Электронная почта и номер телефона указаны неверно.
  3. Добавьте пул и укажите в нем Перекрытие — 3.
  4. Чтобы это задание было доступно исполнителям, которые не искали информацию в сети на вашем проекте, установите фильтр.

    1. В разделе Исполнители нажмите Добавить фильтр.

    2. Найдите в списке блок Навыки и выберите навык Выбрать навык.

    3. В поле Выберите навык выберите Поиск информации.

    4. В поле ? укажите =. Поле Отсутствует оставьте пустым.

  5. Загрузите в пул задания и запустите его.
  6. Когда пул будет полностью выполнен, запустите агрегацию результатов.
  7. Примите задания по поиску информации, в которых нет ошибок. Остальные отклоните, указав причину. Как только вы отклоните задания, они будут отправлены на повторное выполнение.

Решение проблем

Как сделать так, чтобы для разных вопросов было различное количество вариантов ответов?
Используйте конкатенацию, например:
{{field type="checkbox" name=(concat "result." @index ) label=(concat "checkbox –
          " @index) size="L"}}
Скопировано
Как в JS сделать так, чтобы если чекбокс отмечен, то ссылку не запрашивать, а если ссылка вставлена, то галочка стоять не должна?
  1. Посмотрите как это реализовано в шаблоне « Поиск данных в сети ».
  2. Для решения второй задачи вы можете добавить ещё одну валидацию по аналогии с этой:
    if (solution.output_values.url && solution.output_values.check) {return {task_id:
    this.getTask().id,errors: {'url': {code: 'Вставьте ссылку или отметьте галочкой,что сайта нет'}}}}
    Скопировано
Как в режиме предпросмотра включить загрузку аудиофайлов?

В режиме предпросмотра проверить загрузку файлов нельзя, но это можно сделать в песочнице, выполнив своё задание. Для этого нужно зарегистрироваться в сендбоксе в качестве исполнителя и добавить логин в доверенные на странице Пользователи. Подробнее можете прочитать в этой статье .

Исполнитель не может загрузить файл в задание?

Если никто из исполнителей не смог отправить задание, скорее всего проблема в валидации в JS. Проверьте её ещё раз.

Перенесите проект в сендбокс и попробуйте выполнить задание самостоятельно в песочнице.

Как снять выбор с радиокнопки?

Снять выбор нельзя. Только изменить на другую радиокнопку с ответом.

Что делать, если атрибуты радио-кнопки в предпросмотре отображаются правильно, а после сохранения — нет?

Если после сохранения инструкции пропадают теги или атрибуты (например, checked="true"), значит они не поддерживаются. Полный список допустимых в инструкции тегов можно найти в руководстве.