UCONTACT Profiles There are two types of users inside uContact, those are: Agent uContact Agent is a module for the contact center agent as the total solution for integration with features relating to data capture, monitoring by states, and integrated communications with the uContact platform. Supervisor uContact Supervisor is responsible for all system management, it manages and monitors campaigns and dialers; permits, users, and suppliers can be created and workflows can be set up along with forms and reports. Since the uContact access interface is 100% web-based, the user must use some of the following features for entering the portal: Operative systems :WindowsLogo: Windows :AppleLgo: MacOS :UbuntuLogo: Ubuntu Browsers :ChromeLogo: Chrome :FirefoxLogo: Firefox :Edge: Edge Agent Introduction uContact Agent is a module for the call centre agent as the total solution for integration with features relating to data capture, monitoring by states and integrated communications with the uContact platform. Login uContact Agent has a security control module to identify agents with a created profile allowing to have a strict control of the campaigns of each of the call centre agents. uContact Agent login is the main page that lets you select the language and role (Agent in this case) in which the user will work and validate his credentials, entering the URL :  https://IPSERVER Once inside the agent portal we will find the following screen: Inside the portal we can see the varied actions of the agent. Telephone Contacts Allows to see every contact in the system, separated by online and offline users. A more specific contact search can be made by writing its username on the Search area.  Interactions The user can interact with the contact on many ways, such as start a call, add to the favourite section and transfer an attended or blind call. The chat allows the exchange of messages with other agents, mainly used to report actions or events among users when they are talking. To initiate a chat, the agent selects from his phone the agent with whom you want to chat. Selecting the icon of chat on the contact, the conversation will open and there the agent can see the history of chats, send a receive messages. When a new event reaches the agent, a beep sound will be heard and a notification with the name of the agent and his profile photo will be seen. The chat also includes a feature that allows you to send a message to all active agents by broadcast. The chat is located in the tab Unified Inbox, which contains other communication channels. Group Chat In addition to an agent-to-agent chat, there is also the possibility of group chat with members of the same campaign. This function can be accessed by selecting the desired campaign from the "contacts" section on the softphone Broadcast Agents can send a general message to EVERY online user in the portal. Just write the message on the Broadcast area and press enter to deliver it. History Allows to see the call log of the current session of the agent, if the call was incoming or outgoing, the called phone and the talked time. Also, if a call was not answered or was rejected is indicated with a red colour. When clicking on the phone number, it redirects itself leaving ready to dial. Phone Allows interaction making external calls. Among the features that will be allowed is the selection of the campaign which will call (in case you have more than one assigned outbound campaign). Moreover you can initiate a call (green button) cut a call (button red), indicate the number to call (text box) or by typing the phone number buttons to which you wish to call.  Other functionalities Hold:  Holds the call. Conference:  To start a conference follow the next steps. If the agent is on an active call: 1. Press the conference button 2. The person at the other end of the phone will be transferred to the conference Room created and will be waiting for the speaker to arrive 3. The speaker can add more people to the conference Room by calling them. This can be done as many times as wanted 4. For the speaker to get in the conference Room, just click on the conference button and the conference will start. If the agent is not on an active call: 1. Press the conference button 2. A conference Room will be created  3. the speaker, who started the conference, can add more poeple by calling them. This can be done as many times as wanted 4. For the speaker to get in the conference Room, just click on the conference button and the conference will start. Mute : Put the Agent microphone in mute. Video:  Allow the video in the call, having the chance to video call a client. Attended Transfer:  When the call is Attended transferred, the one who transfers the call gets in contact with the person that wants to be transferred to and if he accepts the call is transferred. Blind Transfer:  When the call is Blind transferred, the call is transferred directly to the number dialed. Transfer Window Agents: Transfer to agent belonging to a user campaign. Campaigns: Transfer to an inbound campaign owned by the agent External number: Transfer to a number outside of uContact. Favourites List of agents added to favourite. Park When the agent has an active call and presses Parking, the receiver will be put on hold and the agent will be without an active call to make others. When you want to return to the call, press the green phone button. Another way to return to the call is to dial the list number, which is displayed to the right of the number, in the case of the previous example would be 701. SMS Allows sending text messages to cell phones, indicating the number to which you want to send, the campaign and the text to send. Name and number of the contact must be detailed. To finish the process click on the green button. Show phone It's possible to show the tab on the right side by clicking the expand button which is located in the upper right corner or using the display button located in the right side of the screen. Calls Calls notification When the agent has an incoming call, he will be notified with a sound alert as well as a pop up outside the browser, or at the deploy button on the top right corner as shown in the picture. Talking calls On an incoming call, at the left margin an icon appears that the agent can use to take the call. The call can also be taken by clicking the pop up as well as deploying the right margin and using the phone. The call can be rejected by clicking on the cross to close the notification or using the hang up button of the phone. The system also has AutoAnswer if this is defined to automatically answer the call beep sound will be heard by the Agent to know that you have a call in progress. Once the call was attended, on the top side of the screen a timer will appear, showing the time that passed with the call being active. Unanswered calls In case that the agent does not take the call , it will be referred to the next available agent. The system also has AutoAnswer. If it is defined, when taking a call, a beep sound can be heard by the agent to know that he has a call in progress. The time that the agent has to answer the call is set to the campaign in which the agent is. Ending calls To end a call, the agent can click on the Cut button located on the left margin or from the agent's phone. When a call ended by part of the agents or by client we will listen a double beep that indicates us that the call is finished. Wrap-Up The Wrap-Up is a time interval in which the agent can not receive any calls. When the call ends, the agent will be on the Wrap-Up state. This is to have a controlled time to end the appropriate management. The time can be seen in the top right of the screen as shown in the image. Wrap-Up time is set to the campaign in which the agent is. Unified Inbox The agent will have all the interactions here. The agent will look like the following interactions here Each interaction will look like the following, having its channel icon and its details. Interactions can be filtered by channel selecting its icon. Transfer Interaction The Agent may transfer the interaction to other agents or to other campaigns Pressing on Transfer will display a list of agents from the same campaign, arranged alphabetically, online and offline. Below will be listed all the campaigns to which the interaction can be transferred, including those that have bots. Pin Interaction By clicking on the pin, the agent will be able to maintain interactions at the top of the inbox. Close Interaction The Agent may end the interaction. If the campaign to which the interaction belongs has classifications, when closing it, the classifications modal will be displaye Search for interactions Through this button the agent can access the search for interactions. To access them, it must be fulfilled that: They belong to an active campaign, the agent must be the one who attended the interaction, it must be finalized and be in a range of one month . By default, all completed interactions will be brought. Currently you can search for interactions belonging to Email and SMS campaigns In the upper section we will find the Interaction Finder, it will look for matches in the destination mail box or the mails subject. The same for SMS, the system will search for matches of destination numbers.  :lupa: To perform the search, the user can press the Enter key or click on the magnifying glass icon. :Cruz: It allows to close the search engine of interactions and return to the unified inbox. :FlechaAbajo: Allows you to change between Emails search SMS search or Messenger search (By default Emails). pressing it will display a modal like the following: :CambioPagina: Allows you to search between results if you have more than 10 interactions that match the search criteria. It should be noted that when you close the modal and open it again the system will show us the last search made with the current session. The search for interactions will have a configuration option that will allow or not see interactions of other agents Supervisor   Types of licenses Permissions The Supervisor profile can see in the left side section all the features supported for your security group. Administration A user with administration permissions will have the following features in the portal. Users Campaigns Providers Audios Dialers Reports Quality Gamification Workforce System Configuration Supervision A user with supervision permissions will have the following features in the portal. Gamification Campaigns Dialers Status Forms Recordings Reports Supervisor with Telephone If we create an Agent user that has the same name and password as a Supervisor user, we will create the Supervisor with a telephone. Unlike a normal Supervisor user, he can belong to campaigns, use the telephone and use the breaks that correspond to the following changes: Breaks On the top of the screen we can see a cup-shaped icon as the image shows. To exit the pause, just press the Play button. Unified Inbox Supervisor inbox works the same as Agent - Unified Inbox Telephone The functionalities of the telephone will work the same as in Agent - Telephone Calls Call options work the same as Agent - Calls Features Feature Codes Introduction This manual is oriented to know the operation of the telephone switchboard and PBX Integra processes and configuration management. Is orient to resolve all operational functions of a traditional PBX adding administration and management modules with new technologies. Added to the basic functionality, extending a series of quick options and services, integrated into one product, which will enable the management of multiple communication channels with a single centralized device. Basic Functions Pickup Allows calls from other extensions be picked up in the following ways:  *8 Pick up a group call (section) * + XXX Pick up an extension call determined by XXX  External Calls Make calls out (depending on the permissions of the user), permissions are associated to each extension: Make local calls. Make international calls. Make calls to cellular phones. Make internal calls. 9 + number External call (according to internal permissions) *25 or External call with recall possibility Deviations Deviations are possible based on the state of internal or directly based on a specific user requests. *62 Enable deviation when the extension is busy *63 Disable deviation when the extension is busy *64 Enable deviation when the extension is not available *65 Disable deviation when the extension is not available *72 Enable total deviation of the extension. *73 Disable total deviation of the extension. *66 Check voicemail box *67 Erasing all messages in voicemail *88 Activation on demand Call Recording of an extension Deviation can be made: To other extension (ej: 214). To an external number dialing “9 + number” (ej: 94013864). Telephone status Set the phone in certain states if the user does not want to have certain services, or not be bothered. *78 Activate the "do not disturb" mode *79 Deactivate the "do not disturb" mode *91 Activate voicemail *92 Disable voicemail Others Check states or information. *50 Extension Status (Indicates the services are activated) *75 Says my extension number Operative Making a call For external calls you have to type: 9 +4013864 9 +16 Dial all together. Internal calls: Internal calls are made directly, for example: 205 or 207. Note: For IP phones, after dialing can be marked "send" or "#" to send the call. Pick up another extension call * 8. Dialing * 8 pickup calls in the same group. * 100 to lift the extension 100 if is ringing. Simple transfer or Blind Transfer (##) Case: A is talking to B and A wants to transfer the call to extension C, without asking if C wants to take the call. Steps: When A and B are talking, A mark # #, the PBX plays "Transfer" and A digits the extension of C. After A digits the extension number B is transferred to C. B is in communication with the extension C, or listening the ring tone until C answers or not. If C does not answer the call is returned to the source. Transfer with consultation or Attended Transfer (#0)   Case: A is talking to B and A wants to transfer the call to C, consulting if C wants to talk to B.  Steps: When A and B are talking, A dials # 0, the PBX plays "Transfer" and gives a dial tone so that the extension C is dialed. B waits on hold. A dials the extension of C and talk to C. If C wants to take the call, A must hung up so C and B get connected. If C does not want to take the call, A dials * or C Hangs up, this cuts communication between A - C while A keeps talking with B.    Call Parking The PBX has the ability to put up calls. For example: you are talking to A and wants to talk to B but you do not know where B is, you can put up the call from A while B is found, is like letting someone  wait in line for the caller. Procedure to park: When talking with A #3 is dialed. The PBX indicates the position where It’s the call. Example, the PBX says: 701. So, that was the call parked at position 701. Taking a parked call: The position where the call is parked is dialed. In the above example, dial 701 to get the parked call. Conference Room If you want to set up a conference you should use one of the conference rooms of the PBX. The conference rooms are more like an extension with the difference that all internal callers can talk to that entity itself. The rooms are dynamic, are created by marking 555XXX, where XXX is the number of conference. To access a conference room: Call directly to the room: ex dial 555100. Be transferred to the room. To transfer to a room is typed, # # (The PBX says transfer) + 555 + room number. Voicemail Voicemail Notification: Analog phones. The dialing tone when dialing is choppy. IP Phones. It depends on the equipment, but generally is indicated on the screen. You can configure a notification by mail to the mail box, waring that there is a voicemail. You can also attach voice mail. Check the voice mail box: You dial  *66 The PBX asks for the password You can access an account from another telephone dialing: * 66 + number (extension). You can delete all messages in the box typing the * 67, for this is for the voicemail password will be asked and then played an audio query if you want to delete all messages, if so pressing 7 can erase all otherwise the transaction is aborted. Do Not Disturb mode When you are busy and do not want your phone rings you must enter the code * 78. From the moment we do this all calls to your extension will indicate that it is busy. To disable this mode must dial * 79. Call Forwarding Total (unconditional)  For calls to your extension being redirected to another, you must enter * 72 and then type the extension where you want to transfer calls. To disable this function must dial * 73. When busy If desired to redirected calls to one another extension, but only if the first is busy, it must enter * 62 followed by the extension number to which the calls they wish to transfer. To disable this mode you must dial * 63. When not available If you want the calls to be redirected to an extension, but only if the first is not available (when no answer after a while), you must enter * 64 followed by the extension number to which wish to transfer calls. To disable this mode you must dial * 65. Enable and disable voicemail   To enable voicemail on an extension you must enter * 91 to disable it while you must enter * 92. Feature List Feature Description VOICE OMNI Core voice features Voice campaign management YES YES Inbound campaigns  Deliver high-quality voice experiences through all inbound interactions.  YES YES Outbound campaigns  Deliver high-quality voice experiences through all outbound interactions. YES YES Blended campaigns  Deliver high-quality voice experiences through all blended interactions. YES YES Softphone Start and/or pick up calls directly from uContact's native mobile & desktop softphone.  YES YES Multiple campaigns (at once) Be active in more than one campaign at the same time. YES YES Automatic Call Distribution (ACD) Put your business in autopilot using uContact's native ACD software YES YES Intelligent & Priority Routing  Intelligently route incoming calls to the most appropriate agent or department within your company. YES YES Call Queuing  Route callers to the next available agent.  YES YES Virtual Hold (Queue Callbacks)  Allows callers to hung up and receive a call without losing their places in line.  YES YES Call recordings Record & listen to interactions from all available channels. YES YES Screen pop-up Form appears automatically as soon as a call is finished YES YES Wrap-up time Time interval granted to the agent to manage calls after they ended. YES YES Conference calling  Have a three-way conversation –and more!  YES YES Custom breaks Assign different 'break' activities based on the agents' needs.  YES YES After-business hours & Holiday rules Automatic & customizable notification when a call is executed outside campaign/business hours.  YES YES Estimated wait time Callers are notified about the estimated time they have to wait before being attended by an agent YES YES Disposition Management | Category codes Categorize call outcomes (occupied, not connected, blocked/wrong number, abandoned & others).  YES YES Call monitoring  Listen to calls to manage call quality and agent performance.  YES YES Auto-dialers YES YES Predictive Calls multiple numbers at once and connects the calls with the available agent when the client answers.  YES YES Powerdialer Calls the client first but with a more real-time calculation of the overdial.  YES YES Preview Calls the agent first and, based on his availability, amd then transfers the call to the client.  YES YES Progressive Assigns a client to a specific agent and he only interacts with him.  YES YES Reverse Progressive Exclusive configuration of the Progressive dialer, but calls the client first.  YES YES Voice Broadcast (Press-1 campaigns) Mass broadcast of prerecorded voice messages (surveys, notifications, and more). YES YES Answering Machine Detection (AMD) Automatic detection of voice mails & distinction between human and robotic voice. YES YES List mixing  Assign dialers a specific dialing percentage or priority to different lists and maintain high contactability levels. YES YES Automatic list recycling  Select contacts you wish to keep trying to reach and generate a new list that includes them.  YES YES Do-Not-Call Registry (DNCR) list management Create a 'blacklist' and avoid dialing certain contacts YES YES Voice automation YES YES Interactive Voice Response (IVR) Built with text-to-speech technology, allows computers to interact with human callers through voice commands YES YES Text-to-Speech (TTS)* Assistive technology that reads digital text aloud.  YES YES Automatic Speech Recognition  Converts an incoming human-spoken audio into text thanks to acoustic & language models.  YES YES Omnichannel features Unified Inbox  Meet customers in the digital channel of their choice, integrating all touchpoints in the same place.  NO YES Unified Notification Center Receive new interaction notifications from all channels in the same notification bar.  NO YES Transfer interaction (to agents and/or groups). Transfer any interaction from one agent, group or campaign to the other.  NO YES Disposition Management | Category codes Categorize digital interaction outcomes (occupied, not connected, blocked/wrong number, abandoned & others).  NO YES Post-interaction Satisfaction Surveys  Receive customer feedback at the completion of all interactions.  NO YES Omnichannel Interaction Recordings Audio & screen recordings of all digital interactions.  NO YES Bot Automation Automate all digital interactions using uContact's native & customizable Bots.  NO YES WhatsApp Business NO YES Official WhatsApp Business Provider Integration* Officially integrated to several Facebook-certified WhatsApp Business providers (Gupshup, Infobip, Wavy & more). NO YES Inbound WhatsApp Business Campaigns Receive & answer interactions directly from uContact, just as you would from the app.  NO YES Pre-Approved Templates for Outbound Campaigns Use WhatsApp Business-approved templates in your outbound campaigns NO YES Facebook & Facebook Messenger NO YES Facebook wall & posts Receive & handle notifications each time the company has been mentioned in a comment/post.  NO YES Facebook Messenger Receive & answer direct messages from your Facebook page directly from uContact NO YES WebChat NO YES Audio calls with WebRTC Start and/or answer audio calls directly from your website using Web RTC technology.  NO YES Video calls with WebRTC Start and/or answer HD video calls directly from your website using Web RTC technology.  NO YES Share screen Share your screen directly from the WebChat.  NO YES Request screen Request your client's screen.  NO YES Email NO YES Bulk & One-to-One email campaigns Send emails to one or multiple recipients at one time.  NO YES Send & receive attachments Send & receive files securely with File Transfer Protocol (FTP). NO YES Customizable email templates Use one of uContact's email templates or easily create/design your own. NO YES SMS & MMS NO YES Bulk & One-to-One SMS campaigns Send SMS campaigns to one or multiple recipients.  NO YES Multimedia Messaging Service (MMS) Send multimedia messages to one or multiple recipients.  NO YES Low-code Development Tools Workflow Designer Build your own workflows with uContact’s low-code programming workflow designer. YES YES Report Creator & Designer Use a standard data capturing form, integrate your own CRM, or build your own forms from scratch. YES YES Data-capturing Form Designer Use one of uContact’s +200 available reports or use our low-code report designer to create your own. YES YES Workforce Management Omnichannel Recordings Record interactions from all digital channels.  NO YES Call Recordings Record inbound and/or outbound calls.  NO YES Screen Recordings ** HD screen recordings NO YES Agent Coaching (Spy, Whisper & Real-Time feedback) Listen to your agent's conversations in real-time and whisper feedback in real-time. NO YES Satisfaction Surveys Receive customer feedback at the completion of all interactions. NO YES Reporting & Analytics Real-Time Dashboards Omnichannel & real-time monitoring of daily performance. YES YES Historical Reporting Generate & access reports with information from the first day using uContact YES YES Graphical Alerts Receive graphic & automatic alerts whenever something happens in your Contact Center.  YES YES Omnichannel Reports Report generation of statistics from all integrated channels.  YES YES Standard & Customizable Reports Use one of uContact's +300 preset reports or tailor-make your own.  YES YES Schedule Reports Schedule report generation for a date and time of your convenience.  YES YES Real-Time Supervision Be aware of what's happening in your Contact Center at all times and in real-time.  YES YES Survey Reports Report the answers of the satisfaction surveys sent.  YES YES Report Export (PDF, XLS, CSV).  Export reports in the format of your choice.  YES YES Gamification Daily Customizable Games & Challenges Set daily goals and challenges to keep motivation levels up. NO YES Objectives by agent, group and/or area Set objectives to your agents, groups and departments in your Contact Center.  NO YES Rewards & Recognitions Give badges, rewards and/or monthly recognitions to your top-performing agents or groups.  NO YES Avatars Each agent or supervisor has its own customizable avatar.  NO YES Rankings Real-time ranking of your agents according to their performance in games and challenges.  NO YES Security & Quality Monitoring Quality Monitoring  Formally score, evaluate & report in agent calls to measure success. YES YES Standard COPC Instrument to measure performance and quality of all interactions.  YES YES Encryption All interactions are end-to-end encrypted to avoid unauthorized access to our clients' data.  YES YES Permissions per user-type Each license has access to specific features and permissions.  YES YES General | Technical Features CRM Lite Powerful CRM system (native or integrated) for successful campaign management.  YES YES 100% Browser-based Access uContact directly from a browser, no app download or plug-in install needed.  YES YES Home Agents Thanks to its Web RTC technology, agents can access uContact anywhere.  YES YES Customizable Breaks | Status Agents can change their status activity in real-time.  YES YES Multiple Languages English, Spanish, Portuguese & Italian.  YES YES Telephony To achieve a complete Voice configuration, it is necessary to enter the system with a user who has administration permissions for Voice Providers, Voice Campaigns and Voice Dialers. Strategies - Telephony There are 7 call distribution strategies in uContact, which are: ringall leastrecent fewestcalls random rrmemory linear wrandom These types of strategies are determined by the agent's status at the time the call is delivered.   Voice Campaigns Remember that to begin with the voice campaign setup, you must first have your trunk configured. For more information, see Trunk Configuration. Administration First, we must specify the type of the campaign. There are two possibilities: Inbound — Allows taking calls. Outbound — Allows making calls. Basic configuration To create a new voice campaign, you must specify: Name  of the campaign. DID (telephone number) associated with the campaign for identification purposes. Dial String:  provider used on the outbound calls that are dialed manually. Only for inbound campaigns. Schedule Days of the week and Hours between which the campaign will be available, that is, with agents available to answer calls. To add a schedule setting: Select the Days of the week. Set start and end time for selected days. Add with the '+' button and our configuration will appear in the list. To delete a schedule, we simply select it from the list and press the '-' button. The remaining fields will be loaded by default with the necessary information for proper operation. Pressing Save , our campaign will be created, and we will see it in the list of campaigns on the right of the screen. Now our campaign, it's ready to take and make calls. It depends on the focus of the campaign if it's necessary to modify the following fields. Form Here, you can define the Form that is going to be displayed when an Agent is talking to a client (as a pop-up).  Read more about Forms . But it can also be a URL, whose format must be: blank:URL — In this way, indicating 'blank:' a new tab will open with the URL after each connected call URL|Form Name|true — This way we open the URL in an iframe of uContact, we indicate a name with the first pipe "|" and we enable to close the form with the second. Example https: //www.yourpage.com |FormName|true — This will display a URL in a uContact iframe. blank:https: //www.yourpage.com — This will open a browser tab with the indicated URL. The URL must start with https, if it is only http it is blocked. URLs should always be entered completely with the https://www Audio If our campaign is  inbound,  we can define different audios. Welcome  A welcome message that the clients listens to when contacting the campaign. Out of hours:  Message reproduced when the campaign is out of hours. In these cases, we have the Voicemail checkbox. When activated, a voicemail is assigned to the campaign. In the displayed box, you must enter the voicemail number. DID If the DID is shorter than 5 numbers,  Flow  modifications are necessary. Otherwise, you can contact  Integra Support . Every DID corresponds to one campaign. You will have more than one phone number for a campaign, joining them with the ampersand (&) If you want the same DID for multiple campaigns,  Flow  modifications are necessary. Otherwise, you can contact  Integra Support . Caller ID for outgoing campaigns The CALLERID can have the following format: PREFIX#CALLERID-RANDINI-RANDFIN The CALLERID is the only mandatory one. By placing a prefix before the CALLERID, we indicate that we want to use it if the number to call has that prefix. File format with different possibilities: PREFIX1#CALLERID1-RANDINI-RANDFIN PREFIX2#CALLERID2 PREFIX2#CALLERID1-RANDINI-RANDFIN CALLERID3-RANDINI-RANDFIN CALLERID4 How do you choose the dialer from the destination number? If there are matching prefixes: One is chosen at random from among them. If no matching prefix exists: It is randomly chosen among the generics. (Required at least one) In all cases, RANDINI-RANDFIN can be used (they must have the same length). This generates a random number within this range and concatenates that number to the chosen callerid. You can also upload a Caller ID CSV file in the same format as shown above. This also applies for https://integra-scm.atlassian.net/l/c/VpYZtB42 Breaks Personalized breaks are defined for the campaign, these breaks will be seen by all the agents associated with it. To add a break, Enter the name of the break, Press '+' to add the break (the break is added to the list). To delete a break, select it from the list and press '-' to remove it. When configuring a new campaign of Incoming or Outgoing type, we can find the following parameters: Email Campaigns email. Wrap up Time not to send another call after hanging up, allows the agent to finish what he is doing (ex. data entry). Service Level The threshold to calculate service level. The answered inside the service level in seconds. Quality Multiple quality models can be adjudicated here. Thresholds This section allows you to set thresholds for monitoring the campaign. Record Whether record or not incoming calls to the inbound campaigns. If you want to modify any of the following fields, it is important to understand the concepts and what value you add to your business. For more information, do not hesitate to consult the following links: Parameters Music on Hold:  Name of the type of music on hold (default: default) Timeout:  How much time the agent's phone rings. Retry:  How long to wait before trying again to all members. Max:  Maximum number of people waiting in the campaign line (0 for no limit). Weight:  Weight of the campaign, priority. Member Delay:  Waiting time that the Agent has before being able to speak to the client or listen to an advertisement. Context:  Context so that if something is typed while being in the campaign, to go to this last one. Announce Frequency:  How often, in seconds, the audio indicated in Periodic Announce is reproduced (0 is off). Time is taken from the beginning of the audio. For example: if it indicates 20, then every 20 seconds the audio will be reproduced, no matter how long this one is. Take into consideration depending on how long the audio is (it should be shorter than the announced time). Periodic Announce:  name of audio to be played from time to time during the wait. It uses the parameter “Announce frequency” to reproduce. Auto-Answer:  If checked, calls entering through this campaign will be automatically answered, not letting the agent take his/her time to answer. Strategy: Round Seconds:   Rounds the hold time announcement to the nearest rounding seconds configured in this option. It controls the value to round to when we announce the caller’s hold time. For example, if the round seconds options is set to 30, instead of saying “1 minute and 23 seconds,” the value would be rounded to the nearest 30-second value, which would result in a prompt of “1 minute and 30 seconds. Round seconds in 0, 5, 10, 15, 20, or 30 to report the caller. Join Empty Leave When empty:  leave if the campaign is empty. Out of time:  Message reproduced when the campaign is out of time. Voicemail:  When this box is checked, the campaign gets a voicemail assigned to it with the 4-digit number the user must write. Voicemail details can be found in  Voicemail . Properties Report Hold Time:  Whether the hold time of the agents needs to be reported or not. Timeout Restart:  If selected to true, the timeout an agent has to answer the call is restarted if the actual state is BUSY or CONGESTION. This can be useful if agents are able to cancel a call with reject or similar. Also, when agents return NO ANSWER (ring, no-answer) this also causes the queue to move to the next agent in a round-robin. Ring   in Use:  If it's possible to call an agent that is occupied more than one time. Announce Time:  Every how many seconds the campaign position is announced or the waiting time (0 is off).  Announce Position:  If notify or not the waiting position of the client is in the queue. Announce Hold:  If the hold time is announced or not to the client. Virtual Hold:  When the client is in the queue waiting to be attended to, and he/she decides to end the call, this one remains under "virtual hold". Later in, when "virtually" is the client's turn, an automatic callback is made to her/him. (Happens with abandoned calls) Members Now we have to add agents to answer or make calls through the campaign This screen will show three columns: In the Campaign column, select one or multiple campaigns to add or remove members. Select one or more agents from the Agents column and press Add. In Members column you will see the agents in the campaign. Functionality when multiple campaigns selection When selecting multiple campaigns, all agents that belong to those campaigns are shown. It is possible to add agents to the selected campaigns. The agents must be selected, and then they will be added by pressing the add button. In case that the agent that is wanted to be added does not appear on the Agents table (on the right), it is because he belongs to all the selected campaigns. If there are multiple selected campaigns and one of the agents is deleted, it will be deleted from all those selected campaigns. Hands-on! Now we are ready to work! If you want to test the configuration, just call the Campaign number (DID) and see uContact works! As an Administrator, you have already learned how to create and configure your voice campaigns, Congratulations! Now you can see the status of the campaigns, for more information go to Telephony — Monitoring of Voice Campaigns and Dialers Dialers Markers allow direct dialing campaigns to be generated under different types of channels and in different ways. CSV file format PI The .csv file for dialers uploads telephone numbers en masse, which the system has to call. This file itself has a specific format in order to be valid when uploading it to the system. basic format For Progressive type dialers: 1CampaignName;Phone;AdditionalInformation;AlternatePhones;Priority;AgentPhone Other types of dialers: 1Campaign name;telephone;Additional information;Alternative telephones;priority Values   nameCampaign Details the name of the campaign as it is created in the portal. Phone A single telephone is detailed, which will be the main one for the contact. If the user wishes, he can detail what type of phone it is, using the initials M, W, H, which will be detailed later. Additional Information Additional information will be detailed that will later be used by the agent when interacting with the client, loading all this information in the displayed form. This information must be detailed with the name of the variable, the equal symbol "=" and its value. For example, name=Mario. If there is more than one variable or additional information to be detailed, they must be separated by the colon symbol ":". alternativephones In this division will be the additional telephone numbers of the contact. If the user wishes, he can detail what type of phone it is, using the initials M, W, H that will be detailed later; If this is detailed, it is mandatory for the user to indicate another field that is the retries field, this would be, for example, M=0=098447120. If there is more than one telephone number to list, they must be separated by the colon symbol ":". Priority It is the priority that the call will have in the queue. The highest priority is 1 and the lowest is 9999. If we want a call to be made before any other call, we give it priority 1. If we have several contacts with the same priority, what it does is take randomly, respecting the levels of priority. phoneAgent Parameter used only for Progressive dialers, this customer telephone number is assigned to that special agent. Or it can be the name of the agent (user in uContact).   OmniChannel Within the omnichannel section we find all the means of communication other than telephony. Below is the list of available channels, there are also some tips to remember when setting up any of the channels. Strategies - Omnichannel uContact system supports five different types os strategies: Incall Nocall Interaction Múltiple This ones are determined by the status of the Agent when delivering the interaction. Apart from that, uContact has three ways of delivering the interactions: WebChat The main idea of this feature is the communication between customers and call center company through an online chat.That by the call center company will need to configure certain factors Campaign Settings Here Webchat campaigns will be created. The configuration screen looks like the following: Basic Configuration Name: Name of the Webchat's campaign. Strategy:  Behavior that Webchat interactions will present. Visit  Strategies for more information Service Level: The level of service is the percentage of chats that were attended/abandoned by the agent before/after a stipulated time limit. Schedule: Schedule in which the Webchat campaign will be available. Visit Inbound voice campaigns and see ‘Schedule’ for more information Welcome The welcome message is shown on the client's window when the Webchat campaign is available. The user can configure three different messages in its own language, es (SPANISH), en (ENGLISH), and pt (PORTUGUESE). Select a language and write the personalized welcome message, then select another language, and so on. Out of Time The message will appear to the client if the campaign is out of time. The user can configure three different messages in its own language, es (SPANISH), en (ENGLISH), and pt (PORTUGUESE). Select a language and write the personalized Out of Time message, then select another language, and so on. Message Not Available The message appears when there are no agents available to attend an interaction in the queue. The user can configure three different messages in its own language, es (SPANISH), en (ENGLISH), and pt (PORTUGUESE). Select a language and write the personalized Message Not Available message, then select another language, and so on. Feedback At the end of the interaction, the message defined in this field will be displayed. Every message can be customized: Other Fields Maximum Interactions per Agent:  Limits the number of active interactions the agent can get. The rest of the interactions wait in the queue. Quality: A quality model can be assigned to the campaign. When an agent closes the interaction, a quality model will appear so the agent can respond to it. This response can be seen on the Webchat Recordings. Automatic Agent Message:  This message will be sent automatically to the client when the interaction starts. Thresholds Section These metrics to campaign statistics in real-time are measured in time (seconds). Service Level: The time limit for response expected chats by an agent. Dropout rate: It is the time of chats to consider that they were abandoned by customers during the daytime. Time chat: Time to consider the agent-customer chat reached the limit. ACD: Maximum number of customers who are waiting to be answered by an agent chat. Max Chats:  This numerical value represents the maximum of chats that can be on the waiting list. Chats that get positioned over this number, will get rejected and to the user will get the Not Available message. Time Out:  Max amount of time, in seconds, that clients can be waiting, after this period of time the chat will get rejected, and the user will get the Not Available message. Auto Finish: If the client disconnects the interaction, this last one will be automatically finalized when the disconnection state surpasses the period of time set in this box. Colour:  The Webchat window will have this color. If Time Out is defined as cero, meaning it won't have a maximum time defined for chats waiting, when the campaigns gets to its Out of Time hour, every client on the waiting queue will be notified that the campaign is out of time and the interactions will be closed. Checks Section Show Agent's Name:  If checked, the client will be able to see the agent's name that attended the interaction on the top of the window. Enable:  The system can have a non-working Webchat campaign, without the need of deleting it entirely and losing information. If checked, the campaign can be used. Enable Feedback:  When the interaction ends, the client will be able to punctuate the service and leave a note. This last one can be seen in the Webchat Recordings section. Enable Email:  Activated, the client will be required to give an email address before starting the interaction. Allow Audio and Video:  If checked, the client will be able to start a call or video call with the agent. Offline Message:  When the campaign is offline and this box is checked, the client will see an offline message configured in Out of Time. Address for Offline Message: Specifies the email address to send the client’s offline messages. Telephone Field Webchat When the client starts filling in the information to start an interaction, an extra field can be configured here. For example, ask for the client's telephone number, ID number, or other information needed. This one can be set as Required or optional. Set it as Visible to activate it. Under this field we can see the Allowed Domains field, in there we can specify the domain where the webchat is working. Canned Responses These are answers that the supervisor configured for agents to have quick access to frequently used messages in order to make their work more effective. Webchat Members To add or remove agents to campaigns what you do is press the tab Members Members added to a campaign must be part of a voice campaign, on the contrary, this agents wont get any interactions from this channel. Members in Webchat Campaigns are added in the same way as in Voice Campaigns Email Email Management To manage the configuration of the email campaigns in uContact, it is necessary to have a user with administrator permissions in the system. Basic email settings Filter parameters Start date:  Date from which you want to start the search for Email recordings. End date : Date until which you want to obtain the Email recordings. Email: Incoming Email address. Subject: Subject of the incoming Email. Campaign: Select Email campaigns from those available in the list. Agent: Select the agents that answered the Email. Email recording viewer When the user clicks on one of the emails, it opens like this: In the upper right corner is the printer icon, with which the mail can be printed. Email Dialer Monitoring Menu to monitor the status of email services. Dashboard Shows all active email services, allowing you to manage their activity and upload information. Campaigns Allows you to select the campaign to monitor. List name Detail of the name of the list that is active and its status: Inactive Active Status It shows the general status of the campaign based on the following status: Inactive Active On schedule It shows if the campaign is on date according to the definition it has to be executed, with the following status: Inactive Active Processed The number of emails processed by the campaign. Not processed The number of emails remaining to process in the campaign. Sent The number of emails that were processed and sent correctly. Failed The number of emails that were processed but were not sent correctly. Seen The number of emails that were opened by the recipient. Rejected The number of emails that were rejected. Spam The number of emails that entered spam, they are registered on the blacklist. Email Agent Find here how the Agent uses the Emails in the portal. When opened, it is displayed on the right side of the screen, showing the history of interactions and customer information at the top such as: Email campaign name Client email Client name Mail answer When responding to an email we will have the same options as to when starting it, plus a button that will allow us to respond with the history of emails sent. Interaction search In the left section, the user is met with an interaction search part. You can search by campaign name, customer email, subject, and name. When the user receives an email, they can reply it by sending it to the same person or forward it to several others by clicking the icon with the arrow. If the mail that the user wants to forward contains attachments, they are automatically attached to the mail to which they are forwarded. SMS/Whatsapp The incorporation of SMS/Whatsapp to our service contributes exponentially to the improvement of the customer experience. SMS campaigns After creating the provider, we can start creating SMS campaigns. Basic settings Name Name to identify the SMS campaign. Service level The service level is the percentage of interactions that were attended/abandoned by the agent before/after a stipulated time limit. DID-Ports In this field, you must enter a code (telephone number, alphanumeric, id, etc.) associated with the campaign for identification purposes. Generally, this information is provided by the provider and may vary. SMS provider Clicking on the combo displays a list of all the SMS providers that are registered in the system. Strategy It is the behavior that the campaign will have. To learn more about the different strategies go to Strategies - Omnichannel. Schedule The hours in which the SMS campaign will be available, that is, with agents available to answer customer SMS. To add a schedule configuration you must add with the '+' button and a new window will appear or remove a selected one from the list with the '-' button. After saving your settings, you will see your campaign in the table on the right where you will find all the campaigns created in the system listed according to your security group. Advanced settings These parameters already have a default value for the correct operation of the campaign. To know more go to Important Concepts - Omnichannel. Out of time This will be the message that will be sent to the client if he sends a message while the campaign is out of hours. Thresholds These are metrics to carry out the statistics of the campaigns in real-time, they are measured in time (seconds). Service level It is the expected time limit for the response of the chats by an agent. Churn rate It is the elapsed time of chats to consider that they were abandoned by customers during the day. Chat time Time elapsed to consider that the chat between agent and client reached the limit. ACD The maximum number of customers waiting to be answered by a chat agent. Maximum interactions by agent Limits the number of active interactions an agent can have. The remaining interactions are queued. It is only used for nocall strategies. Enabled The system can have a campaign registered that is not running without having to delete it completely, in this way the supervisor will not lose relevant data. If it is checked, the campaign can be used. Pre-setted responses The campaign may have pre-written responses, which makes it easier and faster for the agent to interact with the customer. How to add or delete members? To add or remove agents to campaigns, the user must go to the Members section on the upper left. Add member In the Campaigns column, you can select one or more campaigns from which you want to add or remove members. We select one or more agents from the Agents column and press Add. In the Members column we will see the agents added to the campaign. IMPORTANT The members that are added to the campaign must be previously in a voice campaign, otherwise, the agents will not receive interactions of this type. SMS dialer Allows you to send SMS in bulk. For all dialers, an execution time range will be associated that will dictate the hours and days in which they will be run in order not to carry out actions at improper hours. Basic settings To create our SMS dialer we enter: Name In order to identify our marker. SMS providers That will be used to send messages. Schedules The schedule in which the dialer will send messages is defined. Dial string Based on the API that SMS sends, a port or range can be configured. Dinstar - DinstarWeb Channel range log, example: (0.3) this means that the message will be sent to 4 channels recursively (0-1-2-3-0 ...). Quality It does not need a dial string. Twilio It does not need a dial string. Time between messages It is the time that the marker takes to send messages simultaneously, it is expressed in milliseconds. Optional parameters Enabled Indicates the status of the dialer, if it is active or not. DNCR Allows you to enable the review of the Blacklists registry, for phone numbers that should not be called or sent messages. SMS dialer operation Basically, it works in a similar way to the rest of the markers we have, 50 messages from state 1 from the sms_spool table are put in memory ordered by their entry position, it is fixed if it is in the black_list, if it does not send it and puts it in state 3. States STATE: 0 NONE STATE: 1 TO PROCESS STATE: 3 BLOCKED Example of CSV base to be uploaded to the dialer. 1 campign;destiny;menssage;priority For the given campaign: Campaign Destiny Message Device idm data test1 098344484 This is my SMS Dinstar autonumerico extra data Our base would be: 1 test1;098344484;This is my SMS;9999 WebService 1 POST 2 http://INTEGRASERVER/Integra/resources/SMS/SendSMS 3 4 params: 5 @FormParam("destination"), 6 @FormParam("message"), 7 @FormParam("campaign"), 8 @FormParam("agent") Take note! To start a dialer it must be previously Enabled. In the Dropbox Providers, one of the created SMS providers is selected, this allows us to associate a different provider for each dialer. SMS agent The agent has different interactions in his inbox and can search for them by campaign name or username. When opened, it is displayed on the right side of the screen and shows customer interaction and information at the top. SMS campaign name. Customers' number. Interaction options Next to the box where the agent will respond to the client, it contains certain icons that allow us to access the following options: With the first one, a list with emojis is displayed to use in the messages. The following contains the predesigned responses for the campaign. These are inserted automatically once the user has selected them. The last button sends the message that the Agent is writing. In the upper right corner, the agent will find a three-dot icon, with which the customer's previous messages can be displayed. You can also send SMS using the softphone integrated into the portal. SMS monitorin Here you can see the real-time statistics of the SMS campaigns. Lower left chart Icon Agent status icon. Along with the status icon, it can show: in case the agent is on a call, a phone will appear; and if the agent is in a break, the image corresponding to that break will show. Channels status If the agent has an active interaction, a logo will appear. SMS, Webchat, Email, Twitter, among others. The two can show together if it is the case. Status Real-time agent status. The states can be disconnected, busy, free, free on break, and busy on break (being any of the available breaks). Agent Name of the agent. Completed The number of completed SMS. Active It indicates the interactions that the agent maintains active. Time Time of the last agent state change. Lower right chart Displays the data of the SMS clients that are on hold: Number Telephone number with which the customer sent the SMS. On hold The time that the client has been on hold. Actions with agents When clicking on an agent with active interaction, the following options will be displayed: Spy The supervisor will be able to view the messages exchanged between agent-client in real time. Monitor screen Allows you to view the agent screen in real-time. To see this button, the monitor screen option must be enabled in Configuration - Agents. Info Displays a window with all the agent information. Pause The supervisor pauses the agent. Chat with agent It gives us the ability to send messages to an agent. Log out agent The supervisor will be able to log out the agent. The agent must log his username and password again in order to log in and continue working. SMS recordings In this section, you can see all SMS conversations. Messages are grouped by interaction Each message has the user who sent it, be it human or bot. Parameters for filtering Start date:  SMS recordings search start date. End date:  End date of recordings that we want to obtain from the search. Origin:  Inbound number. Campaign:  Select SMS campaigns from those available in the list. Agent:  Select the agents who attended SMS. By selecting a conversation, the recording can be downloaded individually. SMS dialers monitor Menu to monitor the status of mobile services and SMS campaigns. It shows all active mobile services, allowing you to manage their activity and information load. Dashboard Once a campaign has been selected, you can see its dashboard: Campaigns Allows you to select the campaign to monitor. Status It shows the general status of the campaign, based on the following statuses: Inactive. Active. On schedule It shows if the campaign is on schedule according to the definition it has to run, with the following statuses. Inactive. Active. Processed Number of SMS processed by the campaign. Not processed Amount of SMS remaining to be processed in the campaign. Other Shows the number of SMS with different statuses due to incorrect number format. Blocked Shows the number of SMS blocked due to being on the NDCR list. On the top right corner we have the following two options: Stop/Start It allows to stop or start the campaign on demand. Delete It allows deleting the campaign data that has not been processed (for example, unprocessed records that have failed or that have been in the NDCR table, or that for some reason want to be canceled). Upload record not DNCR call It allows loading a CSV file, with the data of the SMS that should not be sent, indicating the phone number and campaign. Example: 1 23578408;marcadortest; 2 23113758;marcadortest; 3 22150696;marcadortest; 4 22016549;marcadortest; Single message sending There is the option of sending a unitary text message to a specific and unique number, the following information must be inserted in the lower-left section: Telephone Number where to send the text message. Text Text containing the message. After completing the fields, we press the Send button and the message will be sent by the dialer. Sending mass messages Outbound SMS are automatically processed by the system after uploading. To upload SMS, a file containing the following must be uploaded (in .csv format). 1 campaign;destiny;menssage;priority Example of .csv 1 campsms;098344384;Hey World!;9999; 2 campsms;098356484;Hey World!;9999; 3 campsms;098378984;Hey World!;9999; To see information on the status of sent messages and the status of messages waiting to be sent, see Reports. It is possible to send messages from third-party applications by executing a REST webservice for example: http://10.1.0.18:8085/Integra/resources/SMS/SendSMS/destination=099635199&message=Mensaje%20de%20prueba2&api=dongle Whenever a marker is generated, the following criteria must be taken into account for the files and their content: The file name must not have spaces, strange characters, or very long names, an example of a file would be: DISCTEST29042014.csv The first column that refers to the campaign must exist in the system, if it does not exist, it will give an error and will not allow the file to be uploaded. At least the first four columns must exist to upload the file successfully. There should be no blank spaces after the last line in order to avoid records being made without information. Within the variable fields, there cannot be special characters such as ´ ‘“ @ etc, since they can affect the performance of the system. If these characters are found, it will give an error and will not allow the file to be uploaded.   Facebook CRM Lite Dynamic form whose fields can be personalized according to the needs of each company, it also includes a typing module (or management purposes) that allows generating an analysis of the most frequent types of calls and results. It also has a history module of the last 5 calls so that the agent can have visibility of the last conversations made with the client. Architecture Components The connection is via HTTPS with a level 3 certificate via ( https://xxxx.ucontactcloud.com ), uContact uses HTTPS (http2) with a REST API and Secure Websockets (wss). The connection is made through Secure Websockets https://xxxx.ucontactcloud.com:8089/ws (for SIP signaling). Our STUN Server  ( stun.ucontactcloud.com ) Agent and Telephony server negotiate with STUN Server gathering ICE candidates. After that the connection is made from the agent to the telephony server, bridging the communication with the telephony provider (via SIP, SIP TLS, SIP WebRTC). The telephony server does the bridging to host all the recordings, transcoding, etc. Codecs: We use alaw, ulaw, opus, vp8, h264.   Al the transcoding part takes action in the telephony server. QoS: We can do TOS and COS tag  (on the server-side) the packets with multiple parameters in different actions  (video, audio, text) The server prefers cipher suites supporting Perfect-Forward-Secrecy. The server provides HTTP Strict Transport Security. The server provides HTTP Public Key Pinning. X-XSS-Protection Hardware Sizing (On-Premise) Size Agents Telephony Backend Database Small < 30 1 0 0 Medium < 500 1 1 0 Big > 500 1 1 1 Accepted Telecommunications Equipment Digium or Sangoma Cards, Xorcom, Dinstar, KHOMP, SIP Gateways, SIP Hardphones. The teams of agents and supervisors must have the following minimum requirements: Agent Desktop Processor: Core i5 2.0 GHz Memory: 8GB RAM Resolution: 1366 x 768  (minimum) Disk: 160 GB Chrome browser 2mb symmetric internet connection Supervisor Desktop Processor: Core i5 2.5 GHz Memory: 8 GB RAM Resolution: 1366 x 768 (minimum) Disk: 160 GB Chrome browser Component Versions BBDD: Mysql: 8 or 5.7 WebServer: NGINX 1.17. 0 (latest) OS: Ubuntu 20.04, 18.04, 16.04 Telephony: Asterisk Modificado branch 13 Frontend: HTML5 y JS Backend:  Java 8 Structure 1 /etc/IntegraServer/web/ 2 IntegraPortalWS.war 3 IntegraChannels.war 4 IntegraGamification.war 5 /forms/ 6 /images/ 7 /uContact/ 8 /workflowdesigner/ 9 /formsdesigner/ 10 /tmp/ 11 /webchatclient/ 12 /etc/IntegraServer/reports/ 13 /etc/IntegraServer/server/ 14 IntegraServer.jar 15 /jasper/*.jar 16 /jdbc/*.jar 17 /mail/*jar 18 /others/*.jar 19 /ssh/*.jar 20 /ws/*.jar Network requirements for video calls Bandwidth 1MB/s simétrico Latency for toll-quality <100 ms total Jitter < 20 ms jitter Packet loss < 1 % for voice calls Codec VP8 Network requirements for VoIP Bandwidth 256 kbps per call Latency for toll-quality <100 ms total Jitter < 20 ms jitter Packet loss < 1 % for voice calls Codec ulaw, alaw Required recordings Storage (audio y video) Duration Required Storage for audio (.gsm) Required Storage for video (.webm) Duration Required Storage for audio (.gsm) Required Storage for video (.webm) 1 Minute 100 kb 1.5 MB 10 Minutes 1 MB 20 MB 20 Minutes 2.8 MB 44 MB 30 Minutes 3.8 MB 100 MB   Computer equipment Terminal Agents and Supervisors The teams of agents and supervisors must have the following minimum requirements: Agent Desktop Processor: Core i5 2.0 GHz. Memory: 8GB RAM. Minimum resolution: 1366 x 768 (minimum) Minimum disk: 160 GB Internet browser: Chrome (or any browser that is part of the “CHROMIUM” project) (Firefox is not recommended) 2Mb upload/downlink link   Supervisor Desktop Computer Processor: Core i5 2.5ghz Memory: 8 GB RAM Minimum resolution: 1366 x 768 (minimum) Minimum disk: 160 GB Internet browser: Chrome (preferably) Security Based on these considerations, they must also be taken into account for the antivirus scanning policies that may be installed on the computers, avoiding scanning or denial of access for security reasons. Considerations The network where agents are working, must consider the following Port 3478  UDP/TCP must be opened at least for the host stun.ucontactcloud.com Port 8089  UDP/TCP must be opened at least for the host (ucontactinstance).ucontactcloud.com Port 443 UDP/TCP must be opened at least for the host (ucontactinstance). ucontactcloud.com Ports 10000-2000 UDP must be opened at least for the host (ucontactinstance). ucontactcloud.com Access to the site http://cacerts.geotrust.com/GeoTrustRSACA2018.crt  and  redirector.gvt1.com/  must be enabled in order to allow browsers to validate uContact SSL certificate. Enable access to the activator license site: us-central1-licenciator.cloudfunctions.net/api/servers/getLicence Enable access to monitoring tool: monitor.ucontactcloud.com Access to the following  IP´s  (104.197.204.63   , 74.125.134.127) used by google chrome. Verify that SIP -  ALG is not active on the local or border network devices. Verify that IPS - detection is not active because it can cause VoIP packet discard and voice problemas (unespected call drops). Domain *.github.com must be enable for system updates Based on this considerations, the policy of the antivirus used on the workstations they must be actuated in order to avoid port scan, blocking or denying the access by security reasons. ISO 27001 The international standard ISO 27001 allows the assurance, confidentiality, and integrity of data and information and the systems that process it. This allows organizations to analyze risk and apply the necessary controls to eliminate it. If we go to the system configuration, we find the following options that will help us establish a more secure system for our users. Within the company message option, you can set a warning message from the company, which will appear every time the agent logs in. The system will also display the date and time of the user's last logged-in session. IMAGEN Among the security measures it establishes are: Password expires after a certain number of days. (Modifiable) Request mandatory password change after it is updated by the supervisor or for the first time the user logs in. Account lockout after certain unsuccessful password entry attempts. (Modifiable) At the time of changing the password, do not allow to use of the last X amount of passwords used. (Modifiable) The system has three different states for users: Asset. Inactive. Blocked (due to failed login attempts). The user is disabled if they do not log in to uContact after a certain number of days. (Modifiable) Password Format sets the complexity that agent passwords should have. Here you can configure if you should have: lower case Capital letters Numbers Special characters and the minimum length of characters If we go to the creation of agents, we can find the following fields available: LOGIN SCHEDULE The possibility of creating a login schedule establishes certain days of the week and hours in which the agent can connect to the system. TEMPORARY ACCOUNT There is also the opportunity to create temporary users, that is, an account is created that has a forced expiration on the date established in the fields. PCI Compliance PCI is the Payment Card Industry Data Security Standard, also known as PCI DSS and is an exclusive information security standard administered by the Security Standards Council and makes reference to a standard that contains a series of security requirements that all merchants, large or small, must comply with, this standard applies to any company that processes, stores or transmits credit card data, therefore the merchant must have a "PCI Certificate" that guarantees that all its processes and tools that it uses comply with the necessary security regulations to guarantee the integrity of the information, for which reason the uContact Omnichannel Contact Center software is "PCI Compliance" because it complies with the most common requirements that the client's process requires for its certification. Some basic compliance requirements that some processes are required and are included in uContact are: Use a 128bit SSL certificate. In short: Protect data. Encrypt any public transmission of data. ISO 27001 Security of handling and protection of information ISO 27002 business continuity management process Install and maintain a firewall configuration to protect data. Do not use vendor defaults for system passwords and other security settings. Encrypt the transmission of cardholder data over open, public networks. Restrict access to data on a business need-to-know basis. Assign a unique ID to each person with access to the system. Perform regular access and security checks to network resources and data. Maintain a security policy and make sure all staff is aware of it. In addition, Google Cloud undergoes an annual third-party audit to certify that all of its products are PCI DSS compliant. This means that the services provided an infrastructure on which customers can build their own services or applications for storing, processing, or transmitting cardholder data. It is important to note that customers remain responsible for ensuring that their applications are PCI DSS compliant. APIs Client Authentication This resource is used to obtain a token authentication to access the uContact APIs, created for logging in from another application to enable integrations. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/auth/getUserToken Request Header Key Value Content-Type application/x-www-form-urlencoded Request Body Key Type Description user Text (String) User Name password Text (String) User Password Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/auth/getUserToken HTTP/1.1 Host: {{domain}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Content-Length: 32 user={{User}}&password={{Password}} cURL curl --location --request POST 'https://{{domain}}.ucontactcloud.com/Integra/resources/auth/getUserToken' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'user={{UserName}}' \ --data-urlencode 'password={{PasswordUser}}' JavaScript var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("user", "{{UserName}}"); urlencoded.append("password", "{{PasswordUser}}"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/getUserToken", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{domain}}.ucontactcloud.com/Integra/resources/auth/getUserToken", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "data": { "user": "{{UserName}}", "password": "{{PasswordUser}}" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/getUserToken"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("user", "{{User}}"); request.AddParameter("password", "{{UserPassword}}"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "user={{User}}&password={{UserPassword}}"); Request request = new Request.Builder() .url("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/getUserToken") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); HTTP Response "{{token}}" Respuesta de error "0" Agent Authentication When an integration with uContact involving agent activities is required, authentication is performed through this resource, which logs the agent into the SIP. This allows the agent to be considered for calls and to interact via VoIP, in addition to having access. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Value POST /Integra/resources/auth/AgentLogin Request Header Key Value Content-Type application/x-www-form-urlencoded Request Body Parameter Type Description agent Text (String) User Agent password Text (String) Password Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/auth/AgentLogin HTTP/1.1 Host: {{dominio}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Content-Length: 33 agent={{User}}&password={{Password}} cURL curl --location --request POST 'https://{{dominio}}.ucontactcloud.com/Integra/resources/auth/AgentLogin' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'agent={{Usuario}}' \ --data-urlencode 'password={{AgentPassword}}' JavaScript var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("agent", "{{User}}"); urlencoded.append("password", "{{Password}}"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/AgentLogin", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{domain}}.ucontactcloud.com/Integra/resources/auth/AgentLogin", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "data": { "agent": "{{User}}", "password": "{{Password}}" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/AgentLogin"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("agent", "{{User}}"); request.AddParameter("password", "{{Password}}"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "agent={{User}}&password={{Password}}"); Request request = new Request.Builder() .url("https://{{domain}}.ucontactcloud.com/Integra/resources/auth/AgentLogin") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{domain}}.ucontactcloud.com") payload = 'agent={{User}}&password={{Password}}' headers = { 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/auth/AgentLogin", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses that indicate an error due to the data sent will generally be returned with an HTTP 200 code and a "0" or "Error" in the body of the response, so caution should be exercised when validating the HTTP Response Code. The received response is in text format, so it will need to be converted to JSON in order to view the data correctly. Response converted to JSON { "id": 4, "name": "1997", "host": "{{domain}}.ucontactcloud.com", "nat": "yes", "type": "friend", "accountcode": "Vcisneros", "callgroup": "", "callerid": "1997", "canreinvite": "", "context": "agents", "dtmfmode": "rfc2833", "insecure": "", "language": "es", "mailbox": "", "md5secret": "07a46a13aa5434e21e6a9aa870482720", "pickupgroup": "", "qualify": "yes", "secret": "", "disallow": "all", "allow": "alaw;ulaw", "port": "", "defaultuser": "1997", "subscribecontext": "default", "record": "agent", "email": "", "phonetype": "SoftPhone", "LogLevel": "SEVERE", "limite": 0, "transport": "wss", "encryption": "yes", "did": "", "outboundproxy": "", "fullname": "Victor Cisneros", "token": "VmNpc25lcm9zOjJhZGUzNjAxLTNhMjgtNDhjNy1hNDg2LTczNTY3ZmI1ZDI2MQ==" } Error Response 0 Log Out This API is used to log out the agent or user once they are no longer in use. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/api/AgentLogoff Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic Token Request Body Parameter Type Required Description agent Text (String) Yes Username to log out interface Text (String) No Phone number/extension of the SIP for the agent message Text (String) No Message to save Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/api/AgentLogoff HTTP/1.1 Host: {{domain}}.ucontactcloud.com Authorization: Basic {{Token}} Content-Type: application/x-www-form-urlencoded Content-Length: 55 agent=Vcisneros&interface=SIP%2F1997&message=Desloguear cURL curl --location --request POST 'https://{{domain}}.ucontactcloud.com/Integra/resources/api/AgentLogoff' \ --header 'Authorization: Basic {{Token}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'agent={{User}}' \ --data-urlencode 'interface=SIP/{{Extension}}' \ --data-urlencode 'message={{Mensaje}}' JavaScript var myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("agent", "{{User}}"); urlencoded.append("interface", "SIP/{{Extension}}"); urlencoded.append("message", "{{Mensaje}}"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{domain}}.ucontactcloud.com/Integra/resources/api/AgentLogoff", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{domain}}.ucontactcloud.com/Integra/resources/api/AgentLogoff", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}", "Content-Type": "application/x-www-form-urlencoded" }, "data": { "agent": "{{User}}", "interface": "SIP/{{Extension}}", "message": "{{Mensaje}}" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{domain}}.ucontactcloud.com/Integra/resources/api/AgentLogoff"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("agent", "{{User}}"); request.AddParameter("interface", "SIP/{{Extension}}"); request.AddParameter("message", "{{Mensaje}}"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "agent={{User}}&interface=SIP/{{Extension}}&message={{Mensaje}}"); Request request = new Request.Builder() .url("https://{{domain}}.ucontactcloud.com/Integra/resources/api/AgentLogoff") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{domain}}.ucontactcloud.com") payload = 'agent={{User}}&interface=SIP/{{Extension}}&message={{Mensaje}}' headers = { 'Authorization': 'Basic {{Token}}', 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/api/AgentLogoff", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Successful Response Success Error Response 0 Hang Up Call When you want to hang up a call from outside of uContact, this API is used, allowing for a more complete integration. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. Request Information Method Resource POST /Integra/resources/Agents/HangupPhone Request Header Option Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Required Description phone Number (Integer) Yes Agent's phone number/extension HTTP Request Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/Agents/HangupPhone HTTP/1.1 Host: {{instance}}.ucontactcloud.com Authorization: Basic {{Token}} Content-Type: application/x-www-form-urlencoded Content-Length: 10 phone={{AgentPhone}} cURL curl --location --request POST 'https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/HangupPhone' \ --header 'Authorization: Basic {{Token}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'phone={{AgentPhone}}' JavaScript var myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("phone", "{{AgentPhone}}"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{Instance}}.ucontactcloud.com/Integra/resources/Agents/HangupPhone", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{Instance}}.ucontactcloud.com/Integra/resources/Agents/HangupPhone", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}", "Content-Type": "application/x-www-form-urlencoded" }, "data": { "phone": "{{AgentPhone}}" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{Instance}}.ucontactcloud.com/Integra/resources/Agents/HangupPhone"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("phone", "{{AgentPhone}}"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "phone={{AgentPhone}}"); Request request = new Request.Builder() .url("https://{{Instance}}.ucontactcloud.com/Integra/resources/Agents/HangupPhone") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{Instance}}.ucontactcloud.com") payload = 'phone={{AgentPhone}}' headers = { 'Authorization': 'Basic {{Token}}', 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/Agents/HangupPhone", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Successful Response 1 Error Response 0 Add Record to Dialer Adds a record to a dialer to launch the call as soon as an agent is available. This record will be added to the queue, meaning that records already in the queue will be dialed first, regardless; this queue will only consider records that do not belong to a dialing list. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/Dialers/DialerTask Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Required Description call JSON String (String) Yes JSON Object Converted to Text with the added data in the following example. JSON Example The data added in the following example is purely demonstrative; you will need to replace the data with those corresponding to your instance. { "calldate": null, // If you need to call at a specific time, example: '1900-01-01 00:00:00' "campaign": "POWER<-", // Name of the campaign to add the record to "destination": "0123456789", // Phone number to be dialed "alternatives": "", // Alternative number to call if the first number is not reachable "agent": "", // Phone/Extension of the agent if you want a specific agent to take the call "data": "idcustomer=7", // Data to show on the instance's form or for specific use "source": "source", // Pending "bulk": false, // Pending "automatic": true // Pending } Description of JSON Object In the JSON, all keys must be included. If a field states that it is not mandatory, it can be added with an empty value. Parameter Type Required Description calldate Text (String) No Defines the time at which the call will be made; it can be 'null' or a date in the format '1900-01-01 00:00:00'. campaign Text (String) Yes Name of the campaign to which the record will be added. destination Text (String) Yes Phone number to be called. alternatives Text (String) No Alternative numbers to contact if the first number cannot be reached; can be left empty. agent Text (String) No Phone number/extension of the agent if a specific agent is required to take the call. data Text (String) No Data to be added for display in forms, surveys, or for other purposes within the platform. source Text (String) Yes bulk Boolean yes automatic Boolean yes Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/Dialers/DialerTask HTTP/1.1 Host: {{Instance}}.ucontactcloud.com Authorization: Basic {{Token}} Content-Type: application/x-www-form-urlencoded Content-Length: 310 call={{Objeto Json}} cURL curl --location --request POST 'https://testclever.ucontactcloud.com/Integra/resources/Dialers/DialerTask' \ --header 'Authorization: Basic VmNpc25lcm9zOjY3NDdjODIzLWY5ZmItNDY0My05NTc0LWNjMjJhOTlhZDRlMQ==' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'call={"calldate" : null,"campaign" : "POWER<-","destination": "1234567890","alternatives": "","agent" : "","data": "idcustomer=7","source": "source","bulk": false,"automatic": true }' JavaScript var myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("call", "{\"calldate\" : null,\"campaign\" : \"POWER<-\",\"destination\": \"0123456789\",\"alternatives\": \"\",\"agent\" : \"\",\"data\": \"idcustomer=7\",\"source\": \"source\",\"bulk\": false,\"automatic\": true }"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/DialerTask", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/DialerTask", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}", "Content-Type": "application/x-www-form-urlencoded" }, "data": { "call": "{\"calldate\" : null,\"campaign\" : \"POWER<-\",\"destination\": \"0123456789\",\"alternatives\": \"\",\"agent\" : \"\",\"data\": \"idcustomer=7\",\"source\": \"source\",\"bulk\": false,\"automatic\": true }" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/DialerTask"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("call", "{\"calldate\" : null,\"campaign\" : \"POWER<-\",\"destination\": \"0123456789\",\"alternatives\": \"\",\"agent\" : \"\",\"data\": \"idcustomer=7\",\"source\": \"source\",\"bulk\": false,\"automatic\": true }"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "call={\"calldate\" : null,\"campaign\" : \"POWER<-\",\"destination\": \"0123456789\",\"alternatives\": \"\",\"agent\" : \"\",\"data\": \"idcustomer=7\",\"source\": \"source\",\"bulk\": false,\"automatic\": true }"); Request request = new Request.Builder() .url("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/DialerTask") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{Instance}}.ucontactcloud.com") payload = 'call={{Objeto Json}}' headers = { 'Authorization': 'Basic {{Token}}', 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/Dialers/DialerTask", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Successful Response 1 Error Response 0 Upload Base Uploads a dialing list via a CSV or TXT file to a dialer for integration with an external system to uContact. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/Dialers/uploadbase Request Header Option Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body The "cant" parameter can be set to a value of 0; once the list is activated, the number of records in the list will be updated. In the fileb64 field, only the content of the plain text file encoded in base64 should be sent. If the file is encoded as such and added to this field, it will result in an error in the request. Parameter Type Required Description filename Text (String) Yes Nombre del archivo a subir fileb64 Base64 Encoded Content File Yes Content file to upload encoded in Base64 campaign Text (String) Yes Name of the campaign to which the file will be uploaded cant Number (Integer) Yes Number of records in the file username Text (String) Yes Username uploading the Calling List file Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/Dialers/uploadbase HTTP/1.1 Host: {{Instance}}.ucontactcloud.com Authorization: Basic {{Token}} Content-Type: application/x-www-form-urlencoded Content-Length: 604 filename=base_prueba_2.csv&fileb64=UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow%3D%3D&campaign=POWER%3C-&cant=5&username=Vcisneros cURL curl --location --request POST 'https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/uploadbase' \ --header 'Authorization: Basic {{Token}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'filename=base_prueba_2.csv' \ --data-urlencode 'fileb64=UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow==' \ --data-urlencode 'campaign=POWER<-' \ --data-urlencode 'cant=5' \ --data-urlencode 'username=Vcisneros' JavaScript var myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); var urlencoded = new URLSearchParams(); urlencoded.append("filename", "base_prueba_2.csv"); urlencoded.append("fileb64", "UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow=="); urlencoded.append("campaign", "POWER<-"); urlencoded.append("cant", "5"); urlencoded.append("username", "Vcisneros"); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/uploadbase", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/uploadbase", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}", "Content-Type": "application/x-www-form-urlencoded" }, "data": { "filename": "base_prueba_2.csv", "fileb64": "UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow==", "campaign": "POWER<-", "cant": "5", "username": "Vcisneros" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/uploadbase"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("filename", "base_prueba_2.csv"); request.AddParameter("fileb64", "UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow=="); request.AddParameter("campaign", "POWER<-"); request.AddParameter("cant", "5"); request.AddParameter("username", "Vcisneros"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "filename=base_prueba_2.csv&fileb64=UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow==&campaign=POWER<-&cant=5&username=Vcisneros"); Request request = new Request.Builder() .url("https://{{Instance}}.ucontactcloud.com/Integra/resources/Dialers/uploadbase") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{Instance}}.ucontactcloud.com") payload = 'filename=base_prueba_2.csv&fileb64=UE9XRVI8LTswMTIzNDU2Nzg5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs5ODc2NTQzMjEwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTswMTQ3ODUyMzY5O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTszNjk4NTIwMTQ3O0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow0KUE9XRVI8LTs3NTMyMTQ2OTgwO0lkPTIyMDE0MTpGb2xpbz0xOk5vbWJyZT1WaWN0b3IgQ2lzbmVyb3M6Zm9saW9DUk09Ozs5OTk5Ow%3D%3D&campaign=POWER%3C-&cant=5&username=Vcisneros' headers = { 'Authorization': 'Basic {{Token}}', 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/Dialers/uploadbase", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Successful Response 1 Error Response 0 Call Disposition When a call is ended in uContact, a disposition can be added to identify how the call concluded, allowing for reporting or creating actions based on the disposition. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST Integra/resources/api/DispositionCall Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Required Description campaign Text Yes Name of the campaign agent Text Yes Agent's username callerid Text Yes Phone number of the contact guid Text Yes Unique call identifier l1 Text Yes Level 1 disposition l2 Text Yes Level 2 disposition (Can be empty) l3 Text Yes Level 3 disposition (Can be empty) d1 Text Yes Extra data to save (Can be empty) d2 Text Yes Extra data to save (Can be empty) comment Text Yes Comment for the disposition (Can be empty) schedule Text Yes Date and time to schedule the call in the format AAAA-MM-DD HH:MI:SS (Can be empty) camptoreschedule Text Yes Dialer to schedule the call (Can be empty) tag Text Yes Text for disposition tag or empty (Can be empty) Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/api/DispositionCall HTTP/1.1 Host: {{Instancia}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Authorization: Basic {{Token}} Content-Length: 173 campaign=campana-%3E&agent=Vcisneros&callerid=1234567890&guid=f9b7ada3-a4e5-4795-834d-aa1c1a37ee57&l1=Tipificacion1&l2=&l3=&d2=&d2=&comment=&schedule=&camptoreschedule=&tag= cURL curl --location --request POST 'https://{{Instancia}}.ucontactcloud.com/Integra/resources/api/DispositionCall' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Token}}' \ --data-urlencode 'campaign=campana->' \ --data-urlencode 'agent=Vcisneros' \ --data-urlencode 'callerid=1234567890' \ --data-urlencode 'guid=f9b7ada3-a4e5-4795-834d-aa1c1a37ee57' \ --data-urlencode 'l1=Tipificacion1' \ --data-urlencode 'l2=' \ --data-urlencode 'l3=' \ --data-urlencode 'd2=' \ --data-urlencode 'd2=' \ --data-urlencode 'comment=' \ --data-urlencode 'schedule=' \ --data-urlencode 'camptoreschedule=' \ --data-urlencode 'tag=' JavaScript var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); myHeaders.append("Authorization", "Basic {{Token}}"); var urlencoded = new URLSearchParams(); urlencoded.append("campaign", "campana->"); urlencoded.append("agent", "Vcisneros"); urlencoded.append("callerid", "1234567890"); urlencoded.append("guid", "f9b7ada3-a4e5-4795-834d-aa1c1a37ee57"); urlencoded.append("l1", "Tipificacion1"); urlencoded.append("l2", ""); urlencoded.append("l3", ""); urlencoded.append("d2", ""); urlencoded.append("d2", ""); urlencoded.append("comment", ""); urlencoded.append("schedule", ""); urlencoded.append("camptoreschedule", ""); urlencoded.append("tag", ""); var requestOptions = { method: 'POST', headers: myHeaders, body: urlencoded, redirect: 'follow' }; fetch("https://{{Instancia}}.ucontactcloud.com/Integra/resources/api/DispositionCall", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); JQuery var settings = { "url": "https://{{Instancia}}.ucontactcloud.com/Integra/resources/api/DispositionCall", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic {{Token}}" }, "data": { "campaign": "campana->", "agent": "Vcisneros", "callerid": "1234567890", "guid": "f9b7ada3-a4e5-4795-834d-aa1c1a37ee57", "l1": "Tipificacion1", "l2": "", "l3": "", "d2": "", "d2": "", "comment": "", "schedule": "", "camptoreschedule": "", "tag": "" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new RestClient("https://{{Instancia}}.ucontactcloud.com/Integra/resources/api/DispositionCall"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddParameter("campaign", "campana->"); request.AddParameter("agent", "Vcisneros"); request.AddParameter("callerid", "1234567890"); request.AddParameter("guid", "f9b7ada3-a4e5-4795-834d-aa1c1a37ee57"); request.AddParameter("l1", "Tipificacion1"); request.AddParameter("l2", ""); request.AddParameter("l3", ""); request.AddParameter("d2", ""); request.AddParameter("d2", ""); request.AddParameter("comment", ""); request.AddParameter("schedule", ""); request.AddParameter("camptoreschedule", ""); request.AddParameter("tag", ""); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "campaign=campana->&agent=Vcisneros&callerid=1234567890&guid=f9b7ada3-a4e5-4795-834d-aa1c1a37ee57&l1=Tipificacion1&l2=&l3=&d2=&d2=&comment=&schedule=&camptoreschedule=&tag="); Request request = new Request.Builder() .url("https://{{Instancia}}.ucontactcloud.com/Integra/resources/api/DispositionCall") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .addHeader("Authorization", "Basic {{Token}}") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{Instancia}}.ucontactcloud.com") payload = 'campaign=campana-%3E&agent=Vcisneros&callerid=1234567890&guid=f9b7ada3-a4e5-4795-834d-aa1c1a37ee57&l1=Tipificacion1&l2=&l3=&d2=&d2=&comment=&schedule=&camptoreschedule=&tag=' headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic {{Token}}' } conn.request("POST", "/Integra/resources/api/DispositionCall", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Successful Response "OK" Error Response "0" Create Agent When an integration requires creating users from another platform, we can use this API to create agent-type users so they can make calls. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/sip/addsip Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Required Description Phone Text Yes JSON Object JSON Example The data not enclosed in {{ }} will not be modified; they will be sent as fixed data. { "LogLevel": "SEVERE", "fullname": "{{fullname}}", "accountcode": "{{userNameAgent}}", "allow": "alaw;ulaw", "callerid": "{{phoneNumber}}", "id": 407, "context": "agentes", "defaultuser": "{{phoneNumber}}", "did": "", "disallow": "all", "dtmfmode": "rfc2833", "email": "", "encryption": "yes", "canreinvite": "", "insecure": "", "host": "dynamic", "language": "es", "mailbox": "", "name": "{{phoneNumber}}", "nat": "yes", "phonetype": "SoftPhone", "pickupgroup": "", "callgroup": "", "qualify": "yes", "record": "agent", "secret": "{{passwordAgent}}", "subscribecontext": "default", "transport": "wss", "port": "", "outboundproxy": "", "type": "friend", "limite": "0" } JSON Object description Parameter Type Required Description userName Text Yes Agent's username password Text Yes User's password fullname Text Yes Agent´s full name phoneNumber Text Yes Agent's phone number (Unique Data) Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/sip/addsip HTTP/1.1 Host: {{dominio}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Authorization: Basic {{Token}} Content-Length: 1228 phone={ "LogLevel": "SEVERE", "fullname": "{{fullname}}", "accountcode": "{{userName}}", "allow": "alaw;ulaw", "callerid": "{{phoneNumber}}", "id": 407, "context": "agentes", "defaultuser": "{{phoneNumber}}", "did": "", "disallow": "all", "dtmfmode": "rfc2833", "email": "", "encryption": "yes", "canreinvite": "", "insecure": "", "host": "dynamic", "language": "es", "mailbox": "", "name": "{{phoneNumber}}", "nat": "yes", "phonetype": "SoftPhone", "pickupgroup": "", "callgroup": "", "qualify": "yes", "record": "agent", "secret": "{{password}}", "subscribecontext": "default", "transport": "wss", "port": "", "outboundproxy": "", "type": "friend", "limite": "0" } cURL curl --location --globoff 'https://{{dominio}}.ucontactcloud.com/Integra/resources/sip/addsip' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Token}}' \ --data-urlencode 'phone={ "LogLevel": "SEVERE", "fullname": "{{fullname}}", "accountcode": "{{userName}}", "allow": "alaw;ulaw", "callerid": "{{phoneNumber}}", "id": 407, "context": "agentes", "defaultuser": "{{phoneNumber}}", "did": "", "disallow": "all", "dtmfmode": "rfc2833", "email": "", "encryption": "yes", "canreinvite": "", "insecure": "", "host": "dynamic", "language": "es", "mailbox": "", "name": "{{phoneNumber}}", "nat": "yes", "phonetype": "SoftPhone", "pickupgroup": "", "callgroup": "", "qualify": "yes", "record": "agent", "secret": "{{password}}", "subscribecontext": "default", "transport": "wss", "port": "", "outboundproxy": "", "type": "friend", "limite": "0" }' JavaScript const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); myHeaders.append("Authorization", "Basic VmNpc25lcm9zOjdjMjUyODAyLTljNGEtNDcyZi05MjJiLTQwNGFmY2JjM2Q2MA=="); const urlencoded = new URLSearchParams(); urlencoded.append("phone", "{ \"LogLevel\": \"SEVERE\", \"fullname\": \"{{fullname}}\", \"accountcode\": \"{{userName}}\", \"allow\": \"alaw;ulaw\", \"callerid\": \"{{phoneNumber}}\", \"id\": 407, \"context\": \"agentes\", \"defaultuser\": \"{{phoneNumber}}\", \"did\": \"\", \"disallow\": \"all\", \"dtmfmode\": \"rfc2833\", \"email\": \"\", \"encryption\": \"yes\", \"canreinvite\": \"\", \"insecure\": \"\", \"host\": \"dynamic\", \"language\": \"es\", \"mailbox\": \"\", \"name\": \"{{phoneNumber}}\", \"nat\": \"yes\", \"phonetype\": \"SoftPhone\", \"pickupgroup\": \"\", \"callgroup\": \"\", \"qualify\": \"yes\", \"record\": \"agent\", \"secret\": \"{{password}}\", \"subscribecontext\": \"default\", \"transport\": \"wss\", \"port\": \"\", \"outboundproxy\": \"\", \"type\": \"friend\", \"limite\": \"0\" }"); const requestOptions = { method: "POST", headers: myHeaders, body: urlencoded, redirect: "follow" }; fetch("https://{{dominio}}.ucontactcloud.com/Integra/resources/sip/addsip", requestOptions) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); JQuery var settings = { "url": "https://{{dominio}}.ucontactcloud.com/Integra/resources/sip/addsip", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic {{Token}}" }, "data": { "phone": "{ \"LogLevel\": \"SEVERE\", \"fullname\": \"{{fullname}}\", \"accountcode\": \"{{userName}}\", \"allow\": \"alaw;ulaw\", \"callerid\": \"{{phoneNumber}}\", \"id\": 407, \"context\": \"agentes\", \"defaultuser\": \"{{phoneNumber}}\", \"did\": \"\", \"disallow\": \"all\", \"dtmfmode\": \"rfc2833\", \"email\": \"\", \"encryption\": \"yes\", \"canreinvite\": \"\", \"insecure\": \"\", \"host\": \"dynamic\", \"language\": \"es\", \"mailbox\": \"\", \"name\": \"{{phoneNumber}}\", \"nat\": \"yes\", \"phonetype\": \"SoftPhone\", \"pickupgroup\": \"\", \"callgroup\": \"\", \"qualify\": \"yes\", \"record\": \"agent\", \"secret\": \"{{password}}\", \"subscribecontext\": \"default\", \"transport\": \"wss\", \"port\": \"\", \"outboundproxy\": \"\", \"type\": \"friend\", \"limite\": \"0\" }" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var options = new RestClientOptions("https://{{dominio}}.ucontactcloud.com") { MaxTimeout = -1, }; var client = new RestClient(options); var request = new RestRequest("/Integra/resources/sip/addsip", Method.Post); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Authorization", "Basic {{Token}}"); request.AddParameter("phone", "{ \"LogLevel\": \"SEVERE\", \"fullname\": \"{{fullname}}\", \"accountcode\": \"{{userName}}\", \"allow\": \"alaw;ulaw\", \"callerid\": \"{{phoneNumber}}\", \"id\": 407, \"context\": \"agentes\", \"defaultuser\": \"{{phoneNumber}}\", \"did\": \"\", \"disallow\": \"all\", \"dtmfmode\": \"rfc2833\", \"email\": \"\", \"encryption\": \"yes\", \"canreinvite\": \"\", \"insecure\": \"\", \"host\": \"dynamic\", \"language\": \"es\", \"mailbox\": \"\", \"name\": \"{{phoneNumber}}\", \"nat\": \"yes\", \"phonetype\": \"SoftPhone\", \"pickupgroup\": \"\", \"callgroup\": \"\", \"qualify\": \"yes\", \"record\": \"agent\", \"secret\": \"{{password}}\", \"subscribecontext\": \"default\", \"transport\": \"wss\", \"port\": \"\", \"outboundproxy\": \"\", \"type\": \"friend\", \"limite\": \"0\" }"); RestResponse response = await client.ExecuteAsync(request); Console.WriteLine(response.Content); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "phone={ \"LogLevel\": \"SEVERE\", \"fullname\": \"{{fullname}}\", \"accountcode\": \"{{userName}}\", \"allow\": \"alaw;ulaw\", \"callerid\": \"{{phoneNumber}}\", \"id\": 407, \"context\": \"agentes\", \"defaultuser\": \"{{phoneNumber}}\", \"did\": \"\", \"disallow\": \"all\", \"dtmfmode\": \"rfc2833\", \"email\": \"\", \"encryption\": \"yes\", \"canreinvite\": \"\", \"insecure\": \"\", \"host\": \"dynamic\", \"language\": \"es\", \"mailbox\": \"\", \"name\": \"{{phoneNumber}}\", \"nat\": \"yes\", \"phonetype\": \"SoftPhone\", \"pickupgroup\": \"\", \"callgroup\": \"\", \"qualify\": \"yes\", \"record\": \"agent\", \"secret\": \"{{password}}\", \"subscribecontext\": \"default\", \"transport\": \"wss\", \"port\": \"\", \"outboundproxy\": \"\", \"type\": \"friend\", \"limite\": \"0\" }"); Request request = new Request.Builder() .url("https://{{dominio}}.ucontactcloud.com/Integra/resources/sip/addsip") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .addHeader("Authorization", "Basic {{Token}}") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{dominio}}.ucontactcloud.com") payload = 'phone={ "LogLevel": "SEVERE", "fullname": "{{fullname}}", "accountcode": "{{userName}}", "allow": "alaw;ulaw", "callerid": "{{phoneNumber}}", "id": 407, "context": "agentes", "defaultuser": "{{phoneNumber}}", "did": "", "disallow": "all", "dtmfmode": "rfc2833", "email": "", "encryption": "yes", "canreinvite": "", "insecure": "", "host": "dynamic", "language": "es", "mailbox": "", "name": "{{phoneNumber}}", "nat": "yes", "phonetype": "SoftPhone", "pickupgroup": "", "callgroup": "", "qualify": "yes", "record": "agent", "secret": "{{password}}", "subscribecontext": "default", "transport": "wss", "port": "", "outboundproxy": "", "type": "friend", "limite": "0" }' headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic {{Token}}' } conn.request("POST", "/Integra/resources/sip/addsip", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses indicating an error due to the sent data will generally be delivered with an HTTP 200 code and a "0" or "1" in the body of the response, so caution should be exercised when validating the HTTP Response Code. The received response is in text format, so it will need to be converted to JSON to view the data correctly. Successful Response 1 Error Response 0 Add Agent to Campaign When integration requires it, agents can be added to a specific campaign through this API. Below, we outline how to perform this action. You can check the Postman Collection to test in your instance. All data enclosed in "{{ }}" are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/queues/addqueuemember Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Description queuemember Text (String) An array of objects, where multiple users can be added to multiple campaigns; each object represents a user added to a campaign. JSON Example [ { "membername": "{{UserName}}", "queueName": "{{CampaignName}}", "interface1": "SIP/{{AgentPhoneNumber}}", "penalty": 0, "paused": 0 } ] JSON Description Parameter Type Description UserName Text (String) Agent's username CampaignName Text (String) Name of the campaign to which the user wishes to be added PhoneNumber Text (String) Agent's phone number Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/queues/addqueuemember HTTP/1.1 Host: {{domain}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Authorization: Basic {{Token}} Content-Length: 221 queuemember=[{"membername":"{{UserName}}","queueName":"{{CampaignName}}","interface1":"SIP/{{AgentPhoneNumber}}","penalty":0,"paused":0}] cURL curl --location --globoff 'https://{{domain}}.ucontactcloud.com/Integra/resources/queues/addqueuemember' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Token}}' \ --data-urlencode 'queuemember=[{"membername":"{{UserName}}","queueName":"{{CampaignName}}","interface1":"SIP/{{AgentPhoneNumber}}","penalty":0,"paused":0}]' JavaScript const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); myHeaders.append("Authorization", "Basic {{Token}}"); const urlencoded = new URLSearchParams(); urlencoded.append("queuemember", "[{\"membername\":\"{{UserName}}\",\"queueName\":\"{{CampaignName}}\",\"interface1\":\"SIP/{{AgentPhoneNumber}}\",\"penalty\":0,\"paused\":0}]"); const requestOptions = { method: "POST", headers: myHeaders, body: urlencoded, redirect: "follow" }; fetch("https://{{domain}}.ucontactcloud.com/Integra/resources/queues/addqueuemember", requestOptions) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); JQuery var settings = { "url": "https://{{domain}}.ucontactcloud.com/Integra/resources/queues/addqueuemember", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic {{Token}}" }, "data": { "queuemember": "[{\"membername\":\"{{UserName}}\",\"queueName\":\"{{CampaignName}}\",\"interface1\":\"SIP/{{AgentPhoneNumber}}\",\"penalty\":0,\"paused\":0}]" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://{{domain}}.ucontactcloud.com/Integra/resources/queues/addqueuemember"); request.Headers.Add("Authorization", "Basic {{Token}}"); var collection = new List>(); collection.Add(new("queuemember", "[{\"membername\":\"{{UserName}}\",\"queueName\":\"{{CampaignName}}\",\"interface1\":\"SIP/{{AgentPhoneNumber}}\",\"penalty\":0,\"paused\":0}]")); var content = new FormUrlEncodedContent(collection); request.Content = content; var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync()); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "queuemember=[{\"membername\":\"{{UserName}}\",\"queueName\":\"{{CampaignName}}\",\"interface1\":\"SIP/{{AgentPhoneNumber}}\",\"penalty\":0,\"paused\":0}]"); Request request = new Request.Builder() .url("https://{{domain}}.ucontactcloud.com/Integra/resources/queues/addqueuemember") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .addHeader("Authorization", "Basic {{Token}}") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{domain}}.ucontactcloud.com") payload = 'queuemember=[{"membername":"{{UserName}}","queueName":"{{CampaignName}}","interface1":"SIP/{{AgentPhoneNumber}}","penalty":0,"paused":0}]' headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic {{Token}}' } conn.request("POST", "/Integra/resources/queues/addqueuemember", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses indicating an error due to the sent data will generally be delivered with an HTTP 200 code and a "0" or "1" in the body of the response, so caution should be exercised when validating the HTTP Response Code. The received response is in text format, so it will need to be converted to JSON to view the data correctly. Successful Response 1 Error Response 0 Make a Call In some cases, it is necessary for an agent to initiate a call to a phone number from another application, such as a CRM. This API can be used, and the call will be directed to the agent. You can check the Colección de Postman to see an example and test it with your instance. All data enclosed in {{ }} are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/Agents/AgentCall Request Header Opcion Valor Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parametro Tipo Requerido Descripción callerid Número Si DID assigned to the campaign from which the call will be made. agent Texto Si Agent who will take the call. phone Número Si Agent's phone number. tech Texto Si Communication protocol, add SIP. context Texto Si Name of the context for flows from which the call will exit; it can be 'agentes' or 'agents.' outqueue Texto Si Name of the manual campaign. destination Número Si Name of the campaign for which the call will be generated. Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/Agents/AgentCall HTTP/1.1 Host: {{instance}}.ucontactcloud.com Authorization: Basic {{Token}} Content-Type: application/x-www-form-urlencoded Content-Length: 116 callerid={{callerid}}agent={{agent}}&phone={{phone}}&tech=SIP&context={{context}}&outqueue={{outqueue}}&destination={{destination}} cURL curl --location 'https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/AgentCall' \ --header 'Authorization: Basic {{Token}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'callerid={{callerid}}' \ --data-urlencode 'agent={{agent}}' \ --data-urlencode 'phone={{phone}}' \ --data-urlencode 'tech=SIP' \ --data-urlencode 'context={{context}}' \ --data-urlencode 'outqueue={{outqueue}}' \ --data-urlencode 'destination={{destination}}' JavaScript const myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); const urlencoded = new URLSearchParams(); urlencoded.append("callerid", "{{callerid}}"); urlencoded.append("agent", "{{agent}}"); urlencoded.append("phone", "{{phone}}"); urlencoded.append("tech", "SIP"); urlencoded.append("context", "{{context}}"); urlencoded.append("outqueue", "{{outqueue}}"); urlencoded.append("destination", "{{destination}}"); const requestOptions = { method: "POST", headers: myHeaders, body: urlencoded, redirect: "follow" }; fetch("https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/AgentCall", requestOptions) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); JQuery var settings = { "url": "https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/AgentCall", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}", "Content-Type": "application/x-www-form-urlencoded" }, "data": { "callerid": "{{callerid}}", "agent": "{{agent}}", "phone": "{{phone}}", "tech": "SIP", "context": "{{context}}", "outqueue": "{{outqueue}}", "destination": "{{destination}}" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/AgentCall"); request.Headers.Add("Authorization", "Basic {{Token}}"); var collection = new List>(); collection.Add(new("callerid", "{{callerid}}")); collection.Add(new("agent", "{{agent}}")); collection.Add(new("phone", "{{phone}}")); collection.Add(new("tech", "SIP")); collection.Add(new("context", "{{context}}")); collection.Add(new("outqueue", "{{outqueue}}")); collection.Add(new("destination", "{{destination}}")); var content = new FormUrlEncodedContent(collection); request.Content = content; var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync()); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "callerid={{callerid}}&agent={{agent}}&phone={{phone}}&tech=SIP&context={{context}}&outqueue={{outqueue}}&destination={{destination}}"); Request request = new Request.Builder() .url("https://{{instance}}.ucontactcloud.com/Integra/resources/Agents/AgentCall") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{instance}}.ucontactcloud.com") payload = 'callerid={{callerid}}&agent={{agent}}&phone={{phone}}&tech=SIP&context={{context}}&outqueue={{outqueue}}&destination={{destination}}' headers = { 'Authorization': 'Basic {{Token}}', 'Content-Type': 'application/x-www-form-urlencoded' } conn.request("POST", "/Integra/resources/Agents/AgentCall", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses in which an error occurred due to the data sent will generally be returned with an HTTP code 200 and a '0' in the response body; therefore, caution should be exercised when validating by the HTTP Code Response. The successful response will be a GUID as the call identifier; this data can be used for future actions through APIs. Successful response. 8cf8570e-60e7-44ed-b799-3baab211b04d Error response. 0 Get Campaigns To obtain all campaigns created within uContact, this API can be used, which returns the totality of Dialers and Queues. You can check the Colección de Postman to see an example and test it with your instance. All data enclosed in {{ }} are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/queues/getqueues Request Header Key Value Content-Type application/x-www-form-urlencoded Authorization Basic {{Token}} Request Body Parameter Type Required Description lastrow Text No Send empty Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/queues/getqueues HTTP/1.1 Host: {{instance}}.ucontactcloud.com Content-Type: application/x-www-form-urlencoded Authorization: Basic {{Token}} Content-Length: 8 lastrow= cURL curl --location --globoff 'https://{{instance}}.ucontactcloud.com/Integra/resources/queues/getqueues' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Token}}' \ --data-urlencode 'lastrow=' JavaScript const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); myHeaders.append("Authorization", "Basic {{Token}}"); const urlencoded = new URLSearchParams(); urlencoded.append("lastrow", ""); const requestOptions = { method: "POST", headers: myHeaders, body: urlencoded, redirect: "follow" }; fetch("https://{{instance}}.ucontactcloud.com/Integra/resources/queues/getqueues", requestOptions) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); JQuery var settings = { "url": "https://{{instance}}.ucontactcloud.com/Integra/resources/queues/getqueues", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic {{Token}}" }, "data": { "lastrow": "" } }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://{{instance}}.ucontactcloud.com/Integra/resources/queues/getqueues"); request.Headers.Add("Authorization", "Basic {{Token}}"); var collection = new List>(); collection.Add(new("lastrow", "")); var content = new FormUrlEncodedContent(collection); request.Content = content; var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync()); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "lastrow="); Request request = new Request.Builder() .url("https://{{instance}}.ucontactcloud.com/Integra/resources/queues/getqueues") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .addHeader("Authorization", "Basic {{Token}}") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{instance}}.ucontactcloud.com") payload = 'lastrow=' headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic {{Token}}' } conn.request("POST", "/Integra/resources/queues/getqueues", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses in which an error occurred due to the sent data will generally be delivered with an HTTP code 200 and a '0' in the response body; therefore, caution should be taken when validating the HTTP Code Response. The successful response will be a JSON corresponding to an array of objects, where each object represents a campaign. Respuesta exitosa [ { "name": "DEMO007->", "musiconhold": "default", "announce": "", "context": "", "timeout": 15, "monitorType": "MixMonitor", "monitorFormat": "gsm", "announceFrequency": 0, "announceRoundSeconds": 0, "announceHoldtime": "no", "announcePosition": "no", "retry": 3, "wrapuptime": 0, "maxlen": 100, "servicelevel": 15, "strategy": "linear", "joinempty": "yes", "leavewhenempty": "no", "eventmemberstatus": false, "eventwhencalled": true, "reportholdtime": false, "memberdelay": 0, "weight": 0, "timeoutrestart": true, "ringinuse": false, "setinterfacevar": true, "periodicAnnounce": "", "periodicAnnounceFrequency": "0", "did": "18885751288", "direction": "outbound", "interactions": "", "email": "", "thresholds": "40-80-20-50-60-180-300-6-3-", "welcome": "& & & &;& & & &", "schedule": "sun-sat;00:00-23:59", "form": "Totality|true", "quality": "", "dialstring": "SIP/CLEVERSIP/9898", "voicemail": "", "queue_survey": 1, "queue_timeout": 600, "auto_answer": "FALSE", "show_dispositions": 1, "queue_breaks": "", "screen_recording": 0, "language": "en", "transferCampaigns": "" } ] Respuesta de error 0 Get Dialers To obtain the list of uContact dialers, this API needs to be used. For example, if we want to create a dropdown menu from another application to display the dialers and perform a specific action. You can check the Colección de Postman to see an example and test it with your instance. All data enclosed in {{ }} are values that will be replaced with the client's own data and/or the corresponding instance. HTTP Request Method Resource POST /Integra/resources/Dialers/get Request Header Key Value Authorization Basic {{Token}} Code Examples You can copy the following code examples and replace the "{{variable}}" with the correct data. HTTP POST /Integra/resources/Dialers/get HTTP/1.1 Host: {{instance}}.ucontactcloud.com Authorization: Basic {{Token}} cURL curl --location --globoff --request POST 'https://{{instance}}.ucontactcloud.com/Integra/resources/Dialers/get' \ --header 'Authorization: Basic {{Token}}' JavaScript const myHeaders = new Headers(); myHeaders.append("Authorization", "Basic {{Token}}"); const requestOptions = { method: "POST", headers: myHeaders, redirect: "follow" }; fetch("https://{{instance}}.ucontactcloud.com/Integra/resources/Dialers/get", requestOptions) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); JQuery var settings = { "url": "https://{{instance}}.ucontactcloud.com/Integra/resources/Dialers/get", "method": "POST", "timeout": 0, "headers": { "Authorization": "Basic {{Token}}" }, }; $.ajax(settings).done(function (response) { console.log(response); }); C# var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://{{instance}}.ucontactcloud.com/Integra/resources/Dialers/get"); request.Headers.Add("Authorization", "Basic {{Token}}"); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync()); Java OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("text/plain"); RequestBody body = RequestBody.create(mediaType, ""); Request request = new Request.Builder() .url("https://{{instance}}.ucontactcloud.com/Integra/resources/Dialers/get") .method("POST", body) .addHeader("Authorization", "Basic {{Token}}") .build(); Response response = client.newCall(request).execute(); Python import http.client conn = http.client.HTTPSConnection("{{instance}}.ucontactcloud.com") payload = '' headers = { 'Authorization': 'Basic {{Token}}' } conn.request("POST", "/Integra/resources/Dialers/get", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) HTTP Response Responses in which an error occurred due to the sent data will generally be delivered with an HTTP code 200 and a '0' in the response body; therefore, caution should be exercised when validating the HTTP Code Response. The successful response will be a JSON-formatted text corresponding to an array of objects, where each object represents a dialer. Successful response [ { "campaign": "DEMO007<-", "schedule": "mon,tue,wed,thu,fri,sat;08:00-21:00", "dialertype": "PowerDialer", "status": 1, "dialstring": "SIP/CLEVERSIP/9898", "context": "PowerDialer", "exten": "${EXTEN}", "am": 0, "sound": "", "maxchannels": 2, "variables": "FORM=Totality:language=default:initialSilence=1500:greeting=2000:afterGreetingSilence=1000:totalAnalysisTime=2500:minWordLength=100:betweenWordSilence=50:maxNumberOfWords=2:silenceThreshold=256", "timeout": 30, "callerid": "18885751288", "retries": 0, "callerpres": 20, "tbc": -5, "dncr": 1, "schedulephones": "0=HMW:1=HMW:2=HMW:3=HMW:4=HMW:5=HMW:6=HMW:7=HMW:8=MWH:9=MWH:10=MWH:11=MWH:12=MWH:13=MWH:14=MWH:15=MWH:16=MWH:17=MWH:18=MWH:19=HMW:20=HMW:21=HMW:22=HMW:23=HMW", "autoanswer": 1, "tbc_nocontact": 0, "earlymedia": 0, "recyclecount": 0, "recycle": "[]", "country": "", "rule": "NONE", "autoconvertcallerid": 0 } ] Error response 0 Agent Training uContact Agent is a module focused on the call center agent as a total integration solution with functionalities of: data capture, status supervision and communications integrated with the platform. The Agent's Profile Take the following training course to complete your uContact #Agent certification. Start with an introductory video that will help you get an overview of an agent's workspace in our solution and walk out an expert.   The Softphone Learn how to use the uContact Softphone, developed natively in the solution using WebRTC technology. With it you will be able to initiate and/or answer calls directly from the platform just as you would from a desk phone, thus significantly reducing your time between calls. The Agent's Interface Personalize your uContact workspace so that your user experience with our solution is as close as possible to your tastes, preferences and personality. How? Watch this video and learn how to set your personal avatar, default wallpaper, and more!   The Unified Inbox With uContact's unified inbox, agents can connect with customers on the digital channel of their choice without having to switch between browser windows. Here we tell you everything you need to know about how to manage your digital interactions on the same screen using our unified inbox.   The agent Workspace Training Supervisor uContact Supervisor is responsible for all system management, manages and monitors campaigns and autodialers; permissions, users, providers can be created and workflows are configured along with forms and reports. Supervisor Interface Canned Responses Creation and Modification How to manage canned responses: Prerequisites: Permissions: Supervisor access is required to create or manage Canned Responses. Availability: This feature is available for all campaign types except Telephony and Email. Creating a New Canned Response Click on the Campaigns button and select your desired campaign type (e.g., Webchat, SMS).  2. Choose the specific campaign you want to configure. Scroll down to the bottom of the settings page to locate the Canned Responses section, then click the + (Plus) icon to add a new response. 3. A dialog box will appear. Enter a  Title and the Text for your response, then click Add . 4. Once added, click Save on the main page to apply the new Canned Response to your campaign. Deleting a Canned Response: 1. Select your campaign and scroll down to the Canned Responses section. 2. Locate the response you wish to remove and click the  - (Minus) icon next to it Editing a Canned Response Select your campaign and scroll down to the  Canned Responses section. Click on the Canned Response you wish to modify, then click directly on its text area.  3. A dialog box will open where you can edit both the title and the text. Once you have made your changes, click add. 4. Finally, click  Save on the main campaign settings page to ensure your updates are applied. How to Create a New Agent Follow these steps to create and configure a new agent in the system: 1. Go to the main navigation bar, select the  Users option, and then click on Agents . 2. Fill in the Agent Information the Agents section will open. Complete the form by providing the requested details for the new agent: User Name: Enter the username the agent will use to log into the system Full Name: Enter the agent's complete first and last name. Phone: Enter the agent's assigned extension. (Note: Please verify that this extension is not already in use). Password: Assign a temporary generic password ( e.g.123456)  The system will automatically prompt the user to change it upon their first login. Email: Enter the agent's email address (if applicable). Temporary account : Grants temporary access to uContact Encodes check box: Codecs used by the provider Language: Select the user's preferred language for the system interface Supervisor: Checking this option will grant the user full supervisor privileges within the system (Supervisor menu and spymode) Administrative: User with access to the supervisor menus and privileges but without a phone and spymode How to Add Users to Campaigns Important Consideration: To fully activate a user, the agent must be added to a voice campaign. This step is mandatory for account activation, even if the selected campaign is currently inactive. 1. Access the Campaigns Menu Go to the side menu, select the Campaigns section, and choose the appropriate campaign type. 2. Select the members tab, locate and select the specific campaign you want to modify. 3. Find the User Search for the agent you wish to add from the available users list and click on their name. 4. Add the Agent Once both the campaign and the agent have been selected, click the Add button. 5. Verify the Addition Double-check that the user now successfully appears within the campaign's active list of agents. Q&A How to create an agent Database QUEUE_LOG_REPO Information of the queue calls state of campaigns input or output. Parameter details origid: Original id (can be repetead). datetime: Datetime of the event. callid: The call id. queuename: Campaign name. event: Check event list. data a data5: Depends on the event. Events Event Description data1 data2 data3 data4 data5 AGENTLOGIN Agent Login. N/A N/A N/A N/A N/A AGENTLOGOFF Agent logoff. Seconds logged in. logintime N/A [automatic] N/A ABANDON The caller abandoned their position in the queue. The position is the caller's position in the queue when they hungup, the origposition is the original position the caller was when they first entered the queue, and the waittime is how long the call had been waiting in the queue at the time of disconnect. position origposition waittime COMPLETEAGENT The caller was connected to an agent, and the call was terminated normally by the agent. The caller's hold time and the length of the call are both recorded. The caller's original position in the queue is recorded in origposition. holdtime calltime origposition N/A N/A COMPLETECALLER The caller was connected to an agent, and the call was terminated normally by the caller. The caller's hold time and the length of the call are both recorded. The caller's original position in the queue is recorded in origposition. holdtime calltime origposition N/A N/A CONNECT The caller was connected to an agent. Hold time represents the amount of time the caller was on hold. The bridged channel unique ID contains the unique ID of the queue member channel that is taking the call. This is useful when trying to link recording filenames to a particular call in the queue. holdtime bridgedchanneluniqueid ringtime N/A N/A ENTERQUEUE A call has entered the queue. URL (if specified) and Caller*ID are placed in the log. N/A callerid N/A N/A EXITEMPTY The caller was exited from the queue forcefully because the queue had no reachable members and it's configured to do that to callers when there are no reachable members. The position is the caller's position in the queue when they hungup, the origposition is the original position the caller was when they first entered the queue, and the waittime is how long the call had been waiting in the queue at the time of disconnect. position origposition waittime N/A N/A EXITWITHKEY The caller elected to use a menu key to exit the queue. The key and the caller's position in the queue are recorded. key position origposition waittime N/A EXITWITHTIMEOUT The caller was on hold too long and the timeout expired. The position in the queue when the timeout step is recorder as the position entered and the amount of time I hope. position origposition waittime N/A N/A RINGNOANSWER After trying for ringtime ms to connect to the available queue member the attempt ended without the member picking up the call. ringtime   N/A   N/A N/A N/A REALPAUSE/REALUNPAUSE The Agent was change to Pause or Unpause pausetime: time in seconds on unpause pausetime   N/A N/A  N/A N/A UNBREAK/BREAK Break with motive(descanso), have account that between BREAK and UNBREAK motive: BATHROOM, TRAINING, LUNCH, PERSONAL, OTHER. on breaktime in seconds when unbreak. motive comment breaktime N/A N/A   OUTCALL Call for out call, status of the ended call, duration in seconds since answered, total time in seconds, dialed number and unique id. dialstatus duration totaltime  dialednumber guid   PAUSE/UNPAUSE  Telephony Pause per campaign. We do not use in reports. PAUSEALL/UNPAUSEALL Telephony When Paused on all campaigns. We do not use in reports. ATTENDEDTRANSFER BLINDTRANSFER TRANSFER  Completed Call by Agent Until Transfered extension context holdtime calltime origposition HOLD Agent put call on hold channel calleridname calleridnum connectedlinename connectedlinenum UNHOLD Agent unhold the call, this event can be missing if call is hang before unhold by the agent channel calleridname calleridnum connectedlinename connectedlinenum FINISHWRAPUP If an agent finish wrapup before its time this event rises to tell you how much time left he had timeleft ADDMEMBER A member was added to the queue. N/A N/A N/A N/A N/A AGENTDUMP The agent dumped the caller while listening to the queue announcement. N/A N/A N/A N/A N/A CREATEDQUEUE A new queue was created N/A N/A N/A N/A N/A QUEUESTART The queueing system has been started for the first time this session. N/A N/A N/A N/A N/A REMOVEMEMBER A queue member was removed from the queue. N/A N/A N/A N/A N/A CDR_REPO Call Detail Record. Parameter details calldate:  Start date of the call. clid: Callerid complete name and number. src: Source. dst: Destination. dcontext: Destination context. channel: Source channel. dstchannel: Destination channel. lastapp: Last workflow activity. duration: Total duration. billsec: Duration from answered. disposition: Resut of the call. amaflags: Not used. accountcode : Agent name or other. userfield: Where we tag the record. uniqueid : Call id. type: If was recorded. guid: Unique id and recording name. causecode: Code of the provider when the call finish. campaign: Campaign name. charged_balance: For virtual pbx billing. real_balance : For virtual pbx billing. note: For billing. contact: Id of the dialer contact. finishtime: If configured Tagging recording this is the date/time of finish adding disposition code. rating : Mean of the quality . dialerbase: Name of the dialer base. SMS_REPO Text messages. Parameter details id: Unique id. idm: Depends on the API used. campaign: Campaign.  dateprocessed: Date of sent or arrival. direction: I o O (inbound or outbound). callerid: Source or origen. message: Short text message. agent: Agent. smsbase : Dialer base. result: Depends on the API. readsms : si fue leido sessionid : guid para session con agente  WEBCHAT_LOG_REPO Events Evento Descripcion data1 data2 data3 data4 data5 ABANDON El cliente abandonó en una cola antes que lo atendieran. position es donde estaba en el momento de cortar, origposition es en la posición que entro inicialmente, waittime es el tiempo que espero hasta cortar. position origposition waittime email COMPLETEAGENT El que solicito fue conectado a un agente, y el chat fue terminado normalmente por el agente. El holdtime del agente y la duración de la llamada son guardadas al igual que la posición inicial donde entró la llamada a la cola. holdtime chattime origposition messageqt N/A COMPLETECALLER El que llamó fue conectado a un agente, y el webchat fue terminado normalmente por el que llamó. El holdtime del agente y la duración del webchat son guardadas al igual que la posición inicial donde entro el webchat a la cola. holdtime chattime origposition messageqt N/A CONNECT El solito el chat fue conectado a un agente, se graba el tiempo que espero en ser atendido, nombre del agente que atendió la llamada. holdtime agent email N/A N/A ENTERQUEUE Entro un webchat a la cola name email phonenumber N/A N/A REENTERQUEUE A chat was restored when server was started name email phonenumber N/A N/A TRANSFER -- - - - - - OUTOFTIME El cliente solicito un chat pero la campana no estaba en hora - - OUTCALL Una llamada por web chat fue terminada audio/video duration dialednumber webchatguid NOAGENTS The clients starts an interaction but there are no agents available for that campaign. (data1 and data2 will be saved only if existing data) email name MAXQUEUE Number of active chats for that campaign (waiting and attended) overflows the established value in Max Chats. (data1 and data2 will be saved only if existing data) email name TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to STARTCALL ENDCALL STARTVIDEOCALL ENDVIDEOCALL SMS_LOG_REPO Events Event Description data1 data2 data3 data4 data5 COMPLETEAGENTOUT An interaction started by an agent has finished. chattime messageqt number COMPLETEAGENT Cient's interaction was attended and finished normally by an agent. Agent's Holdtime and call duration data get saved as well as the initial position when the interaction entered the queue.  holdtime chattime origposition messageqt N/A CONNECT SMS interaction got connected to an agent. Waiting time, agent that attended the interactin and clients phone number gets saved. holtime agent number N/A N/A ENTERQUEUE The clients sends a SMS interaction and because the campaign is on time, the interaction enters the queue number N/A N/A N/A N/A REENTERQUEUE A chat was restored when server was started. number N/A N/A N/A N/A HOLIDAYMESSAGE The campaign sends back a SMS explaining the campaign is closed because its a holiday day number message N/A N/A N/A OUTOFTIME The SMS campaign is out of time, the client's phone number gets saved. number message N/A N/A N/A OUTSMS Its generated when an agents starts and SMS interaction. number N/A N/A N/A N/A TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to EMAIL_LOG_REPO Events Event Description data1 data2 data3 data4 data5 COMPLETEAGENTOUT An interaction started by an agent has finished. chattime messageqt adress COMPLETEAGENT Cient's interaction was attended and finished normally by an agent. Agent's Holdtime and call duration data get saved as well as the initial position when the interaction entered the queue.  holdtime chattime origposittion messageqt N/A CONNECT Email interaction got connected to an agent. Waiting time, agent that attended the interactin and email address gets saved. holdtime agent address N/A N/A HOLIDAYMESSAGE The campaign sends back an email explaining the campaign is closed because its a holiday day number message N/A N/A N/A ENTERQUEUE The clients sends an email interaction and because the campaign is on time, the interaction enters the queue number N/A N/A N/A N/A REENTERQUEUE A chat was restored when server was started. number N/A N/A N/A N/A OUTEMAIL Generated when an agents starts an email interaction address subject N/A N/A N/A STARTEMAILDIALER Generated when a dialers is executed spool length N/A N/A N/A N/A FINISHEMAILDIALER Generated when the dialer finished its process spool length N/A N/A N/A N/A STOPEMAILDIALER Generated when the dialer stops spool length N/A N/A N/A N/A TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to BLACKLIST It is generated when an incoming email belongs to a blacklist. An interaction is not generated. Email address, subject and email email_id (that matches with the email saved in email_repo) is saved. If an agent started the interaction, the agent name is recorded. adress subject email_id FORWARDED Forward an interaction's email to another email address address forwarded subject forwarded email_id used to identify unique emails in email_repo NEWEMAILCLIENT The client sent a new email while interaction was opened client’s address NEWEMAILAGENT The agent sent a new email while interaction was opened client’s address TWITTER_LOG_REPO Events Event Description data1 data2 data3 data4 data5 COMPLETEAGENT Cient's interaction was attended and finished normally by an agent. Agent's Holdtime and call duration data get saved as well as the initial position when the interaction entered the queue.  holdtime chatttime origposittion messageqt N/A CONNECT Twitter interaction got connected to an agent. Waiting time, agent that attended the interactin and clients Twitter username gets saved. holdtime agent id client client username ENTERQUEUE The clients sends an interaction and because the campaign is on time, the interaction enters the queue address subject REENTERQUEUE A chat was restored when server was started. address subject HOLIDAYMESSAGE The campaign sends back an email explaining the campaign is closed because its a holiday day address message OUTTWEET Generated when an agents starts a Tweet addres subject TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to MESSENGER_LOG_REPO Events Event Description data1 data2 data3 data4 data5 COMPLETEAGENT Cient's interaction was attended and finished normally by an agent. Agent's Holdtime and call duration data get saved as well as the initial position when the interaction entered the queue holdtime chattime origposittion messageqt N/A CONNECT Messenger interaction got connected to an agent. Waiting time, agent that attended the interactin and clients Twitter username gets saved. holdtime agent id client client username ENTERQUEUE The clients sends an interaction and because the campaign is on time, the interaction enters the queue address message REENTERQUEUE A chat was restored when server was started. address message HOLIDAYMESSAGE The campaign sends back an email explaining the campaign is closed because its a holiday day address message TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to FACEBOOK_LOG_REPO Events Event Description data1 data2 data3 data4 data5 COMPLETEAGENT Cient's interaction was attended and finished normally by an agent. Agent's Holdtime and call duration data get saved as well as the initial position when the interaction entered the queue holdtime chattime origpossition messageqt N/A CONNECT Facebook interaction got connected to an agent. Waiting time, agent that attended the interactin and clients Twitter username gets saved. holtime agent id client client username ENTERQUEUE The clients sends an interaction and because the campaign is on time, the interaction enters the queue post id message REENTERQUEUE A chat was restored when server was started. post id message HOLIDAYMESSAGE The campaign sends back an email explaining the campaign is closed because its a holiday day post id message OUTFACEBOOK Generated when a new Facebook post is made by the agent post id message TRANSFERRED The interaction was tranferred from an agent to another. 'From' indicates the agent's name that transfered the interaction and 'To' represents to whom it was tranfered. from to ATTENDED The interaction was attended by the agent from to TAGS Call tags. Parameter details id:  Automatic. datetime:  Of the tag. user:  Who tag. guid:  Unique id. time:  Time in seconds of the recording tag. comment:  Of the tag. SIPCHAT Chat between agents and supervisors. Parameter details id:  Automatic. datecreated:  Of the message. src:  Source. dest : Destination. message:  Text message. srcagent:  Source agent. dstagent:  Destination agent. status:  Message status (SUCCESS, FAILURE) AUDITORY System auditory. Parameter details id: Automatic. datetime: Of the event. userid: User. host: Source ip address. action: Action. BLACK_LIST_HISTORY Historical of the do not call registry or who tried to enter. Parameter details id: Automatic. calldate: Date time of the intent. src: Agent. dst: Inbound or outbound number. DIALERS To Load dialers directly on the database you have first to insert the calls_spool and then the dialer_base, check that there is no other active list for this campaign or insert inactive. CALLS_SPOOL Parameter details campaign: Dialer campaign. destination:  Phone to dial. status: Status (1 ready, 0 in progress, 3 black list blocked). data: Variables for workflows and forms. alternatives: List delimited by : of alternative phones. contact: Contact id for the CDR trace. dialerbase : List name. priority: Prioridad (9999 usually, never 1 but can be > 1 so the smaller values are executed first). agentphone : For progressive this is the agent extension  . DIALER_BASE Parameter details id: Autogenerated. campaign: Dialer campaign name. name: List name. records: Count of records. active: If active. percentage : how many records get from that list in one run Academy Training Agenda Agent Estimated time: 1 hour Operation Requirements Agent Interface Description Phone Breaks Forms Typifications Incoming and outgoing calls Supervisor Estimated time: 1 hour Overview general functionalities Operation Requirements Description Interface Supervisor Administrator  Agents Campaigns Dailers Audios Supervisor Agent Monitoring Dailer Monitoring  Recordings Reports TCPA Introduction Staying compliant with regulations, like the TCPA (Telephone Consumer Protection Act), is critical. However, many solutions that help contact centers follow these rules either slow down operations or aren't thorough enough to ensure compliance. This hurts both productivity and effectiveness. Our TCPA PREVIEW and TCPA PROGRESSIVE dialer solutions strike the right balance. It helps your contact center meet TCPA requirements without compromising productivity. We offer tools designed to simplify compliance processes, giving you better control over operations while keeping efficiency high. This way, you can handle compliance confidently while boosting performance. Contact us at sales@cleverideas.com.mx to schedule a call to get your TCPA dialer solution configured. TCPA definition The Telephone Consumer Protection Act or TCPA is a federal statute signed into law to stop the growing trend of unwanted telemarketing calls to consumers. Signed in 1991, this law aims to restrict unwanted solicitations, specifically telemarketing, with the use of automated phone equipment and automated dialers. It restricts the use of pre-recorded voice messages, robocalls, SMS, and fax, especially for the purpose of selling goods and services. The law emphasizes that without explicit customer consent, businesses must strictly follow prescribed solicitation rules for contact center compliance. Consumer consent is a big part of the law and should be the focus of any business that directly communicates with customers. TCPA Do not call registry The National Do Not Call Registry refers to a list or registry of phone numbers from people who communicated their preference to limit the number of telemarketing and other solicitation calls they receive. Registration is free for consumers and can apply to both home and mobile phone numbers. Subscribers who still receive unwanted calls when their number has been registered for 31 days can report the incidents to the Federal Trade Commission (FTC), who manages the registry itself. The registry is enforced by the FTC, the Federal Communications Commission (FCC), and state officials. TCPA compliant dialer One of the main items of contention concerning how businesses can keep themselves compliant would be the definition of autodialers and predictive dialers. Under the TCPA, any device with the capacity to store and produce telephone numbers that are random or sequentially generated, then dial the said stored phone numbers, can qualify as an ATDS (automatic telephone dialing system) or autodialer. The Ninth Circuit panel double-downed on this with their declaratory ruling, which applies a more expansive definition of an autodialer. According to them, any device that can dial stored telephone numbers,, “whether or not the numbers were generated by a random or sequential number generator” is still considered an autodialer or automatic telephone dialing system (ATDS) under the TCPA rules and regulations. Businesses are advised to be more vigilant when it comes to interpreting the definition of an autodialer. While the Ninth Circuit panel’s stand on this can still be reversed in the higher courts or may be clarified further in the future, your current call center software’s dialing feature may still fall under what FCC interpretation defines as an autodialer under the TCPA rules. You may find that your business is committing illegal robocalls without knowing it. TCPA Restrictions Explicitly, this law prohibits contact with consumers unless your organization has “prior express consent”. This applies to telemarketing, text messages, faxes, and pre-recorded calls or robocalls. While that sounds simple enough, there are intricacies to the law that your business might want to be familiar with, like: Consent does not survive when the telephone number is reassigned. You may still be in violation if the number called is reassigned or a wrong number. Consumers may revoke consent at any time through a reasonable way. It also means that your business has to provide consumers with a reasonable way to opt-out of their consent. Phone service companies can provide robocall blocking to consumers There are still instances where companies are allowed to automatically dial calls or where a dialer sends text messages to wireless phones even without consumer consent. This only applies to alerts and notifications about potential fraud or important reminders such as medication refills. Even then, companies still have to provide consumers with an option to opt out of the notifications. Compliance Preview Dialers We have 2 very simple Dialing options to comply with TCPA: Preview Dialer first calls the agent and the agent initiates the call, they can then decide whether to dial it or not. Progressive Dialer is the same as Preview but with portfolio allocation, allowing segmentation Compliance : Reduces regulatory risks by eliminating automated calls. Improved Customer Experience : Customers interact with agents immediately, rather than experiencing a delay. Personalization : Agents can tailor conversations based on customer information. Dynamic AI Dialer Optimization (DADO) DADO is an AI-powered system that dynamically optimizes outbound call strategies while ensuring compliance with FCC regulations. It combines real-time consent verification, intelligent call routing, and post-call compliance audits. Key Features Real-Time Consent Validation : Verifies customer consent before initiating calls. Interactive Voice Consent (IVC) : Captures verbal consent during calls. Post-Call Audits : Generates compliance reports summarizing consent status, script adherence, and customer sentiment. Benefits Compliance Assurance : Automates compliance checks to prevent violations. Operational Efficiency : Optimizes dialing strategies to balance compliance and efficiency. Enhanced Customer Trust : Personalizes call timing and ensures transparent consent handling. Note Requires service hours for integration with our dialer solution and additional cost per minute applies for AI services. Interactive Voice Consent (IVC) Even though our Customers have the responsibility of getting consent from their end users we can implement services such as IVC as an alternative to get it by providing options via voice prompts by adding a feature to prompt for verbal consent before proceeding with the call and keep the recording for future reference and if the end-user does not want to accept, we can include an option to opt-out and include in a DNC (Do Not Call) list  Conclusion These solutions provide a comprehensive approach to complying with FCC regulations while maintaining customer satisfaction and operational efficiency. Each method addresses key compliance challenges and offers clear benefits, with DADO serving as the most innovative and scalable option.