d. Dialers v5
- 1 Dialers
- 2 List Management
- 2.1.1 Base.csv
- 2.2 VoiceBroadCast
- 2.2.1 Base.csv
- 2.3 Progressive and Preview Dialers
- 2.3.1 Base.csv
- 2.4 PowerDialers
- 2.4.1 Base.csv
- 2.5 Predictive Dialer
- 3 RESPOOL
- 4 SMS
- 4.1.1 States
- 4.1.1.1 Base.csv
- 4.1.1.2 Sending an sms
- 4.1.1 States
- 4.2 Scheduler
- 4.2.1 Schedule SMS
- 5 Formatting from excel to CSV
Dialers
Menu for defining dialer’s campaigns.
The dialers can generate direct dialing campaigns under various channels and in different forms , among which we are:
VOICE
SMS
SMS
Regarding SMS, we have a unique type of dialer that will only have a schedule assosiated as well as an only dialer device.
It will associate a time range for all campaigns, that will establish the time and day on which they run in order not to make actions at improper schedules.
Name: Name that the dialer will have.
Schedule: Schedule a date in which it is desired that the dialer works. As an example you can put the dialer to work from Monday to Friday from 13hs to 18hs in which the dialer will start dialing when it is on schedule.
Note: It is important to know that in order to make the dialer to start working it must be enabled previously.
Enabled: Indicates the status in wich the dialer is, if it is active or not.
DNCR: Allows to enable the registry check in white lists for telephone numbers not to call or send SMS
Dial string: In base of the api that sends sms it can be configured with the following options:
Dinstar - DinstarWeb: You enter from wich to wich channel, e.g: (0.3) it means that sms will be sent for 4 channels recursively (0-1-2-3-0...).
Qualirt: It does not take dial string.
Twillio: It does not take dial string.
Time between messages: Allows to set the time between message and message in ms.
Voice
Variables to configure:
Type of Dialer: PowerDialer, VoiceBrodCast, Progressive (with assignation per agent), Preview (Progressive without asignation of agent), Predictive (50 agents minimum).
For any dialer of telephony points are needed like dial string (which is usuallyis the output device calls), and specyfic context to indicate the behavior of the dialer. Alsoit's important to define certain amount of chanels coherent with the physical available of equipment.
Notes:
The voice dialers always has to have digital lines as own signaling (to indicates the begining and the end of the call).
The provider of telephony yo use must have the answers of cause of call (to start when he could not make the call ).
Name: It is the name of the dialers. When entring a name , automatically a new campaing is created in the system with that name and depends the type of Dialer if campaingn it will be incoming or outgoing. For PowerDialer and Predictive it will create a Incoming Campaign, for Progressive and Preview one Outgong Campaign and for VoiceBroadCast it will not create any campaing, can use any name.
Schedule: Schedule a date in which it is desired that the dialer works. As an example you can put the dialer to work from Monday to Friday from 13hs to 18hs in which the dialer will start dialing when it is on schedule.
Note: It is important to know that in order to make the dialer to start working it must be enabled previously.
Enabled: Indicates the status in wich the dialer is, if it is active or not.
Dial String: It what we use to make the call, example : DAHDI/G1/ o SIP/CARRIER/.
Context: Context which will enter the dialer, for VoiceBroadCast, PowerDialer, Predictive is the context who enter in a connected call with a customer and match a workflow; in Progressive is the context by the call is ejecuted to the client once connected with the agent. Context there are already preensambled each with the names of dialers.
Maximum: Amount of calls that are made simultaneously.
Overdial: It select a percentage of overdial that wolud have the dialer. The possible values are MIN,0%,5%,10%,15%,20%,25%,....,100%,MAX, MIN and MAX which is the lower and the highest possible value. The idea is that when, for example I take 100 chanels to dialer and in the server can not handle many request at the same time, it's possible to lower the percentage of overdial, as this slows the dialer.
Maximum time: Maximum time of wait of call one destination or in Progressive to try to connect to an agent.
Rety: Maximum amount of calls for number in the base in Progressive to try to connect with the agent.
Sound: Sound or concatatenation of sounds (with &) that pass throw to the Workflow, useful for VoiceBrodCast.
Callerid: Number leaving with calls.
CallerPres: For ISDN if show or not the Callerid where the provider supports.
AMD: If it's active, the detection of the Answering Machine, this variable arrives ${am} in 1 or 0 and may use in the flow activity to use to cut amd calls of voicemail.
DNCR: Do not call registry, allows verify whether blocked the registry.
Variables: All that you want to pass throw to the workflow,to level of global dialer.
Dialers Process
The system starts according to the created scheduler.
When starting, the system creates a task for each Dialer defined in the system, the same start and end according to the scheduler they have. All values can be seen on the Monitoring Dashboard
in real time for that dialer.
In the first information box we can see on the left side of the screen, among other things, inside is the Contactability, it indicates the percentage of calls answered of the campaign. We can see this property in the Dashboard or in the List Management.
Two circular dashboards can be seen that indicates the amount of processed and not processed calls as well as the number of agents on their respective states, also a there is a real time graph that shows the total of active calls, busy agents and calls that are being dialed.
Note:
In some occasions it is possible to see on the graph that the amount of busy agents is greater than the total as well as viewing the dialing with a negative value. This happens when the campaign makes manual calls or when it has incomming calls that are not from the dialer, anyways the graphs show the evolution of the dialer.
It is possible at any time to stop or turn on again the campaign manually from the play or stop button on the upper side of the screen. It is possible to upload new lists or black list registries, it is also possible to download the lists of the dialer by pressing the lists button located on the right upper corner of the screen.
The task is executed, the task is the responsible for making the calls obtained from the calls spool (calls_spool table), this are obtained according to the dialer type and are dialed according to the dial string of the same (it can be by TDM or VOIP), note that it will only work on Digital lines, VOIP or Analogics with Disconnect Supervision (inverted polarity). Once the call is executed, its status will change. Calls are only obtained from the active list.
SPOOL
CAMPAIGN: Name of the dialer for the contact.
DESTINATION: Contact telephone number.
STATUS: Status of the contact
STATUS: 0 - PROCESSING (it is dialing)
STATUS: 1 - TO PROCESS (it is on the spool ready to be processed, are the ones taken by the dialer)
STATUS: 3 - BLOCKED (bloqued by DNCR, it will be deleted from the spool at the daily maintenance job)
DATA: Values given to the workflow to be able to use.
ALTERNATIVES: Alternative numbers for the contact separated by :
RETRIES: 0 initially, > 0 amount of retries for that number.
CONTACT: Auto-generated to differentiate the contact.
DIALERBASE: Name of the uploaded dialers base, it has name plus the uploaded date.
PRIORITY: 9999. to 1, initially all are inserted with a high number, but by reasons of the calls scheduler of the dialer, calls will be inserted with 1 to be executed immediately while the dialer is active. If it is required to give priorities to others, it is possible to insert them with intermediate values.
AGENTPHONE: For Progressive dialer, to which agent goes each contact.
The calls are deleted from the spool if they are answered or exceed the amount of retries defined by the dialer.
If the system could process the call, it is deleted from the table, if it was occupied or no answer or if there where no channels, the call is retried, increasing retry by 1, this is to not be taken immediately and others will be processed before retrying it.
It is important not to overlap a lot of channels, if we have 30 channels and have 2 campaigns at the same time with a maximum of 20 channels, it is likely to result in dialer errors allowing to repeat some calls. Also when having more than 1 campaign, for a better performance it is a good idea to leave 1 pivot channel, since being an asynchronous system based on events, it is possible that at some millisecond it is dialing on other campaigns and the system does not have info that it is really active occupying an channel, therefore in border cases it is possible to jump a campaign, anyways if it jumps and was not possible for the system to create a channel becase there are not, this will be processed later when the existent in the spool are completed as it will have one more retry.
Within the callerid (name) it is the VoiceBroadCast:Campaign:Dial number:List:Retry, this allows the tracking the system events to know how many calls are active by campaign and allows to re-insert calls in the spool that could not reach destination.
It's importanr the concept of Respool and Reschedule, the first allows to put you back a call almost be attended to continue dialer, and the second schedule a number to call later.
List Management
On this tab you can see and manage the uploaded lists for an specific dialer.
Initially on the upper side of the screen you can see the dialer status and if it is on date or not (it is established on the Schedule field on the campaign creation), as well as stop or start the dialer by using the stop or start button.
The system allows to have multiple lists for a campaign, when uploading the lists they will be inserted on that order, the first for a campaign it is marked as active, then the rest as inactive.
The supervisor can decide from the dialers dashboard, which list wants to be active, the dashboard shows the lists in the system the amount of registries that is left for each one, allowing to activate or deactivate the same and the amount of registries per agent. To visualize the amount of registries for each agent, the agents icon must be pressed on the desired list. There you can see a dasboard with the agents of that list allowing to reasign contacts from agent to agent.
To reasign contacts from an agent to other you must press the Reassing button on the agents lists where the next image will appear.
Inside the information that the supervisor can see, in the list of upload bases is the Contactability, percentage of answered calls. If you want to see ir you have to pass above the mouse of the property.
Then select the desired agent and click on the reasign button to complete the action.
It can exist N active lists at the same moment and each has its percentage which must sum 100% in total, this percentage tells us how many contacts will get from the list to be able to mix the lists. As an example if you have two lists with 10 contacts each, if both have 50% of priority, it will execute 5 contacts from one list and 5 contacts from the other before continuing dialing.
To set the percentage for each list you must active the desired lists and then by clicking the percentage the next window will appear.
It is important to know that the scheduled calls are always priority, no matter what list is executing.
Once a list has ended and has 0 registries, this will be deleted from the system, an email is sent (AlertMail Configuration) noticing that the base has ended. We have 2 cases; the first one is that it does not exist another active list, if this happen an inactive list is active with 100% active (in the order that it was uploaded), if there are active lists, the percentage of the list that was in 0 it is added to the first uploaded list to be able to keep working on a 100% model.
It is possible to upload a Do not call registry (DNCR). This adds the uploaded numbers to the black list in order no to be able to call them. To clear the DNCR for the selected campaign you must click the red button on the right lower section of the screen.
Note: The dialers will only select contacts from the active lists.
Contacts upload
CSV file that has: campaign, telephon number, status, data. The correct format is MSDOS CSV (separated by ; and line break \n)
The dial order is the excel order, the only thing that varies is that the uploaded ones go to the end, while the ones with high priority or scheduled will go first.
Base.csv (In this case a Progressive Dialers)
campaign | telephone | data | alternative numbers | priority | agentphone(Progressive) |
---|---|---|---|---|---|
test1 | 098344484 | variable1=valor1:variable2=valor2 | 099111111:099121212 | 99 | 1001 |
Example:
Base.csv
test1;098344484;var1=val1:var2=val2;099124484:099111111;99;1001
OBSERVATION
The priority is the priority that will have the call in the queue, the highest priority is 1 and the lowest is 9999, if we want a call is placed before any other call we give priority 1, if in turn have several contacts with the same priority it does it is take the chance respecting priority levels.
Fields like alternative phones and data are not obligatory, and if you have more than one variable is separated with a : between them. With the rest of the attributes necessary to load the base is separated ; as usual, but within these fields are separeted with two points, that's the difference.
VoiceBroadCast
Introduction
The VoiceBroadCast system is to make auto dialed campaigns. A database with phone numbers is uploaded and this are sent to an IVR workflow which can be used to reproduce notifications, audios, dynamically or statically. You can also perform automatic static or dynamic surveys, as well as according to an option, the client can be redirected to a campaign.
In this case the important thing is to set the number of channels as the VoiceBroadCast use every possible channel most of the time.
Steps
The dialer obtains the number of calls to make, if the amount is 0 it waits and asks again, else it obtains according to:
Number of available channels (Maximum - Used).
The dialer gets the contacts according to the amount and the next rules:
Asks for scheduled contacts that are in first place.
Asks contacts active lists orderer by priority and ascending retries (depending on the percentage each one.
If DNCR (do not call registry) is active, it only let to make the call if the number is not on the black list.
All variables are sent to the workflows either campaign or contact.
The contact registry of the dialer is sent with retry + 1 to the business logic, this allows to create the Respooling Logic (to reinsert the contact for not being able to be reached with its alternative).
If the amount of retries for a number is exceeded, then if alternative numbers exists it obtains the first and inserts it as main number, then the rest of the numbers are left as alternatives and the process starts again.
The call is made.
If it is unattended or an error occurs, the amount of retries is increased and the contact goes to the bottom of the list to be dialed later.
If it is attended, the assigned workflow is executed step by step, at the end the lit is deleted, if a Respooling exists i continues dialers.
Base.csv
campaign | telephone | data | alternative numbers | priority |
---|---|---|---|---|
test1 | 098344484 | NOMBRE=Sebastian Gutierrez:Monto=200 | 099124484:099111111 | 9999 |
Example:
Base.csv
test1;098344484;NOMBRE=Sebastian Gutierrez:Monto=200;099124484:099111111;9999
Variables that arrives to the flow: ${sound},${am}, ${FORM}, ${VBQUEUE} are all configurated variables for that campaign. Then with that is possible in stead of been a simple flow of BroadCast, it's possible design IVRs where dynamically quiz are generated automatic.
Progressive and Preview Dialers
Introduction
In this case, this dialer is one step below regarding PowerDialer or Predictive to maximum automation, but we are still on a system of purely automatic calls. The Progressive dialres are based on the Agents availability.
The progressive dialers, usually are very suitable for Centers with a low or moderate volume of calls, where they would not be able to collect enough information to obtain reliable statistics.
Basically it calls the agent and when it answers the call is made, this makes that many attempts could be busy, wrong number, etc using time from the agent. The workflow that is used is the outbound, that is why we use outbound campaigns on Progressive and not inbound (there is not queue handling but it exists the wrapup concept) .
The contacts have Agents properties, this means that each contact is asociated to a phone number of an Agent which is going to have that contact. This is for Progressive, Preview will call any agent
Steps
The dialer obtains the amount of calls to make, if it is 0 waits and asks again, else it obtains according to:
Amount of available Agents that are not in wrapup
This dialer obtains the contacts according to the quantity and the next rules:
Asks for scheduled for each available agent.
Asks for that campaign the active list sorted by priority and amount of ascending retries (by the percentage that correspond each one).
If DNCR (do not call registry) is active, it only let to make the call if the number is not on the black list.
All variables are sent to the workflows either campaign or contact.
The contact registry of the dialer is sent with retry + 1 to the business logic, this allows to create the Respooling Logic (to reinsert the contact for not being able to be reached)
If the amount of retries for a number is exceeded, then if alternative numbers exists it obtains the first and it is inserted as main number, then the rest of the numbers are left as alternatives and the process starts again.
If it is unattended or an error occurs, the amount of retries is increased and the contact goes to the bottom of the list to be dialed later.
The call is made to the agent, if for any reason it could not be answered, it will be retried without affecting the amount of retries once the agent is available again.
The contacts registry is sent to the Agent so that actions could be made based on the business login and to be able to make the Respooling for the contact if it is required (having all his data). The agent also gets data from the CTI (to be able to open forms with the data of the client to call)
Base.csv
campaign | telephone | data | alternative numbers | priority | agentphone |
---|---|---|---|---|---|
test1 | 098344484 | NOMBRE=Sebastian Gutierrez:Monto=200 | 099124484:099111111 | 9999 | 1001 |
Example:
Base.csv
test1;098344484;NOMBRE=Sebastian Gutierrez:Monto=200;099124484:099111111;9999;1001
PowerDialers
Introduction
Unlike Progressive, the Power Dialer does not call the agent first and then makes the call, it is very similar to a Predictive but with a more Real Time calculation of over dial, this is a good fit for smaller groups of Agents and will respect the maximum channels configured for the dialer.
The first thing that the system does is to dial while exist available agents to answer calls on the campaign, for example if there are 2 agents available, it is going to make 2 calls simultaneously and until one is contacted, once a client is reached it is sent to the campaign. On the 99% of the cases the agent should be free to answer instantly. This avoids having to deliver busy or inexistent calls to the agents and deliver only the ones answered. This way of working is exactly de same on VoiceBradCast dialer, PowerDialer and Predictive, the only thing that changes is the amount of calls that are being executed, If we have an overdial rate, then will behave as a Predictive dialer, where we have abandon rate.
The PowerDialer tries to have all the agents with a call with its over dial.
Steps
The dialer obtains the amount of calls to make, if it is 0 waits and asks again, else it obtains according to:
Normal Mode (OverDial 0%): Amount of available Agents that are not in wrapup without exceeding the max amount of channels for that campaign.
OverDial Mode (OverDial X%): Same as Normal Mode but with a a real time model or selected percentage of over dial model.
The dialer obtains the contacts based on the amount and the next rules:
Asks all scheduled.
Or any other contact that is scheduled for that campaign with maximum priority.
Asks sorting the contacts by Priority and Amount of retries ascending (depending on the percentage of each one).
If DNCR (do not call registry) is active only lets to make the call if its not on the black list.
All variables are sent to the Workflows, either campaign or contact.
The contact registry of the dialer is sent with retry +1 to the business logic, this will allow to create the Respooling Logic (re insert the contact for not being able to be reached).
If the amount of retries for that number is exceeded then, if there are alternative numbers, the first one is set as main and the rest are left as alternatives and the process starts over.
The call is made.
If it is not answered or an error occurs, the amount of retries is increased and the contact goes to the bottom of the list to be dialed later.
If it is answered and AMD is enabled then if it is MACHINE the registry is reinserted with the next alternative number unless it is the last retry of the contact. If it is HUMAN is going to the ACD to be distributed between the available agents.
If it is answered and AMD is not enabled it goes straight to the ACD to the agents.
The contact registry is sent to the agent so that actions could be made based on the business logic and to be able to make the Respooling of te contact if it is required (having all his data).
Base.csv
campaign | telephone | data | alternative numbers | priority |
---|---|---|---|---|
test1 | 098344484 | var1=val1:var2=val2 | 099124484:099111111 | 9999 |
Example:
Base.csv
Predictive Dialer
Introduction
The Predictive dialers behavior is based on phone numbers data bases, and they do it as their name says, on a "predictive" way.
This means that comes into play an algorithm based underlyingly on statistics strategies, which take multiple variables from the Call Center and calculate various factors to be able to put the Agents in contact with the contact numbers in the most efficient possible way.
By general rule, the main utility and advantage of the Predictive dialers resides on the volume of calls from the Centers in which are based on, given that they are grounded on statistics techniques, their most reliability redounds on the Law of Big Numbers. This is why, in small Call Centers it is little recommended for its base behavior.
Essentially, the conceptual idea behind the predictive dialers is:
First the ideal time to make calls to clients must be calculated using various statistics strategies, which includes:
Calculate the average time between each call that result in success, and each call that fails.
Calculate the average proportion of calls that result in success and failure and with that it is weighted an average estimated time for all calls in general.
Use other factors that affect the times, such as average preparation time to accept another call from each agent and Wrapup
The more sophisticated the algorithm is, the better in general terms the Predictive Dialer will be. In fact this is one of the key factors that will determine its success in the future. A lot of predictive algorithms are based on the Erlang distribution.
In second place, the calls are launched for the numbers stored on the data base, abiding this calculated time:
With calls in progress, the Predictive dialer must be able to identify any type of inconvenience where the client could not be reached, mainly for the type of tone he receives, according to the national convention of tones from his country.
Also it is able to detect Fax tones and other possibilities that follows some type of standards.
In case that an event of this kind occurs, depending on the event, the application must be able to dial the phone properly according to what happened.
Besides the ability to detect VoiceMail given that by general rule they are "Not available" symbols, to be able to try the call again later. The detection is relatively easy, in function of the total voice response time, since the majority of the answers of physical people use to be a simple "Hello?", while the answering machines often use long phrases.
At the time it receives an answered call, it is sent to the Agents queue to be answered shortly.
With this system, the agents will only lie in wait for the machine to do its work, and by general rule, they do not have the possibility to take the call if desired, this will put directly in communication with the agent.
Firstly, this method can be ideal and, if we are really in front of a quality Predictive Dialer, this premise is true. But in return we are dealing with some inconvenience that we must overcome when choosing this type of Dialers:
If on the interval in which the agent answers a call and the operator receives it there is no answer, it is probably that the client abandon the call. In this case most of the Predictive Dialers put the number to be called in a future, but we can generate dissatisfaction on the client.
If we want to use it with commercial purposes from Business to Business, it is possible to be quite inefficient, because most of Business use an IVR which is likely to prevent our Predictive Dialer from completing its purpose in good conditions.
As we mentioned, if we have few calls in the Center, it is possible that the statistics algorithms do not return quality numbers and so the first problem occurs, being a very inefficient system.
Base.csv
campaign | telephone | data | alternative numbers | priority |
---|---|---|---|---|
test1 | 098344484 | var1=val1:var2=val2 | 099124484:099111111 | 9999 |
Example:
Base.csv
Scheduler
The dialers scheduler is to be able to Schedule calls and for the dialer to make them at the right moment, for this it exists a WebService of Rest type which allows to schedule the calls. It is possible to do it from Forms, Workflows or from external systems.
Basically the process is that exist a table where the calls are scheduler whit the necessary information.
calls_scheduler
calldate | campaign | destination | alternatives | agentphone | data |
---|---|---|---|---|---|
time and date to be executed | prueba1 | 098344484 | 099111111:099121212 | 1001 | variable1=valor1:variable2=valor2 |
The scheduler is located in calls_spool with priority 1 for the calls that must be executed on that minute, which is going to make the dialers to take it as soon as posible to make it. On the base it takes the name as Schedule and Date to be able to see which calls where scheduled and which should be made to be able to compare it with the calldate from CDR.
Web Service
REST
RESPOOL
The respool is given by a webservice that allows to reprocess a contact that was answered due to the business logic, it can insert a contact as it is requested with alternative numbers, priority, etc.
A registry is sent to the CTI.
Dialer: Ventas->, 098344484, 1, Par1=val1:Par2=val2, 091121212:099888888, 1, 12, basetesting, 99, 1001
(campaign, destination, status, parameters and values, alternatives, retries, contactid, basename, priority, agent phone)
With this data and the next webservice, it is possible to add any type of business logic to the dialer from Forms or third-party applications(The first alternative number arrives as primary number as it is considered that the main number was already contacted, anyways you can do a reschedule of that main number to itself).
REST
CTI
Example CTI event that arrives to the Browser.
SMS
Basically it works on a similar way to the rest of the dialers we have, it puts on memory 50 messages of state 1 from the table sms_spool sorted by income position of the same, it searches if it is on the black_list, if it is there, the sms is not sent and puts in state 3.
States
STATE: 0 NONE
STATE: 1 TO PROCESS
STATE: 3 BLOCKED
campaign | destination | message | device | idm | data |
---|---|---|---|---|---|
test1 | 098344484 | este es mi sms | Dinstar | autonumerico | datos extra |
Base.csv
campaign | destination | message | priority |
---|---|---|---|
test1 | 098344484 | este es mi sms | 9999 |
Example:
Base.csv
WebService
Sending an sms
Scheduler
The SMS dialers scheduler is to be able to schedule SMS and that the dialer makes it on the right moment, for this it exists a WebService of REST type that allows to schedule the same, it is possible to do it from Forms, Workflows or from external systems.
Basically the process is that exists a table where all scheduled calls are, with all the relevant information.
sms_scheduler
calldate | campaign | destination | data |
---|---|---|---|
time and date that it is wanted to be executed | test1 | 098344484 | The message |
The scheduler is located on the sms_spool with a priority of 1 for the sms that needs to be executed on that minute, which is going to do that the dialers take it as soon as possible to send the message, it takes the base name Schedule and the Date to be able to see the sms that are scheduled and when they should be made to be able to compare with the dateprocessed from sms_repo
Schedule SMS
Formatting from excel to CSV
It is needed to be changed firstly the delimit option inside the control panel > Clock, Language and Region options > Change date, time or numers format.
1) Change date,time or number formats
2) Additional settings...
3)We change the list separator combo so it shows a semicolon.
Apply and close.
4) BASE CREATION
Necessarily we will have to insert a row at the beggining of all our bases independently of the dialer type that we will use, so as the time of exporting to csv, it is guided by the heads we have whether there are 5 or 6 in total
4) We are headed to file>save as
We select that the filed type is CSV (MS-DOS)
5) Right click to the generated file, choose edit to visualize it on CSV mode and check that it is exported correctly.
6) This is the generated file. Erease the first line completely and save again.
7) Finally the file is ready to be uploaded to uContact
*We can see on line 3 and 5 that if one of the fields is empty, the delimiter is going to generate the relevant commas so that the base is uploaded anyways.
*Also we can see that at the end of the line at the 9999 a comma is inserted, creating an aditional field to be consistent to the bases requeriments to be uploaded to uContact correctly.
CLARIFICATION
Suposse we have a base without alternative numbers or priority.
Without those fields this would be the resulting CSV after making the import.
We proceed to delete the first line, and the optimum result would be: