Activate Listener for Outbound Flows
In order to trigger and run any outbound flow first you need to activate the listener for that flow. Activating listener means activating the service of outbound calls on the outbound flow. To activate the listener, you need to follow below steps -
Create any outbound flow
Attach the DIDs to that flow
Drop a mail on help@phonon.io regarding the same with the following details
Client ID/ Account ID
Flow ID
All the DID numbers attached
How to trigger Outbound Flows ?
Triggering outbound flow means uploading customer’s details to broadcast or run the outbound campaign (like customer number, startime, flow variables). That is making calls to those customers at mentioned starttime. The outbound flows can be trigged in three ways -
1. Webservice End Point
→ The API Request (with method as post) should be send to mentioned webservice end point in the flow. The webservice endpoint for
Outbound Multicast flow is “https://central.phonon.in/kairos-apis/outbound/create”
Outbound Dialer flow is “https://central.phonon.in/kairos-apis/outbounddialer/create”
→ API Request Body :
{ "api-version" : "1.0", "security-id" : "your security ID", "flow-id" : "your flow ID", "calls" : [{ "client-identifier" : "Call identifier", "start-time" : "start date and time" "contact-numbers": ["Contact no to call"], "keys" : [ {"name" : "$flow.key.<Flow Variable>", "value" : "value for flow variable"}, {"name" : "$flow.key.<Flow Variable>", "value" : "value for flow variable"} ] }] }
→ You can get security ID and flow ID from the flow’s configurator tab. Example shown below
Note - Before sending request, make sure to whitelist your IP through which you are sending API request in the whitelist section.
2. Email Upload
You can find unique email ID for each outbound flows. You can send email with attachment to that email ID.
Upon file being loaded, the user will receive an auto-response message, that the upload was successful or not.
Call List File Instructions
If you're uploading the call list using a file, please keep in mind the following
Support file formats are .csv and .zip
You can upload a .csv file of maximum 5MB
Download the template file from the interface.
telX:Put the customer number with country code in tel1 header, alternative numbers can be added as tel2,tel3, etc. up to tel10.
$flow.key.variable:You can upload value of any flow variable by putting the flow variable name as the header and value in the respective cell.
starttime:You can input the starttime of each record in the starttime header in ISO 8601 format.
Common starttime:If the starttime is common for all the records, you can input the starttime in the file name as "upload_<starttime in ddMMyyyyHHmmss format>.csv' Example: upload_08022020211200.csv
You can find email ID for email upload in outbound flow’s configurator tab. Example shown below.
3. Direct Upload through Interface
You can upload the .csv or .zip file directly from the interface by selecting a file or by drag and drop method. To know more about direct upload, click here.
If you are triggering the flow for the first time or have updated any DIDs attached with the flow then make sure to activate the listener before triggering the outbound flow.
Supported Languages on central
Phonon Central supports a wide range of languages so that you can communicate with your multilingual customers.
The languages supported by Google for different technologies are -
The languages supported in central for different functionalities are as follows -
1. Text To Speech
Text to speech is the technology which converts you plain or SSML text into a speech. We have integrated with google for this and we support all the languages (almost) supported by google. The list of languages supported for text to speech are as follows :
Sr. No | Language | Country |
---|---|---|
1 | Arabic | |
2 | Czech | Czech Republic |
3 | Danish | Denmark |
4 | Dutch | Netherlands |
5 | English | Australia |
6 | English | India |
7 | English | UK |
8 | English | US |
9 | Filipino | Philippines |
10 | Finnish | Finland |
11 | French | Canada |
12 | German | Germany |
13 | Greek | Greece |
14 | Hindi | India |
15 | Hungarian | Hungry |
16 | Indonesian | Indonesia |
17 | Italian | Italy |
18 | Japanese | Japan |
2. Speech To Text
Speech To Text is the technology that converts any speech (audio file) into plain text. You can use this functionality to take voice inputs from customers and can further use it to process it. We also support India’s regional languages so irrespective of your customer, their speech will be converted to text. The languages supported for speech to text are as follows :
Sr. No | Language | Country |
---|---|---|
1 | English | United States |
2 | English | India |
3 | Hindi | India |
4 | Gujarati | India |
5 | Marathi | India |
6 | Bengali | India |
7 | Telugu | India |
8 | Tamil | India |
9 | Urdu | India |
10 | Kannada | India |
11 | Malayalam | India |
12 | Chinese | China |
13 | Arabic | Oman |
14 | Portuguese | Portugal |
15 | Russian | Russia |
16 | Japanese | Japan |
17 | French | France |
18 | German | Germany |
19 | Italian | Italy |
20 | Dutch | Netherlands |
3. DialogFlow
DialogFlow can be used to process the voice input, to fetch intents, their responses, entities etc. The languages supported in DialogFlow are as follows -
Sr No. | Language | Code |
---|---|---|
1 | English | en |
2 | Hindi | hi |
3 | Danish | da |
4 | German | de |
5 | Spanish | es |
6 | French | fr |
7 | Indonesian | id |
8 | Italian | it |
9 | Japanese | ja |
10 | Korean (South Korea) | ko |
11 | Dutch | nl |
12 | Norwegian | no |
13 | Polish | pl |
14 | Portuguese (European) | pt |
15 | Portuguese (Brazilian) | pt-br |
16 | Russian | ru |
17 | Swedish | sv |
18 | Thai | th |
19 | Turkish | tr |
20 | Ukrainian | uk |
21 | Chinese (Simplified) | zh-cn |
22 | Chinese (Hong Kong) | zh-hk |
23 | Chinese (Traditional) | zh-tw |
Types of Variables
Flow Variables
Flow variables are the variables that you can define in the webhook, Flow variable section or in the flow designer(operation widget) to store some date into a variable.
→ The format of flow variable is “$flow.key.<variable_name>”. You can give any variable name using any alphanumeric character or special characters.
→ Some of the examples of flow variables are $flow.key.customer_name, $flow.key.policy_number, $flow.key.string, $flow.key.result etc.
→ Flow variables are bound to specific flows and once the flow variable is defined, you can use flow variables any where in the flow.
User Variables
→ User variables are the variables that you define for your account and can be used anywhere in the account. That is one user variable defined in one flow can be used in some other flows if needed.
→ If one of the flow is executed and the value of user variable is updated and then some other flow in which the same user variable is used then the latest value of that variable (stored in the system) will be taken into consideration.
→ The standard format of the user variable is “$user.key.<variable_name>”. You can give any variable name using any alphanumeric character or special characters.
→ Some of the examples of user variables are $user.key.customer_name, $user.key.policy_number, $user.key.string, $user.key.result etc.
System Variables
System Variables are the variables defined by default by the system in which the real time data of the call or flow will get saved. These system variables can be used in the flows as and when required. The value of these variables will be different for each call (if the variable category is ‘call’).
The system variables defined in Central platform are as follows -
Sr No. | Variable | Variable Description | Variable Category | Variable Type |
1 | $sys.datetime | This variable will give current system date and time. | SYSTEM | datetime |
2 | $sys.date | This variable will give current system date. | SYSTEM | date |
3 | $sys.time | This variable will give current system time. | SYSTEM | Time |
4 | $call.cdr | This variable will give a uniqueID for a call. | CALL | string |
5 | $call.start | This variable will give the start date and time of the call. | CALL | datetime |
6 | $call.end | This variable will give the date and time of call when it was ended. | CALL | datetime |
7 | $call.dtmf | This variable will give the series of DTMF pressed by customer in call. | CALL | string |
8 | $call.state | This variable will give the current state of call. The state can be ‘dialing’, ‘connected’, ‘Processing’, ‘Failed’, ‘Hangup’ etc. | CALL | string |
9 | $call.connect | This variable will give the date and time of call when it got connected | CALL | datetime |
10 | $call.isIncoming | Inbound Flow : This variable will show weather the call is incoming or not (True if incoming ) | CALL | boolean |
11 | $call.cli | For Outbound Flows: This variable will provide Number from which call is initiated (DID). For Inbound Flows: This variable will provide the phone number of customer from which the call is coming . | CALL | string |
12 | $call.dnis | For Outbound Flows: This variable will provide the number of customer to which the call is made. For Inbound Flows: This Variable will provide the Number (DID) on which incoming call was Landed. | CALL | string |
13 | $call.cli.number | This variable will give the CLI phone number without country code. | CALL | string |
14 | $call.cli.countrycode | This variable will give the country code of cli number | CALL | string |
15 | $call.cli.type | This variable will give the CLI Type of number. The type can be … | CALL | string |
16 | $call.dnis.number | This variable will give the DNIS phone number without country code. | CALL | string |
17 | $call.dnis.countrycode | This variable will give the country code of the dnis number | CALL | string |
18 | $call.dnis.numberWithoutArea | This variable will give the CLI number without area code. | CALL | string |
19 | $call.dnis.type | This variable will give DNIS type of number. The type can be … | CALL | string |
20 | $call.dnis.areacode | This variable will give the areacode of the DNIS number | ||
21 | $call.remoteHangup | This variable will give idea of call that weather it was remote hangup or not. “true” if remote hangup, “false” otherwise. | CALL | boolean |
22 | $call.isdn | This variable will give ISDN cause codes of the call. | CALL | integer |
23 | $call.cost | This variable will give the total cost of the call (according to the rate plan attached ) | CALL | double |
24 | $call.cost.currency | This variable will give the currency in which the cost is calculated for call | CALL | string |
25 | $call.recorded | This variable will show weather the call was recorded or not. “Yes” if the the recording is enable. | CALL | boolean |
26 | $call.recordingUri | This variable will give the URL of call recording where it is stored. | CALL | string |
27 | $call.lastdtmfreceived | This variable will give the last DTMF received in the call | CALL | string |
28 | $call.attemptnumber | This variable will give the attempt number of the call | CALL | integer |
29 | $call.lastlabelreceived | CALL | string | |
30 | $call.agent.connect | This variable will give show weather agent was connected or not. “Yes” if agent got connected. | CALL | boolean |
31 | $call.agent.dnis | This variable will give the agent number with country code. | CALL | String |
32 | $call.agent.dnis.number | This variable will give the agent number (without country code) | CALL | String |
33 | $call.agent.dnis.countrycode | This variable will give the agent number country code | CALL | String |
34 | $call.agent.cli | This variable will give agent’s CLI number i.e the DID number through which the agent is called(with country code). | CALL | String |
35 | $call.agent.cli.countrycode | This variable will give the country code of CLI number of agent. | CALL | String |
36 | $call.agent.cli.number | This variable will give the CLI number of agent (without country code) | CALL | String |
37 | $call.agent.cli.numberWithoutArea | This variable will give the CLI number of agent (without area code) | CALL | String |
38 | $call.agent.cli.areaCode | This variable will give the area code of CLI number of agent | CALL | String |
39 | $call.lastWebhookStatus | CALL | boolean | |
40 | $call.duration | This variable will give total call duration of a particular call | CALL | integer |
41 | $flow.syskey.rescheduledCall | This variable is use to forcefully set reschedule in case of outbound flow. Assign value as ‘yes’ if you want to forcefully reschedule a call. | SYSTEM | string |
42 | $flow.syskey.reschedule_agent_call | This variable is use to forcefully set agent reschedule in case of dialer flow. Assign value as ‘yes’ if you want to forcefully reschedule a call. | SYSTEM | String |
43 | $flow.syskey.reschedule_customer_call | This variable is use to forcefully set customer reschedule in case of dialer flow. Assign value as ‘yes’ if you want to forcefully reschedule a call. | SYSTEM | String |
44 | $call.agent.recordingUri | This variable will give URL of agent recording (if enabled for agent) stored. | CALL | String |
45 | $call.flow.recordingUri | This variable will give URL of recording for whole flow (if enabled in the flow) stored. | CALL | String |
46 | $call.play_and_record.recordingUri | This variable will give the URL of recording for play and record widget stored. | CALL | String |
47 | $call.agent_dialer.recordingUri | This variable will give the URL of agent recording in case of dialer flow where it is stored. | CALL | String |
48 | $call.ivr_recording.recordingUri | This variable will give the URL of the recording of IVR (Recording Widget) where it is stored. | CALL | String |
49 | $call.queue.recordingUri | This variable will give the URL of the recording of queue (if it is enabled in queue) where it is stored. | CALL | String |
50 | $flow.syskey.agentID | This variable will give the agent ID of agent who got connected. | SYSTEM | String |
51 | $flow.syskey.agent.attempt_number | This variable will give the attempt number of agent in case of Dialer Flow. | SYSTEM | Integer |
52 | $flow.syskey.agent.type | This variable will give the type of agent that got connected. The type can be dynamic or direct dial. | SYSTEM | String |
53 | $flow.syskey.loginType | This variable will give the login type of agent who got connected. The login type can be mobile phone, desk phone, landline, softphone. | SYSTEM | String |
54 | $call.agent.cdr | CALL |
Response Codes in widgets
Response codes are the variables which gets updated after the execution of the widget. Response codes helps in knowing particular status of the field and in troubleshooting if the widget gets failed.
Webhook
Success Response - Below are the variables which will get updated if the execution of the widget was successful and the flow moved to ‘line 0’.
$flow.key.response_status | API call Success or Failure status | SUCCESS |
$flow.key.response_status_code | Status Code for response(2XX) | 200 |
$flow.key.response_duration | Duration in seconds for the API to return data | 0.11 |
$flow.key.response_raw | Raw response received from server, null if empty | |
$flow.key.response_error | If API resulted in error, Boolean true or false | false |
Error Response - Below are the variables which will get updated if the execution of the widget was Failed and the flow moved to ‘line 1’.
$flow.key.response_status | API call Success or Failure status | FAILED |
$flow.key.response_status_code | Status Code for response | 401, 200 |
$flow.key.response_status_type | Type of error, based on status code | Redirection |
$flow.key.response_duration | Duration in seconds for the API to return data | 0.11 |
$flow.key.response_raw | Raw response received from server, null if empty | {...} |
$flow.key.response_error | If API resulted in error, Boolean true or false | true |
$flow.key.error_reason | Reason for failure | SERVER_ERROR |
KYC Documents
Here is the list of documents required for KYC process in ‘Central Platform’ according to different categories.
Sr | Entity Type | KYC Type | Document Type | Is Mandatory? |
1 | Company | Proof of Identity | Certificate of Incorporation, GST Registration Certificate, TAN Allotment Certificate. DIN number in case of individual Directors | Any one |
Proof of Address | Certificate of Incorporation, GST Registration Certificate, TAN Allotment Certificate. DIN Number in case of individual Directors | Any one | ||
Proof of Signatory | Board Resolution or PoA for Authorised Signatory | Any one | ||
Proof of Signatory Identity | Aadhaar Card, Passport, Driving License | Any one | ||
Contract Document | For Pre-paid Account:
For Post-Paid Account
| Any One | ||
2 | Individual | Proof of Identity | Aadhaar Card, Passport, Driving License | Any one |
Proof of Address | Latest Electricity Bill, Passport, Aadhar Card, Bank Statement Passbook, Driving License | Any one | ||
3 | HUF | Proof of Identity | PAN card of HUF | Yes |
Proof of Karta Identity | Aadhar Card, Passport, Driving License of Karta (any one) | Any one | ||
Proof of Karta Address | Latest Electricity Bill, Passport, Aadhar Card, Bank Statement Passbook, Driving License | Any one | ||
4 | LLP/Partnership Firm | Proof of Identity | Certificate of Partnership/Partnership Registration Certificate, PAN Card of the LLP/Firm, Certificate of Incorporation (for LLP), GST Registration Certificate | Any one |
Individual Director/Passport: Aadhaar Card, Passport, DIN Number, Driving License, Individual Bank Account Passbook | Any one | |||
Proof of Address | Latest Electriricty Bill, Lease Deed/Rent Agreement, TAN Number, Bank Account Statement Passbook. GST Registration documents, Registration documents with a Professional Body | Any one | ||
5 | Sole Proprietorship | Proof of Identity | We can ask for the personal identity proof of the Sole Propreitor. Driving License, Aadhar, Bank Passbook of Individual, Passport | Any one |
Proof of Address | TAN Number, Latest Electricity BIll, Bank Account Statement Passbook. GST Registration documents | Any one | ||
6 | PSU | Prood of Identity | Can be the same as a Company as given above |
|
Proof of Address | Can be the same as a Company as given above |
| ||
7 | Government Entities |
| (Need clarity on this. What kind of Government entities are we dealing with) |
|
Setup DialogFlow and using in Central
If you want to design an IVR or an chat bot, that works on voice reorganization then you can use speech processing widget to achieve the same. Before that you need to perform basic setup in DialgFlow according to your use case. The setup requires following things -
→ Let's say you need to achieve following Use Case:
There is an agent bot ‘Eva’ which when called, gives you 3 options and asks you to choose one
Option 1 - To get Payment details
Option 2 - To get Account details
Option 3 - To get Loan details
If the user selects option 1 then he will be able to get the payment details, if the user says option 2 then he will be able to get account details and if the user selects option 3 then he will get details regarding loan. To do so you can configure dialogFlow as follows:
Step 1 : Open DialogFlow
Step 2 : Go to Entities Page
Entity: Each intent parameter has a type, called the entity type, which dictates exactly how data from an end-user expression is extracted.
Dialogflow provides predefined system entities that can match many common types of data. There are system entities for matching dates, times, colors, email addresses, and so on. You can also create your own custom entities for matching custom data. For example, you could define a vegetable entity that can match the types of vegetables available for purchase with a grocery store agent.
Step 3 : Create New Entity
In order to create new entity you need to be aware of following terms-
Entity type: Defines the type of information you want to extract from user input. For example, OPTIONS could be the name of an entity type in our case as we want the user to select an ‘option’. Click on ‘Create Entity’ to create an entity type.
Entity entry: For each entity type, there are many entity entries. Each entity entry provides a set of words or phrases that are considered equivalent.
If ‘options’ is an entity type, you could define these entity entries like: Option one, Option two, Option three.
Entity reference value and synonyms: Some entity entries have multiple words or phrases that are considered equivalent, like ‘option one’ and ‘first option’. For these entity entries, you provide one reference value and one or more synonyms.
Example :
Reference value- Option 1
Synonymes- Option one, Option 1, First option, 1 option etc
Step 4 - After adding the details, SAVE the Entity
If you want to use this entities in your flow then you can directly fetch entity (in speech processing widget) of particular intent and store the Entity in any variable to further use in the flow as shown below.
Step 5 - Now go to Intents page
An intent categorizes an end-user's intention for one conversation turn. For each agent, you define many intents, where your combined intents can handle a complete conversation. When an end-user writes or says something, referred to as an end-user expression, Dialogflow matches the end-user expression to the best intent in your agent. Matching an intent is also known as intent classification.
Step 6 - Create a new intent
Step 7 - Add training phrases in it
Training phrases: These are example phrases for what end-users might say. When an end-user expression resembles one of these phrases, Dialogflow matches the intent. You don't have to define every possible example, because Dialogflow's built-in machine learning expands on your list with other, similar phrases.
For Example- If we want user to select ‘option1’, we can create an intent name ‘option1’ and can add some training phrases which the end user might say like - I choose option one, I want first option, I prefer option 1 etc
Step 8 - Now add the responses of the intent
Responses: Responses can be text or speech to return to the end-user. These may provide the end-user with answers, ask the end-user for more information, or terminate the conversation.
For example- Suppose if the end user selects option 1 and we need to provide the payment status then we add response as shown below.
So whenever the user gives input from the training phrases of this intent, one of the response will be given back to the user.
Step 9 - Now Save the intent
Step 10 - To use this responses in your flow you can configure flow as follows
first configure NLP Engine
Create any inbound or outbound flow as per need, For the above example the flow can be like -
3. Enable ‘Fetch intent’ and then ‘fetch response’ in speech processing widget
4. Use this response variable further in any widgets like in play widget to give the user voice response.
SIP Based Calling On Mobile
Phonon Central also provides a mobile Login Interface for Agents, so that they can login from their Mobile Phones only. To avail the same, you need to follow below steps -
Prerequisites
1 Central Account, garnished with right configuration
100 - 120 kbps speed of Internet
1 Android or iOS Smart Phone
OpenVPN Configured on your phone
1 SIP Client, according to your liking
Step 1 - Account Configuration
Request the Support Team to enable Softphone in your account.
Once Softphone is activated in your account, head to your desired Agent Group and select 'Softphone' as login method.
Enable Softphone for account
To enable softphone facility to your account, you need to send an Email to ‘help@phonon.io’ with your account details like account name, account email, account ID/client ID.
Step 2 - Configure VPN on Smart Phone
Download OpenVPN for Android or iOS
Download Phonon's VPN files from here and upload the asked files in OpenVPN client
Use your VPN Credentials to connect with the VPN (Don't have one? Request for one using Infrastructure form)
Once you see Connected in your OpenVPN Client, share the shown IP with Rajesh to be whitelisted once.
Once whitelisted, you're set.
Agent Steps
Login to Central Agent Interface
Click on 'Softphone' from login options
You'll get details like Host, Username and Password
Download Zoiper from Play Store or App Store and open it
In the 'Username @PBX/VoIP Provider' field, enter your host and username in the format of HOST@USERNAME. Example, if your host is 192.168.50.15 and your username is 121163, you'll enter: 121163@192.168.50.15 in Zoiper. Enter the password in Password field.
Click on 'Create an Account'
Your hostname will be pre-populated. Click on Next.
Skip the Authentication screen by clicking on Skip
In the next screen, the app will attempt to make a connection across many protocols. It should automatically detect SIP UDP option so click on Finish. If not, follow the above steps again carefully.
Once you click Finish, head back over to the Central Agent Login and click on 'Login as Agent'
You're now ready to take calls over the Internet.
Notes :
Please ensure to have a stable internet connection with at-least 100kbps to 120kbps of internet speed.
If you lose internet connection, your call may get dropped.
Add Comment