إضافة مستخدم Microsoft Teams إلى مكالمة موجودة باستخدام أتمتة المكالمات

في هذا التشغيل السريع، نستخدم واجهات برمجة تطبيقات Azure Communication Services Call Automation لإضافة مكالمة وإزالتها ونقلها إلى مستخدم Teams.

المتطلبات الأساسية

  • حساب Azure مع اشتراك نشط.
  • ترخيص هاتف Microsoft Teams ومستأجر Teams بامتيازات إدارية. يعد ترخيص هاتف Teams أمرا لا بد منه لاستخدام هذه الميزة، تعرف على المزيد حول تراخيص Teams هنا. يجب voice أيضا تمكين مستخدم Microsoft Teams، راجع إعداد نظام هاتفك. مسؤول الامتيازات المعيارية مطلوبة لتخويل مورد Communication Services للاتصال بمستخدمي Teams، الموضحة لاحقا في الخطوة 1.
  • تم العثور على مورد Communication Service منشور سلسلة الاتصال صالح عن طريق تحديد Keys في القائمة اليمنى على مدخل Microsoft Azure.
  • الحصول على رقم هاتف PSTN من مورد Communication Service. لاحظ رقم الهاتف الذي حصلت عليه لاستخدامه في هذا التشغيل السريع.
  • اشتراك Azure Event Grid لتلقي IncomingCall الحدث.
  • أحدث مكتبة Azure Communication Service Call Automation API لنظام التشغيل الخاص بك.
  • خدمة ويب تنفذ مكتبة واجهة برمجة تطبيقات أتمتة المكالمات، اتبع هذا البرنامج التعليمي.

الخطوة 1: تخويل مورد Azure Communication Services لتمكين الاتصال لمستخدمي Microsoft Teams

لتمكين الاتصال من خلال واجهات برمجة تطبيقات أتمتة المكالمات، يجب على مسؤول istrator Microsoft Teams أو مسؤول istrator العام تمكين الوصول إلى مورد (موارد) خدمات الاتصال إلى المستأجر الخاص به للسماح بالاتصال بشكل صريح.

إعداد مستوى المستأجر Set-CsTeamsAcsFederationConfiguration (MicrosoftTeamsPowerShell) الذي يمكن/يعطل الاتحاد بين المستأجر وموارد خدمات الاتصال المحددة.

نهج المستخدم Set-CsExternalAccessPolicy (SkypeForBusiness) الذي يسمح للمسؤول بمزيد من التحكم في المستخدمين في مؤسستهم الذين يمكنهم المشاركة في الاتصالات الموحدة مع مستخدمي Communication Services.

لاحظ أن مستخدم Teams يحتاج إلى ترخيص الهاتف لاستخدام هذه الميزة. لتعيين الترخيص، استخدم الأمر cmdlet Set-Cs الهاتف NumberAssignment وقم بتعيين المعلمة EnterpriseVoiceEnabled إلى $true. للحصول على معلومات إضافية، راجع إعداد الهاتف Teams في مؤسستك.

الخطوة 2: استخدم واجهة برمجة تطبيقات Graph للحصول على معرف كائن Microsoft Entra لمستخدمي Teams والتحقق اختياريا من وجودهم

مطلوب معرف عنصر Microsoft Entra (OID) لمستخدم Teams لإضافته إليه أو نقله إليه من مكالمة Communication Services. يمكن استرداد OID من خلال 1) مدخل Office، 2) مركز إدارة Microsoft Entra، 3) Microsoft Entra الاتصال؛ أو 4) Graph API. يستخدم المثال أدناه واجهة برمجة تطبيقات Graph.

يجب منح الموافقة من قبل مسؤول Microsoft Entra قبل أن يمكن استخدام Graph للبحث عن المستخدمين، ومعرفة المزيد من خلال المتابعة في مستند نظرة عامة على Microsoft Graph واجهة برمجة تطبيقات الأمان. يمكن استرداد OID باستخدام قائمة المستخدمين API للبحث عن المستخدمين. يعرض ما يلي بحثا حسب اسم العرض، ولكن يمكن البحث في خصائص أخرى أيضا:

سرد المستخدمين الذين يستخدمون Microsoft Graph v1.0:

Request:
	https://graph.microsoft.com/v1.0/users?$search="displayName:Art Anderson"
Permissions:
	Application and delegated. Refer to documentation.
Response:
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
    "value": [
        {
            "displayName": "Art Anderson",
            "mail": "artanderson@contoso.com",
            "id": "fc4ccb5f-8046-4812-803f-6c344a5d1560"
        }

اختياريا، يمكن استرداد حالة الحضور لمستخدم باستخدام واجهة برمجة تطبيقات الحصول على حالة الحضور ومعرف الكائن الخاص بالمستخدم. تعرف على المزيد حول وثائق Microsoft Graph v1.0.

Request:
https://graph.microsoft.com/v1.0/users/fc4ccb5f-8046-4812-803f-6c344a5d1560/presence
Permissions:
Delegated only. Application not supported.  Refer to documentation.
Response:
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('fc4ccb5f-8046-4812-803f-6c344a5d1560')/presence/$entity",
    "id": "fc4ccb5f-8046-4812-803f-6c344a5d1560",
    "availability": "Offline",
    "activity": "Offline"

الخطوة 3: إضافة مستخدم Teams إلى مكالمة Communication Services موجودة يتم التحكم فيها بواسطة واجهات برمجة تطبيقات أتمتة المكالمات

تحتاج إلى إكمال خطوة المتطلبات الأساسية ولديك تطبيق خدمة ويب للتحكم في مكالمة Communication Services. باستخدام كائن الاستدعاء الاتصال ion، أضف مشاركا إلى المكالمة.

CallAutomationClient client = new CallAutomationClient('<Connection_String>');
AnswerCallResult answer = await client.AnswerCallAsync(incomingCallContext, new Uri('<Callback_URI>'));
await answer.Value.CallConnection.AddParticipantAsync(
    new CallInvite(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'))
    {
        SourceDisplayName = "Jack (Contoso Tech Support)"
    });
CallAutomationClient client = new CallAutomationClientBuilder().connectionString("<resource_connection_string>").buildClient();
AnswerCallResult answer = client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.getCallConnection().addParticipant(
    new CallInvite(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"))
        .setSourceDisplayName("Jack (Contoso Tech Support)"));
const client = new CallAutomationClient("<resource_connection_string>");
const answer = await client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.callConnection.addParticipant({
    targetParticipant: { microsoftTeamsUserId: "<Teams_User_Guid>" },
    sourceDisplayName: "Jack (Contoso Tech Support)"
});
call_automation_client = CallAutomationClient.from_connection_string("<resource_connection_string>")
answer = call_automation_client.answer_call(incoming_call_context = incoming_call_context, callback_url = "<Callback_URI>")
call_connection_client = call_automation_client.get_call_connection(answer.call_connection_id)
call_connection_client.add_participant(target_participant = CallInvite(
    target = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"),
    source_display_name = "Jack (Contoso Tech Support)"))

على عميل Microsoft Teams لسطح المكتب، سيتم إرسال مكالمة جاك إلى مستخدم Microsoft Teams من خلال إعلام إعلام منبثق للمكالمة الواردة.

لقطة شاشة لعميل Microsoft Teams لسطح المكتب، يتم إرسال مكالمة جاك إلى مستخدم Microsoft Teams من خلال إعلام منبثق للمكالمة الواردة.

بعد قبول مستخدم Microsoft Teams للمكالمة، سيتم عرض جميع المشاركين في قائمة Microsoft Teams في تجربة الاتصال لمستخدم Microsoft Teams. لاحظ أن التطبيق الذي يدير المكالمة باستخدام واجهة برمجة تطبيقات أتمتة المكالمات سيبقى مخفيا لمستخدم Teams على شاشة المكالمة، باستثناء الحالة التي تبدأ فيها مكالمة 1:1 مع مستخدم Teams.
لقطة شاشة لمستخدم Microsoft Teams يقبل المكالمة ويدخل تجربة الاتصال لمستخدم Microsoft Teams.

الخطوة 4: إزالة مستخدم Teams من مكالمة Communication Services موجودة يتم التحكم فيها بواسطة واجهات برمجة تطبيقات أتمتة المكالمات

await answer.Value.CallConnection.RemoveParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().removeParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.removeParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.remove_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"))

ميزة اختيارية: النقل إلى مستخدم Teams من مكالمة Communication Services موجودة يتم التحكم فيها بواسطة واجهات برمجة تطبيقات أتمتة المكالمات

await answer.Value.CallConnection.TransferCallToParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().transferCallToParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.transferCallToParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.transfer_call_to_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id = "<USER_ID>"))

تنظيف الموارد

إذا كنت ترغب في تنظيف وإزالة اشتراك Communication Services، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد إلى حذف أية موارد أخرى مقترنة بها أيضًا. تعرّف على المزيد حول تنظيف الموارد.

الخطوات التالية