Primeros pasos
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-incoming-call-kit`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/incoming-call-kit/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Instalación
Sección titulada “Instalación”Puedes usar nuestro setup asistido por IA para instalar el plugin. Añade las skills de Capgo a tu herramienta de IA con el siguiente comando:
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsLuego usa el siguiente prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-incoming-call-kit` plugin in my project.Si prefieres la configuración manual, instala el plugin ejecutando estos comandos y sigue las instrucciones de cada plataforma:
-
Instala el paquete
Ventana de terminal bun add @capgo/capacitor-incoming-call-kit -
Sincronizar proyectos nativos
Ventana de terminal bunx cap sync -
Elige tu fuente de llamada Decide si el evento incoming-call proviene de tu backend, de un SDK como Twilio o Stream, o de una ruta de push nativa como FCM o PushKit.
Inicio rápido
Sección titulada “Inicio rápido”import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.showIncomingCall({ callId: 'call-id-123', callerName: 'caller',});console.log(result);Ejemplo: endCall
Sección titulada “Ejemplo: endCall”import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.endCall({ callId: 'call-id-123' });console.log(result);Ejemplo: endAllCalls
Sección titulada “Ejemplo: endAllCalls”import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.endAllCalls();console.log(result);Errores comunes
Sección titulada “Errores comunes”- Permisos: llama a
checkPermissions()luegorequestPermissions()cuando sea necesario. - Listeners: elimina los handles cuando se desmonten las pantallas.
- Fuente de verdad: confianza
src/definitions.tsen el repo de GitHub.
Cómo encaja la integración
Sección titulada “Cómo encaja la integración”Este plugin solo gestiona la presentación nativa de la llamada entrante. Tu app sigue siendo la dueña del transporte, la autenticación y la sesión de medios.
El patrón común en producción es:
- Tu backend o el SDK de llamadas emite un evento de timbrado.
- Tu app llama a
showIncomingCall(). - El plugin muestra la interfaz nativa de llamada entrante.
callAcceptedle indica a tu app que se una a la sala o sesión VoIP real.callDeclined,callEnded, ocallTimedOutle indica a tu app que limpie el estado remoto.
Integración mínima
Sección titulada “Integración mínima”import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
await IncomingCallKit.requestPermissions();await IncomingCallKit.requestFullScreenIntentPermission();
await IncomingCallKit.addListener('callAccepted', async ({ call }) => { console.log('Accepted', call.callId, call.extra); // Start or join your real call session here.});
await IncomingCallKit.addListener('callDeclined', ({ call }) => { console.log('Declined', call.callId); // Tell your backend or SDK that the user declined.});
await IncomingCallKit.addListener('callTimedOut', ({ call }) => { console.log('Timed out', call.callId); // Clear ringing state in your backend or SDK.});
await IncomingCallKit.showIncomingCall({ callId: 'call-42', callerName: 'Ada Lovelace', handle: '+39 555 010 020', appName: 'Capgo Phone', hasVideo: true, timeoutMs: 45_000, extra: { roomId: 'room-42', callerUserId: 'user_ada', }, android: { channelId: 'calls', channelName: 'Incoming Calls', showFullScreen: true, }, ios: { handleType: 'phoneNumber', },});Opciones importantes
Sección titulada “Opciones importantes”callId: identificador estable reutilizado después conendCall()timeoutMs: timeout best-effort de no respuestaextra: JSON arbitrario devuelto en los payloads del listenerandroid.channelIdyandroid.channelName: ajuste del canal de notificaciones de Androidandroid.showFullScreen: solicita la activity Android de llamada entrante a pantalla completaios.handleType: eligegeneric,phoneNumber, oemailAddresspara CallKit
Gestión de llamadas activas
Sección titulada “Gestión de llamadas activas”const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({ callId: 'call-42', reason: 'remote-ended',});
await IncomingCallKit.endAllCalls({ reason: 'session-reset',});Modelo de eventos
Sección titulada “Modelo de eventos”incomingCallDisplayed: la interfaz nativa se mostró correctamentecallAccepted: el usuario aceptó desde la interfaz nativacallDeclined: el usuario rechazó antes de unirsecallEnded: tu app o la plataforma finalizaron la llamadacallTimedOut: la llamada permaneció sin responder hastatimeoutMs
Cada evento incluye los datos normalizados de call payload normalizado y tu extra object.
Notas de plataforma
Sección titulada “Notas de la plataforma”- Lee la Guía para iOS antes de integrar CallKit en un flujo de PushKit o APNs.
- Lee la Guía para Android antes de depender de full-screen intents en Android 14 y versiones posteriores.
- Web no es compatible.
Continúa desde Getting Started
Sección titulada “Continúa desde Primeros pasos”Si estás usando Primeros pasos para planificar las operaciones del dashboard y de API, conéctalo con Uso de @capgo/capacitor-incoming-call-kit para la capacidad nativa en Uso de @capgo/capacitor-incoming-call-kit, Resumen de API para los detalles de implementación en API Overview, Introducción para los detalles de implementación en la Introducción, Claves de API para los detalles de implementación en las claves de API, y Dispositivos para el detalle de implementación en Devices.