Integrate Sinch In-App Voice and Video SDK for real-time calling in Android, iOS, or JavaScript apps. Use when the user mentions In-App Calling, VoIP integration, WebRTC with Sinch, app-to-phone calling, video calling, or building voice/video features in a mobile or web app.
From sinch-claude-pluginnpx claudepluginhub sinch/sinch-plugins --plugin sinch-claude-pluginThis skill uses the workspace's default tool permissions.
assets/SinchJWT.swiftassets/jwt-helper-andorid/FakeJWTFetcher.ktassets/jwt-helper-andorid/Hmac.javaassets/jwt-helper-andorid/JWT.javaassets/jwt-helper-andorid/JWTFetcher.ktassets/jwt-helper.jsreferences/android.mdreferences/ios.mdreferences/js.mdGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
Real-time voice and video SDK for Android, iOS, and JavaScript (Web). Connects to Sinch's cloud for signaling and routing.
The user needs a Sinch account with an application key and secret from the Sinch Build Dashboard.
Detect the platform from the user's project (language, build system, framework):
references/android.mdreferences/ios.mdreferences/js.mdWalk through the integration steps in the platform reference. Go step by step — confirm each step is in place before moving to the next.
Ask about auth approach: Can the Application Secret be embedded (prototyping only) or must JWTs come from a backend (production)?
Ask about call types: Which types does the user need? This determines which sections to cover.
For Phone-to-App / SIP-to-App: The user needs a backend ICE callback handler. See backend setup below.
Receiving inbound PSTN or SIP calls requires:
connectMxp:{
"action": {
"name": "connectMxp",
"destination": {
"type": "username",
"endpoint": "target-user-id"
}
}
}
| Symptom | Likely cause | Fix |
|---|---|---|
onClientFailed / clientDidFail | JWT issue — token missing, expired, wrong secret, or malformed | Verify JWT generation: correct app key + secret, kid matches key ID, token not expired. See auth section in platform reference |
onClientFailed / clientDidFail | Invalid app key or wrong environment host | Verify key in Dashboard; check environmentHost matches your region |
| No incoming calls (JS) | Managed push not enabled | Call sinchClient.setSupportManagedPush() before starting — required even for the caller side |
| No incoming calls (Android) | FCM misconfiguration | Verify FCM credentials in Dashboard ("In-app Voice & Video SDKs" → "Google FCM Identification"); check that the device receives FCM tokens |
| No incoming calls (iOS) | APNs push not configured or token stale | Verify push certificate/key in Dashboard; ensure registerPushNotificationData is called with a fresh device token |
| No incoming calls (general) | SinchClient not running on the receiver's device | The receiver's app must have an active, started SinchClient to receive calls. Verify start() completed successfully |
| App-to-Phone fails immediately | Missing CLI (caller ID) | Set callerIdentifier / cli with a Sinch number |
| Audio only in foreground (iOS) | CallKit not reporting calls | Report outgoing calls to CallKit for background audio |
If the above steps don't resolve the issue, instruct the user to contact Sinch Support with their app key, platform, and a description of the problem.
Set environmentHost when creating the Sinch client:
| Endpoint | Region |
|---|---|
ocra.api.sinch.com | Global (auto-routed) |
ocra-euc1.api.sinch.com | Europe |
ocra-use1.api.sinch.com | North America |
ocra-sae1.api.sinch.com | South America |
ocra-apse1.api.sinch.com | South East Asia 1 |
ocra-apse2.api.sinch.com | South East Asia 2 |