Integrate Custom CRM with Dialer

Integrate your custom CRM with Symbo's dialer service.

Overview

The purpose of this API documentation is to help you integrate your custom CRM with Symbo's dialer service. If you have any questions please reach out to team@symbo.ai.

Authentication

Symbo uses HMAC Validation to help you authenticate requests made to your application. When a webhook is added, you will be provided with a webhook_secret. Each request from symbo will include its signature via the X-Hmac-Signature header. All that's left is to validate that the signature we sent you matches your webhook secret. Here is an example of how to compare the X-Hmac-Signature to your computed hash:

const crypto = require("crypto")
const signature = '' // Signature from X-Hmac-Signature
const requestBodyString = '' // Stringified body from Symbo request const secret = "abcdefg" // Your webhook_secret 
const hash = crypto.createHmac("sha256", secret)
  .update(requestBodyString).digest("hex") if(hash === signature) console.log('Request verified!')

Accounts & Users

Webhooks are set up at the Symbo Account level. Webhook requests will contain the user_id of the user whose action initiated the request.

Custom CRM Contact Lookup on Dial

Description

To display custom CRM data in Symbo when a number is dialed, you can create an endpoint for Symbo to query when a call is initiated. When a user calls a number, a GET request will be made to your custom endpoint with the number param in the query string in E164 format. Provide your custom endpoint to team@symbo.ai to set up this integration.

GET https://your-custom.com/endpoint?number=+18005551212

A successful match should include a 200 status code and the following body (replacing your data values). If no match is found, return a 404 status code.

Successful response body

{ 
  external_id: "12345", 
  first_name: "Sally", 
  last_name: "Sample", 
  work_email: "email@address.com", 
  personal_email: "personal.email@test.com", 
  work_phone: "+18005551212", 
  mobile_phone: "+18005551213", 
  home_phone: "+18005551214", 
  other_phone: "+18005551215", 
  address_city: "Salt Lake City", 
  address_country: "US", 
  address_state: "UT", 
  address_street: "123 Main", 
  address_street_2: "Ste 100", 
  address_zip: "84010", 
  linkedin_url: "https://linkedin.com/in/sallysample", 
  facebook_url: "https://facebook.com/sallysample", 
  personal_note_1: "This is a personal note", 
  time_zone: "America/Denver", 
  title: "Sales Manager", 
  website_url_1: "https://sample.com", 
  account: { 
    external_id: "9876",
    name: "Sample Company", 
    website_url: "https://sample.com", 
    industry: "Technology"
  }
}

Required response body params

  • external_id (the unique contact id in your CRM)

  • first_name

  • account.name && account.external_id (account name and external_id only required if an account is included in response)

Call Activity Webhook

Description

Symbo can send a webhook to your application with a Call object when a call is completed or updated. Make sure to store the call id in order to receive updates to the call object. Provide your POST webhook endpoint to team@symbo.ai to set up this integration.

Events

call.created

This event occurs immediately after a call is completed.

call.updated

This event occurs when a user updates a call with a disposition or note and when a call recording or transcription becomes available.

Example webhook body

{ 
  id: "ecc25304-ad56-4f73-b75c-77f3165c6c65", 
  object: "Call", 
  description: "call.created", 
  user_id: "35904adb-e732-4ee7-a450-a87dfbe8a7f5", 
  created_at: "023-01-11T20:19:40.000Z", 
  data: { 
    prospect: { 
      id: "f0111f41-53c5-4d39-bfa1-447caa17b732", 
      external_id: "12345", 
      external_source: "custom_crm", 
      first_name: "Sally", 
      full_name: "Sally Sample", 
      last_name: "Sample", 
      linkedin_url: "http://www.linkedin.com/in/sallysample", 
      title: "Sales Manager", 
    }, 
    id: "2dc92583-0376-469b-9909-3a020b75d777", 
    answered_at: "2023-01-11T20:19:25.000Z", 
    call_disposition: "answered_positive", 
    completed_at: "2023-01-11T20:19:29.000Z", 
    created_at: "2023-01-11T20:19:25.000Z", 
    dialed_at: "2023-01-11T20:19:25.000Z", 
    direction: "outbound", 
    from: "+19897189159", 
    from_formatted: "+1 989 718 9159", 
    note: "User entered call note", 
    recording_url: "https://symbo.ai/recording/2dc92583-0376-469b-9909-3a020b75d777", 
    should_record_call: "record", 
    state: "completed", 
    state_changed_at: "2023-01-11T20:19:29.000Z", 
    to: "+15178626434", 
    to_formatted: "+1 517 862 6434", 
    transcription: "Rep Name:<br>This is a test.<br><br>Prospect:<br>Hey.<br><br>", 
    transcription_completed_at: "2022-10-21T17:35:20.000Z",
    total_talk_time_millis: 1399, 
    total_conversation_duration_millis: 2170, 
    rep_talk_time_millis: 830, 
    prospect_talk_time_millis: 569, 
    rep_overall_sentiment: 0, 
    prospect_overall_sentiment: 0, 
    rep_words_per_minute: 72, 
    prospect_words_per_minute: 105, 
    total_silence_time_millis: 0, 
    updated_at: "2022-10-21T17:35:20.000Z", 
  } 
}


Did this answer your question?
😞
😐
😁