
هل تعيش في موسكو وتقود سيارتك؟ إذا كان الأمر كذلك ، كيف تدفع ثمن وقوف السيارات؟ إرسال الرسائل القصيرة؟ الدفع من خلال التطبيق موسكو وقوف السيارات؟ استخدام الروبوت في برقية؟ "هذا كله غير مريح" ، قررت ، وخلق مهارتي لأليس لدفع ثمن وقوف السيارات عن طريق الصوت. بالإضافة إلى ذلك ، بنيت أليس بالفعل في Yandex.Navigator. الآن يمكنك فقط إخبار Navigator بشيء مثل "Alice ، اطلب من
Moscow Parking وقوف السيارات 3209 لمدة 30 دقيقة ."
ماذا واجهت عند تطوير مهارة؟
الجلسة
من أجل بدء المهارة من مطور تابع لجهة خارجية ، تحتاج Alice إلى قول "Alice ، قم بإطلاق المهارة". هذا أمر جيد ومريح إذا كان لديك اتصال طويل بالمهارة - على سبيل المثال ، تبدأ اللعبة. إذا كنت بحاجة إلى قول عبارة ، والحصول على إجابة وهذا كل شيء ، فإن "الدخول في مهارة" غير مريح - مع هذا الإدخال ، عندما تنتهي من العمل بمهارة ، ستحتاج إلى "الخروج".
في جملة واحدة ، يوجد حل من مطوري Alice - عليك أن تقول ، "Alice تطلب المهارة
للقيام بهذا وكذا ." ومع ذلك ، فإن
مثال الثعبان من مطوري Alice لا يدعم مثل هذا إطلاق المهارات:
if req['session']['new']:
في كل مرة يتم إطلاق مهارة ، بما في ذلك وبأمر "أليس تطلب
مهارة ..." ، تكون قيمة
session.new حقيقية . لذلك ، لن يتم تنفيذ جميع التعليمات البرمجية المعالجة. الحل هو التحقق من نص
session.command - يجب أن يكون فارغًا.
بالمناسبة ، إذا كنت قد "دخلت" مهارة ، فبشكل افتراضي لجميع المهارات ، تدعم Alice عبارات الخروج - "Alice ، أوقفها" و "Alice ، عد". إذا كنت ترغب في إنهاء الجلسة بالقوة ، فستحتاج إلى اجتياز
جلسة نهاية مساوية لـ
True في الاستجابة. لكن هذا يعمل فقط مع Yandex.Station - على الأجهزة الأخرى ، لا يعمل الخروج من المهارة في هذه الحالة.
العمل مع الأرقام
مهارتي هي العمل مع الأرقام - أولاً التعرف على رقم هاتف المستخدم ، ثم التعرف على رقم وقوف السيارات.
في المثال أعلاه من ياندكس المستخدمة
req['request']['original_utterance'].lower()
للعمل مع طلب المستخدم. أولاً ، استخدمت هذا الحقل من الطلب. من أجل التعرف على رقم هاتف المستخدم ، كان علي أن أطلب من المستخدم تسمية كل رقم من الرقم بشكل منفصل - على سبيل المثال ، "تسعة واحد ستة واحد اثنان ثلاثة أربعة خمسة ستة ستة سبعة". وفي الكود - استبدل القيم النصية ("تسعة") برقم (9). اتضح حتى أكثر تسلية مع رمز وقوف السيارات - أدعو رمز "3209" باسم "اثنان وثلاثون صفر تسعة" ، وكان رمز مجموعة من استبدال نوع
s.replace(' ', '32').replace(' ', '31').replace('', '0')
نظرًا لأنه استنادًا إلى نص الطلب في رمز المهارة ، حاولت أن أفهم ما يريده المستخدم (لا يتم استخدام جهاز الحالة في المهارة) ، وكان علي إجراء هذا التحويل مع كل طلب مستخدم تقريباً (!).
اتضح أن خوادم Alice تقوم بالفعل بكل شيء من أجلك (وحتى أكثر). فقط بدلاً من
request.original_utterance ، تحتاج إلى استخدام
request.command . نعم ، جاء ذلك في الوثائق. في تلميح الأدوات في مثال الإجابة.
مجال الخدمة: تم تحويل طلب المستخدم للمعالجة الداخلية لـ Alice. أثناء التحويل ، يتم مسح النص ، على وجه الخصوص ، من علامات الترقيم ، ويتم تحويل الأرقام إلى أرقام.
من الغريب أنه في المثال من مطوري Alice (الرابط أعلاه) ، يتم استخدام النص الأصلي (
request.original_utterance ). في الواقع ، يتم عمل المزيد في
request.command (وهو غير موصوف في الوثائق). على سبيل المثال ، يتم تحويل رقم الهاتف إلى التنسيق
(916) 123-45-67 - الآن يمكن للمستخدم الذي يتمتع بمهاراتي الاتصال بالهاتف بأي تنسيق مناسب له. أيضا ، عبارة "Alice ، اطلب مثل هذه المهارة" ، يتم قطع رسائل "Alice" ، يتم تصحيح الأخطاء المطبعية.
من جانب Alice ، يمكن تحويل الأجزاء الفردية من الاستعلامات (الأرقام والأسماء والعناوين والتواريخ) إلى
الكيانات المسماة . لكنه يعمل غريب. طلب
79161234567 1234 ، في الكيانات المسماة تحويلها إلى رقمين -
791612345 70 و
1234 . لماذا تبين أن الرقم الأول مختلف ، لم يكن من الممكن معرفة ذلك. دعم Yandex.Dialog لا يزال يفكر في الإجابة.
وقت استجابة المهارة
تنتظر أليس استجابة من المهارة في غضون 3 ثوانٍ (لدى Google هذا الحد -
5/10 ثانية ). مهارتي هي الوصول إلى خوادم الطرف الثالث لبدء وإنهاء وقوف السيارات. يجيبون ببطء. في بعض الأحيان في 3 ثوانٍ ، لا يتوفر لدى مهارتي الوقت لإعطاء إجابة. بشكل فردي ، لم يكن من الممكن زيادة وقت الاستجابة للمهارة. لذلك ، في بعض الحالات ، كان من الضروري التضحية بالراحة - على سبيل المثال ، في بداية وقوف السيارات ، لا تطلب المهارة السيارة الفعلية المحددة في ملف تعريف تطبيق مواقف موسكو ، ولكنها تستخدم السيارة التي احتفظت بها أثناء ترخيص المستخدم.
حسنا ، على حقوق "أنا العلاقات العامة" ؛) -