---
schema_version: "1"
id: 5bc87a428c0ae7f193fee3af8f3c1a3a73c0128f96d3f7ac668055d4f4aabe5e
title: Migrate the Single Call Flow
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/service-cloud/api-cti/guides/migrate-single-call.md
canonical_url: https://developer.salesforce.com/docs/service/api-cti/guide/migrate-single-call.html
source_site: developer.salesforce.com
content_type: documentation
content_hash: 3d8e6d17ae120ec1db28f1153ed8e440090eefb980b8d4479a630eac065972a3
products:
  - Open CTI Developer Guide
  - Service Cloud Developer Content
---

# Migrate the Single Call Flow

This is the connector contract for the most common case: one inbound call, accepted, connected, and ended.

| Lifecycle Moment                      | Direction              | What Happens                                                 |
| ------------------------------------- | ---------------------- | ------------------------------------------------------------ |
| Call rings on backend                 | Connector → Salesforce | `publishEvent(CALL_STARTED, { call })` with `state: RINGING` |
| Rep clicks Accept                     | Salesforce → Connector | `acceptCall(call)` → return `Promise<CallResult>`            |
| Framework publishes                   | (auto)                 | Framework publishes `CALL_CONNECTED` from your `CallResult`  |
| Rep clicks Mute                       | Salesforce → Connector | `mute(call)` → return `Promise<MuteToggleResult>`            |
| Rep clicks End Call                   | Salesforce → Connector | `endCall(call)` → return `Promise<HangupResult>`             |
| Framework publishes                   | (auto)                 | Framework publishes `HANGUP` from your `HangupResult`        |
| Customer hangs up first               | Connector → Salesforce | `publishEvent(HANGUP, { calls: [call], reason })`            |
| ACW timer expires or rep ends wrap-up | Salesforce → Connector | `wrapUpCall(call)` → return `Promise<GenericResult>`         |
