How does the Salesforce integration with MyOperator work (inbound + outbound calls, auto‑logging, recordings)?

How does the Salesforce integration with MyOperator work (inbound + outbound calls, auto‑logging, recordings)?

🎯 Goal: Connect MyOperator telephony with Salesforce so you can: (1) auto‑create/update leads on inbound calls, (2) initiate outbound calls from Salesforce, and (3) auto‑log call activities with recording links—without manual entry.

📚 Table of contents


🧭 When & why to use this

  • 📥 Inbound: create/update leads automatically when customers call your MyOperator number.
  • 📤 Outbound: click‑to‑call from Salesforce records and log the outcome automatically.
  • 📝 Auto logging: every call—incoming or outgoing—is logged as a Salesforce activity with the metadata you need.

🧰 What you get (features)

  • 🧪 Auto Lead creation for new callers.
  • 🗂️ Activity logging under the record (e.g., Lead/Account) in Open Activities.
  • 🔊 Call metadata captured: duration, status, start/end time, and recording URL for QA.
  • 📞 Outbound calling via a Make Call action/button from Salesforce.
  • No live call pop‑up (by design); details are logged automatically after the call.

🔝 Back to top


📋 Prerequisites

  • Salesforce System Administrator permission (Lightning Experience)
  • MyOperator admin access
  • Company ID and, if required by your plan, API Token/Secret for MyOperator
  • ✅ Decision: Create leads for unknown numbers? (Yes/No)
💡 Tip: Keep a test customer number and an agent number ready for validation.

🔝 Back to top


🧩 Architecture at a glance

Flow

Trigger

Where you configure

What happens

Inbound

Customer calls your MyOperator number

MyOperator (In‑/After‑Call push) → Salesforce (endpoint/connector)

Lead/contact is created/updated; Activity logged with metadata & recording URL.

Outbound

Click‑to‑call in Salesforce

Salesforce (action/button) → MyOperator (outbound handler)

Call is placed; outcome + recording are logged back to Salesforce.


🧭 Choose your setup path

  • Path A — Official connector (recommended): If your MyOperator account has the Salesforce connector panel, follow it to paste your Salesforce endpoint and enable logging. (No code.)
  • Path B — Custom endpoint (advanced): Use a Salesforce Site + Apex REST (or middleware) to receive MyOperator webhooks. Keep the keys/field names from the table below.
If unsure which path you have, start with Path A. You can switch later without data loss.

🔝 Back to top


Quick setup (copy‑paste)

Method: POSTContent‑Type: application/json

Salesforce receiving endpoint (example) (paste your actual URL from Path A or your Site):

https://<your-domain>.my.salesforce-sites.com/services/apexrest/myoperator/call

Recommended JSON keys (map these in MyOperator → Parameters):

{  "callerNumber": "9876543210",  "agentNumber": "9988776655",  "callStartTime": "2025-08-29T10:07:12Z",  "callEndTime": "2025-08-29T10:10:19Z",  "status": "connected",  "durationSec": 187,  "recordingUrl": "https://files.myoperator.com/rec/abcd1234.mp3"}
✅ Keep key names consistent—your Salesforce Flow/Apex will rely on them.

🔝 Back to top


🪜 Step‑by‑step: Configure in MyOperator

  1. Sign in to MyOperator with an admin account.
  2. Go to Integrations → Salesforce (or Manage → API Integration → Webhook).
  3. Method = POST, Content‑Type = JSON.
  4. Paste your Salesforce receiving endpoint (from Quick setup).
  5. Add parameters and map to the recommended keys:
    • callerNumberCustomer Number (no country code)
    • agentNumberUser/Agent Number
    • callStartTimeCall Start Time
    • callEndTimeCall End Time
    • statusCall Status
    • durationSecCall Duration (seconds)
    • recordingUrlFile URL
  6. Save.
🎯 Expected result: After connected calls, MyOperator posts JSON to your Salesforce endpoint; Salesforce creates/updates the record and logs an Activity with metadata + recording link.

🔝 Back to top


🏷️ Step‑by‑step: Configure in Salesforce

Path A — Using the connector

  1. In Salesforce, open App Launcher → MyOperator (or Telephony) app.
  2. Locate Integration/Settings and copy your Receiving URL (or complete the OAuth/connect flow if prompted).
  3. Ensure CRM permissions on the connected integration user (CRUD on Leads/Contacts/Tasks).
  4. (Optional) Add the Make Call button/action to Lead and Contact page layouts.

Path B — Custom endpoint (Sites + Apex REST)

  1. Setup → Sites: create a public Site domain (if you don’t already have one).
  2. Create an Apex REST service (e.g., /services/apexrest/myoperator/call) that upserts Leads by callerNumber and logs a Task with the metadata.
  3. Profile/Permission Set for the Site Guest User: allow access to the REST class and required objects/fields.
  4. Create a Flow (or Apex) to map payload → Lead/Contact + Task.
  5. Add a Quick Action (e.g., Make Call) on Lead to launch outbound via MyOperator.
🗒️ Don’t want to code? Use middleware (e.g., Flow + External Services, MuleSoft, or an HTTPS bridge) to accept MyOperator’s POST and write to Salesforce.

🔝 Back to top


🧪 Validate end‑to‑end

A) Inbound test

  • Place a test inbound call to your MyOperator number and answer it.
  • Expected in Salesforce: a new or updated Lead; an Activity (Task) with duration/status/timestamps and recording URL.

B) Outbound test

  • On a Lead, click Make Call and complete a short call.
  • Expected: Activity is logged automatically with outcome + recording link.

C) Check logs

  • In MyOperator, view Webhook Delivery/Logs and confirm HTTP 200 OK.

D) Manual ping (optional)

curl -X POST \  -H "Content-Type: application/json" \  -d '{    "callerNumber":"9876543210",    "agentNumber":"9988776655",    "callStartTime":"2025-08-29T10:07:12Z",    "callEndTime":"2025-08-29T10:10:19Z",    "status":"connected",    "durationSec":187,    "recordingUrl":"https://files.myoperator.com/rec/abcd1234.mp3"  }' \  https://<your-domain>.my.salesforce-sites.com/services/apexrest/myoperator/call

🛠️ Troubleshooting

No data appears in Salesforce

  • ✅ Confirm POST + JSON in MyOperator.
  • 🔗 Ensure the Salesforce endpoint URL is correct and reachable from the public web.
  • 🔐 Verify access: Site Guest User (Path B) or Integration User (Path A) has object/field permissions.

Outbound “Make Call” does nothing

  • 🧭 Confirm the MyOperator outbound handler is enabled in your MyOperator → Salesforce panel.
  • 🔁 Re‑authenticate any connector session (Path A), then retry.

Recording URL missing

  • ⏱️ Very short calls may not generate recordings.
  • 🎯 Ensure your process waits for After‑Call updates before logging the recording link.

Duplicate Leads

  • 🧩 Normalize phone format (10‑digit local) before matching; consider E.164 formatting in your Flow/Apex.

4xx/5xx in MyOperator Logs

  • ⌛ Check for timeouts/firewalls. Allowlist your Salesforce Sites domain.
  • 🧪 Retry with the Manual ping above and inspect the response.

🔝 Back to top


⚖️ Edge cases & limitations

  • 📞 No live call pop‑up in Salesforce; activity is logged after the call.
  • 🌐 Network policies can block webhooks—allowlist relevant domains.
  • 🕵️ Masked numbers may reduce matching accuracy.
  • 🕒 Time zones: prefer ISO‑8601 (UTC) timestamps in payload.

🔝 Back to top


🔒 Security & privacy

  • 🔑 Store API tokens and webhook URLs in a secure vault.
  • 🙈 Don’t share raw recordings or URLs publicly.
  • 🗄️ Follow your org’s PII and call‑recording retention policy.

🔝 Back to top


🧹 Rollback / disable

  • In MyOperator → Integrations, disable or remove the Salesforce endpoint.
  • In Salesforce, deactivate the Site/Flow/Apex endpoint or the connector app.
  • Document the rollback in your change log.

🔝 Back to top


🆘 Escalation & support

Collect before raising a ticket

  • 🧾 MyOperator Webhook Delivery/Logs screenshots with timestamps.
  • 🔗 The exact endpoint URL and any sample payload (mask PII).
  • 🆔 Company ID, a sample Call ID, and the test phone numbers.

Who to contact

  • 📮 MyOperator Support: support@myoperator.co
  • 🧭 Salesforce Support: via Help → Get Support (provide org ID and the failing endpoint).

What to say

“We integrated MyOperator → Salesforce via POST JSON. We observe . Here are logs, timestamps, endpoint URL, and sample payload.”

🔝 Back to top


🔗 Related articles

  • Verify webhook delivery & logs in MyOperator/kb/myoperator/manage-webhooks
  • Salesforce: Create & secure a Sites endpoint/kb/salesforce/sites-rest-endpoint
  • Phone number normalization in Salesforce/kb/salesforce/phone-normalization

🔝 Back to top


🧱 Structured data (HowTo + FAQPage)

HowTo

<script type="application/ld+json">{  "@context": "https://schema.org",  "@type": "HowTo",  "name": "Integrate MyOperator with Salesforce (inbound, outbound, auto-logging)",  "totalTime": "PT35M",  "step": [    {"@type": "HowToStep", "name": "Configure in MyOperator", "text": "Set POST + JSON and map callerNumber, agentNumber, timestamps, status, durationSec, recordingUrl.", "url": "#mo-steps"},    {"@type": "HowToStep", "name": "Create Salesforce receiving endpoint", "text": "Use connector (Path A) or Sites + Apex REST (Path B). Copy the endpoint URL.", "url": "#sf-steps"},    {"@type": "HowToStep", "name": "Validate", "text": "Place inbound & outbound test calls; confirm 200 OK in MyOperator logs.", "url": "#validate"}  ],  "tool": [    {"@type": "HowToTool", "name": "MyOperator Dashboard"},    {"@type": "HowToTool", "name": "Salesforce"}  ],  "image": {"@type": "ImageObject", "url": "./images/myoperator-salesforce-settings.png", "caption": "MyOperator → Salesforce mapping (POST + JSON)."}}</script>

FAQPage

<script type="application/ld+json">{  "@context": "https://schema.org",  "@type": "FAQPage",  "mainEntity": [    {"@type": "Question", "name": "Is there a live call pop-up in Salesforce?", "acceptedAnswer": {"@type": "Answer", "text": "No. Calls are logged automatically after completion with metadata and a recording link."}},    {"@type": "Question", "name": "Do I need code?", "acceptedAnswer": {"@type": "Answer", "text": "Use the official connector when available (no code). Otherwise, create a Sites + Apex REST endpoint or use middleware."}},    {"@type": "Question", "name": "What fields are logged?", "acceptedAnswer": {"@type": "Answer", "text": "Duration, status, start/end time, and a recording URL, along with the caller/agent numbers."}}  ]}</script>

🔝 Back to top