Заполнить виджет данными

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

Для этого не нужно писать никакого кода, достаточно правильно передать нужные параметры в виджет.

Общая схема настроек, передаваемых в виджет, выглядит следующим образом:

prefill:
  # исходим из того, что иногда нужно передать данные о нескольких участниках
  attendees:
    - 
      mail: prefilled1231231231@ya.ru
      surname: Петров
      name: Иван
      phone: +7 (777) 777-77-77
      id_вопроса1: Ответ на вопрос 1
  # Ответы на "мастер-вопросы", которые могут существовать при использовании режима мультианкет
  order:
    order_mail: емейл@заказчика
    id_мастер_вопроса1: Ответ на мастер-вопрос 1
  # Поле aux сохраняется и доступно из webhook (http://dev.timepad.ru/api/hooks/). Передав его тут, можно будет в дальнейшем найти по нему соответствующую регистрацию.
  aux:
    foo: bar
  # Сразу ввести промокоды. Поле промокода при этом будет скрыто (вне зависимости от правильности промокода). Автоскрытие можно отключить, установив настройку hidePromocodeInput: "never"
  promocodes:
    - "some_code"

Пример

Давайте попробуем простейший вариант: нам известно, что наш участник – Иван Иванов с почтой iivanov@mail.ru и телефоном, и в БД сайта, на котором стоит виджет, его ID - 14.

Для начала возьмите код вашего виджета в системе. Теперь изменим его настройки, добавив раздел о prefill:

<script type="text/javascript" defer="defer" charset="UTF-8" data-timepad-customized="АЙДИ_ВАШЕЙ_КАСТОМИЗАЦИИ" data-twf2s-event--id="АЙДИ_ВАШЕГО_СОБЫТИЯ" data-timepad-widget-v2="event_register" src="https://timepad.ru/js/tpwf/loader/min/loader.js">
(function() {
    return {
        "prefill": {
            "attendees": [
                {
                    "name": "Иван",
                    "surname": "Иванов",
                    "mail": "iivanov@mail.ru"
                }
            ],
            "aux": {
                "our_user": 14
            }
        }
    };
})();
</script>

Готово!

Если в форме регистрации есть дополнительные вопросы, ответы на которые тоже хочется записать передать, то и это возможно:

Если это поле "Телефон", которое было распознано нашей системой (это происходит с первым вопросом, который содержит в названии "Телефон"), то просто передайте поле phone:

{
  "name": "Иван",
  "surname": "Иванов",
  "mail": "iivanov@mail.ru",
  "phone": "+7 (777) 777-77-77"
}

Если это какой-то текстовый вопрос (например, "Из какого вы города"), то вам понадобится узнать его ID. Сделать это можно множеством способов, самый простой – получить событие через API. Для этого перейдите по ссылке https://api.timepad.ru/v1/events/id-вашего-события (не забудьте подставить ID вашего события) и вы увидите вопросы с field_id вида question8812736 в разделе questions. 8812736 – это и есть ID вопроса. Используйте его так:

{
  "name": "Иван",
  "surname": "Иванов",
  "mail": "iivanov@mail.ru",
  "8812736": "Москва"
}

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

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

Предзаполнение через URL

Кроме передачи параметров через настройки, их можно передавать через адрес (ссылку на страницу с виджетом). Для кодирования параметров используйте нотацию html-форм вроде той, что выдаёт jquery.param. Все фрагменты префиксуются строкой twf_prefill_. Пример с Иваном Ивановым и промокодом "Ку" выглядел бы так:

https://сайт_где_установлен_виджет/?twf_prefill_promocodes[]=Ку&twf_prefill_attendees[0][name]=Иван&twf_prefill_attendees[0][surname]=Иванов&twf_prefill_attendees[0][mail]=iivanov@mail.ru&twf_prefill_aux[][our_user]=14

Указание индексов массивов необходимо, если вы пытаетесь добавить в массив больше одного элемента. Например, два промокода надо будет записать так: &twf_prefill_promocodes[0]=Ку&twf_prefill_promocodes[1]=Куку&.

Имейте в виду, что длина адресов ограничена, а русские буквы считаются за несколько символов. Обязательно проверяйте, что ваша ссылка распознаётся корректно!