Saltar al contenido principal

App Móvil

Puedes utilizar el Widget de Palenca de forma incrustada utilizando un WebView en tu aplicación móvil y escuchar los eventos.

img.png

Parámetros de configuración

ParámetroEjemploDescripciónRequerido
widget_ida64fef80-42ec-4d5b-bd38-c918e0071663El widget_id único

Parámetros opcionales

ParámetroEjemploDescripción
externalId6187344f-d2e9-4ff1-a0ca-7a1ad512682dIdentificador externo del usuario
isSandboxtrueSi se establece en true, se habilita el modo sandbox. false de manera predeterminada
platforms['uber', 'rappi', 'runa']Matriz de plataformas que el usuario puede seleccionar
countries['mx', 'br', 'ar']Códigos de país alfa-2 separados por comas que el usuario puede seleccionar
redirectUrlhttps://dominio.com/paso-2URL a la que el usuario debe ser redirigido
customPrivacyUrlhttps://dominio.com/privacidadTe permite agregar un casilla de verificación de términos de privacidad personalizada, útil si necesitas un consentimiento personalizado
whatsAppPhoneNumber+525511223344Número de teléfono con código de país para recibir mensajes de WhatsApp de los usuarios
hideLogofalseSi se establece en true, se oculta el logo de tu empresa. false de manera predeterminada
hideWhatsAppfalseSi se establece en true, se oculta el botón flotante de WhatsApp. false de manera predeterminada
hideConsentfalseSi se establece en true, se oculta la página de consentimiento. false de manera predeterminada
langesReemplaza el idioma detectado automáticamente por el navegador. Idiomas disponibles: es, en y pt. null de manera predeterminada

Eventos

La única forma de comunicarse con el Palenca Link es escuchando un evento. Todos los eventos tienen un payload con el envelope del API.

En la siguiente tabla se muestran todos los eventos del Palenca Link:

EventoDescripción
readyIndica que tu clave de API pública y Widget son correctos y que el widget ha sido inicializado
user_createdEl usuario se creó correctamente
connection_successEl usuario se conectó exitosamente con la plataforma
connection_errorOcurrió un error al intentar conectar a un usuario con la plataforma

Respuesta para eventos

La estructura de la respuesta siempre es la misma con la siguiente estructura:

{
"signal": string,
"response": {
"success": bool,
"data": Data Object,
"error": Error Object
}
}

Ejemplos de eventos

ready

{
"signal": "ready"
}

user_created

{
"signal": "user_created",
"response": {
"success": true,
"data": {
"user_id": "054d0a9d-38ec-40cb-a31c-09b483242e4a",
"external_id": "4a0e32bd-c3df-4172-a89d-f173d6816926",
"widget_id": "feecb679-a3cc-47ef-8fd4-600799f12a39"
},
"error": null
}
}

connection_success

{
"signal": "connection_success",
"response": {
"success": true,
"data": {
"user_id": "054d0a9d-38ec-40cb-a31c-09b483242e4a",
"country": "mx",
"platform": "imss",
"account_id": "472f02e8-6b24-43a7-b529-3f71d6ecc81c"
},
"error": null
}
}

connection_error


{
"signal": "connection_error",
"response": {
"success": false,
"error": {
"code": "invalid_credentials",
"message": "The username/password combination is wrong",
"errors": null
},
"data": null
}
}

Ejemplos

React Native

Para escuchar los eventos puedes usar postMessage.

import React from 'react';
import { Alert } from 'react-native';
import { WebView } from 'react-native-webview';

const App = () => {
const handleEvent = (event: any) => {
Alert.alert(event.nativeEvent.data);
}

const widgetId: string = 'YOUR_WIDGET_ID';
const baseUrl: string = 'https://connect.palenca.com';
const uri: string = `${baseUrl}?widget_id=${widgetId}&primary_color=ea4c89`;

return <WebView
onMessage={handleEvent}
source={{ uri }}
/>;
};

export default App;

Android Kotlin

activity_main.xml

    <WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"
android:layout_gravity="center_horizontal"/>

MainActivity.kt

import android.content.Context
import android.os.Bundle
import android.webkit.JavascriptInterface
import android.webkit.WebViewClient
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.palenca.connect.databinding.ActivityMainBinding
import org.json.JSONObject

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
private val baseUrl = "https://connect.palenca.com"
private val widgetId = "YOUR_WIDGET"
private val widgetUrl = "$baseUrl?widget_id=$widgetId&primary_color=ea4c89"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.webView.webViewClient = WebViewClient()
binding.webView.settings.javaScriptEnabled = true
binding.webView.addJavascriptInterface(JSBridge(this), "JSBridge")
binding.webView.loadUrl(widgetUrl)
}

/**
* Receive messages from the Webview and pass into native
*/
class JSBridge(private val context: Context) {
@JavascriptInterface
fun onEvent(event: String) {
val jsonObject = JSONObject(event)
println(jsonObject)
Toast.makeText(context, event, Toast.LENGTH_LONG).show()
}
}
}

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>