Skip to main content
This is the pattern almost every integration follows, whether your CRM is home-grown, a database behind your website, or a hosted CRM with webhooks and an API.

1. Trigger a call when a lead arrives

Whatever creates a lead (a form, an import, an ad integration) also calls Telleo. Use the CRM record id twice: as contact.external_id, to find the record again, and as the Idempotency-Key, so a retried job never calls the lead twice.
Speed matters. A lead called within minutes of their enquiry is far more likely to pick up and to remember why. Trigger the call from the same request that saves the lead, or from a job that runs within seconds, not from a nightly sync.

2. Write the result back

Your webhook receives call.completed or call.not_connected for every call. Find the record by data.contact.external_id, then store what you need:
Use the disposition names configured on your agent; they appear in the dashboard and in every outcome.

3. Retry calls that did not connect

Telleo does not redial on its own. When you get call.not_connected with no_answer or busy, decide on your side whether to try again, and create a new call later, for example 2 hours later, then the next day. Use a new Idempotency-Key for each attempt (lead-8812-attempt-2). Per-number limits still apply, so a bug that retries in a loop cannot ring someone all day.

4. Stay in sync

Webhooks are the main path. As a safety net, run a small job every few hours that lists recent calls and fills any gaps:

Checklist

  • The key lives on your server, never in the browser.
  • Every call carries external_id and an Idempotency-Key.
  • The webhook verifies Telleo-Signature and answers 2xx quickly.
  • Repeated event ids are ignored.
  • call.not_connected is handled, not only call.completed.