Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Dieses Feature von Azure Communication Services befindet sich derzeit in der Vorschau. Features in der Vorschau sind öffentlich verfügbar und können von allen neuen und vorhandenen Microsoft-Kunden verwendet werden.
Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Bestimmte Features werden möglicherweise nicht unterstützt oder Funktionen sind eingeschränkt.
Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.
In diesem Artikel wird beschrieben, wie ein unabhängiger Softwareanbieter (ISV) Teams Phone für den Umfang der Teams Phone-Erweiterbarkeit (TPE) bereitstellen kann. In diesem Artikel wird auch beschrieben, wie ein ISV seine Kunden leiten kann, da es Vorgänge in Teams gibt, die ein Mandant implementieren muss.
Vermutungen
- Der ISV-Kunde hat Zugriff auf das Teams Admin Center.
- Der ISV-Kunde hat Zugriff auf das Microsoft 365 Admin Center.
- ISV hat Zugriff auf änderungen der Azure Communication Services-Ressourceneinstellungen.
- Sie gewähren dem Teams-Mandanten Zugriff auf einen CCaaS-Dienst für die Verwendung der Graph-API.
- ISV verwendet das .NET ACS Call Automation SDK, Version 1.5.0-beta.1.
- ISV verwendet das JavaScript ACS Call Automation SDK, Version 1.5.0-beta.2.
- ISV verwendet das JavaScript ACS Client SDK, Version 1.36.1-beta.1.
Schnellstart
Der Rest dieses Artikels beschreibt Schnellstartanleitungen für zwei verschiedene Personas: „CCaaS Developer“ und „Teams Tenant“. Der CCaaS-Entwickler ist die ISV-Persona, die den CCaaS-Dienst mit Azure Communication Services erstellt. Der Teams-Mandant ist ein Kunde des ISV, der Microsoft Teams Telefon verwaltet.
CCaaS-Entwickler: Bereitstellen der AppID (Anwendungs-ID)
Bevor Sie einen Bot erstellen können, müssen Sie eine Anwendungs-ID registrieren.
Öffnen Sie im Azure-Portal App-Registrierungen.
Wählen Sie Neue Registrierung aus.
Füllen Sie die erforderlichen Felder aus, und klicken Sie auf "Registrieren".
Wenn das Portal die Ressource abgeschlossen hat, klicken Sie auf "Zur Ressource wechseln".
Notieren Sie die Werte für die Anwendungs-ID (Client) und Verzeichnis-ID (Mandant).
Öffnen Sie Zertifikate und geheime Schlüssel. Erstellen Sie einen neuen geheimen Clientschlüssel, und notieren Sie die Werte der Zertifikat- und geheimen ID.
Weitere Informationen finden Sie unter Registrieren eines aufrufenden Bots.
CCaaS-Entwickler: Erstellen des Bots
Sobald Sie das AppID
erstellt haben, verwendet das Teams-Telefonsystem auch den aktuellen Prozess, wie für Graph definiert, um einen Bot zu erstellen.
Alternativ können Sie die folgenden Schritte ausführen, um nur den Bot zu erstellen, nachdem Sie eine Anwendungs-ID mithilfe der Azure CLI erstellt haben.
Laden Sie Azure CLI herunter.
Melden Sie sich mit Ihrem Azure-Konto an, das für die vorherige App-Registrierung verwendet wurde:
az login
Falls noch nicht installiert, installieren Sie
Az.BotService
.Install-Module Az.BotService -AllowClobber
Stellen Sie den Bot mithilfe des folgenden Befehls bereit. Weitere Informationen finden Sie unter Veröffentlichen eines Bots mit Azure PowerShell – Azure AI Bot Service – Bot Service:
Wenn Ihre Umgebung bereits bereitgestellt wurde, überspringen Sie die folgenden Schritte.
Connect-AzAccount
Install-Module Az.Resources
Register-AzResourceProvider -ProviderNamespace Microsoft.BotService
Erforderlich:
New-AzBotService -ResourceGroupName <your RG name here> -Name "<name of Teams Phone bot>" -ApplicationId <your Application/ClientID from Entra> -Location <bot location> -Sku S1 -Description "<description of bot>"
Beispiel:
New-AzBotService -ResourceGroupName teamsphonetest-rg -Name "teamsPhoneBot" -ApplicationId aa123456-1234-1234-1234-aaa123456789 -Location "global" -Sku S1 -Description "My Teams Phone Test Bot"
Bei dieser Konfiguration von Teams kann der Webhook eine beliebige URL sein. Geben Sie eine beliebige gültige URL ein, wie z. B. https://mycompanydomain.com
.
Hinweis
In Zukunft wird davon ausgegangen, dass diese Abhängigkeit von DER URL entfernt wird.
Teams-Administrator: Ressourcenkonto bereitstellen
Der Teams-Administrator muss die folgenden Cmdlets ausführen. Der Teams-Administrator muss ein Teams-Ressourcenkonto für die Erweiterbarkeit von Teams Phone über Cmdlets bereitstellen. Teams Admin Center ist außerhalb des Gültigkeitsbereichs und erfordert PowerShell 6.1.1 oder höher.
Melden Sie sich bei Teams PowerShell an, und aktualisieren Sie sie auf die neueste Version, indem Sie diesen Befehl ausführen:
Beispiel:
Connect-MicrosoftTeams
Update-Module MicrosoftTeams
Verwenden Sie das CmdletNew-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell), um ein Ressourcenkonto zu erstellen. In diesem Befehl gibt es keine Änderung für die Erweiterbarkeit von Teams Phone. Der Anwendungs-ID-Parameter ist die Bot-ID Ihres Drittanbieters. Verwenden Sie die in Set-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) definierten Anwendungs-IDs der ersten Person nicht, da sie nicht für die Microsoft Teams Phone-Erweiterbarkeit funktionieren. Es liegt bei dem CCaaS-Entwickler, wie die Anwendungs-ID mit dem Teams-Mandanten kommuniziert wird.
Beispiel:
New-CsOnlineApplicationInstance -UserPrincipalName myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -DisplayName "My Teams Phone Resource Account"
Verwenden Sie den aktualisierten Befehl "Set-CSonlineApplicationInstance ", um das Ressourcenkonto Ihrer Azure Communication Services-Ressource zuzuweisen. Dieser Befehl leitet Aufrufe an diese Azure Communication Services-Ressource weiter. Es liegt beim CCaaS-Entwickler, wie das ACSResourceID
an den Microsoft Teams-Mandanten kommuniziert wird.
Beispiel:
Set-CsOnlineApplicationInstance -Identity myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -AcsResourceId bb567890-1234-1234-1234-bbb123456789
Verwenden Sie den aktualisierten Sync-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) -Befehl, um das Ressourcenkonto mit Ihrem Agent-Bereitstellungsdienst zu synchronisieren. Dieser Befehl leitet Aufrufe an diese Azure Communication Services-Ressource weiter. In diesem Befehl gibt es keine Änderung für die Erweiterbarkeit von Teams Phone.
Beispiel:
Sync-CsOnlineApplicationInstance -ObjectId cc123456-5678-5678-1234-ccc123456789 -ApplicationId aa123456-1234-1234-1234-aaa123456789
Optional können Sie das CmdletGet-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) verwenden, um das bereitgestellte Ressourcenkonto zurückzugeben.
Teams-Administrator: Erwerben und Zuweisen einer Telefonnummer zum Ressourcenkonto
Sie müssen Ihrem Ressourcenkonto (Resource Account, RA) eine PSTN-Nummer (Public Switched Telephone Network) zuweisen, um einen Anruf an diesen Endpunkt zu tätigen. Wir stellen nun eine Teams-Telefonnummer bereit und weisen sie Ihrem kürzlich bereitgestellten Teams-Ressourcenkonto zu.
Wechseln Sie zu Ihrem Teams Admin Center.
Melden Sie sich mit Ihren Benutzeranmeldeinformationen für Ihren Teams-Administrator an.
Wechseln Sie zum Abschnitt "Telefonnummer", und stellen Sie Ihre Wahl des Microsoft Teams-Telefonnummerndiensttyps bereit. Weitere Informationen finden Sie unter Servicetelefonnummern für Anrufpläne abrufen – Microsoft Teams. Nach der Bereitstellung müssen Sie die Telefonnummer Ihrem Ressourcenkonto zuweisen.
Führen Sie die folgenden Befehle aus, um Ihrem Ressourcenkonto die Microsoft Teams-Telefonnummer zuzuweisen:
Set-CsPhoneNumberAssignment -Identity <your-TeamsResourceAccount> -PhoneNumber <acquired-number> -PhoneNumberType <DirectRouting|CallingPlan|OperatorConnect>
Wenn Sie nicht sicher sind, welche Details Ihre Telefonnummer enthält, führen Sie das folgende
get
Cmdlet aus, um die Details der Telefonnummer abzurufen:Get-CsPhoneNumberAssignment -TelephoneNumber <acquired-number>
Haben Sie das Teams-Portal über den Mangel an geeigneter Lizenz benachrichtigt? Wenn ja, müssen Sie Ihrem Ressourcenkonto eine ordnungsgemäße Lizenz zuweisen.
- Wechseln Sie zu Ihrem Microsoft 365 Admin Center.
- Wechseln Sie zu Lizenzen, und weisen Sie Ihrem Ressourcenkonto ein Microsoft Teams Phone-Ressourcenkonto zu.
Wenn Sie auch ausgehende PSTN-Anrufe mit Ihrer zugewiesenen Telefonnummer für Ressourcenkonten tätigen möchten, ist jetzt ein guter Zeitpunkt, um einen Microsoft Teams-Anrufplan zuzuweisen.
CCaaS-Entwickler: Abrufen von Informationen zum Ressourcenkonto
Wir führen eine neue Graph-API ein, um eine Liste der Ressourcenkonten und der zugewiesenen Telefonnummern abzurufen. Die Graph-API unterstützt einen optionalen Filter für Ihren Erstanbieter von Microsoft Entra applicationID
/ clientId
.
Authentifizierung:
Die Graph-API unterstützt die delegierte Authentifizierung, wie derzeit in der Graph-Authentifizierung definiert.
Ermächtigung:
Microsoft Entra ID muss die Berechtigungen bei Microsoft Graph für die Referenz TeamsResourceAccount.Read.All anfordern. Führen Sie zum Zuweisen dieser Berechtigung die Schritte unter " Zuweisen delegierter Graph-Berechtigungen" aus.
Die Microsoft Entra-Anwendung benötigt auch die Administratorzustimmung.
Nachdem Sie der Microsoft Entra-Anwendung entsprechende Graph-Berechtigungen erteilt haben, müssen Sie den Benutzer dieser Anwendung zuweisen. Führen Sie die Schritte unter Verwalten von Benutzern und Gruppenzuweisung zu einer Anwendung aus.
Der CCaaS-Administrator benötigt außerdem erhöhte Berechtigungen für den Zugriff auf Microsoft Teams-Ressourcenkontoinformationen. Die Graph-API erhält Microsoft Teams-Ressourcenkontoinformationen und diese Informationen sind ein Objekt, das dem Teams-Administrator gehört. Daher ist der privilegierte Zugriff als Teams-Administrator erforderlich. Weitere Informationen finden Sie unter Berechtigungen zum Verwalten von Ressourcenkonten.
Abfragedefinition:
https://graph.microsoft.com/beta/admin/teams/resourceAccounts
Beispielhafte Anforderungs-URI (RURI), um Ressourcenkonten mit einem Filter auf „appId“ abzurufen:
GET https://graph.microsoft.com/beta/admin/teams/resourceAccounts?$filter=appid eq 'aa123456-1234-1234-1234-aaa123456789'
Erfolgreiche Antwort:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#admin/teams/resourceAccounts",
"value": [
{
"id": "cc123456-5678-5678-1234-ccc123456789",
"userPrincipalName": "myteamsphoneresourceaccount@contoso.com",
"appId": "aa123456-1234-1234-1234-aaa123456789",
"displayName": "My RA Name",
"phoneNumber": "tel:+1234567890",
"acsResourceId": "bb567890-1234-1234-1234-bbb123456789"
}]
}
CCaaS-Entwickler: Eingehenden Anruf empfangen und annehmen
Die folgenden Schritte veranschaulichen, wie Sie einen eingehenden Teams-Anruf empfangen und beantworten.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
- Eine bereitgestellte Ressource für Kommunikationsdienste. Erstellen Sie eine Communication Services-Ressource.
- Ein konfigurierter Event Grid-Endpunkt: Konzepte für eingehende Anrufe – Ein Konzeptdokument für Azure Communication Services | Microsoft Learn.
- Eine Teams-Telefonnummer, die dem Ressourcenkonto zugewiesen ist.
- Ein Microsoft Teams-Ressourcenkonto, das zum Senden von Anrufen an die Azure Communication Services-Ressource bereitgestellt wurde.
- Ein Teams-Ressourcenkonto, das mit einem Telefonieplan ausgestattet wurde.
- Eine Azure Communication Services-Ressource mit der Berechtigung zum Empfangen eines Anrufs aus dem Teams-Ressourcenkonto.
- Erstellen und Hosten eines Entwicklungstunnels.
- (Optional) Erstellen Sie einen Microsoft Teams-Benutzer mit einer Telefonlizenz, die sprachfähig ist. Teams Phone-Lizenz ist erforderlich, um Teams-Benutzer zum Anruf hinzuzufügen. Erfahren Sie mehr über die Microsoft Teams-Geschäftsoptionen. Weitere Informationen finden Sie unter Einrichten des Teams-Telefons in Ihrer Organisation.
- Holen Sie die Client- und Server-Zustimmungen ein, wie in Zugreifen auf die Teams-Telefonnummer eines Benutzers getrennt von seinem Teams-Client definiert.
Einrichten und Hosten Ihrer Azure Dev Tunnels
Azure Dev Tunnels ermöglichen es Ihnen, lokale Webdienste freizugeben, die im Internet gehostet werden. Führen Sie die Befehle aus, um Ihre lokale Entwicklungsumgebung mit dem öffentlichen Internet zu verbinden. Dev-Tunnels erstellen eine dauerhafte Endpunkt-URL und ermöglichen anonymen Zugriff. Wir verwenden diesen Endpunkt, um Ihre Anwendung über Anrufereignisse vom Azure Communication Services-Anrufautomatisierungsdienst zu benachrichtigen.
devtunnel create --allow-anonymous
devtunnel port create -p 8080
devtunnel host
Folgen Sie alternativ den Anweisungen zum Einrichten Ihrer Azure Dev Tunnels in Visual Studio.
Verarbeiten der Anrufautomatisierung bei Rückrufereignissen
app.MapPost("/api/callbacks", async (CloudEvent[] cloudEvents, ILogger < Program > logger) => {
foreach(var cloudEvent in cloudEvents) {
logger.LogInformation($"Event received: {JsonConvert.SerializeObject(cloudEvent)}");
CallAutomationEventBase parsedEvent = CallAutomationEventParser.Parse(cloudEvent);
logger.LogInformation($"{parsedEvent?.GetType().Name} parsedEvent received for call connection id: {parsedEvent?.CallConnectionId}");
var callConnection = callAutomationClient.GetCallConnection(parsedEvent.CallConnectionId);
var callMedia = callConnection.GetCallMedia();
if (parsedEvent is CallConnected) {
//Handle Call Connected Event
}
}
});
Ein eingehendes Anrufereignis bearbeiten und den Anruf annehmen
app.MapPost("/api/incomingCall", async (
[FromBody] EventGridEvent[] eventGridEvents,
ILogger<Program> logger) =>
{
foreach (var eventGridEvent in eventGridEvents)
{
// Handle system events
if (eventGridEvent.TryGetSystemEventData(out object eventData))
{
// Handle the subscription validation event.
if (eventData is SubscriptionValidationEventData subscriptionValidationEventData)
{
var responseData = new SubscriptionValidationResponse
{
ValidationResponse = subscriptionValidationEventData.ValidationCode
};
return Results.Ok(responseData);
}
}
var jsonObject = Helper.GetJsonObject(eventGridEvent.Data);
var fromPhoneNumber = new PhoneNumberIdentifier(Helper.GetFrom(jsonObject));
var toPhoneNumber = new PhoneNumberIdentifier(Helper.GetTo(jsonObject));
var incomingCallContext = Helper.GetIncomingCallContext(jsonObject);
var callbackUri = new Uri(new Uri(devTunnelUri), $"/api/callbacks");
var options = new AnswerCallOptions(incomingCallContext, callbackUri);
AnswerCallResult answerCallResult = await callAutomationClient.AnswerCallAsync(options);
logger.LogInformation($"Answered call for connection id: {answerCallResult.CallConnection.CallConnectionId}");
//Use EventProcessor to process CallConnected event
var answer_result = await answerCallResult.WaitForEventProcessorAsync();
if (answer_result.IsSuccess)
{
logger.LogInformation($"Call connected event received for connection id: {answer_result.SuccessResult.CallConnectionId}");
var callConnectionMedia = answerCallResult.CallConnection.GetCallMedia();
}
}
return Results.Ok();
});
Die Benachrichtigung über eingehende Anrufe ist wie folgt formatiert. Es gibt keine Änderung am Schema. Die to:rawid
spiegelt jetzt jedoch die Identität des GUID des Teams-Ressourcenkontos wider:
Beispiel für ein eingehendes Anrufereignis mit Teams-Ressourcenkontobezeichner und benutzerdefiniertem Kontext (VoIP und SIP):
{
"to": {
"kind": "unknown",
"rawId": "28:orgid:cc123456-5678-5678-1234-ccc123456789"
},
"from": {
"kind": "phoneNumber",
"rawId": "4:+12065551212",
"phoneNumber": {
"value": "+12065551212"
}
},
"serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkudGVhbXMubWljcm9zb2Z0LmNvbS9hcGkvdjIvZXAvY29udi11c3dlLTAyLXNkZi1ha3MuY29udi5za3lwZS5jb20vY29udi9fVERMUjZVS3BrT05aTlRMOHlIVnBnP2k9MTAtNjAtMTMtMjE2JmU9NjM4NTMwMzUzMjk2MjI3NjY1",
"callerDisplayName": "+12065551212",
"customContext":
{
"voipHeaders":
{
"X-myCustomVoipHeaderName": "myValue"
},
"incomingCallContext": "<CALL_CONTEXT VALUE>",
"correlationId": "2e0fa6fe-bf3e-4351-9beb-568add4f5315"
}
CCaaS Developer: So greifen Sie direkt auf Medien zu
Wenn die integrierten PlayTo-Optionen, erkennungs- und Aufzeichnungsoptionen, die im Lieferumfang des Anrufautomatisierungs-SDKs enthalten sind, nicht den Anforderungen des CCaaS-Diensts entsprechen, kann der CCaaS-Entwickler direkt auf Medien zugreifen. Der Zugriff auf Medien für Anrufe erfolgt über REST- und Websocket-Benachrichtigungsmechanismen, wenn das Objekt AnswerCallOptions
instanziiert wird. Sobald der Aufruf eingerichtet wurde, erfolgt der Medienfluss über WebSocket-Benachrichtigungen an die im MediaStreamingOptions
Objekt bereitgestellte URL. Sehen Sie sich den folgenden Beispielcodeausschnitt an:
Die folgenden Optionen sind nicht spezifisch für die Erweiterbarkeit von Teams Phone und sind auch für Nicht-Teams Phone-Erweiterbarkeitsflüsse verfügbar.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://mywebsocket.azure.com/client/hubs/media?accesstoken={access_token}"),
MediaStreamingTransport.WebSocket,
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
);
var answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri: new Uri(callConfiguration.AppCallbackUrl)) {
MediaStreamingOptions = mediaStreamingOptions
};
var response = await callingServerClient.AnswerCallAsync(answerCallOptions);
Der folgende Code ist eine Schemadefinition eines Streamingdatenobjekts. Die Audiopakete sind base64-codiert, und CCaaS muss den Wert im data
Attribut decodieren, um die Pulse-Code-Modulation (PCM)-Bytes abzurufen.
{
"kind": <string>, // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioData":{
"data": <string>, // Base64 Encoded audio buffer data
"timestamp": <string>, // In ISO 8601 format (yyyy-mm-ddThh:mm:ssZ)
"participantRawID": <string>,
"silent": <boolean> // Indicates if the received audio buffer contains only silence.
}
}
CCaaS-Cliententwickler: Authentifizieren als duale Persona
Entwickler müssen die Mandanten-ID und die Client-ID von Teams anfordern. Der Entwickler muss diese Übernahme implementieren. Sobald die Clientanwendung die Mandanten-ID und Client-ID abruft, implementiert der Entwickler die notwendigen Schritte, um den Benutzer zu einer Eingabe aufzufordern. Weitere Informationen finden Sie unter InteractiveBrowserCredential-Klasse (Azure.Identity).
Sobald die Benutzerinteraktion abgeschlossen ist und die Authentifizierung erfolgreich ist, wird ein Token zurückgegeben und an die AzureCommunicationTokenCredential-Klasse übergeben, um ein Azure Communication Services-Token zurückzugeben.
Azure Communication Services-Token analysieren, um die CommunicationUserIdentifier-Schnittstelle | Microsoft Learn zu erhalten.
Sehen Sie sich das im Leitfaden Erstellen einer Berechtigung zum Abrufen eines Microsoft Entra-Benutzertokens definierte Codebeispiel an.
CCaaS-Client-Entwickler: Wie man den Anrufagenten für die Erweiterung von Teams Phone erstellt
Entwickler instanziiert einen aufrufenden Client und ruft dann die createTeamsCallAgent-Methode auf. Weitere Informationen finden Sie unter CallClient-Klasse.
...
//Auth and get token
...
this._teamsCallAgent = await this._callClient.createTeamsCallAgent(this.tokenCredential);
CCaaS-Cliententwickler: Platzieren eines ausgehenden OBO-Anrufs
Entwickler müssen die OBO-Identitäts-ID des Ressourcenkontos (Identitäts-ID) abrufen, in deren Namen der Aufruf erfolgen soll. In den folgenden Artikeln wird beschrieben, wie man einen ausgehenden OBO-Anruf tätigt.
Nachdem die OBO-Identität erworben wurde, müssen Sie die onBehalfOfOptions
in der StartTeamsGroupCallOptions()
- oder StartTeamsCallOptions()
-Methode einstellen. Weitere Informationen finden Sie unter "StartTeamsGroupCallOptions"-Schnittstelle oder "StartTeamsCallOptions"-Schnittstelle.
Nachdem Sie die Aufrufoptionen festgelegt haben, verwenden Sie die startCall()
Methode in der TeamsCallAgent-Schnittstelle.
...
...
const isMultipleParticipants = Array.isArray(userIds) && userIds.length > 1;
this._previousTeamsCall = this._currentTeamsCall;
var onBehalfOfOptions: SDK.OnBehalfOfOptions | undefined;
if (this.elements.onBehalfOfUserInput.value !== null && this.elements.onBehalfOfUserInput.value !== "" ) {
var onBehalfOfUser = myFunctionToGetIdofResourceAccount();
if (isMicrosoftTeamsAppIdentifier(onBehalfOfUser)) {
onBehalfOfOptions = onBehalfOfUser ? { userId: onBehalfOfUser } : undefined;
if (onBehalfOfOptions) {
console.log("OBO options provided with app Id: " + (onBehalfOfUser as MicrosoftTeamsAppIdentifier).teamsAppId);
}
} else {
console.error("OBO option ignored, MicrosoftTeamsAppIdentifier type expected");
}
}
if (isMultipleParticipants) {
const participants = userIds as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[];
(this._placeCallOptions as SDK.StartTeamsGroupCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participants, this._placeCallOptions as SDK.StartTeamsGroupCallOptions);
} else {
const participant = userIds[0] as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier);
(this._placeCallOptions as SDK.StartTeamsCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participant, this._placeCallOptions as SDK.StartTeamsCallOptions);
}
...
...
CCaaS-Entwickler: Wie kann ein Server einen Anruf-Agenten der Teams Telefon-Erweiterung ansprechen?
Nachdem Sie sich als Agent mit einer Identität als duale Persona angemeldet haben, können Sie diesen Anruf-Agent für die Microsoft Teams-Telefonerweiterung zu einem bestehenden Anruf mithilfe ihrer Identität als duale Persona hinzufügen.
Das folgende Beispiel zeigt eine Anforderung zum Hinzufügen eines Anruf-Agenten für die Teams Telefon-Erweiterung mit der Kennung e5b7f628-ea94-4fdc-b3d9-1af1fe231111
von Microsoft Entra-ID im Mandanten 87d349ed-44d7-43e1-9a83-5f2406dee5bd
zur Azure Ressource 0269be4d-5be0-4770-bf9c-a1bf50ee78d5
von Azure Communication Services.
//Call is already established
...
...
var target = new TeamsExtensionUserIdentifier("0269be4d-5be0-4770-bf9c-a1bf50ee78d5", "87d349ed-44d7-43e1-9a83-5f2406dee5bd","e5b7f628-ea94-4fdc-b3d9-1af1fe231111");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
CCaaS-Entwickler: Hinzufügen eines PSTN-Benutzers zu einem Anruf der Teams Telefon-Erweiterung über einen Server
Nachdem Sie einen Teams Phone-Erweiterbarkeitsanruf hergestellt haben, können Sie dem Anruf einen PSTN-Benutzer hinzufügen, indem Sie eine Telefonnummer verwenden.
Das folgende Beispiel zeigt eine Anforderung, einen PSTN-Benutzer zu einem Teams Phone-Erweiterungsanruf mit Telefonnummer +12065551212
hinzuzufügen.
//Call is already established
...
...
var target = new PhoneNumberIdentifier("4:+12065551212");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target, null))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
CCaaS-Entwickler: Wie man einen Anruf über die Erweiterbarkeit von Teams Phone von einem Server zu einem PSTN-Ziel weiterleitet
Nachdem Sie einen Microsoft Teams Phone-Erweiterungsanruf hergestellt haben, können Sie ihn dann an einen PSTN-Benutzer übertragen, indem Sie eine Telefonnummer angeben.
Das folgende Beispiel zeigt eine Anforderung zum Übertragen eines etablierten Anrufs an einen PSTN-Benutzer mit Telefonnummer +12065551212
.
//Call is already established
...
...
var target = new PhoneNumberIdentifier("4:+12065551212");
await callConnection.TransferCallToParticipantAsync(new TransferToParticipantOptions(target)
{
OperationContext = "transferParticipantAsync"
});
...
...
CCaaS-Entwickler: Starten der Aufzeichnungssitzung mit StartRecordingOptions
Für die Erweiterbarkeit von Teams Phone müssen Sie beim Starten der Aufzeichnungssitzung die CallConnectionId verwenden, die während der Initiierung des Anrufs empfangen wurde.
- Verwenden Sie RecordingContent, um den Aufzeichnungsinhaltstyp zu übergeben. Verwenden Sie AUDIO.
- Verwenden Sie RecordingChannel, um den Aufzeichnungskanaltyp zu übergeben. Verwenden Sie MIXED oder UNMIXED.
- Verwenden Sie RecordingFormat, um das Format der Aufzeichnung zu übergeben. Verwenden Sie WAV.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
StartRecordingOptions recordingOptions = new StartRecordingOptions("<callConnectionId>")
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
Hinweis
Die Aufzeichnung, die mit der Verbindungs-ID gestartet wurde, wird asynchron initiiert (Antwortcode 204), und die Änderung des Aufzeichnungszustands wird über das Rückrufereignis Microsoft.Communication.RecordingStateChanged
aktualisiert, das auf RecordingStateCallbackUri
empfangen wurde.
Darüber hinaus wird ein Fehler beim Start der Aufzeichnung über ein neues Callbackereignis Microsoft.Communication.StartRecordingFailed
gemeldet, das auf RecordingStateCallbackUri
empfangen wird.
Alpha-SDKs
- C#-SDK für die Anrufautomatisierung
- Java SDK für die Anrufautomatisierung
- Python SDK für Anrufautomatisierung
- JavaScript SDK für die Anrufautomatisierung
- Client-SDK