---
schema_version: "1"
id: 8b1f3596e9a524b9b528eef650fc55e72a174880e4aed493d7cedff809c34035
title: Address Migration Roadblocks
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/service-cloud/api-cti/guides/troubleshoot-migration.md
canonical_url: https://developer.salesforce.com/docs/service/api-cti/guide/troubleshoot-migration.html
source_site: developer.salesforce.com
content_type: documentation
content_hash: 7b4d5bc5711d273aca081730926e015a7feb3a47744a8923448ea6dce23f1d12
products:
  - Open CTI Developer Guide
  - Service Cloud Developer Content
---

# Address Migration Roadblocks

Learn about common roadblocks to watch for and ways to address them.

## `voiceCallId` missing from `CALL_STARTED`

Supervisor view shows no call data, and VoiceCall ownership is never assigned. Always populate `callAttributes.voiceCallId`.

## Publishing events from inside a method Salesforce called

This situation causes duplicate events and state machine bugs. Return a Promise with the result; let the framework publish.

## Not following the call scenario diagrams

With the new base connector, events emitted out of context are rejected. Follow the canonical sequences for single-call and multiparty call. The base connector enforces ordering: `CALL_CONNECTED` before `CALL_STARTED`, `PARTICIPANT_ADDED` without an active call, and other out-of-sequence events are dropped. See [Call Scenario Diagrams](https://developer.salesforce.com/docs/atlas.en-us.voice_pt_developer_guide.meta/voice_pt_developer_guide/voice_pt_advanced_call_scenario_diagrams.htm) for details.

## Not respecting `enqueueNextState`

Causes dropped calls when reps go Offline mid-call. Declare `hasPendingStatusChange: true` and honor the flag in `setAgentStatus()`. Offline is the worst status to flip to mid-call; always queue it.

## Running Open CTI adapter and Salesforce Voice with Partner Telephony connector simultaneously

Both will create records on call end. Deactivate the Open CTI adapter before activating Salesforce Voice with Partner Telephony in production.

## Putting screen pop logic in the connector JS

This may work in a single tab, but it breaks on reconnect and multi-tab. Screen pop belongs in an Omni-Channel flow, not the connector.

## Building from scratch instead of cloning the demo connector

The demo connector handles dozens of edge cases in the event lifecycle. Always start from it. See [Clone Before You Build](https://developer.salesforce.com/docs/service/api-cti/guide/clone-before-build.md).

## Modeling VoiceCall as a kind of Task

VoiceCall is a richer, voice-native object. Use it directly; let customers decide whether they also want a Task, a Case, or an Opportunity related to it.
