# وكيل Teams تفاعلي \<--\> ذكاء اصطناعي

**URL:** <https://community.n8n.io/t/interactive-teams-agent-ai/303085>\
**Category:** Help me Build my Workflow\
**Tags:** microsoft-teams, ia\
**Created:** [13 يوليو 2026، 9:19ص UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085 "2026-07-13T09:19:22Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![flipflip](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/flipflip/32/157035_2.png) [@flipflip](https://community.n8n.io/u/flipflip)\
**Post date:** [13 يوليو 2026، 9:19ص UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/1 "2026-07-13T09:19:22Z")

</div>

مرحباً،

لدي سير عمل يستخدم محادثة Teams كنقطة دخول. لدي بالفعل عدة معايير موضوعة لتصفية الطلبات. حالياً، سير العمل هو: طلب واحد = رد واحد في Teams، متبوعاً بنهاية المحادثة.

أضفت وكيل ذكاء اصطناعي من n8n للاستفادة من البيانات من قاعدة بيانات. سير العمل البسيط “طلب واحد = رد واحد” يعمل بشكل جيد. الآن، أريد للمستخدم أن يتمكن من إجراء محادثة ذهاباً وإياباً مع الوكيل. على سبيل المثال:

- المستخدم: أعطني العنوان للعميل “foobar”.
- الوكيل: لدي عدة عملاء بهذا الاسم: `قائمة العملاء`. أي واحد تريد؟
- المستخدم: الثالث.

مشكلتي هي أن كل رسالة يرسلها المستخدم تُعامل كرسالة جديدة؛ وبالتالي، يعاد تشغيل سير العمل، والوكيل “ينسى” التفاعل السابق.

حاولت وضع الوكيل داخل حلقة، لكن يبدو أن هذا ليس هو النهج الصحيح ☹

هل لديك أي اقتراحات؟  
شكراً مقدماً.

 ![image](https://europe1.discourse-cdn.com/n8n/original/3X/0/b/0b37a1efc1c517fb275cf910b332310f1c8b881e.png)

## معلومات حول إعداد n8n الخاص بك

- **إصدار n8n:** 2.29.9
- **قاعدة البيانات (الافتراضي: SQLite):**
- **إعداد n8n EXECUTIONS\_PROCESS (الافتراضي: own, main):**
- **تشغيل n8n عبر (Docker, npm, n8n cloud, desktop app):** Docker
- **نظام التشغيل:** Linux

---

<div class="post-metadata">

**Author:** ![Adam13y](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/adam13y/32/61090_2.png) [@Adam13y](https://community.n8n.io/u/Adam13y)\
**Post date:** [13 يوليو 2026، 9:16م UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/2 "2026-07-13T21:16:38Z")

</div>

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

ما تريده هو ذاكرة دائمة مفهرسة بواسطة المحادثة، وليس حلقة:

أرفق عقدة Memory بـ AI Agent (Postgres Chat Memory أو Redis Chat Memory بدلاً من Simple Memory في الذاكرة، التي تموت مع التنفيذ ولن تنجو من إعادة تشغيل Docker أيضاً).

عيّن مفتاح الجلسة إلى معرّف محادثة Teams، وليس إلى قيمة ثابتة. كل رسالة من نفس خيط Teams يحمل نفس السجل، لذا “الثالث” يُحل مقابل ما قاله الوكيل آخر مرة. إذا استخدمت نفس المفتاح للجميع، فسيرى المستخدمون سياق بعضهم البعض، لذا هذا الحقل هو ما تحتاج للحصول عليه بشكل صحيح.

احتفظ بنافذة عليها (آخر N رسائل) حتى لا ينمو السياق للأبد وتبقى تكاليف الرموز الخاصة بك قابلة للتنبؤ.

شيء واحد يستحق الإضافة أثناء وجودك هناك: إذا كانت إجابة المستخدم غامضة (“الثالث” عندما لم يسرد الوكيل شيئاً)، يجب أن يقول الوكيل إنه لا يعرف بدلاً من تخمين سجل عميل. العناوين الخاطئة التي تعود من بحث قاعدة البيانات هي الفشل الذي يلاحظه الناس.

---

<div class="post-metadata">

**Author:** ![SuperChoice](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/superchoice/32/181744_2.png) [@SuperChoice](https://community.n8n.io/u/SuperChoice)\
**Post date:** [14 يوليو 2026، 1:31م UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/3 "2026-07-14T13:31:12Z")

</div>

@flipflip المفتاح الأساسي: UUID، استخدم “Teams UUID”  
إذا قمت بإنشاء UUID جديد تماماً في كل مرة يتم فيها تشغيل سير العمل، سيستمر الذكاء الاصطناعي في التعامل معه كدردشة جديدة. الطريقة الأسهل هي الحصول على معرّف فريد يرسله Microsoft Teams بالفعل في حمولته واستخدامه كمعرّف الجلسة.

خطوة بخطوة

1. أضف عقدة Memory إلى وكيل الذكاء الاصطناعي الخاص بك  
تحتاج إلى توصيل عقدة Memory بالجانب الأيسر من عقدة وكيل الذكاء الاصطناعي الخاص بك.

2. قم بتكوين معرّف الجلسة في عقدة Memory  
انقر لفتح عقدة Memory. ستشاهد حقلاً يُسمى Session ID (إذا لم تره، انقر على Add Field / Parameter وحدد Session ID).

3. قم بتعيين المعرّف من Teams Trigger  
في حقل Session ID، قم بتعيين المتغير القادم من Microsoft Teams Trigger. لديك خيارات 2 حسب احتياجاتك:

تذكر حسب “غرفة الدردشة/المحادثة” (موصى به):  
استخرج معرّف المحادثة من Teams، على سبيل المثال:  
{{ $json.conversation.id }} أو {{ $json.message.conversation.id }}  
(المميزات: في حالة الدردشة في مجموعة/قناة، يتذكر الذكاء الاصطناعي السياق من تلك المحادثة المحددة)

تذكر حسب “المستخدم الفردي”:  
استخرج معرّف المستخدم للشخص الذي يكتب، على سبيل المثال:  
{{ $json.from.id }}  
(المميزات: بغض النظر عن غرفة الدردشة التي يكتب فيها هذا المستخدم، سيتذكر الذكاء الاصطناعي سجل المحادثة مع هذا الشخص المحدد)

كيف يعمل النظام بعد هذا الإعداد؟  
الطلب 1: يكتب المستخدم “أعطني عنوان العميل foobar”

يرسل Teams الرسالة مع Conversation ID = “abc-123”

يستقبل وكيل الذكاء الاصطناعي الرسالة ويربط ذاكرته بمعرّف الجلسة “abc-123”

يرد الذكاء الاصطناعي “لدي عدة عملاء… أي واحد تريد؟” (ويحفظ هذا السجل)

الطلب 2: يرد المستخدم “الثالث”

يعيد سير العمل البدء من البداية!

لكن هذه المرة، يرسل Teams الرسالة بنفس معرّف المحادثة = “abc-123” (نفس المعرّف بالضبط لهذه حلقة المحادثة).

عندما ترى عقدة Memory معرّف الجلسة “abc-123”، فإنها تستخرج على الفور سجل الدردشة من الطلب 1 وتزوده للذكاء الاصطناعي.

يعرف الذكاء الاصطناعي على الفور أن “الثالث” يشير إلى قائمة العملاء من الرسالة السابقة!

---

<div class="post-metadata">

**Author:** ![nguyenthieutoan](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/nguyenthieutoan/32/120924_2.png) [@nguyenthieutoan](https://community.n8n.io/u/nguyenthieutoan)\
**Post date:** [14 يوليو 2026، 1:32م UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/4 "2026-07-14T13:32:25Z")

</div>

أهلا وسهلا @flipflip!

المفتاح هو إرفاق عقدة ذاكرة فرعية بوكيل الذكاء الاصطناعي الخاص بك - وتحديداً عقدة “Window Buffer Memory”. في حقل “Session ID” الخاص بها، استخدم معرّف محادثة Teams: `{{ $json.channelId }}` أو أي حقل يحمل معرّف المحادثة الفريد من Teams في بيانات المشغّل الخاصة بك. بهذه الطريقة تحصل كل محادثة Teams على نافذة ذاكرة خاصة بها ويتذكر الوكيل التبادلات السابقة ضمن تلك المحادثة نفسها.

يصبح التدفق الخاص بك: مشغّل Teams → وكيل الذكاء الاصطناعي (مع عقدة Window Buffer Memory الفرعية، معرّف الجلسة = معرّف محادثة Teams) → الرد على Teams. كل رسالة جديدة من المستخدم تصل إلى نفس الوكيل، وتحمّل عقدة الذاكرة الأدوار السابقة من تلك الجلسة، ويلتقط الوكيل السياق. نهج الحلقة الذي حاولت لن ينجح هنا لأن n8n لم يصمم للتوقف في منتصف التنفيذ في انتظار إدخال المستخدم - الذاكرة + مفتاح الجلسة هي النمط الصحيح.

---

<div class="post-metadata">

**Author:** ![flipflip](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/flipflip/32/157035_2.png) [@flipflip](https://community.n8n.io/u/flipflip)\
**Post date:** [15 يوليو 2026، 8:56ص UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/5 "2026-07-15T08:56:00Z")

</div>

مرحباً بالجميع،

شكراً على ردودكم. كنتم محقين—استخدام حلقة لم يكن الطريقة الصحيحة بالفعل.

أضفت ذاكرة قائمة على PostgreSQL، لكنني لم أستخدم معرّف محادثة Teams لأنه يتغير مع كل رسالة يتم إرسالها أو استقبالها. بدلاً من ذلك، استخدمت معرّف ملف تعريف المستخدم الذي يرسل الرسالة.

الآن يمكنني الاستفادة من ذاكرة وكيل الذكاء الاصطناعي مع التمييز بين مستخدمين مختلفين.

---

<div class="post-metadata">

**Author:** ![DanaAlira](https://avatars.discourse-cdn.com/v4/letter/d/67e7ee/32.png) [@DanaAlira](https://community.n8n.io/u/DanaAlira)\
**Post date:** [26 أغسطس 2026، 6:42ص UTC](https://community.n8n.io/t/interactive-teams-agent-ai/303085/6 "2026-08-26T06:42:45Z")

</div>

نصيحة ذاكرة معرّف المحادثة هي طبقة القاعدة الصحيحة، لكنني سأضيف اختبار استرجاع واحد قبل الثقة بهذا في الإنتاج.

في مثالك، “الثالث” ليس مجرد مشكلة في الذاكرة. إنها أيضاً مشكلة في الحداثة والسلطة: يجب على الوكيل أن يحل “الثالث” فقط إذا كانت قائمة المرشحين السابقة لا تزال مرتبطة بنفس محادثة Teams، ولم تنتهِ صلاحية القائمة، والمستخدم لا يزال يجيب على نفس خطوة التمييز.

سأقوم بتخزين سجل استرجاع صغير جنباً إلى جنب مع ذاكرة الدردشة:

- معرّف محادثة Teams / مفتاح الجلسة؛
- الهدف الحالي، على سبيل المثال توضيح العميل “foobar”؛
- آخر قائمة مرشحين بالإضافة إلى الطابع الزمني/استعلام المصدر؛
- إجراءات المستخدم المسموحة التالية؛
- الحقول التي انتهت صلاحيتها أو غير معروفة؛
- عدم استدلالات صريحة، على سبيل المثال لا تخطط “الثالث” لعميل إذا كانت قائمة المرشحين مفقودة أو انتهت صلاحيتها أو من محادثة أخرى؛
- الإجراء الآمن التالي في حالة فشل الاسترجاع، على سبيل المثال اطلب من المستخدم إعادة صياغة العميل.

اختبار سريع: ابدأ سير العمل من الصفر باستخدام المدخلات المحفوظة في الذاكرة/الاسترجاع فقط واسأل الوكيل ما الذي يعرفه، وما الذي انتهت صلاحيته، وما الذي يجب ألا يستدل عليه، وما إجراؤه الآمن التالي. إذا لم يتمكن من القول بوضوح، فإن سير العمل يحتوي على ذاكرة ولكن ليس استرجاعاً موثوقاً.
