Formularios web

Tabla de contenidos

Introducción

Este artículo describe el endpoint web-form, que permite registrar un contacto en Fideltour desde cualquier formulario instalado en la web del cliente.

  • Endpoint: POST https://app.hoteldatahub.io/api/v1/contacts/web-form/
  • Swagger: https://app.hoteldatahub.io/swagger/#/contacts/contacts_web_form

El contacto se identifica de forma única por su email: si ya existe un contacto con ese email se actualiza, y si no existe se crea.

Tabla de parámetros

Campo Tipo Obligatorio Descripción
hotel_chain String Código de la cadena hotelera, facilitado por Fideltour.
api_user String Sí (*) Username del api user, facilitado por Fideltour. Obligatorio salvo que se envíe company_id.
company_id Integer No (*) Identificador de la empresa. Alternativa a api_user: se debe enviar uno de los dos.
email String Email del contacto. Campo único, usado como identificador del contacto.
source Integer No Origen del contacto:
6 = Formulario newsletter (por defecto)
7 = Formulario de contacto
Si se envía un valor distinto, se usa 6 (formulario newsletter).
name String No Nombre del contacto.
surname String No Apellidos del contacto.
language String No Idioma del contacto. Debe estar en formato ISO 639-1.
country String No País del contacto. Debe estar en formato ISO 3166-1 alpha-2.
phone1 String No Teléfono del contacto.
birthday Date YYYY-MM-DD No Fecha de nacimiento.
address String No Dirección.
post_code String No Código postal.
province String No Nombre de la provincia.
town String No Nombre de la ciudad o población.
zone String No Nombre de la zona.
identification_document_type Integer No Tipo de documento de identidad:
0 = Otros
1 = DNI
2 = NIE
3 = Pasaporte
identification_number String No Número de documento de identidad.
gender Integer No Género:
0 = No especificado (por defecto)
1 = Hombre
2 = Mujer
3 = No binario
4 = Género fluido
5 = Prefiere no decirlo
custom_tags Array de String No Nombres de las etiquetas que se desean vincular con el contacto.
business_name String No Nombre de la empresa.
work_place String No Cargo empresarial.
business_address String No Dirección de la empresa.
fiscal_address String No Dirección fiscal.
accept_terms Boolean No Indica si el contacto acepta términos y condiciones.
true = Acepta
false = No acepta (por defecto)
accept_commercial_communications Boolean No Indica si el contacto acepta comunicaciones comerciales.
true = Acepta
false = No acepta (por defecto)
accept_personalized_commercial_communications Boolean No Indica si el contacto acepta comunicaciones comerciales personalizadas.
true = Acepta
false = No acepta (por defecto)
ip String No IP desde la que se aceptan los checkboxes legales.

(*) Es obligatorio enviar api_user o company_id. El hotel_chain debe coincidir con el api_user (o con el company_id) indicado.

Nota: los valores booleanos true y false también se pueden enviar como enteros 1 y 0.

Ejemplo

A continuación se muestra un ejemplo de petición y respuesta correcta.

Petición (POST)

En el siguiente ejemplo se muestra una petición para dar de alta al contacto pablo@hdh.com.

  • Protocolo: HTTP/1.1
  • Método: POST
  • Host/Endpoint: https://app.hoteldatahub.io/api/v1/contacts/web-form/
  • Headers: Content-type: application/json
{
    "hotel_chain": "6NOK",
    "api_user": "hoteldatahub_fideltour_web_form",
    "email": "pablo@hdh.com",
    "birthday": "1976-04-18",
    "phone1": "651442233",
    "gender": 2,
    "address": "Calle los olivos",
    "province": "Madrid",
    "town": "Madrid",
    "zone": "Sol",
    "post_code": "28013",
    "language": "es",
    "country": "ES",
    "name": "Pablo",
    "surname": "Mir",
    "identification_document_type": 1,
    "identification_number": "01234567Z",
    "source": 6,
    "custom_tags": ["Cliente VIP", "Turista"],
    "accept_terms": true,
    "accept_commercial_communications": true,
    "accept_personalized_commercial_communications": false
}

Respuesta

En caso de una respuesta 200 o 201, el JSON que se recibe tiene la siguiente estructura.

{
    "id": 9999999,
    "business_name": null,
    "work_place": "Madrid",
    "business_address": null,
    "fiscal_address": "Calle de las soluciones industriales 25",
    "language": "ES",
    "country": "ES",
    "created_at": "2022-01-01T12:12:12.654321",
    "level_name": "",
    "loyalty_card_number": null,
    "name": "Pablo",
    "surname": "Mir",
    "email": "pablo@hdh.com",
    "email_status": 0,
    "phone1": "651442233",
    "gender": 2,
    "identification_document_type": 1,
    "identification_number": "01234567Z",
    "birthday": "1976-04-18",
    "address": "Calle los olivos",
    "post_code": "07006",
    "source": 1,
    "notes": "Muy exigente",
    "photo": null,
    "subscribed": false,
    "unsubscribe_reason": null,
    "date_subscribed": "2022-01-01T12:12:12.654321",
    "modification_date_subscribed": null,
    "is_active": true,
    "points": 0,
    "value": 0,
    "review": null,
    "total_bookings": 0,
    "level_points": 0,
    "loyalty_custom_tag_timestamp": null,
    "is_profile_completed": false,
    "last_level_review": null,
    "kicked_out_loyalty": null,
    "province": 1,
    "town": 2,
    "zone": 3,
    "level": null,
    "custom_tags": [4, 5],
    "hotels": []
}

Nota: en la respuesta, los campos province, town, zone y custom_tags se devuelven como identificadores numéricos de Fideltour, no como los nombres enviados en la petición.

Formulario de suscripción a newsletter

A continuación se muestra el código HTML y JavaScript necesario para generar un ejemplo de formulario de suscripción a newsletter integrado con Fideltour.

<form id="fideltour-newsletter-form" method="POST">
    <input type="hidden" name="hotel_chain" value="SOLICITAR A FIDELTOUR">
    <input type="hidden" name="api_user" value="SOLICITAR A FIDELTOUR">
    <div>
        <label for="name">Nombre</label>
        <input id="name" type="text" name="name">
    </div>
    <div>
        <label for="surname">Apellidos</label>
        <input id="surname" type="text" name="surname">
    </div>
    <div>
        <label for="email">Email</label>
        <input id="email" type="text" name="email" required>
    </div>
    <div>
        <input id="accept" type="checkbox" name="accept_commercial_communications" required>
        <label for="accept">
            Acepto suscribirme a la newsletter para recibir comunicaciones comerciales
        </label>
    </div>
    <button type="submit">Enviar</button>
</form>

<script type="text/javascript">
    const endpoint = "https://app.hoteldatahub.io/api/v1/contacts/web-form/";
    const form = document.getElementById("fideltour-newsletter-form");

    form.addEventListener("submit", function (e) {
        e.preventDefault();
        const xhr = new XMLHttpRequest();
        xhr.open("POST", endpoint, true);
        xhr.setRequestHeader("Content-type", "application/json");

        const formData = new FormData(form);
        const data = {};
        formData.forEach((value, key) => {
            if (value) {
                if (value === "on") value = true;
                data[key] = value;
            }
        });

        xhr.send(JSON.stringify(data));
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    // La solicitud se completó exitosamente
                    console.log("Respuesta recibida:", xhr.responseText);
                } else {
                    // Hubo un problema con la solicitud
                    console.error("Error en la solicitud:", xhr.statusText);
                }
            }
        };
    });
</script>