Configuración y depuración
Es posible que necesites envolver las llamadas a OneSignal enOneSignalDeferred.push(async function (OneSignal) { ... }) (usa function (OneSignal) { ... } cuando no necesites await). El argumento OneSignal es la instancia del SDK que se usa a lo largo de esta referencia (por ejemplo, await OneSignal.init({ ... })).
Puedes hacer push de varios callbacks, o incluir varias sentencias dentro de un solo callback.
El SDK de OneSignal se carga con el atributo defer en tu página. Por ejemplo:
<script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
De esa forma, el SDK se ejecuta después de que el documento se haya analizado y no bloquea el renderizado. Los scripts que se ejecutan antes aún necesitan un lugar donde encolar trabajo hasta que el SDK esté listo. Comienza con:
window.OneSignalDeferred = window.OneSignalDeferred || [];
Esa línea define OneSignalDeferred si no existe. Si un fragmento anterior de la página ya lo definió, se conserva la misma referencia; de lo contrario, comienza como un array vacío [] al que haces push de callbacks.
Los arrays exponen un método .push(), por lo que encolas funciones con OneSignalDeferred.push(...). Cuando el SDK se carga, vacía la cola y redefine .push() para que los push posteriores se ejecuten de inmediato (consulta el código fuente del Web SDK).
La mayoría de los fragmentos a continuación usan
OneSignal solo. Trátalo como la instancia de tu callback diferido después de await OneSignal.init({ ... }), a menos que una sección indique lo contrario (por ejemplo, setConsentRequired() antes de init).init()
Inicializa el SDK de OneSignal. Debe llamarse en la etiqueta <head> una vez en cada página de tu sitio. El ONESIGNAL_APP_ID se encuentra en Keys & IDs.
Si quieres retrasar la inicialización del SDK de OneSignal, recomendamos usar nuestros métodos de privacidad.
Parámetros de promptOptions
Usa promptOptions para localizar o personalizar los prompts de permiso del usuario. Todos los campos son opcionales.
Estructura: promptOptions.slidedown.prompts es un array; cada elemento es una configuración de prompt. Los campos type, autoPrompt, delay, text y categories pertenecen a cada objeto dentro de prompts, no son claves de nivel superior junto a appId en init.
Parámetros de notifyButton
Configura la Subscription Bell (botón de notificación) que se muestra en la página.
Parámetros de welcomeNotification
Personaliza la notificación de bienvenida enviada después de la primera suscripción.
Ejemplo:
setLogLevel()
Configura el registro para imprimir logs adicionales en la consola. Consulta los pasos de solución de problemas para más detalles. Ejecútalo desde un callback diferido después de init (la misma instancia de OneSignal que en el resto de la página).
JavaScript
'trace''debug''info''warn''error'
Identidad y propiedades del usuario
Cuando los usuarios se suscriben a notificaciones push en tu sitio web, OneSignal crea automáticamente un OneSignal ID (ID a nivel de usuario) y un Subscription ID (ID a nivel de dispositivo). Puedes asociar múltiples Suscripciones (p. ej., dispositivos, emails, números de teléfono) con un solo usuario llamando alogin() con tu identificador de usuario único.
Consulta Usuarios y Suscripciones para más detalles.
login(external_id)
Establece el contexto del usuario actual con el external_id proporcionado. Esto vincula el dispositivo actual (Suscripción push web) a un usuario conocido y unifica todos los datos futuros bajo un único onesignal_id. Usa este método solo para usuarios identificados (por ejemplo, después de iniciar sesión o restaurar la cuenta). Para usuarios anónimos, no llames a login. En su lugar, rastréalos usando su onesignal_id asignado automáticamente (consulta OneSignal.User.onesignalId).
Qué sucede cuando llamas a login(external_id)
El SDK se comporta de forma diferente según si el external_id ya existe en la aplicación de OneSignal.
Si el external_id ya existe:
- El SDK cambia a ese usuario existente.
- Puedes ver un
409 Conflicten el registro de red del navegador o en la consola. Significa que el External ID ya existe en la aplicación; es esperado en este caso y normalmente no es un rechazo de promesa que debas manejar.
- Puedes ver un
- El
onesignal_idactual se descarta y se carga elonesignal_idexistente de ese usuario. - El dispositivo actual (Suscripción push web) se vincula al usuario existente.
- Los datos anónimos recopilados antes del login no se fusionan y se descartan. Esto incluye tags, datos de sesión, Suscripciones de email/SMS y otras propiedades locales del usuario.
external_id no existe:
- Se crea un nuevo usuario usando el
onesignal_idactual. - Se conservan todos los datos recopilados mientras el usuario era anónimo.
- El dispositivo (Suscripción push web) queda vinculado a este nuevo usuario.
- El SDK reintenta automáticamente la solicitud de login ante fallos de red o errores del servidor.
- No necesitas implementar tu propia lógica de reintento.
- Llama a
login(external_id)en cada carga de página una vez que conozcas el ID del usuario (por ejemplo, después del inicio de sesión o la restauración de sesión). - Llámalo de nuevo cada vez que cambie el usuario con sesión iniciada (cambio de cuenta).
- No llames a
loginantes de tener un identificador de usuario estable y conocido.
JavaScript
logout()
Desvincula al usuario actual de la Suscripción push web.
- Elimina el
external_idde la Suscripción push web actual. No elimina elexternal_idde otras Suscripciones. - Restablece el
onesignal_ida un nuevo usuario anónimo. - Cualquier dato nuevo (p. ej., tags, Suscripciones, datos de sesión, etc.) se establecerá ahora en el nuevo usuario anónimo hasta que se identifique con el método
login.
Usa esto cuando un usuario cierre sesión en tu sitio y ya no quieras enviar mensajes transaccionales dirigidos a ese navegador.
JavaScript
OneSignal.User.onesignalId
Recupera el onesignal_id del usuario actual almacenado localmente en el navegador. Este valor representa el contexto de usuario activo (el User ID de OneSignal) y puede cambiar con el tiempo — por ejemplo, cuando llamas a login(external_id) o cuando el SDK se inicializa. Si se llama demasiado pronto, este método puede devolver null.
Este valor no es el Subscription ID, que se usa para identificar el navegador, es decir, la Suscripción push web (consulta User.PushSubscription.id).
Cuándo está disponible onesignal_id:
- Después de que el SDK de OneSignal termina de inicializarse
- Después de que un usuario es identificado con
login(external_id) - Después de cambiar de usuario o restaurar una sesión
addEventListener('change', …) de estado del usuario en lugar de hacer polling.
Casos de uso comunes:
En la mayoría de los casos, querrás usar tu propio External ID establecido mediante el método login. Sin embargo, hay algunos casos en los que puedes querer usar el onesignal_id directamente.
- Rastrear usuarios anónimos antes de que se establezca un External ID
- Almacenar el OneSignal ID en tu backend para soporte o depuración
- Correlacionar usuarios de OneSignal con registros internos
- Mostrar el ID para solución de problemas o QA
JavaScript
OneSignal.User.externalId
Recupera el External ID del usuario actual guardado localmente en el navegador. Puede ser null si no se estableció mediante el método login o si se llama antes de que se inicialice el estado del usuario. En su lugar, usa addEventListener('change', …) de estado del usuario para escuchar los cambios de estado del usuario.
JavaScript
addEventListener() User State
Escucha los cambios en el contexto del usuario (p. ej., login, logout, asignación de ID).
JavaScript
addAlias(), addAliases(), removeAlias(), removeAliases()
Los alias son identificadores alternativos (como nombres de usuario o IDs de CRM).
- Establece el
external_idconlogin()antes de agregar alias. Los alias agregados a suscripciones sinexternal_idno se sincronizarán entre múltiples suscripciones. - Consulta Alias para más detalles.
JavaScript
getLanguage(), setLanguage()
Obtén y/o anula el idioma detectado automáticamente del usuario. Consulta Mensajería multilenguaje para ver la lista de códigos de idioma disponibles.
JavaScript
Eventos personalizados
Activa Journeys y la activación del paso Wait Until mediante un evento personalizado.Los eventos personalizados requieren el Web SDK
160500+.El usuario debe haber iniciado sesión para que se rastreen los eventos personalizados.Llama a las APIs de eventos personalizados en la instancia OneSignal pasada a OneSignalDeferred.push (consulta Configuración y depuración al inicio de esta página), no en window.OneSignal — el SDK de página se inicializa a través de la cola diferida, y ese callback es la forma soportada de acceder a OneSignal.User.name- Obligatorio. El nombre del evento como string.properties- Opcional. Pares clave-valor para agregar al evento. El diccionario o mapa de propiedades debe ser serializable en un objeto JSON válido. Admite valores anidados.
os_sdk, que estará disponible para su consumo. Por ejemplo, para segmentar eventos por tipo de suscripción, accederías a os_sdk.type.
json
trackEvent()
Llámalo después de que init() se complete. Este ejemplo usa un solo callback diferido para que init siempre se ejecute antes que trackEvent:
JavaScript
En producción, agrega
trackEvent al callback diferido donde ya haces await OneSignal.init(...). No registres un segundo init a menos que sea intencional.Tags
Los tags son pares personalizadoskey : value de datos de tipo string que estableces en los usuarios según eventos o propiedades del usuario. Consulta Tags para más detalles.
addTag(), addTags()
Establece uno o varios tags en el usuario actual.
- Los valores se reemplazarán si la clave ya existe.
- Exceder el límite de tags de tu plan hará que las operaciones fallen silenciosamente.
JavaScript
removeTag(), removeTags()
Elimina uno o varios tags del usuario actual.
JavaScript
getTags()
Devuelve la copia local de los tags del usuario. Los tags se actualizan desde el servidor durante login() o en nuevas sesiones de la aplicación.
JavaScript
Privacidad
setConsentRequired()
Exige el consentimiento del usuario antes de que comience la recopilación de datos. Debe llamarse antes de que se ejecute init() (por ejemplo, al inicio del primer callback de OneSignalDeferred, antes de await OneSignal.init(...)).
Este método es equivalente a agregar requiresUserPrivacyConsent: true a las opciones de init.
JavaScript
setConsentGiven()
Otorga o revoca el consentimiento del usuario para la recopilación de datos. Sin consentimiento, no se envían datos a OneSignal y no se crea ninguna suscripción.
- Si
setConsentRequired()orequiresUserPrivacyConsentse establece entrue, nuestro SDK no estará completamente habilitado hasta que se llame asetConsentGivencontrue. - Si
setConsentGivense establece entruey se crea una Suscripción, y luego se establece enfalse, esa Suscripción ya no recibirá actualizaciones. Los datos actuales de esa Suscripción permanecen sin cambios hasta quesetConsentGivense establezca entruenuevamente. - Si quieres eliminar los datos del Usuario y/o de la Suscripción, usa nuestras APIs Delete user o Delete subscription.
JavaScript
Suscripciones
Una Suscripción representa una única instancia de canal de mensajería (por ejemplo, un navegador) y tiene un Subscription ID único (el ID a nivel de dispositivo de OneSignal). Un usuario puede tener múltiples Suscripciones en distintos dispositivos y plataformas. Consulta Suscripciones para más detalles.User.PushSubscription.id
Recupera el Subscription ID push web del navegador actual, almacenado localmente por el SDK.
Este ID identifica de forma única el canal push de este navegador específico, no al usuario. Se usa comúnmente al asociar dispositivos o navegadores con tu backend o al depurar problemas de entrega.
Si se llama antes de que la Suscripción se cree o restaure, este valor puede ser null.
Para detectar de forma confiable cuándo el Subscription ID push web está disponible o cambia, usa el listener de Suscripción push.
JavaScript
User.PushSubscription.token
Devuelve el token actual de la suscripción push. Puede devolver null si se llama demasiado pronto. Se recomienda obtener estos datos dentro del observador de suscripción para reaccionar a los cambios.
JavaScript
addEventListener() Push Subscription Changes
Usa este método para responder a cambios de la suscripción push como:
- El dispositivo recibe un nuevo token push de Google (FCM) o Apple (APNs)
- OneSignal asigna un subscription ID
- El valor de
optedIncambia (p. ej., se llamó aoptIn()uoptOut()) - El usuario cambia el permiso de push en la configuración del navegador o del sistema operativo y luego regresa a tu sitio
change con un objeto de estado que incluye previous y current para que puedas detectar qué cambió.
Cuando
autoResubscribe es true, los visitantes recurrentes pueden disparar el evento change con optedIn: true tanto en previous como en current porque el permiso del navegador no cambió — solo se volvió a registrar el token push (por ejemplo, después de borrar los datos del sitio o migrar). Para analítica o seguimiento del lado del servidor que deba reflejar suscripciones nuevas o resuscripciones, event.current.token && !event.previous.token suele ser más confiable que comparar optedIn por sí solo.removeEventListener() con la misma referencia de handler que pasaste a addEventListener().
JavaScript
dataLayer): dispara un evento personalizado cuando aparece un token push y no había ningún token antes, de modo que el re-registro con optedIn sin cambios se contabilice correctamente. El subscription ID puede llegar en el mismo callback o en un evento change posterior según el momento:
JavaScript
optOut(), optIn(), optedIn
Controla el estado de suscripción (subscribed o unsubscribed) de la Suscripción push actual. Usa estos métodos para controlar el estado de la suscripción push en tu sitio. Casos de uso comunes: 1) Evitar que se envíe push a usuarios que cierran sesión. 2) Implementar un centro de preferencias de notificaciones dentro de tu sitio.
optOut(): Establece el estado de la suscripción push actual en no suscrito (incluso si el usuario tiene un token push válido).optIn(): Hace una de las siguientes acciones:- Si la Suscripción tiene un token push válido, establece el estado de la suscripción push actual en
subscribed. - Si la Suscripción no tiene un token push válido, intenta mostrar el prompt de permiso de push.
- Si la Suscripción tiene un token push válido, establece el estado de la suscripción push actual en
optedIn: Devuelvetruesi el estado de la suscripción push actual es suscrito; de lo contrario,false. Si el token push es válido pero se llamó aoptOut(), devolveráfalse.
JavaScript
addEmail(), removeEmail()
Agrega o elimina una Suscripción de email (dirección de correo electrónico) para el usuario actual.
Estos métodos son compatibles con la verificación de identidad.
Cuando llamas a addEmail(email):
- La dirección de email se convierte en una Suscripción de email para el usuario actual.
- El email puede crearse o reasignarse.
- La misma dirección de email no puede existir varias veces en la misma aplicación de OneSignal. Si ves direcciones de email duplicadas, revisa tus solicitudes a la REST API y contacta a soporte si es necesario.
Cuando llamas a
removeEmail(email):
- La Suscripción de email se elimina del usuario actual.
- El External ID actual se elimina de la Suscripción de email.
- Se asigna un nuevo OneSignal ID a la Suscripción de email.
- Las demás Suscripciones (push, SMS, otros emails) no se ven afectadas.
- Llama primero a
login()y luego aaddEmail(). De lo contrario, el email puede quedar asociado a un usuario anónimo. - Usa una dirección de email estable y verificada.
- Sigue las mejores prácticas de reputación de email.
JavaScript
addSms(), removeSms()
Agrega o elimina una Suscripción de SMS (número de teléfono) para el usuario actual. Los números de teléfono deben proporcionarse en formato E.164 (por ejemplo, +15551234567).
Estos métodos son compatibles con la verificación de identidad.
Cuando llamas a addSms(phoneNumber):
- El número de teléfono se convierte en una Suscripción de SMS para el usuario actual.
- El número puede crearse o reasignarse.
- El mismo número de teléfono no puede existir varias veces en la misma aplicación de OneSignal. Si ves números de teléfono duplicados, revisa tus solicitudes a la REST API y contacta a soporte si es necesario.
Cuando llamas a
removeSms(phoneNumber):
- La Suscripción de SMS se elimina del usuario actual.
- El External ID actual se elimina de la Suscripción de SMS.
- Se asigna un nuevo OneSignal ID a la Suscripción de SMS.
- Las demás Suscripciones (push, email, otros SMS) no se ven afectadas.
- Llama primero a
login()y luego aaddSms(). De lo contrario, la Suscripción de SMS puede quedar asociada a un usuario anónimo. - Valida y normaliza siempre los números de teléfono al formato E.164 antes de enviarlos.
- Sigue los requisitos de registro de SMS.
JavaScript
Prompts de Slidedown
Muestra los distintos prompts slidedown en tus sitios. Consulta Prompts de permiso web para más detalles.- Si se descarta, las llamadas futuras se ignorarán durante al menos tres días. Rechazos adicionales alargarán el tiempo que debe transcurrir antes de volver a mostrar el prompt al usuario.
- Para anular el comportamiento de espera (back-off), pasa
{force: true}al método. Sin embargo, para brindar una buena experiencia de usuario, vincula la acción a un evento iniciado por la interfaz, como un clic en un botón.
promptPush()
Muestra el prompt slidedown normal para notificaciones push.
- Si usas categorías, llama a
promptPushCategories()en su lugar. - Sujeto a la lógica de espera (backoff) establecida por OneSignal. Consulta Prompts de permiso web para más detalles.
JavaScript
promptPushCategories()
Muestra el prompt slidedown de categorías, que permite a los usuarios actualizar sus tags. También activa el prompt nativo de permiso de notificaciones si el usuario aún no ha otorgado el permiso.
- Si no usas categorías, llama a
promptPush()en su lugar. - Sujeto a la lógica de espera (backoff) establecida por OneSignal. Consulta Prompts de permiso web para más detalles.
JavaScript
promptSms()
Muestra el prompt de suscripción por SMS.
- Sujeto a la lógica de espera (backoff) establecida por OneSignal. Consulta Prompts de permiso web para más detalles.
JavaScript
promptEmail()
Muestra el prompt de suscripción por email.
- Sujeto a la lógica de espera (backoff) establecida por OneSignal. Consulta Prompts de permiso web para más detalles.
JavaScript
promptSmsAndEmail()
Muestra los prompts de suscripción por SMS y email simultáneamente.
- Sujeto a la lógica de espera (backoff) establecida por OneSignal. Consulta Prompts de permiso web para más detalles.
JavaScript
addEventListener() Slidedown
Agrega un callback para detectar el evento de prompt de Slidedown mostrado.
JavaScript
Notificaciones push
requestPermission()
Solicita el permiso de notificaciones push mediante el prompt nativo del navegador. Sujeto a la lógica de espera (backoff) establecida por el navegador. Consulta Prompts de permiso web para más detalles.
JavaScript
isPushSupported()
Devuelve true si el navegador actual admite push web.
JavaScript
OneSignal.Notifications.permission
Devuelve un booleano que indica el permiso actual del sitio para mostrar notificaciones.
true: El usuario ha otorgado permiso para mostrar notificaciones.false: El usuario ha denegado el permiso o aún no lo ha otorgado.
optOut de OneSignal, el subscription ID ni el token push. Para eso, usa User.PushSubscription (y los métodos relacionados a continuación).
Para escuchar los cambios de permiso, usa el evento permissionChange.
JavaScript
addEventListener() Notifications
Puedes engancharte al ciclo de vida de las notificaciones con addEventListener. Reemplaza el primer argumento con un nombre de evento como permissionChange, click o dismiss (consulta las subsecciones a continuación). Puedes registrar múltiples handlers por evento.
Para dejar de escuchar, llama a removeEventListener con el mismo nombre de evento y la misma referencia de handler.
JavaScript
permissionChange
Este evento ocurre cuando el usuario hace clic en Permitir o Bloquear, o descarta la solicitud de permiso nativa del navegador.
JavaScript
permissionPromptDisplay
Este evento ocurre cuando la solicitud de permiso nativa del navegador se acaba de mostrar.
JavaScript
click
Este evento se dispara cuando se hace clic en el cuerpo/título de la notificación o en los botones de acción.
JavaScript
foregroundWillDisplay
Este evento ocurre antes de que se muestre una notificación. Este evento se dispara en tu página. Si hay varias pestañas del navegador abiertas en tu sitio, este evento se disparará en todas las páginas en las que OneSignal esté activo.
JavaScript
dismiss
Este evento ocurre cuando:
- Un usuario descarta deliberadamente la notificación sin hacer clic en el cuerpo de la notificación ni en los botones de acción
- En Chrome en Android, un usuario descarta todas las notificaciones push web (este evento se disparará por cada notificación push web que mostremos)
- Una notificación expira por sí sola y desaparece
Este evento no ocurre si un usuario hace clic en el cuerpo de la notificación o en uno de los botones de acción. Eso se considera un evento
click de notificación.JavaScript
setDefaultUrl()
Establece la URL predeterminada para las notificaciones.
Si no has establecido una URL predeterminada, tu notificación se abrirá en la raíz de tu sitio de forma predeterminada.
JavaScript
setDefaultUrl() de la misma manera; el comportamiento de apertura y del ícono sigue tu configuración de Safari / Apple (por ejemplo, la Site URL en tu configuración web de OneSignal). Consulta Configuración del sitio.
setDefaultTitle()
Establece el título predeterminado que se muestra en las notificaciones.
JavaScript
Outcomes
Los métodos de outcomes están enOneSignal.Session. Usa la misma instancia diferida de OneSignal que en el resto de la página después de init.
sendOutcome()
Activa un outcome que se puede ver en el panel de OneSignal. Acepta un nombre de outcome (string, obligatorio) y un valor (number, opcional). Cada vez que se invoca el método sendOutcome con el mismo nombre de outcome, el conteo del outcome aumentará y el valor del outcome se incrementará en la cantidad pasada (si se incluye). Consulta Outcomes personalizados para más detalles.
JavaScript
sendUniqueOutcome()
Activa un outcome que se puede ver en el panel de OneSignal. Acepta solo el nombre del outcome (string, obligatorio). sendUniqueOutcome aumentará el conteo de ese outcome solo una vez por usuario. Consulta Outcomes personalizados para más detalles.
JavaScript