Formularios de suscripción

Formularios de suscripción

Introducción:

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


Endpoint: https://app.hoteldatahub.io/api/v1/contacts/web-form/

Swagger: https://app.hoteldatahub.io/swagger/#/contacts/contacts_web_form

Tabla de parámetros:


Campo

Tipo

Obl.

Descripción

hotel_chain

String

Si

Código de la cadena hotelera, facilitado por Fideltour.

api_user

String

Si

Username del api user, facilitado por Fideltour.

email

String

Si

Email del contacto, campo único, usado como identificador del contacto.

source

Integer

No

Origen del contacto.

  • 6= Formulario newsletter(default)
  • 7= Formulario contacto

name

String

No

Nombre del contacto

surname

String

No

Apellidos del contacto

language

String

No

country

String

No

Debe estar en formato ISO 3166-1 alpha-2

phone1

String

No

Teléfono del contacto

phone2

String

No

Teléfono 2 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 (default)
  • 1 = hombre
  • 2 = mujer
  • 3 = no binario
  • 4 = género fluido
  • 5 = prefiere no decirlo

custom_tags

String array

No

Nombres de las etiquetas que deseamos 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

Booleano

No

Indica si el contacto acepta términos y condiciones.

  • True = Acepta
  • False = No acepta (por defecto)

accept_commercial_communications

Booleano

No

Indica si el contacto acepta comunicaciones comerciales.

  • True = Acepta
  • False = No acepta (por defecto)

accept_personalized_commercial_communications

Booleano

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

custom_fields
Diccionario
No
Requisito: los campos personalizados deben estar creados en el GRM.

Ejemplo de envío:
"custom_fields": {
   "key_custom_field_1": valor,
   "key_custom_field_2": valor
}

Es importante que los valores correspondan al tipo de campo, en caso de campo tipo fecha, el formato debe ser: "yyyy-mm-dd"
overwrite_fields​
Boolean
No

Si ya existe un contacto con el mismo email, este campo indica si los campos del contacto se sobreescriben por los nuevos

  1. True = Sobreescribir
  2. False = No sobreescribir (por defecto)

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

METODO: POST

HOST/ENDPOINT:  https://app.hoteldatahub.io/api/v1/contacts/web-form/

HEADERS: Content-type: application/json

BODY: se añade un ejemplo a continuación.

  1. {
  2.    "hotel_chain""6NOK",
  3.    "api_user""hoteldatahub_fideltour_web_form",
  4.    "email""pablo@hdh.com",
  5.    "birthday""1976-04-18",
  6.    "phone1""651442233",
  7.    "phone2""12323",
  8.    "gender"2,
  9.    "address""Calle los olivos",
  10.    "province""Madrid",
  11.    "town""Madrid",
  12.    "zone""Sol",
  13.    "post_code""28013",
  14.    "language""es",
  15.    "country""ES",
  16.    "name""Pablo",
  17.    "surname""Mir",
  18.    "identification_document_type"1,
  19.    "identification_number""01234567Z",
  20.    "source"6,    
  21.    "custom_tags":  ["Cliente VIP",  "Turista"],
  22.    "accept_terms"true,
  23.    "accept_commercial_communications"true,
  24.    "accept_personalized_commercial_communications"false,
  25.    "custom_fields": {"Campo personalizado 1": valor,  "Campo personalizado 2": valor}
  26. }

Nota: los valores Booleanos true y false, también se pueden enviar como Integers 1 y 0.


Respuesta:

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

  1. {
  2.    "id"9999999,
  3.    "business_name"null,
  4.    "work_place""Madrid",
  5.    "business_address"null,
  6.    "fiscal_address""Calle de las soluciones industriales 25",
  7.    "language""ES",
  8.    "country""ES",
  9.    "created_at""2022-01-01T12:12:12.654321",
  10.    "level_name""",
  11.    "loyalty_card_number"null,
  12.    "name""Pablo",
  13.    "surname""Mir",
  14.    "email""pablo@hdh.com",
  15.    "email_status"0,
  16.    "phone1""651442233",
  17.    "phone2""12323",
  18.    "gender"2,
  19.    "identification_document_type"1,
  20.    "identification_number""01234567Z",
  21.    "birthday""1976-04-18",
  22.    "address""Calle los olivos",
  23.    "post_code""07006",
  24.    "source"1,
  25.    "notes""Muy exigente",
  26.    "photo"null,
  27.    "subscribed"false,
  28.    "unsubscribe_reason"null,
  29.    "date_subscribed""2022-01-01T12:12:12.654321",
  30.    "modification_date_subscribed"null,
  31.    "is_active"true,
  32.    "points"0,
  33.    "value"0,
  34.    "review"null,
  35.    "total_bookings"0,
  36.    "level_points"0,
  37.    "loyalty_custom_tag_timestamp"null,
  38.    "is_profile_completed"false,
  39.    "last_level_review"null,
  40.    "kicked_out_loyalty"null,
  41.    "province"1,
  42.    "town"2,
  43.    "zone"3,
  44.    "level"null,
  45.    "custom_tags": [45],
  46.    "hotels": []
  47. }

Ejemplo real de formulario

A continuación, se muestra un ejemplo de uso de formulario sincronizado con Fideltour, en concreto un formulario de suscripción a newsletter. La información que se recoge del contacto en este ejemplo no es toda la posible. Para conocer toda la información posible del contacto que se puede enviar a Fideltour, leer este artículo. 



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, además, posteriormente se adjunta el fichero html para poder ejecutarlo.


<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>