> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wolffi.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# إشعارات الهاتف

> يستطيع الوكيل أن يبلغ هاتفك المقترن حين ينتهي تشغيل أو يخفق أو يحتاج إليك — استدعاء أداة متعمَّد في كل مرة، يركب النفق أو يسقط إلى دفع المنصة

# الإشعار قرار

لا شيء في وولفيش يبلّغك تلقائياً. لا مستمعُ أحداثٍ يطلق دفعةً حين تنتهي أتمتة، ولا مراقبٌ ينبّهك حين يحطّ تنزيل. حين يهتزّ هاتفك فذلك لأنّ **الوكيل قرّر أنّ عليك أن تعلم** — صاغ عنواناً ومتناً، واختار كم كانت اللحظة ملحّة، واستدعى أداة. وهذا التعمّد هو التصميم بعينه: فصندوقٌ من ضجيجٍ تولّده الآلة يعلّمك أن تتجاهله، والإشعار الذي تتجاهله أسوأ من لا إشعار.

هذه الصفحة هي المنظومة كلّها: الأداة التي يستدعيها النموذج، والحواجز التي يختمها سطح المكتب على كلّ إرسال، وأين تحطّ النقرة، وكيف تبقى شارات غير المقروء صادقة، وما الذي يراه المُرحِّل في المنتصف بالضبط. أمّا الاقتران نفسه — رمز QR، والرمز المكتوب، والنفق المشفَّر — فيسكن صفحة [تطبيق الهاتف](/ar/integrations/mobile-app).

## أداة notify\_phone

حين تكون **إشعارات الهاتف** مشتغلة، يحمل الوكيل قدرةَ `phone` وفيها أداةٌ واحدة: `notify_phone`. والتعليمات التي تعمل تحتها ضيّقة — أرسل واحداً حين ينتهي تشغيلٌ طويل أو خلفيّ **بنتيجةٍ تستحقّ النظر**، أو حين **يخفق شيءٌ أو يطفو ما يفاجئ**، أو حين يقف التشغيل **محجوزاً على مدخلك أو موافقتك**، أو حين **طلبتَ أن تُبلَغ**. لا للتقدّم الروتينيّ أبداً، ولا لدورٍ أنت جالسٌ تشاهده.

النموذج يختار الكلمات واللحظة؛ وكلُّ استدعاءٍ يسمّي أيضاً **طوراً**، والطور يقرّر كم يبقى الإشعار وجيهاً قبل أن تكفّ المنصّات عن عرضه:

| الطور         | المعنى                     | يبقى وجيهاً لمدة                                                          |
| ------------- | -------------------------- | ------------------------------------------------------------------------- |
| `needs_input` | تشغيلٌ محجوزٌ عليك         | **5 دقائق** — فطلبُ موافقةٍ بائتٌ يصل متأخراً أربعين دقيقة أسوأ من لا طلب |
| `completed`   | تشغيلٌ انتهى وعنده ما يريك | ساعة واحدة                                                                |
| `failed`      | تشغيلٌ مات أو اصطدم بجدار  | ساعة واحدة                                                                |
| `started`     | تشغيلٌ طويل بدأ            | 15 دقيقة                                                                  |
| `info`        | أيُّ شيءٍ آخر يستحقّ سطراً | 15 دقيقة                                                                  |

وقيمة `urgency` حين تكون `high` تطلب من المنصّة عرضَ الإشعار عاجلاً؛ و`normal` هي الافتراض.

<Note>
  **الإطفاء يجعل الأداة ترفض — بإزالتها.** فالمفتاح لا يرجو الوكيل أن يمتنع؛ بل يلغي تسجيل قدرة `phone`، فتختفي `notify_phone` من سطح أدوات النموذج كليّاً. والأمر نفسه حين لا يكون هاتفٌ مقترناً: وجود الأداة *هو* فحص التوافر، فلا يصوغ الوكيل أبداً إشعاراً لا مكان له يذهب إليه.
</Note>

## ما يكتبه النموذج وما يختمه سطح المكتب

النموذج مؤتمَنٌ على الكلمات ولا شيء غيرها. وكلُّ ما يقرّر **إلى أين** يذهب الإشعار و**أيُّ** إشعارٍ هو يأتي من سطح المكتب:

* **الهويّة** — معرّف الإشعار والهاتف الذي يُوجَّه إليه يختمهما العتاد، ولا يؤخذان من النموذج أبداً. والمعرّف يُسكّ جديداً مع كلّ استدعاء، وهو ما يجعل إعادات المحاولة والتسليمات المكرّرة تنطوي في لافتةٍ واحدة بدل اثنتين.
* **القصّ** — العنوان يُقصّ إلى سطرٍ واحد من 60 محرفاً والمتن إلى 180، وتُنزع محارف التحكّم. فمخرجات النموذج تُعقَّم ولا يُوثق بها؛ والإطارات المشوّهة **تُرفض رفضاً صريحاً ولا تُبتر في صمتٍ أبداً**، فما يصل هو دائماً شيءٌ صاغه سطح المكتب حقاً.
* **التشغيلة** — معرّف التشغيلة يسافر مع الإشعار، مقروءاً من نطاق الدور نفسه لا من ذاكرة النموذج عنه.
* **الرابط** — الرابط العميق يُرفض ما لم يستعمل مخطَّط التطبيق نفسه `wolffish://` ويسمِّ شاشةً يملكها الهاتف حقاً. والرابط الفاسد يخفق **عند استدعاء الأداة**، ومعه قائمة الوجهات الحقيقية في نصّ الخطأ، بدل أن يسافر إلى الهاتف كلّ تلك المسافة ليُلقيك في صمتٍ على الشاشة الرئيسة.

والإرسال المخفق يُبلَّغ إلى النموذج بوصفه **غيرَ مؤكَّدٍ لا قابلاً لإعادة المحاولة** — صيغ هكذا عمداً، حتى لا يكرّر الوكيل الدفعة نفسها على هاتفٍ لا يجيب.

## أين تحط النقرة

يستطيع الإشعار أن يسمّي شاشة، ويستطيع أن يسمّي **محادثة هذا التشغيل نفسه** دون أن يعرف مُعرِّفها:

```
wolffish://chat?id=current
```

فيملأ سطح المكتب المُعرِّف **من نطاق الدور** — من الموضع نفسه الذي تأتي منه هويّة التشغيل أصلاً. وهذا مهمّ لأنّ التشغيل لا يعرف على وجه اليقين في أيّ محادثةٍ يجيب: كان الوكيل إمّا أن يمضي باحثاً عن المُعرِّف أو أن يخمّنه، و**المُعرِّف المخمَّن يفتح نصّ محادثةٍ لغيرك**. و`current` يزيل التخمين، وهو الوجهة التي يُؤمَر الوكيل بتفضيلها في كلّ مرّةٍ تقريباً.

والوجهات قائمةٌ ثابتة يتشاركها التطبيقان، وتغطّي كلّ شاشةٍ يملكها الهاتف حقاً:

| المسار                                                                                                                             | يفتح                                                                                 |
| ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `chat` · `chat?id=…`                                                                                                               | شاشة المحادثة، أو محادثةً بعينها                                                     |
| `history`                                                                                                                          | قائمة المحادثات                                                                      |
| `settings`                                                                                                                         | فهرس الإعدادات                                                                       |
| `settings/model` · `settings/appearance` · `settings/preferences`                                                                  | النموذج والمظهر والتفضيلات                                                           |
| `settings/projects` · `settings/automations` · `settings/procedures` · `settings/customization`                                    | [مساحة العمل القابلة للتحرير](/ar/integrations/mobile-app#مساحة-العمل-قابلة-للتحرير) |
| `settings/channels` · `settings/capabilities` · `settings/knowledge` · `settings/mcp` · `settings/services` · `settings/variables` | صفحات الإعدادات المعكوسة                                                             |
| `settings/usage` · `settings/data` · `settings/updates` · `settings/relay` · `settings/changelog`                                  | الاستخدام والبيانات والتحديثات والمُرحِّل وسجلّ التغييرات                            |

وعلى الهاتف، تفعل النقرة الصواب من أيّ الحالين: النقرة والتطبيق **يعمل** تدفع الشاشة دفعاً، فيعيدك الرجوع إلى حيث كنت؛ والنقرة التي **أطلقت** التطبيق تُقرأ في أوّل تصييرٍ لشاشة الدخول، فتصير وجهتها وجهةَ الإقلاع بدل تنقّلٍ ثانٍ يسابق إعادة التوجيه. والمحادثة التي تُبلَغ هكذا تنتظر سطح المكتب مهلةً قصيرة بدل أن تومض محادثةً جديدةً فارغة، والرابط الذي لا يستطيع هذا البناء تحديده يتركك حيث أنت بالضبط، والنقرة الواحدة تحرّك التطبيق مرّةً واحدة بالضبط — حتى حين يراها المساران كلاهما.

## التسليم: النفق قبل الدفع

يسلك الإشعار أخصَّ طريقٍ متاح، ولا يسقط إلى غيره إلا مضطرّاً:

1. **النفق الحيّ.** إن كان الهاتف متصلاً، ركب الإشعارُ الوصلةَ المشفَّرة إطارَ تحكّمٍ وصُيِّر داخل التطبيق. والمُرحِّل ينتظر لحظةً حتى يقرّ الهاتف بوصوله.
2. **دفع المنصّة.** إن كان الهاتف خارج الاتصال — أو لم يأتِ الإقرار أبداً — سلّم المُرحِّل الإشعارَ إلى خدمة دفع المنصّة (Expo، أمام APNs على iPhone وFCM على أندرويد)، ويسلّم نظام التشغيل اللافتة.
3. **لا مكان.** إن لم يسجّل الهاتف للدفع قطّ ولم يكن متصلاً، أُبلغ عن الإرسال ساقطاً — يسمعها سطح المكتب فوراً، ويُخبَر الوكيل بدل أن يُترك يفترض أنّك تعلم.

ولأنّ الطريقين كليهما قد يطلقان بحقٍّ للإشعار الواحد — التصيير داخل النفق، ثم دفعةُ احتياطٍ حين ضاع الإقرار — يحتفظ الهاتف بذاكرةٍ قصيرة لما عرضه من قبل و**يطوي المكرّرات في لافتةٍ واحدة**. والإشعار عن المحادثة التي تقرؤها الآن يوسَم معالَجاً بدل أن يُعرض: فالهاتف لا يهتزّ لأجل الشاشة التي تنظر إليها.

## شارات غير المقروء

كلُّ إشعارٍ يسمّي محادثةً يغذّي **عدّادَ غير مقروءٍ لكلّ محادثةٍ على حدة**، والعدّادات تطفو أينما تطفو المحادثة: على صفوف ورقة المحادثات، وعلى قائمة السجلّ، ومجموعةً على زرّ القائمة العائم، و**رقماً على أيقونة التطبيق** — مسقوفاً عند `99+` في القوائم، وعند 999 تحتها.

والمحوُ هو القراءة. فتحُ محادثةٍ يصفّر دلوها ويُسقط إشعاراتها من صينيّة النظام؛ وحذفُ محادثةٍ — من الهاتف، أو من سطح المكتب والهاتف يراقب — يأخذ عدّادها معه؛ وقطعُ الاتصال يمحو كلّ شيء. ولا عملَ «وسمٍ كمقروء» هنا، لأنّ الشارة لم تكن يوماً دفتراً منفصلاً — إنّها عدٌّ جارٍ لما لم تنظر إليه بعد.

والدقيق في الأمر أيقونةُ التطبيق حين يكون التطبيق **ميّتاً**. فتطبيقٌ مغلق لا يستطيع عدَّ شيء، ولذلك يحفظ المُرحِّل **عدداً صحيحاً واحداً لكلّ جهاز** — يُزاد مرّةً مع كلّ إشعارٍ يمرّره، ويُختم على كلّ دفعة منصّةٍ فتصحّ الأيقونة قبل أن يستيقظ التطبيق أصلاً. ولحظةَ يعمل التطبيق من جديد يبلّغ الهاتف مجموعَه الحقيقي و**يكتب فوق رقم المُرحِّل كتابةً مطلقة** — فعدُّ الهاتف هو الحجّة، وعدُّ المُرحِّل بديلٌ لحين لا أحد في البيت، والإطار الضائع أو المعاد ترتيبه لا يستطيع أبداً أن يجعلهما ينجرفان.

## ما يراه المرحل

يحمل [المُرحِّل الأعمى](/ar/integrations/mobile-app) حركةَ المحادثات إطاراتٍ مختومة لا يقرؤها. أمّا الإشعارات فهي **الاستثناء المتعمَّد الوحيد**، وينبغي أن تعرف شكله بالضبط.

فدفعة المنصّة لا بدّ أن تغادر أجهزتك مكشوفةً في نهاية المطاف — Apple وGoogle يصيّران اللافتة، فApple وGoogle يريان نصّها. وذلك يجعل ختمَ ساق المُرحِّل وحدها طمأنينةً كاذبة، ووولفيش لا يتظاهر بغير ذلك: يسافر الإشعار إلى المُرحِّل **إطارَ تحكّمٍ مقروءاً**، ويُتصرَّف فيه هناك، ولا يُمرَّر أبداً بوصفه حركةَ نفق.

وما يعنيه ذلك عمليّاً:

* **يرى المُرحِّل، في اللحظة**: العنوان والمتن اللذين كتبهما النموذج، والرابط العميق — بما فيه معرّف المحادثة حين تقصد النقرة محادثة — والطور، والإلحاح، ومعرّف التشغيلة، والهاتف الموجَّه إليه.
* **ولا يخزّن المُرحِّل شيئاً منه.** العناوين والمتون لا تُدوَّن أبداً ولا تُسجَّل. وما يبقى هو دفترُ مسكٍ لا غير: رمز دفع الجهاز، ومنصّته وإصدار تطبيقه، وعدد الشارة الصحيح، وسجلّات تسليمٍ قصيرة العمر تشيخ وتذهب وحدها — دقائق لتذاكر التسليم، ويومٌ لمعرّفات طيّ المكرّرات.
* **ومحتوى المحادثات لا يركب هذا الطريق أبداً.** فنصوصك وملفاتك وإعداداتك تعبر المُرحِّل إطاراتٍ مختومةً لا يفتحها. وتعليمات الوكيل نفسها تقول الشيء ذاته من الجهة الأخرى: الإشعار عنوانُ خبرٍ لا نصُّ محادثة.

<Warning>
  صُغ الإشعارات وأنت تعلم أنّها قد تسلك طريق دفع المنصّة. فالوكيل مأمورٌ بإبقائها عناوينَ مقتضبة — «الموجز جاهز»، «التشغيل أخفق ويحتاج نظرة» — وقصُّ 60/180 محرفاً يفرض روح ذلك. وإن كانت *نتيجة* التشغيل حسّاسة، فموضع قراءتها هو المحادثة، عبر النفق المختوم — وما على الإشعار إلا أن يقول إنّها تستحقّ الفتح.
</Warning>

## التسجيل، ومغادرة بلا أثر

يسجّل الهاتف للدفع تحت **معرّف جهازٍ عشوائيّ** — يُسكّ مرّةً واحدة، ويُحفظ في مخزن مفاتيح النظام، ولا صلة له عمداً بهويّة النفق التشفيرية، فلا يستطيع التسجيل تسريبَ المفاتيح. والتسجيل يجدّد نفسه مع كلّ اقتران، وكلّ إعادة اتصال، وكلّ عودةٍ إلى المقدّمة، وكلّ تدوير لرمز الدفع؛ ومطالبةُ إذن النظام تظهر أوّلَ مرّةٍ يتصل فيها الهاتف بعد التثبيت. ارفضها فلا شيء ينكسر — الإشعارات ببساطة لا تصل إلا والتطبيق متصل، عبر النفق.

والمغادرة تعكس ذلك كلّه، بالترتيب الصحيح. **قطعُ اتصال الهاتف** يمحو كلّ شارة — الدلاء، والصينيّة، وأيقونة التطبيق — ويأمر المُرحِّل بتصفير نسخته، ثم يرسل `unregister_push`، فيمحو المُرحِّل **تسجيلَ الجهاز في مكانه**: يُنسى رمز الدفع، وكلُّ إشعارٍ لاحق موجَّهٍ إلى ذلك الهاتف يُجاب عنه *ساقطاً* لا مُعادَ توجيهه. وعندها فقط يُسقط الهاتف الوصلة ويمسح نفسه. والاقتران من جديد يبدأ من صفحةٍ بيضاء — تسجيلٌ جديد، وشارةٌ عند الصفر.

<Info>
  سطح المكتب نفسه لا يعرض **أيَّ إشعارات نظام**. فمهمّته أن يقرّر إرسالها؛ والهاتف هو حيث تحطّ. وإن كنت عند سطح المكتب فالمحادثة أمامك أصلاً.
</Info>

## المفتاحان

إعدادان، كلاهما يسكن موضعاً واحداً على كلّ جهاز — والمفتاح الرئيس هو **الإعداد نفسه على الجهازين**، لا اثنان قد يختلفان:

| المفتاح            | أين                                                                                         | ما يفعله                                                                                                                                                                 |
| ------------------ | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **إشعارات الهاتف** | سطح المكتب: **الإعدادات ← القنوات ← الهاتف** · الهاتف: **الإعدادات ← القنوات ← هذا الهاتف** | الإشعال يتيح للوكيل استدعاء `notify_phone`؛ والإطفاء يزيل الأداة كليّاً. اقلبه على أيّ الجهازين يتبعه الآخر. الافتراض **مشتغل**.                                         |
| **نتائج المهامّ**  | اللوحتان نفساهما                                                                            | الإطفاء — وهو الافتراض — يُبقي خيط الهاتف نظيفاً: الردود، والملفات، والأخطاء. والإشعال يمرّر كلّ استدعاء أداةٍ ونشاط. منفصلٌ عن الإشعارات، وتسجيل الاتصال مشتغلٌ دائماً. |

<Note>
  قدرةُ `phone` في جوهرها قدرةٌ عادية — إطفاؤها، سواء أطفأتَها أنت أو أطفأها الوكيل نفسه، يزيل `notify_phone` بالطريقة ذاتها. ومفتاح **إشعارات الهاتف** هو أداة التحكّم المقصودة؛ أمّا مفتاح القدرة فهو الذراع نفسها من موضعٍ أعمق.
</Note>
