Voice line
Give the service desk a phone number. Liya answers the call, verifies the caller, reads out a knowledge-base fix, files a ticket when that does not help, and hands the call to a person on request.
- Connect a Twilio number or another voice gateway to Liya
- Verify callers by caller ID and PIN
- Hand calls to a person
- Read what each call did in the audit log
The voice line is a phone door into the service desk. It does four things only, as a support line should: answer from the knowledge base, verify the caller, file a ticket, and hand the call to a person. The meeting assistant (Liya Meeting) is a separate voice feature for meetings.
Your telephony provider does the speech recognition and speaks the replies. Liya decides what to say.
How a call goes
- Greeting. A caller whose number is in the channel's directory is greeted by name. If their entry has a PIN, they key it first; three wrong PINs end the call.
- The problem. The caller says what is wrong. If the knowledge base has a confident fix, Liya reads it out (links are not read aloud) and asks whether it worked.
- Fixed, or filed. "Yes" ends the call and counts as a deflection. "No", or no confident fix, files a ticket and reads its number out. Callers not in the directory can still file a ticket; it is marked as from an unverified caller, with the number.
- A person. Saying "agent", "operator" or "talk to a person" at any point files the ticket and transfers the call to the desk's number. With no transfer number, the caller is told someone will call back.
Silence is asked again twice, then the call ends without a ticket. Unverified callers hear only answers from public knowledge-base records.
Connect a Twilio number
- Set an environment variable named
TICKETIQ_VOICE_<NAME>to your Twilio auth token, and restart. - Create the channel:
curl -X PUT "$BASE/api/admin/voice-desk" -H "Authorization: Bearer $TOKEN" -d '{ "channels": {"desk": { "enabled": true, "provider": "twilio", "secret_env": "TICKETIQ_VOICE_DESK_TOKEN", "tenant": "acme", "transfer_number": "+441110000000", "directory": {"+447700900001": {"user": "ana@acme.example", "name": "Ana", "pin": "2468"}}}}}' - In Twilio, set the number's A call comes in webhook to
POST https://<your instance>/api/voice/twilio/desk.
Every request must carry Twilio's X-Twilio-Signature. An unsigned or wrongly signed request is refused and audited.
Connect another voice gateway
Set "provider": "generic" and post each turn as JSON to /api/voice/calls/{channel}, signed with X-Liyagent-Signature: sha256=<HMAC-SHA256 of the body with the secret>:
{"call_id": "abc123", "caller": "+447700900001", "speech": "my VPN keeps dropping", "digits": ""}The reply says what to speak and what to do next: {"say": "...", "gather": "speech" | "dtmf" | null, "hangup": true, "transfer": "+44..."}.
Settings
| Setting | Meaning |
|---|---|
enabled | Off by default. A channel that is off does not answer |
tenant | The tenant the channel files tickets into and answers from. Required on an instance with tenants |
secret_env | The TICKETIQ_VOICE_* variable holding the signing secret |
transfer_number | Where a call goes when the caller asks for a person (E.164) |
confident | The knowledge-base score at which a fix is read out (default 0.66) |
directory | Caller IDs (E.164) to people, with an optional 4 to 8 digit PIN. PINs are stored hashed and never returned |
Audit
Each call writes voice.call.start, then any of voice.call.auth.ok, voice.call.auth.fail, voice.deflected, voice.ticket.create and voice.escalate. A refused request writes voice.call.refused. Caller numbers are masked in the log.