StartRisk · Australia

Shared company phone

Matthew Salmon and Mark Scales share one Australian Twilio mobile. Slack #phone is the inbox. This app is v1.5: SMS threads plus simulring + browser softphone. Slack Huddles cannot terminate PSTN.

Env incomplete — see READMEv1.5
How a call is answered
Inbound caller, mobiles, and the browser join one Twilio Conference named by the inbound CallSid.
  1. Caller rings the company +614 number.
  2. Twilio posts a ringing alert to #phone with an Answer button. Matthew + Mark mobiles simulring.
  3. First person to pick up — mobile or the signed Slack /answer/[CallSid] link — starts the conference. Other legs are hung up.
  4. Unanswered calls go to voicemail, posted back into the Slack thread.

Slack Answer buttons use a short-lived HMAC on phone.perdura.com.au (not a Vercel SSO bypass). Open one during a live call, or preview the softphone chrome at /answer/preview.

SMS
One Slack thread per customer number. Replies send SMS. Lines starting with note: stay internal.
Configuration
Presence only — values are never shown. Set these on Vercel after you create the Twilio number, TwiML App, Slack app, and Upstash Redis store.
  • TWILIO_ACCOUNT_SID

    core

    set
  • TWILIO_AUTH_TOKEN

    core

    set
  • TWILIO_PHONE_NUMBER

    core

    set
  • SLACK_BOT_TOKEN

    core

    set
  • SLACK_SIGNING_SECRET

    core

    set
  • SLACK_PHONE_CHANNEL_ID

    core

    set
  • PUBLIC_APP_URL

    core

    set
  • ANSWER_LINK_SECRET

    core

    missing
  • VERCEL_AUTOMATION_BYPASS_SECRET

    core · optional

    set
  • UPSTASH_REDIS_REST_URL or REDIS_KV_REST_API_URL

    store

    set
  • UPSTASH_REDIS_REST_TOKEN or REDIS_KV_REST_API_TOKEN

    store

    set
  • TWILIO_API_KEY

    voice

    set
  • TWILIO_API_SECRET

    voice

    set
  • TWILIO_TWIML_APP_SID

    voice

    set
  • RING_NUMBERS

    voice · optional

    set
  • ANSWER_LINK_TTL_SECONDS

    voice · optional

    missing