Connect your voice assistant to contact centers running InfoServ CRM
InfoServ CRM handles telephony, routing, monitoring and reporting. Your assistant handles the conversation. The integration needs a SIP trunk and one API call per conversation.
Running a contact center? See what the integration gives you.
X-vb-token
vbcallend with getagent or hangup, then BYE
vbcallsummary with transcript and summary
What the integration requires
Four things, in the order they happen on every call. Only the first three are mandatory.
-
Receive calls over a SIP 2.0 trunk
InfoServ PhoneServer calls your assistant over a dedicated SIP 2.0 trunk and connects that call to the caller inside InfoServ CRM. No public phone numbers or carriers are involved on your side.
-
Read the SIP headers
Every call carries a unique token in
X-vb-token. The caller's number and other details come inFromandX-vb-info, if the InfoServ CRM customer enables them. -
Call
vbcallend, then send BYESend the token and the action:
getagentto pass the caller to an agent, orhangupto end the call. Only then end your call; InfoServ CRM does the rest. -
Send
vbcallsummaryafter the call OptionalWhen your transcript and summary are ready, send them with the same token, within 24 hours. The caller isn't kept waiting while you prepare them.
The SIP connection at a glance
The trunk runs between the customer's InfoServ PhoneServer and your assistant. Addresses, ports and the trunk number are agreed with each customer.
- Transport
- UDP or TLS. With TLS, your side provides the certificate; the TLS port is set per trunk.
- Media encryption
- SRTP with SDES key exchange, used together with TLS.
- Audio
- PCMA by default, PCMU if that's what your side supports. 20 ms packets.
- DTMF
- RFC 2833.
- Authentication
- By source IP address. Username and password are also supported if your side challenges with 401 or 407.
- Where calls arrive
- The trunk number agreed with the customer, for example
sip:1111@your-address. Different numbers can separate lines or services. - Concurrent calls
- Many calls run over the same trunk at once. Each has its own token.
- Call transfer
- Not used. The call with your assistant ends with
vbcallendand BYE; InfoServ CRM handles the rest.
What arrives with each call
The InfoServ CRM customer decides what your assistant receives, and each item is switched on separately. Build your assistant to work with the token alone, and use more data when the customer turns it on.
X-vb-tokenAlways
Unique for each call and valid for 24 hours. You need it for both API calls. Treat it as an opaque string: it's currently 128 lowercase letters.
FromCaller's number, if enabled
The number as it came from the carrier or PBX. When the customer hasn't enabled it, From carries the trunk number instead. Withheld numbers arrive as the carrier sends them.
X-vb-infoDetails, if enabled
Comma-separated key=value pairs. Values are percent-encoded UTF-8. A key without a value isn't sent.
| Key | Value |
|---|---|
lang | The language the caller chose in the IVR, as configured by the customer, for example en or bg |
c | yes or no: whether the contact was identified |
f | yes or no: whether the company was identified |
c_id | The contact's ID in InfoServ CRM |
f_id | The company's ID in InfoServ CRM |
X-vb-token: kqzfh… (128 letters) X-vb-info: c=yes,lang=en,f=yes,c_id=CUST00000011,f_id=FRM00000036
Decode each value once, after splitting. Don't rely on the order or number of keys, and ignore keys you don't know. The full parsing rules are in the specification.
The two API calls
Both are HTTPS POST requests with a JSON body in UTF-8, sent to the InfoServ API of the customer's installation and matched to the call by the token. The customer gives you the API address and its API key from their InfoServ CRM settings. A request can be up to 1 MB, and fields InfoServ CRM doesn't use are ignored. Response codes are in the specification.
Content-Type: application/json Authorization: Bearer <API key of the customer's installation>
vbcallend
Mandatory. Sent once, before your assistant sends BYE.
| Field | Required | Type | What it's for |
|---|---|---|---|
token | Yes | string | The token from X-vb-token. Identifies the call. |
event | Yes | string | Always "vbcallend". |
action | Yes | string | "getagent" to pass the call to an agent, "hangup" to end it. |
reason | No | string | Why you chose the action, in plain words. Shown to the agent. Up to 50 characters; longer text is cut. |
tags | No | array of strings | Classifies the call for search, reports and the customer's routing rules. No limit. |
flow | No | array of strings | The steps the caller went through, in order. Builds the Flow Report. Each step up to 50 characters; longer steps are cut. |
param1 to param5 | No | string | Details you collected, such as a customer code or booking number. The customer can use them to identify the caller or route the call. |
{ "token": "kqzfh...", "event": "vbcallend", "action": "getagent", "reason": "Wants to change a booking date", "tags": ["booking", "date change"], "flow": ["greeting", "identification", "booking", "handover to agent"], "param1": "RES-48213" }
vbcallend counts.
Any later vbcallend for the same call is ignored. Send it before BYE. By default, InfoServ CRM doesn't wait for vbcallend after BYE at all; a customer can enable a short wait of up to 5 seconds as a safety measure, but an integration that relies on it won't pass testing.
InfoServ CRM connects two separate calls, one with the caller and one with your assistant. With getagent, the customer's own rules route the caller to an agent, who sees your reason, tags and parameters. Everything you send, including flow, is stored with the call, where the customer's routing rules, identification settings and Automatic Actions can use it.
vbcallsummary
Optional. Sent after the call, within 24 hours.
| Field | Required | Type | What it's for |
|---|---|---|---|
token | Yes | string | The same token as in vbcallend. |
event | Yes | string | Always "vbcallsummary". |
transcript | No | string | The transcript of the conversation, in the format you agree with the customer. No limit. |
summary | No | string | A summary of the conversation. No limit. |
param1 to param5 | No | string | Any other results of your analysis, such as suggested next steps. |
{ "token": "kqzfh...", "event": "vbcallsummary", "transcript": "Assistant: Good afternoon... ", "summary": "Customer asked to move booking RES-48213 to a later date.", "param1": "Offer alternative dates" }
vbcallsummary replaces the previous one.
If you send it more than once, the last one wins completely: a field missing from it is removed. Always include every field you want to keep.
When something goes wrong
InfoServ CRM watches every call it sends to your assistant. Here's what happens in each situation. Where a fallback action runs, it's the one the customer has chosen: end the call, send it to a queue without voice assistants, or route it again.
- Your assistant doesn't answer
- The call can't be connected, or isn't answered within the customer's ringing time, 20 seconds by default.
- No result
- Your assistant ends the call without a valid
vbcallend. - Invalid result
- A required field is missing, or
actionisn'tgetagentorhangup. - Too long or too short
- The call with your assistant goes past the maximum or ends before the minimum time the customer set.
If an agent takes over the call, the agent sees which situation occurred, and the customer's call reports show which calls ended with a fallback action. When a call passes the maximum time, still send vbcallend: your data is recorded and the call appears in the Flow Report, but the fallback action has already decided what happens to the caller. Calls with no valid vbcallend don't appear in the Flow Report, because it's built from your flow.
Send a flow your customer can read
Your customer judges your assistant by the Flow Report, and the Flow Report is only as clear as the steps you send in flow.
- Use exactly the same name for the same step, every time. Steps are grouped by their exact text, so "Booking" and "booking" become two branches.
- Name steps by what happened in the conversation, not by internal state names. The customer's managers read these.
- Keep each step under 50 characters. Longer steps are cut.
- Write steps in the customer's working language. InfoServ CRM shows them exactly as you send them.
- Record the steps where the conversation went wrong too, such as "not understood". That's where the report helps you improve.
- Keep steps and tags apart.
flowis the order of the conversation;tagssay what the call was about.
["greeting", "identification", "booking", "handover to agent"]
Every call with the same path lands on the same branch.
["start", "node_7", "ident_ok", "bookingFlow", "esc"]
Internal names mean nothing to the customer, and "esc" will be counted apart from "escalation" on other calls.
What you get
- No telephony work for each customer
- Calls come from InfoServ PhoneServer over SIP. The customer keeps their carrier and numbers, so there's no number porting or call forwarding to set up.
- A safe handover
- Send
getagentand InfoServ CRM routes the caller to an agent, together with your reason. The caller never hangs up, so a handover never costs you a customer. - Your results, visible to the customer
- The flow you send becomes a Flow Report in the customer's own reports. A well-performing assistant earns more calls when the numbers show it.
- Contact centers that are ready to buy
- InfoServ CRM runs contact centers in finance, insurance, courier services, travel and e-commerce. Their infrastructure is already in place for your assistant.
- A place on the partner list
- Once your integration has been tested, you're listed with the tested vendors on the InfoServ CRM voice assistant page.
- You stay the customer's assistant vendor
- The customer contracts your assistant with you directly. InfoServ CRM provides the connection, not a competing assistant.
How to get started
Request the specification
The full technical details, including response codes and parsing rules.
Connect to a test setup
We provide a test setup with a SIP trunk and API access.
Pass the tests
Answering calls, reading the headers,
vbcallendbefore BYE and a correctvbcallsummary.Get listed
You're listed with the tested vendors and receive support contacts.
Questions from vendors
Common questions about connecting a voice assistant to InfoServ CRM.
vbcallend with the action getagent, then end your call. InfoServ CRM connects the caller to the right agent; the caller stays on the line.
X-vb-token header. The caller's number in the From header and the IVR language, identification status, contact ID and company ID in the X-vb-info header are each sent only if the InfoServ CRM customer enables them.
vbcallend: token, event and action. For vbcallsummary: token and event. All other fields are optional.
vbcallsummary within 24 hours after the call, while the call token is valid. Each vbcallsummary replaces the previous one completely, so always include every field you want to keep.
vbcallend, sends a result without a required field or an invalid action, or goes past the time limits the customer set. The customer's call reports show these calls.
Request the integration specification
Tell us about your assistant. We'll send the full specification and arrange a test setup.