pinecall carriers
The org's carrier accounts: Twilio, a SIP peer, WhatsApp.
pinecall carriers list
pinecall carriers show [<account>]
pinecall carriers add twilio --account-sid <AC…> --user <SK…> [--label <name>]
pinecall carriers add sip --username <user> --address <ip or network>… [--outbound-host <host>]
[--outbound-transport auto|udp|tcp|tls] [--outbound-username <user>] [--label <name>]
pinecall carriers add whatsapp --phone-number-id <id> [--label <name>]
pinecall carriers drop [<account>]
A carrier account is where the org's numbers live, and the org holds as many as it has: a
Twilio account, a SIP peer (its own PBX, or a carrier with no API here), a WhatsApp number at
Meta. An account is the org's, one for both environments; a number it owns is routed to an agent with
numbers import, in the environment it should answer in. So bringing a Twilio number to an
agent is two verbs:
$ pinecall carriers add twilio --account-sid AC0123… --user SK4567… --label Clínica
Twilio secret (the API key's, or the auth token):
kept: AC0123… · twilio · Clínica
route one of its numbers: `pinecall numbers import <+34…> --agent <slug>`
$ pinecall numbers import +34910000000 --agent clinica-norte
Every secret is read on stdin, never from the command line, where ps and the shell's history
would keep it: typed with nothing echoed on a terminal, or piped one per line —
printf '%s\n' "$TWILIO_SECRET" | pinecall carriers add twilio …. A SIP peer reads its password,
and its outbound password on a second line when --outbound-username is given. Nothing is printed
back: the gateway seals each secret under the platform's vault key and answers the account by its id.
- Twilio.
--useris an API key SID (make one at Twilio → Account → API keys, and revoke it there any time) or the account SID again, with the auth token as the secret. The pair is tried against Twilio before anything is kept, so a pair Twilio refuses isTwilio refused these credentialsand exit 1. With a Twilio account the platform finds the trunk that points at it, or makes one, when a number is imported. - A SIP peer.
--addressis each network it calls from, repeated: an IPv4 address or a network no wider than a/24, public. Each one waits for the operator to approve it before 5060 opens to it;showprintswaiting,approvedorrefusedbeside each. The four--outbound-*flags say where the platform dials it; unsaid, the platform dials with the pair it registers with. - WhatsApp.
--phone-number-idis the number's id at Meta, and the access token is the secret. Meta is asked for that number with that token before anything is kept, so an id or a token Meta does not open isMeta does not open WhatsApp number <id> with this token: …and exit 1.
add with an account the org already holds replaces its secret: that is how a key is rotated.
An account's id is its own: Twilio's account SID, the peer's username, Meta's phone number id.
list is every account, oldest first, one line each with its id; show is one, the org's only
account or the one named; drop forgets one, and with several the id is required. Its numbers
stay routed until each is let go with numbers drop, so forgetting an account never silences a
line by surprise. The same accounts are the console's Numbers screen, Add a number —
the console — and the REST endpoints are
phone numbers, "The accounts".