Phone numbers for omnichannel partners: inbound and outbound calls with a Wetel agent (staging)
This content is not available in your language yet.
1. What you can demo next week and what you cannot
Section titled “1. What you can demo next week and what you cannot”| Scenario | Status | Who runs it |
|---|---|---|
| Inbound call to a US LiveKit number | Verified on staging (a real call answered by the AI, 2026-11-04) | Wetel provisions the number and dispatch rule |
| Inbound call via carrier SIP trunk (Telnyx or Twilio, US) | Designed, not yet run end to end (to verify) | Wetel sets up the trunk; The partner dials in |
| Outbound call to a consented number | Verified on staging through a Telnyx trunk (a real call answered, the AI spoke, 2026-11-04) | A Wetel engineer triggers the call manually |
| Outbound call triggered by a partner API | Not built | The partner-facing start-a-phone-call API is not deployed |
| Browser or app voice call via GraphQL | Working on staging | Partner server calls sdkStartVoiceCall with an API key |
| Inbound call to a Malaysian (+60) number | Not available | Numbers are in an advanced order |
| AI voice on WhatsApp calls | Not available | Requires a media bridge that is not built |
Choose your setup
Section titled “Choose your setup”Three choices decide what you build. They are independent.
1. Does an AI answer, or only people?
| Mode | What it is | Needs Wetel? | Status |
|---|---|---|---|
| People only | Normal calls between your staff and customers on a carrier number. | No. Use the carrier (for example Telnyx) and your own softphone or app. | Outside Wetel. Wetel adds nothing here. |
| AI answers | A Wetel AI agent talks to the caller, with a person as the fallback. | Yes. | Staging, run by Wetel. |
| AI first, then a person | The AI qualifies, then a person takes over. | Yes, plus a transfer path. | Not built: today the agent only offers a handover verbally. |
2. Which AI voice engine? Both are meant to be selectable per agent.
| Engine | Reply time | Workflow, guardrails, tools | Transcript in Wetel | Status |
|---|---|---|---|---|
| Speech-to-speech (Gemini Live) | about 1.4 to 1.8 s | No: instructions only | No | Staging, preview model |
| With the Wetel workflow (speech recognition, workflow, speech synthesis) | about 3.5 s today | Yes: the same published workflow as chat | Yes: the call is a session | Staging. A streaming speech recognizer is being built to cut the wait. |
Choose speech-to-speech for the fastest feel and simple questions. Choose the workflow engine when the call must follow guardrails, use tools or approvals, or be stored as a session.
3. Whose numbers?
| Option | How | Status |
|---|---|---|
| Wetel’s staging numbers | Dial a US number Wetel gives you for a session. Nothing to register or build. A free inbound US number and a carrier number that can also place outbound calls exist. | Works on staging today. |
| Your own carrier numbers | Buy numbers from a carrier (Telnyx recommended) and point an inbound SIP connection at Wetel’s SIP endpoint. We give you the endpoint and the matching trunk. | Wetel side verified for one number; a second tenant is to verify. |
| Your own LiveKit project | Run the Wetel voice worker against your project. | Not offered yet. |
For the recommended stack, use one carrier (Telnyx) for all numbers in and out, and LiveKit Cloud for the media and the agent. A second carrier is only a fallback.
Getting a Telnyx number without registering yourself
Section titled “Getting a Telnyx number without registering yourself”Registering with a carrier means identity checks, a funded balance and, for some countries, company documents. You can skip that for a test. Two ways, and neither involves sharing an API key.
| Way | Who owns the number and the bill | What you do | Best for |
|---|---|---|---|
| Wetel provisions a test number | Wetel | Ask for a session. Wetel assigns a number from its own account and connects it to your test agent. | A first demo, a short pilot |
| Your own Telnyx account | You | Register, fund, buy a number, then follow the carrier SIP trunk recipe below with the endpoint from Wetel. | Production, your own brand |
Why Wetel does not hand out its carrier API key. A Telnyx API key is not scoped: whoever holds it can buy or release numbers, change connections and spend the account balance. A key shared with a partner team would be a key to everything on the account, so a leak or a mistake affects every other user of it. Instead:
- For a test, Wetel creates the connection and number for you, names them after your project, and caps spend on the outbound profile (destinations, a daily limit).
- For anything longer, use your own Telnyx account. Your balance, your numbers, your key.
- If Wetel later offers per-partner Telnyx sub-accounts, each partner gets its own key and balance limit. This page will say so when it exists.
What you still need to build yourself is listed in section 6. Never paste a carrier key into chat, a ticket or a repository; send it only through the secret channel Wetel gives you.
2. How a phone call reaches a Wetel agent
Section titled “2. How a phone call reaches a Wetel agent”flowchart LR A[Caller dials\nphone number] --> B[Carrier\nTelnyx / Twilio / LiveKit] B -->|SIP INVITE| C[LiveKit SIP endpoint] C --> D[Dispatch rule matches\nwetel-voice-demo-inbound] D --> E[LiveKit creates\na room per caller] E --> F[Voice worker joins room] F --> G[STT Gemini\n+ Agent brain\n+ TTS Google] G -->|Audio back| EThe caller number is hidden from the room (hide_phone_number: true). Rooms use a fixed prefix. The same worker handles browser calls and phone calls. Barge-in is supported. Audio codec from PSTN is typically PCMU 8 kHz (narrowband, lower quality than web voice).
3. Inbound recipe A: LiveKit US number
Section titled “3. Inbound recipe A: LiveKit US number”-
Run the phone setup script to create the dispatch rule:
Terminal window node tools/voice-demo/phone-setup.mjs rule -
Assign the dispatch rule to your LiveKit Cloud phone number. Use the dashboard or the CLI:
Terminal window lk number update --number +1-555-0100 \--sip-dispatch-rule-id <DISPATCH_RULE_ID> -
Confirm the rule name is
wetel-voice-demo-inbound. -
Call the number from any phone. The dispatch rule creates a room, dispatches the voice worker, and the agent answers.
This was verified on 2025-10-23. A call from a Malaysian mobile matched the rule and connected successfully.
See Telephony Quickstart for general setup details.
4. Inbound recipe B: carrier SIP trunk
Section titled “4. Inbound recipe B: carrier SIP trunk”LiveKit SIP accepts INVITEs. It does not support REGISTER. Your carrier must send INVITEs to a stable address (IP or FQDN).
Supported: SIP over TLS, SRTP, DTMF (RFC 2833). Default codecs: PCMU, PCMA, G722.
Telnyx
Section titled “Telnyx”-
You need a paid Telnyx account. The Wetel Telnyx account is funded (USD 10). No number is purchased yet, so buy a US number first.
-
Create an FQDN connection through the Telnyx v2 API. Set it to inbound (or both). Use caller number format
+E.164. Setanchorsite_overridetoLatency. Associate the purchased number with the connection. -
Create an inbound trunk in LiveKit. Save this as
inbound-trunk.json:{"trunk": {"name": "telnyx-inbound","numbers": ["+1-555-0100"],"allowed_addresses": ["<TELNYX_FQDN>"],"auth_username": "<SIP_USERNAME>","auth_password": "<SIP_PASSWORD>","media_encryption": "allow"}} -
Create the trunk:
Terminal window lk sip inbound create inbound-trunk.json -
Create or reuse the dispatch rule. Save as
dispatch-rule.json:{"name": "wetel-voice-demo-inbound","hide_phone_number": true,"rule": {"dispatchRuleIndividual": {"roomPrefix": "wetel-voice-"}}}Terminal window lk sip dispatch create dispatch-rule.json -
Call the purchased number. The INVITE reaches LiveKit SIP, the dispatch rule matches, and the agent joins.
Twilio
Section titled “Twilio”Wetel has a Twilio account. Malaysian (+60) numbers need Malaysian company documents and an address, so use US numbers first.
-
Create an Elastic SIP Trunk in Twilio. Set the origination URI to the LiveKit SIP address for inbound calls.
-
For outbound termination, add a termination URI and credentials. (To verify: exact credential exchange steps against the LiveKit Twilio guide.)
-
Create the inbound trunk and dispatch rule in LiveKit using the same steps as Telnyx above, replacing the allowed address with the Twilio signaling address.
See Call Flows for detailed routing diagrams.
5. Outbound recipe (Wetel-run test)
Section titled “5. Outbound recipe (Wetel-run test)”Outbound calling is run by a Wetel engineer today. The partner-facing API to start a phone call is not built. The planned path is the voice worker call API (signed requests, see the API reference), which is not deployed.
How the Wetel engineer runs a test call
Section titled “How the Wetel engineer runs a test call”-
Create an outbound trunk. Save as
outbound-trunk.json:{"trunk": {"name": "telnyx-outbound","address": "<CARRIER_SIP_ADDRESS>","numbers": ["+1-555-0100"],"transport": "tls","auth_username": "<SIP_USERNAME>","auth_password": "<SIP_PASSWORD>"}}Terminal window lk sip outbound create outbound-trunk.json -
Place the call:
Terminal window lk sip participant create \--sip-trunk-id <TRUNK_ID> \--sip-call-to +1-555-0199 \--room-name wetel-voice-outbound-test \--wait-until-answered -
The voice worker joins the room. When the callee answers, the agent speaks.
Consent and safety rules
Section titled “Consent and safety rules”- Outbound only to numbers whose owner gave explicit consent.
- Calls happen in daytime hours only.
- Hard stop at 300 seconds.
- A trial carrier may play a notice before the call connects.
- No cold outbound calls under any circumstances.
See Controls and Compliance for the full policy.
6. What the partner needs to build around it
Section titled “6. What the partner needs to build around it”| Area | Partner side | Wetel side |
|---|---|---|
| Start a phone call | Call the partner API when ready (not built yet) | Build and deploy the start-a-phone-call API (the voice worker call API with signed requests) |
| Call record and transcript | Consume the session transcript (same shape as chat) | Return the transcript through the existing session model |
| Consent capture | Collect and store opt-in from the number owner before any outbound call | Enforce opt-in check before placing the call |
| Caller ID rules | Display the correct caller ID to the end user | Provision numbers with the carrier; set outbound caller ID |
| Cost caps | Set budget limits per campaign or per call (to verify: exact mechanism) | Implement the cost shield (not built) |
| Recording | Request recording on or off per call | Recording is off by default; toggle per session |
| Malaysian numbers | No action until numbers are available | Complete the +60 advanced order and provision trunks |
See API Reference for current endpoint documentation.
7. Troubleshooting
Section titled “7. Troubleshooting”| Problem | Likely cause | Fix |
|---|---|---|
| No audio after answer | Media encryption mismatch or onesided ofrtp | Check media_encryption on the inbound trunk. Confirm the carrier supports SRTP or set to allow. Verify codec negotiation. |
| Call does not reach the room | Dispatch rule not assigned to the number, or allowed_addresses does not include the carrier IP/FQDN | Confirm the dispatch rule ID on the number. Check allowed_addresses in the inbound trunk JSON. |
| Carrier requires REGISTER | LiveKit SIP does not support REGISTER | Switch to a carrier that sends INVITEs to a stable address (FQDN or IP connection). Telnyx FQDN connections work. |
| Narrowband audio quality | PSTN calls negotiate PCMU 8 kHz by default | This is expected for PSTN. For higher quality, use G722 if the carrier supports it, or use browser-based calls. |
| Speech-to-text misses or errors | Narrowband audio, background noise, or latency | Narrowband reduces STT accuracy. Test in a quiet environment. The 4-5 second turn time is a known staging limitation. |
| Agent not dispatched into the room | Voice worker is not running, or the dispatch rule prefix does not match | Confirm the Wetel engineer has started the voice worker. Check that the room prefix in the dispatch rule matches the worker configuration. |
8. Next steps and how to request a staging session
Section titled “8. Next steps and how to request a staging session”-
Request a staging session. Contact your Wetel counterpart. A Wetel person will start the voice worker and confirm the number or trunk is ready.
-
Test inbound first. Use Recipe A (LiveKit US number) for the fastest path. Move to Recipe B (carrier trunk) when you need your own number or outbound.
-
Plan the integration. Review the table in section 6. The start-a-phone-call API and the cost shield are the two blocking items on the Wetel side.
-
Track the roadmap. Malaysian numbers, production deployment, and the partner call API are tracked at Telephony Roadmap.
-
Read the full telephony docs. Start at Telephony Overview for architecture and concepts.
The call produces a session with a transcript, just like chat. The same published agent workflow and guardrails answer on both channels.