استعادة السلال المتروكة في Shopify عبر مكالمة هاتفية

أحدهم يصل إلى الدفع ويغادر دون أن يدفع. لاحقًا، يتصل وكيل الذكاء الاصطناعي لديك به مناديًا باسمه — إلا إذا كان قد اشترى في هذه الأثناء. الإعداد الكامل: تطبيق Shopify، والأذونات، وكل موضع قد يصمت فيه كل شيء.

آخر تحديث

معظم استعادة السلال المتروكة تتم عبر البريد الإلكتروني. المكالمة الهاتفية تعمل بشكل مختلف، لأن المكالمة هي وحدها التي تحتاج إلى حُكم. مراسلة من اشترى بالفعل بالبريد أمر هيّن؛ أما الاتصال به فدقيقة سيئة لكما معًا.

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

خصص نصف ساعة. معظمها يُقضى في Shopify، لا هنا.

أقل من دقيقتين: صفحة الدفع التي يغادرها أحدهم دون أن يدفع، القواعد الثلاث التي تقرر ما إذا كانت هناك مكالمة أصلاً، الجملة الواحدة التي تبني المسار، والمكالمة التي تبدأ برمز الخصم. هذا الفيديو باللغة الإنجليزية — لم تتم دبلجته إلى هذه اللغة بعد.

الخلاصة المختصرة

١. أنشئ تطبيق Shopify، وعلّم على أربعة أذونات، وثبّته ٢. انسخ سرّين مختلفين من Shopify ٣. احفظهما في Omni Octo كاتصالين ٤. اطلب من Octo أن يبني التدفق ٥. انسخ عنوان الويبهوك والصقه في Shopify، مرتين ٦. اختبر بمدة انتظار دقيقة واحدة

الخطوتان ١ و٥ هما موضع التعثر. لكل منهما قسمها الخاص.

الخطوة ١ — أنشئ تطبيق Shopify وثبّته

في Shopify: الإعدادات ← Apps and sales channels ← Develop apps ← Create an app. أعطه اسمًا ستتعرف عليه لاحقًا.

علّم على هذه الأذونات

افتح Configuration ← Admin API integration ← Configure وامنح:

الإذنالغرض منه
read_ordersالتحقق مما إذا كان المتسوق قد أكمل الشراء
read_all_ordersالتحقق نفسه على الطلبات الأقدم من ٦٠ يومًا
read_customersاسم المتسوق ورقم هاتفه
read_productsقراءة ما كان في السلة

ستبحث عن إذن خاص بالدفع (checkout) ولن تجده. إذن read_checkouts موجود، لكن Shopify يعامله على أنه محمي: فهو ليس في القائمة التي يمكنك التعليم عليها، وطلب الأمر يحتاج إلى موافقة Shopify نفسها. إذا استدعيت واجهة الدفع بدونه، فسيجيبك Shopify:

This action requires merchant approval for read_checkouts scope.

هذا لا بأس به، وهو السبب في أن هذا التدفق لا يقرأ عمليات الدفع أبدًا. إنه يسأل سؤالًا أفضل بدلًا من ذلك — هل ظهر طلب؟ — وهذا يحتاج إلى read_orders فقط.

ثبّته

هذه هي الخطوة التي ينساها الجميع. تهيئة التطبيق لا تفعل شيئًا حتى تضغط Install app في صفحة Overview الخاصة بالتطبيق. قبل ذلك، لا يوجد رمز وصول إلى Admin API يمكن نسخه، وكل خطوة لاحقة تفشل بطريقة توهم أن شيئًا آخر قد تعطّل.

انسخ سرّين، ولا تخلط بينهما

تحتاج إلى شيئين مختلفين، ومن السهل الخلط بينهما لأن كليهما يبدو كسلسلة أحرف عشوائية.

ما هوأين تجدهماذا يفعل
رمز الوصول إلى Admin APIعلامة تبويب API credentials في التطبيق، بعد التثبيت. يبدأ بـ shpat_يتيح لـ Omni Octo طرح الأسئلة على Shopify
سر توقيع الويبهوكالإعدادات ← الإشعارات ← Webhooks، في أسفل الصفحةيتيح لـ Omni Octo التحقق من الرسائل التي يرسلها Shopify

أحدهما للحديث مع Shopify. والآخر للتأكد من أن Shopify هو فعلًا من أرسل شيئًا. الخلط بينهما هو أغلى خطأ في هذا الإعداد كله، والعَرَض لا يشبه السبب إطلاقًا — انظر عندما لا يحدث شيء.

الخطوة ٢ — احفظ السرّين في Omni Octo

اذهب إلى صفحة Connections وأضِفهما واحدًا في كل مرة.

رمز الوصول إلى Admin API. اضغط New connection ثم اختر بطاقة HTTP / API key ضمن Other. الصق رمز shpat_. أعطِ الاتصال اسمًا ستتعرف عليه في قائمة — «رمز Shopify Admin API» خير من «Shopify».

سر توقيع الويبهوك. اضغط New connection مرة أخرى واختر Signing secret، ثم الصق السرّ من صفحة الإشعارات. النموذج يقول ما يستحق التذكر:

The secret the sender signs with, not a key you call them with.

مربع حوار اتصال Signing secret، مع حقل Name وحقل يحمل التصنيف Signing secret.
هذه هي البطاقة التي تفوت على الناس. إذا ألصقت هنا رمز Admin، أو ألصقت سر التوقيع في بطاقة مفتاح الـAPI، فكل ما يليها يفشل بخطأ لا يذكر أيًّا منهما. لقطات الشاشة معروضة بالإنجليزية — التطبيق غير متوفر بهذه اللغة بعد.

اتصالان، اتجاهان. احفظهما معًا قبل أن تبني أي شيء.

صفحة Connections تعرض اعتمادين من Shopify: رمز Admin API ضمن HTTP، وسر توقيع ويبهوك ضمن Webhook، وكلاهما موسوم بأنه نشط.
هذا هو الشكل النهائي. صفّان، نوعان — واحد لطرح الأسئلة على Shopify، وواحد للتأكد من أن Shopify هو فعلًا من أرسل شيئًا. لقطات الشاشة معروضة بالإنجليزية — التطبيق غير متوفر بهذه اللغة بعد.

الخطوة ٣ — اطلب من Octo أن يبني التدفق

أنت لا تكتب الأتمتة بنفسك. افتح المحادثة وصف ما تريده، بما في ذلك الجزء المتعلق بحفظ المتسوق كجهة اتصال:

عندما يترك أحدهم سلة الشراء في متجري على Shopify، انتظر نحو ثلاثين دقيقة ثم اتصل به. احفظه أولًا كجهة اتصال، مع اسمه ورقم هاتفه، ليتمكن الوكيل من تحيّته باسمه. اتصل من الرقم +1 555 0100 مستخدمًا وكيلي Shopify Cart Recovery.

قل جزء جهة الاتصال بصوت مسموع. سيبني Octo تدفقًا يعمل من دونه، لكن الوكيل يفتتح بـ«مرحبًا» بدلًا من «مرحبًا سارة»، لأن التحية تأخذ الاسم من سجل جهات الاتصال لديك لا من رسالة Shopify. طلب هذا هو الفرق بين مكالمة استعادة ومكالمة باردة.

سيقرأ Octo اتصالاتك، وسيجد وكيلك، وقد يسألك عن سر التوقيع الواجب استخدامه إن كنت حفظت أكثر من واحد. أجب بسر التوقيع، لا برمز Admin.

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

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

الخطوة ٤ — أعطِ Shopify العنوان

افتح التدفق وابحث عن بطاقة Webhook endpoint أعلى المخطط. تعرض العنوان وحالة:

  • Ready — يعمل، مع سر توقيع محفوظ
  • Inactive — متوقف مؤقتًا أو ما يزال مسودّة، ولذلك تُرفض رسائل Shopify
بطاقة Webhook endpoint في علامة تبويب Overview للتدفق: العنوان، وشارة Ready، وزر Copy، والتوقيع المتوقع.
العنوان يعيش هنا، في علامة تبويب Overview الخاصة بالتدفق. تعني Ready أن التدفق يعمل وأن سر توقيع محفوظ؛ أي شيء آخر وستُرفض تسليمات Shopify. لقطات الشاشة معروضة بالإنجليزية — التطبيق غير متوفر بهذه اللغة بعد.

اضغط Copy. ثم في Shopify اذهب إلى الإعدادات ← الإشعارات ← Webhooks ← إنشاء webhook وأضِف اثنين منها، ملصقًا العنوان نفسه في كليهما:

الحدثالصيغةلماذا
إنشاء عملية دفعJSONينطلق عندما يصل أحدهم إلى الدفع
تحديث عملية دفعJSONينطلق عندما يملأ بيانات إضافية

لماذا اثنان، بعبارة مبسطة

يخبرك Shopify بعملية الدفع لحظة بدء أحدهم فيها — وكثيرًا ما يكون ذلك قبل أن يكتب رقم هاتف. ويخبرك مرة أخرى في كل مرة يملأ فيها شيئًا، وإحدى تلك الرسائل اللاحقة هي عادة التي تحمل الرقم.

اشترك في الأولى فقط وستحصل على تدفقات تبدأ دون أحد للاتصال به. اشترك في الاثنتين وسيكون لديك أحد للاتصال به.

القائمة المنسدلة نفسها تعرض إنشاء عربة التسوق، وهو يبدو مناسبًا وليس كذلك. عربة التسوق مجرد سلة — لا يمتلك Shopify بريدًا ولا هاتفًا ولا اسمًا لها، فلا يوجد من نتصل به. استخدمه فقط إذا أردت إشارة غير ضارة إلى أن الويبهوكس تصل فعلًا.

أنشئ هذه الويبهوكس في مسؤول Shopify، يدويًا، في هذه الصفحة. لا تنشئها عبر واجهة Shopify API. جرّبنا الطريقتين: تلك التي أُنشئت في هذه الصفحة وصلت خلال نحو ثلاثين ثانية؛ وتلك التي أُنشئت عبر الواجهة لم تصل إطلاقًا خلال أكثر من ساعة، ولم يعطِ Shopify خطأً في الحالتين.

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

الخطوة ٥ — اختبره في دقيقة واحدة

اطلب من Octo تغيير مدة الانتظار إلى دقيقة.

أولًا، ضع رقم هاتفك أنت على سجل عميل. في Shopify: العملاء ← اختر عميلًا ببريدك الإلكتروني أو أنشئه ← أضف رقم هاتفك واحفظ.

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

ثم:

١. سجّل الدخول إلى واجهة متجرك بهوية ذلك العميل ٢. أضف شيئًا إلى السلة ٣. اذهب إلى الدفع، لكي تُحمَّل الصفحة ٤. أغلق علامة التبويب

ينبغي أن يرن هاتفك بعد نحو دقيقة من تسليم Shopify الرسالة. لا تحتاج إلى كتابة أي شيء في نموذج الدفع.

ثم اطلب من Octo إعادة الانتظار إلى ثلاثين دقيقة. عند مدة دقيقة واحدة، يتصل التدفق بأشخاص ما يزالون يكتبون رقم بطاقتهم.

عندما لا يحدث شيء

هذا هو القسم الذي تمنّينا لو كنا نملكه. اتبعه بالترتيب — كل بند فيه هو شيء أوقف اختبارًا فعلًا.

لا يصل شيء إلى التدفق إطلاقًا

هل ضغطت Install app؟ تهيئة الأذونات ليست تثبيتًا.

هل أُنشئت الويبهوكس في مسؤول Shopify لا عبر الواجهة؟ انظر إلى ما سبق. هذا هو ما كلفنا أكثر الوقت بفارق كبير.

هل التدفق نشط؟ المسودّة ترفض كل شيء.

هل أنشأت التدفق أو عدّلته للتو؟ امنحه دقيقتين. التدفق الجديد تمامًا يجيب لوهلة بأنه «غير جاهز» أثناء التقاطه، ويعيد Shopify المحاولة من تلقاء نفسه.

تحقق أولًا من سجل التسليم لدى Shopify نفسه، على الويبهوك الذي أنشأته. إذا لم يُظهر Shopify تسليمًا، فالمشكلة في جانبهم من الخط، ولا شيء في Omni Octo سيفسرها لك.

يرسله Shopify، لكن التدفق يرفضه

في الغالب يكون السرّ الخطأ. أي سرّ يوقّع يعتمد على كيف أُنشئ الويبهوك، وهذا غير بديهي:

الويبهوك المُنشأ…موقّع بـ
يدويًا، في صفحة الإشعاراتسر التوقيع الموجود في الصفحة نفسها
بواسطة تطبيق، عبر الواجهةمفتاح الـAPI السرّي الخاص بذلك التطبيق

إذا اتبعت هذا الدليل فأنت تريد الصف الأول. وجّه التدفق إلى اتصال سر التوقيع من الخطوة ٢.

يبدأ التدفق، لكن لا أحد يتصل به

هل كان هناك رقم هاتف؟ افتح التشغيل وانظر إلى ما وصل. لا رقم يعني لا مكالمة، ذلك بالتصميم.

الإضافة إلى السلة لا تكفي. السلة وحدها لا تخبر Shopify بأي شيء. على الشخص أن يصل إلى صفحة الدفع، وأن يمتلك Shopify وسيلة للتواصل معه — إما من الحساب الذي سجّل الدخول به، أو مما يكتبه هناك.

كتابة رقم الهاتف ليست إرساله. في صفحة الدفع ذات الصفحة الواحدة لدى Shopify لا يوجد زر «متابعة» قبل السداد، فقد لا يصل رقم يكتبه أحدهم إلى Shopify أبدًا. الحل الموثوق هو البند التالي.

ضع رقم هاتف على سجل العميل. في Shopify: العملاء ← الشخص ← أضف هاتفه. رقم المتسوق الذي سجّل دخوله يرافق عندئذ عملية الدفع منذ الرسالة الأولى، فلا يعود أي مما سبق مهمًا. هذا هو التغيير الوحيد الذي جعل اختبارنا ناجحًا.

تسجيل الدخول عبر رسالة نصية لا يُحتسب. إذا أرسل Shopify رمزًا نصيًا للدخول، فذلك الرقم يخص نظام تسجيل الدخول لدى Shopify. إنه لا يصل أبدًا إلى سجل عملائك ولا يمكنك استخدامه.

الاختبار على متجر تجريبي أو محمي بكلمة مرور

تحتاج إلى كلمة مرور واجهة المتجر لتتسوق في متجرك أنت، من المتجر الإلكتروني ← التفضيلات ← الحماية بكلمة مرور.

لا تثق بـ onlineStoreUrl كدليل على نشر منتج. في المتجر المحمي بكلمة مرور يُبلغ عنه Shopify باعتباره فارغًا لـكل منتج، منشورًا كان أم لا. أضعنا وقتًا ننشر منتجات كانت منشورة أصلًا. افتح صفحة المنتج بكلمة المرور وانظر بنفسك.

ما الذي يوقف مكالمة

أربعة تحققات. كل واحد منها موضع ينتهي فيه التشغيل بهدوء وصواب بدلًا من الفشل. ما تراه بعده يختلف، لذا يستحق الأمر أن تعرف أيّها أيّ.

لقد اشترى. بعد الانتظار، نسأل Shopify إن كان قد نشأ طلب لعملية الدفع تلك. إن وُجد، يتوقف التشغيل. هذا هو السبب الوحيد لوجود الانتظار: يحتسب Shopify عملية الدفع متروكة لحظة كتابة أحدهم بريده الإلكتروني، وكثيرًا ما يكون ذلك بينما لا يزال يمد يده إلى بطاقته.

لم نستطع التحقق. إذا فشل هذا التحقق — رمز منتهي الصلاحية، أو إذن أُزيل، أو مشكلة شبكة — يتوقف التشغيل دون اتصال. التخمين في الاتجاه الآخر يعني الاتصال بمن دفع فعلاً.

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

إنه الليل عنده. ساعات الاتصال تُشتق من رمز بلد رقم الهاتف، والرقم الذي نعجز عن إيقاعه في منطقة زمنية هو رقم لن نتصل به. وفي البلد الممتد على عدة مناطق، يجب أن يكون النهار في جميعها.

طلب منك التوقف. قيد «عدم الاتصال» الخاص بذلك الرقم يمنع المكالمة قبل طلب أي رقم، ويسجّل التشغيل الرفض بدل الفشل.

تشغيل تدفق حفظ المتسوق كجهة اتصال ثم امتنع عن الطلب، مع خطوة المكالمة تُبلغ عن dialed false و skipped quiet_hours.
رفض مكتوب. حفظ هذا التشغيل المتسوق ثم امتنع عن الاتصال به في الواحدة والنصف فجرًا — dialed: false، والسبب مكتوب بجانبه. لقطات الشاشة معروضة بالإنجليزية — التطبيق غير متوفر بهذه اللغة بعد.

ما الذي لن يفعله هذا

لن ينشئ لك ويبهوكس Shopify. أنت تلصق العنوان بنفسك، مرتين.

لن يخترع رقم هاتف. لا رقم، لا مكالمة.

تعامل مع مكالمة الاستعادة على أنها «مرة واحدة على الأقل»، لا «مرة واحدة بالضبط». يرسل Shopify رسالة في كل مرة يغيّر المتسوق شيئًا، وكل رسالة تبدأ تشغيلًا خاصًا بها. تُقارَن هذه التشغيلات ببعضها فتنتج عادة مكالمة واحدة، لكن فاصلًا طويلًا بما يكفي بين الرسائل قد ينتج مكالمة ثانية. يستحق الأمر معرفته قبل توجيه هذا إلى عملاء حقيقيين.

أبقِ نسخة الـAPI محدثة. يسجّل اتصال Admin API نسخة واجهة Shopify الواجب استخدامها. يدعم Shopify كل نسخة نحو سنة، ثم يجيب بصمت بنسخة أقدم بدلًا من إخبارك. إن مضت سنة، فحدّثها.