I wrote an IVR Using UCMA 4.0, incoming call answered using UserEndpoint and the endpoint create a back to back call to callee.
I want to record this AVcall. What ca I do?
I read that I can create a conference and create b2b call from conference to caller and callee and Record Audio using ApplicationEndpoint but I want an example or simpler way.
Can I record all calls with Exchange if no please show me an example.
Thanks
UCMA B2BCall's are media-less. i.e. the RTP stream goes directly between the source and destinations of the call. UCMA can only record calls that are terminated at the UCMA application (basically non B2BCalls). So UCMA B2BCall's are only in the signally path (sip) only.
This is why it's complex to record B2BCalls and is the reason why you have to turn the call into a conference call. Then you can add a (hidden) participant into the conference that you can use to record it with.
You can look at the Microsoft UCMA reference application ContactCenter for
an example of the conferencing support and adding the hidden participant.
Once you have the hidden participant then using it to record is easy.
Related
We have a scenario with two group calls.
Call 1 has two Participants : Party "A" and a call handling BOT (BOT1)
Call 2 has three Participants : Party "B", Party "C" and a call handling BOT (BOT2)
All parties are normal Teams users.
We want to transfer Party B from Call 2 to Call 1 using BOT2
We are trying to do this with the Transfer() function, using example 5 from this reference
https://learn.microsoft.com/en-us/graph/api/call-transfer?view=graph-rest-1.0&tabs=csharp#example-5-call-transfer-from-a-group-call
However there is some confusion over what setting we should apply to the parameters.
I am assuming that the ID and DisplayName of the transferTarget should be those of Party C
What should the ID and Participant ID of the transferee be set to ?
Note that it is implicit that the ID is not that of Party C as given in the tranferTarget block,
This is because in the example referenced, the two values are different.
I have checked the sample code at
https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-calling-meeting/
but this does not demonstrate transferring using the transferee block, just the simple case of transferring an user into a call.
Can anyone shed any light on what to set the transferTarget and transferee values to in order to meet the requirements of the scenario described ?
A consultative transfer means that the transferor can inform the person they want to transfer the call to (the transferee), before the transfer is made. This is opposed to transferring the call directly.
Transfer Target: The new party being introduced into a call with
the Transferee.
participantId : The ID of the target participant.
So the ID and display name should be target participant.
also please note the below supported scenario in Group call-
If bot wants to invite another PSTN to join, the P2P call will be escalated into a group call. So far we don't support escalation by adding PSTN. We are working on this feature now and it will be ready soon.
So, here are some scenarios:
P2P call between Bot and another peer (Teams user, PSTN), bot invites
another PSTN: Not supported.
P2P call between Bot and another peer (Teams user, PSTN), bot invites
another Teams user: Supported.
P2P call between Bot and another peer (Teams user, PSTN), bot invites
another bot: Supported.
Reference Document-https://learn.microsoft.com/en-us/graph/api/call-transfer?view=graph-rest-1.0&tabs=http#request-body
In my existing app we use the https://www.twilio.com/labs/twimlets/conference feature :
var strURI = "http://twimlets.com/conference?Name=" + channelId.ToString() + "&Message=Welcome&Music=http://bter.com/radio/radio2.xml";
TwilioClient.Init(_twilioConfiguration.AccountSid, _twilioConfiguration.AuthToken);
var application = await ApplicationResource.CreateAsync(voiceUrl:new Uri(strURI), friendlyName: channelId.ToString());
My app then allows users in their browser to join in a special audio conference bridge to participate in training. It does not involve any phone number.
We have a need to route the stream to the Google Speech to Text API so we can use a custom dictionary.
In the examples I have found, and exercised
twilio phone-numbers:update 14805551212 --voice-url http://b74c35a792ff.ngrok.io
It seems like the phone number is configured in Twilio so that on connecting it opens a web socket stream to the endpoint (a ngrok endpoint proxy is common in the examples) .
In my situation, I wish to programmatically tell the dynamically created conference room to open a voice stream to a specific endpoint (for example http://b74c35a792ff.ngrok.io).
Is there an API call I can make to Twilio or additional settings I can add to the twimlets.com/conference to achieve this?
Twilio developer evangelist here.
When you set up a phone number with a voice URL in Twilio it doesn't connect via web sockets. Instead, when a phone call is made to the Twilio number it will make an HTTP request, a webhook, to the voice URL you provide. Similarly, when you create a new call via the REST API and provide a URL, Twilio will make an HTTP request to that URL when the call connects.
In both instances, Twilio is asking your application for instructions for what to do next. Those instructions are supplied by responding to the HTTP request with a subset of XML called TwiML. The XML elements and attributes describe what Twilio should do next with the call, like speaking a message, playing an audio file, gathering user input or dialling another number or into a conference.
When you use the Conference Twimlet, the URL you are providing returns TwiML to direct the call into a conference.
The Conference Twimlet does not provide any way to stream the audio from it. In fact, conferences in general do not make it easy to get the audio unless you literally dial into the conference itself. You could set up to stream the audio of each of the conference participants to your own websocket server by forking their audio before they join the conference using <Start><Stream> before redirecting to the conference Twimlet.
Sorry this isn't a full answer, but hope it helps.
I'm trying to integrate Teams with an external service by using a Teams Bot/App. The app should call an external API with the caller-ID of the incoming PSTN call.
My success went so far, that I could get a list of the last calls but they were far away from being realtime and the caller-ID was masked.
Is it possible at all to "listen" to call metadata in realtime?
You can Retrieve the Call id by Subscribe for Microsoft Graph change notifications to be notified when your user's data changes, so you don't have to poll for changes. check Use the Microsoft Graph API to get change notifications also check this sample. when you subscribe to call
I have created a bot using bot framework (.net) with application hosted media using the sample provided here. Bot attends any incoming peer to peer or group calls in Microsoft Teams. While in the meeting I am able to receive audio buffers as participants speak up in AudioMediaReceived event handler inside CallHandler.cs class provided in the samples. Now I want to generate transcript out of it. I want some guidance about:
Can this be done at the end of the meeting, I am confused as it's stated on a number of places (1)(2) that
"You may not use this SDK to record or otherwise persist media content
from calls or meetings that your bot accesses"
.
In which scenario this fits? Is it possible to generate wave(.wav) file out of the byte array (UnmixedAudioBuffer data) received and use that for transcription at the end of the meeting?
Since we receive audio frames at a very quick pace (50 frames per second), If I am to generate the transcript asynchronously and real time, how should I do it. Is it about converting buffer data to .wav or in memory stream and using some cloud speech service/API?
There's a speech service provided by Microsoft as well as speech to text resource provided by Google cloud.
your guidance is highly appreciated.
It's a bad idea to try to get a bot to transcribe meetings for you for the reasons you've already seen. However, you're in luck because Microsoft already transcribes meetings automatically.
You can record a meeting in Teams by following the instructions here: https://support.microsoft.com/en-us/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24
If you save the recorded meeting to Microsoft Stream then you can even edit the transcript. If you save the meeting to OneDrive and SharePoint then this page implies the feature should be available in the future: https://support.microsoft.com/en-us/office/edit-the-transcript-of-a-meeting-recording-in-teams-2f461386-e39a-4444-b9e2-5787da1da11b
I wanted to build a small Bot for MS Teams who can remove noise from incoming users audio Stream. The edited audio stream should then be passed on to the call participants.
I already searched the Bot documentation on Microsoft but didn't find a definite yes or no.
Can someone please elaborate?
Thank you so much in advance!
You can get the call information using calling bot. Calling bot is used to call and join the meetings, You will receive an event when bot joins the call there you can perform the required actions. Here is the document for calling Bot and Example