Slack and webhook delivery

5 min read
Integrations
Updated September 2026
PhoneShield team

PhoneShield team

The people who build and run PhoneShield

Written and kept current by the team behind PhoneShield, a sister company of Byte Federal, whose staff spent years meeting scam victims at cryptocurrency ATMs with the scammer still on the line.

Introduction

You forward your phone to your PhoneShield number. Known scam numbers are refused before the call is answered, favorites ring straight through, and everyone else meets the front desk voice, which works out what the caller wants and then, depending on your mode (Open, Do not disturb, or Receptionist), rings you, hands the caller to your assistant Nora, takes a message, or declines. Call history records each ending as Blocked, Shielded, Rang you, Message, or Assistant.

Message and Assistant leave you a short note written from what the caller said. Besides Telegram and email, PhoneShield can post that note to a Slack channel or send it to a webhook on your own server. Slack is the quick way to keep a small team in the loop; the webhook is for anything you build yourself.

Same note, every channel

Every delivery carries the same note: a title, the summary, the caller’s number, the callback number when one was given, and the reason the caller gave. Connect as many channels as you like; each gets the same note, and it lands in your Messages feed regardless.

What each channel carries

PhoneShield writes one note per call and sends it to each connected channel in turn: Telegram, then email, then the webhook, then Slack. If one fails, the next is still attempted.

Telegram

A message from your own bot to the chat or group you chose: the title in bold, then the note text.

Email

From notifications@phoneshield.ai. The subject is the title; the body is the note, as plain text and as a simple HTML layout.

Slack

One post to one channel: a header with the title, the note with each line on its own row, a divider, and a PhoneShield footer with the time.

Webhook

A signed JSON POST with five fields: title, message, timestamp, callSid and outcome, plus a call object with the transcript when you ask for it. The message field holds the same note text.

Whatever you connect, the Messages feed keeps every note with its callback number and a done state. The channels reach you where you already are; the feed is the record.

When a delivery happens

Delivered

  • The front desk took a message (Message), including calls that rang you first and got no answer
  • Nora saved a message during a conversation, or finished one without a message (Assistant); the note says which

Not delivered

  • Blocked numbers, refused before answering
  • Calls politely declined at the front desk (Shielded)
  • Favorites and calls you answered; you spoke with them yourself

These still appear in call history with their outcome and reason.

The delivery goes out once the call has ended and the note is written, usually within seconds. Assistant calls wait for the final transcript, so they lag a little.

Slack: setup and what you see

  1. Create an incoming webhook in Slack

    In Slack, open your workspace’s apps, create (or open) an app, enable Incoming Webhooks, and add a webhook to the channel you want. Copy the URL Slack gives you and treat it like a password: anyone who has it can post to that channel.

  2. Open Integrations in your PhoneShield dashboard

    Find the Slack card and click Connect (or Edit settings if it is already connected).

  3. Paste the Webhook URL

    This is the field that matters. Channel and Bot Username are sent along with each post; Slack honors them only on legacy incoming webhooks. On a webhook made through an app, the channel is fixed by the webhook you created and the name shown is set in Slack’s app settings, and the two fields are harmless.

  4. Save integration

    The card shows as Configured and gains a Send test button. From now on every message and assistant call is posted to that channel.

What the post looks like

  • A header with the title, for example “PhoneShield message from Jane Doe” or “PhoneShield: Nora took a call”. The caller’s name appears only when it was heard on the call.
  • The note: the summary, then Caller:, Callback: and Reason given: on their own lines. Caller is the number that called, or “an anonymous number” when caller id was withheld. Callback appears only when the caller gave a number. Reason given appears when the front desk understood why they called.
  • A divider and a footer reading PhoneShield with the time of the post, taken from the server’s clock, so it may not match your time zone.

If a post stops arriving

Slack revokes an incoming webhook URL when the app that owns it is deleted or reinstalled. Create a fresh webhook, paste the new URL under Edit settings, save, and send a test.

Webhook: setup and payload

  1. Open Integrations and choose Webhook

    Click Connect on the Webhook card.

  2. Enter your endpoint URL

    An HTTPS URL with a valid certificate that accepts JSON. HTTP Method is POST unless you choose PUT. Whatever you type in Authorization Header is sent as the request’s Authorization header, word for word. Include the full transcript in the payload adds the conversation to each delivery; off by default.

  3. Save integration

    The first save creates a signing secret, shown under Edit settings, which your developer uses to check that each request really came from PhoneShield. From then on every message and assistant call is sent to that URL. Use Send test to confirm it can be reached.

The request is a JSON POST (or PUT) with Content-Type: application/json, a User-Agent: PhoneShield-Webhook/1 header, your Authorization value if set, and a signature header. A front-desk message looks like this:

{
  "title": "PhoneShield message from Jane Doe",
  "message": "Jane needs the March invoice resent to her new address.\nCaller: +15551234567\nCallback: +15559876543\nReason given: billing question",
  "timestamp": "2026-09-25T15:23:47.000Z",
  "callSid": "telnyx:v3:MdI91X4lWFEs7IgbBEOT9M4A",
  "outcome": "note"
}

Fields

  • title: what happened, with the caller’s name when known. “PhoneShield message” is a message taken by the front desk or saved by Nora; “PhoneShield: Nora took a call” is an assistant conversation with no saved message.
  • message: the summary on the first line, then Caller:, Callback: when the caller gave one, and Reason given: when they stated one, separated by newlines
  • timestamp: when the delivery was sent, ISO 8601
  • callSid: the call id behind the call in your history; it tells two deliveries apart
  • outcome: note when the front desk took the message, escalate when Nora handled the call
  • call: only when “Include the full transcript in the payload” is checked; the caller’s number and name, the summary, callback number, outcome, reason, and the transcript turn by turn

For developers

Ten seconds per attempt, one retry after a 5xx, a 429, a timeout or a connection error, and an HMAC-SHA256 signature on every request. Verifying it, idempotency and a working receiver are in the developer guide.

Routing to a team or a ticketing tool

There is one Slack destination and one webhook per account, and every note goes to both. PhoneShield has no rule that says “billing goes here, everything else goes there”; routing happens on the receiving side.

A shared channel

Point the Slack webhook at a channel such as #phone the whole team can see. Whoever is free reacts to the post to claim it, then marks the note done in the Messages feed once the call is returned. The first line of the post is enough to tell a sale from a customer waiting on something.

A ticketing or helpdesk tool

Most helpdesk tools open a ticket from an inbound email or webhook. Two paths work without code:

  • Connect the email channel using the tool’s inbound address. The subject becomes the ticket title and the note becomes the body.
  • If the tool accepts a plain JSON webhook with arbitrary fields, paste that URL as the PhoneShield webhook and map title and message on the tool’s side.

If it insists on its own field names or an API key, you need a short script in between; the developer guide has one.

A note on what the note is

The summary and the reason are written by a model from what the caller said. They are for a person to read and act on; do not wire them into anything that takes actions on its own.

Handling an owed callback

Most notes exist because someone wants to hear back from you. PhoneShield gives you the numbers you need and a place to track whether you have called.

  1. Read the Callback line first. When present, that is the number the caller asked for, even if it differs from the number they called from. When absent, the Caller line is your only number, and “an anonymous number” means you cannot call back.
  2. Call from your own phone. The PhoneShield number is where your calls are forwarded to, not a line you dial out from.
  3. Mark it done in the Messages feed. The feed’s Open filter then shows only what is still waiting on you.
  4. In a team channel, say who took it. A reply or reaction on the Slack post stops two people ringing the same customer; marking the note done is what closes it.

Slack and the webhook do not know about done

Marking a note done does not edit the Slack post and sends nothing to the webhook. If your ticketing tool needs a close event, close the ticket there as well.

Using the test button

Once an integration is saved, its card gains a Send test button. It sends a real delivery with fixed sample content so you can see the shape of a post before a customer calls.

What the test contains

  • Title: “Test Notification”
  • Message: “This is a test notification for your slack integration.” (or webhook)
  • Sample details: caller Test Caller, contact test@example.com, purpose “Testing notifications”, a two-minute duration, a one-sentence summary
  • Call id TESTSID12345

How it differs from a real delivery

  • In Slack, the test adds a block of From, Contact, Purpose and Duration fields and a Summary section that real posts do not have
  • On the webhook, the test body carries extra fields (callerName, callerContact, callPurpose, duration, summary) and no outcome. Build on the five real fields.

The dashboard shows the real result: the HTTP status the destination answered with, or the error (for example “timed out after 10 seconds”). A 4xx or 5xx is shown as a failure, so you rarely need the server log. The usual causes are a revoked Slack URL, an endpoint that is not reachable from the internet or has an invalid certificate, or a receiver that rejected the signature.

Notifications never block a call

If a channel fails, the call is still handled and the note still lands in your Messages feed and call history. A webhook that answers 5xx or 429, times out or cannot be reached gets one more try; a 4xx is final and is logged.

What is not included

Being straight about it

PhoneShield does not connect to CRMs, calendars, helpdesks or Zapier directly, and there is no SMS, WhatsApp or mobile app channel. For those, the webhook plus a short script on your side usually takes an afternoon.

There is no per-channel filtering, and one Slack destination and one webhook URL per account.

Webhook requests are signed, but only your receiver checks the signature; PhoneShield cannot tell whether it does. Keep the URL and the signing secret private, and have your developer verify every request.

Ready to try PhoneShield?

Start screening your calls today and take back control of your phone.