This sounds pretty straightforward, but I'm not sure it's something I can do. I want to know what voice task a specific worker is currently working on (if any) without having to store this information on my side when the task is assigned to that worker.
The reason why I'm looking for this because I'm using conferences to pick up incoming calls to agents and I want to implement whisper/barge/coach for supervisors.
They'd know which agents are currently on a call (based on the agent's Busy activity) and based on the workerSid of the agent they want to coach, I want to be able to get the voice task they're currently working on and join that conference (since the TaskSid is also the conference friendly name).
I could loop through the current open tasks, trying to find the right one, but there doesn't seem to be anything on a task that is in an assigned status to indicate who it was assigned to.
The only way I can see to do this using only information I can get from Twilio is a bit too messy:
make a REST API call to https://taskrouter.twilio.com/v1/Workspaces/[workspaceSid]/Workers/[workerSid]/Reservations to get all reservations for that worker for all the tasks that currently exist in the workspace.
find all accepted reservations
loop through the tasks the reservations were made for
and find the latest voice task of those to use.
Any other way would seem to involve looping through conferences that are currently in progress, then loop through their participants to find the call leg made to the contact_uri of the agent to coach to identify the right conference to join, which would be even messier in my opinion.
I'm wondering if there's something obvious that I'm missing.
Twilio developer evangelist here.
The way that you've described seems to be the best way I can find to get this information from the API without storing anything yourself.
If you don't want to store the data in your own server, then you could update a worker's attributes with the current voice task SID. You still have to maintain listening for the end of the call and removing the attribute though.
Related
So, i'm relatively new to Vue, and I'm currently using it to build a small app that displays order data from Square's API.
I'm currently working on a stack that uses rails to make api calls using the square.rb gem. The frontend is entirely Vue which uses Pinia as a store, and there isnt going to be any kind of database behind this because reasons.
All data is provided directly via Square's API. I am currently polling to update order info, but my client wants to make this app truly real time, as it deals with food deliveries through ride-share companies and the purpose of this app is to show in real time statuses of orders for an in house screen at the restaurant.
Now Square has a webhook subscription service, and based on my reading it sounds like I can consume these to update my app, but there are a few logical leaps that I havent been able to make yet with how to get that data to the frontend of my app.
My questions are the following, with the intent being to connect the dots between the different technologies I might need to employ here to make this work. Kinda get a sense of what i'd need and where to link it up.
Can I use vue to consume webhook payloads directly and update through reactivity? That would be ideal, but I have found no docs yet that give me a good idea of whether thats possible.
If that is not possible, do I need to use some sort of socket connection (socket.io) to listen for these webhook updates?
If the current setup or proposed setup in the questions above is not feasible, what is a better solution for handling this while still using Vue?
I'm looking for a way to generate a Conference resource within the Twilio system before adding anyone to that conference.
The official recommended way to start a Conference is by returning TwilXML in response to a Twilio callback. This can either be done in response to someone calling a Twilio number or, in a somewhat indirect way, by making a call and returning TwilXML which will connect the person to a conference once they pick up. All of the APIs to modify conferences use the ConferenceSID as the handle to decide what conference to change. The problem with both of these methods is that they do not give you the ConferenceSID until you receive a callback.
Unfortunately callbacks do not contain any identifying information about who generated them. They do have a ConferenceSID (identifying the conference), and a CallSID (uniquely identifying the call connecting the caller to the conference). When you get your first callback, there appears to be no way to be able to match either of those identifiers. If you start multiple conferences and get two callbacks with different ConferenceSIDs and different CallSIDs, it is inconvenient to tell which conference is generating which callback.
That's why it would be easiest to create a conference resource and then use the versatile add participant call. This would simplify the entire backend flow for using conferences by starting with the ConferenceSID and going from there.
P.s. To head off other suggestions - there are ways around this. You can specify different callback URLs for different conferences. You can specify different friendlyNames for different participants which you can match in your backend. It's totally possible to work with, but I would like something cleaner, which would require making conferences before anyone is called.
Twilio developer evangelist here.
There is no way to create a conference resource from the API. You can only do so by directing a caller there with the <Dial><Conference> TwiML.
Further, I don't quite understand when you say "When you get your first callback, there appears to be no way to be able to match either of those identifiers." What are you trying to match? You could use the CallSid to look up the From number of the caller joining the conference. You also receive the FriendlyName in the callback, which is the name you set in the TwiML <Conference>Friendly Name</Conference> which you could choose to help determine which conference is which.
Does that help at all?
I am trying to put together analytics on Microsoft teams calls. I would like to get hold times, number of transfers, call time, etc. I came across this call https://graph.microsoft.com/beta/communications/callRecords and it gives me a list of calls with call times, but I can't find a way to get hold times, what line it came in on, etc. Greatly appreciate any pointers.
First of all, this end point https://graph.microsoft.com/beta/communications/callRecords only allows you to query a single call record using its ID, it does not support querying a list of call records for the whole tenant or for a specific user.
The only way currently to find this ID to query the call record is by setting up a web hook to receive change notifications. Refer to the following documentation for more info on change notifications.
To directly address your question, i am not one hundred percent sure but i believe the information you're looking for could be found inside the list of sessions and segments inside a call record.
I can see that for all the voice interactions, behind the scenes flex is using its voice API to create a conference between caller and worker. How do I obtain the created ConferenceSid after the task has been selected and reserved?
What I would like to do is simply Get the value upon connecting.
I can see a very long and not so pretty way of getting it, which is by running a twilio function that iterates over every conference, making additional requests to see the participants. But that seems way to complex to me.
I can see in the logs that the conference friendly is being printed
ConferencesState handleConferenceUpdate WT5d0800a3ce8724fd55cf89841c48XXX
Is there anyone who can help here?
UPDATE:
#philnash below answered the question exactly.
Twilio developer evangelist here.
There seems like a couple of ways to get hold of the Conference SID in a Flex interaction.
First, the task that your worker accepts has a number of attributes that are set by Flex and relevant for the type of task it is. For a voice call, you will find a conference key, which has an object including the sid as well as entries for the participants.
Secondly, I found that the <TaskCanvas> component in the UI is passed a context that includes a conference object. That object then has a source property which expands to an object with a conferenceSid property, as well as other properties, including a participants list.
Does that point you in the right direction?
I was recently trying to use the Twilio Studio to set up an IVR system to route the calls to the correct numbers based on the selected user input. I was able to create the following workflow and it works fine.
Here I am able to split the call based on user's input via keypad or voice and direct the call to the corresponding number. I am also able to track the number of times a user has pressed an invalid input and disconnect the call after a specific number of invalid inputs. It's all working fine.
Now I am trying to enqueue the calls so that users will stay in a queue while the agent is busy. I also want to forward the calls to a specif number and if that number does not pick or reject, call another number. This helps me to make sure that the calls are not missed. I also added a call forwarding option with recording enabled. But when I try to play the recording, it says an application error occurred.
I have been trying to contact support regarding the documentation or examples fo the above requirements, but it's very hard to get a reply as I don't have paid support enabled. Can anyone suggest good documentation with an example to handle my requirements.
Twilio developer evangelist here.
For queueing calls and then having more than one number called you should take a look at TaskRouter. It turns calls into tasks that can be assigned to workers via a workflow and can definitely handle your need to dial more than one person. You can then send your call into the workflow from Studio using the enqueue widget.
As for your recording issue, can you provide more detail? How did you add the call forwarding with recording option? How did you try to play the recording? Was there any more detail in the Twilio Debugger?