كيفية إعداد مصادقة DialogFlow V2 برمجياً مع node.js

قبل أسبوع ، أعلنت DialogFlow ، وهي المنصة المفضلة لبناء الدردشة ، عن توفر نظام V2 API بشكل عام. كمطور اعتاد على العمل مع الإصدار 1 ، كنت مترددًا في البداية في الترحيل إلى الإصدار 2 ، لكنني قررت في النهاية أن الأمر يستحق كل هذا الجهد. لماذا ا؟ 3 أسباب رئيسية:

  1. V2 هو الآن إصدار API الافتراضي. سيتم دعم جميع الميزات الجديدة فقط لهذا الإصدار ، مما يجعل V1 عديمة الفائدة بشكل متزايد
  2. تدعم استعلامات الصوت عبر صوت Google إلى كلام
  3. يدعم Dialog Enterprise Edition الإصدار 2 ، وعلى الرغم من أنه قد لا يكون ذا صلة على الفور ، نأمل ، بمجرد أن يصبح chatbot شائعًا ، فإنك تحتاج إلى مزيد من القابلية للتوسعة ودعم أفضل يوفره إصدار المؤسسة

إذا كنت قد تطورت بالفعل مع DialogFlow وبدأت في اتباع دليل الترحيل ، فيجب أن تعرف الآن ما هو الألم في $ $$. هدفي في هذا المقال والتالي هو توفير بعض الوقت والإحباط الذي كان علي تحمله.

لذا ، سنرى اليوم كيفية التبديل من رمز عميل V1 السهل للغاية إلى حساب خدمة V2 الصعب.

قبل أن نبدأ

يرجى التأكد من تصدير وكيلك الحالي. إذا حدث خطأ ما ، يمكنك دائمًا الرجوع إلى وكيل V1 القديم الجيد. انقر على أيقونة الترس بالقرب من اسم وكيلك ، ثم انقر فوق علامة التبويب "تصدير واستيراد" وانقر على زر "EXPORT AS ZIP".

إعداد المصادقة

في الإصدار الثاني من V2 ، تحتضن DialogFlow مفهوم حسابات الخدمة وتتخلى عن رمز وصول عميل V1. على الرغم من أن حسابات الخدمة مفضلة على رموز الوصول ، إلا أن هناك منحنى تعليمي حاد إلى حد ما عندما يتعلق الأمر بإنشاءها ونشرها.

الآن ، يمكنك اتباع دليل إعداد DialogFlow Authentication لكنني وجدت أنه غير متسق مع ما يحدث في التطبيق في وحدة التحكم لديك. لذلك ، كيف أفعل ذلك:

  1. انتقل إلى إعدادات وكيلك. يجب أن يكون لديك بالفعل مشروع Google مرتبط بوكيلك. إذا لم تقم بذلك ، فانقر فوق الارتباط "إنشاء أو ربط معرف مشروع Google الحالي". بعد ذلك ، في نافذة الحوار التي تفتح ، انقر على سهم القائمة المنسدلة "إنشاء مشروع Google جديد" وقم بإنشاء أو اختيار مشروع موجود. يرجى ملاحظة أنه بمجرد أن يتم ربط المشروع أو إنشاؤه ، لا يمكن تغييره. إذا كنت ترغب في استخدام مشروع آخر ، فستحتاج إلى إنشاء وكيل جديد. ومع ذلك ، نظرًا لأنك اتبعت تعليمات "قبل أن نبدأ" أعلاه وقمت بتصدير وكيلك ، فيجب أن تكون سهلة مثل الفطيرة. هل اتبعت التعليمات ، أليس كذلك؟
  2. مرة أخرى في إعدادات الوكيل ، ضمن "API VERSION" ، حدد "V2 API". يجب أن تشاهد مربع حوار مماثل للحوار أدناه. انقر فوق "ترقية إلى الإصدار الثاني"

إعداد حساب الخدمة

تحتاج الآن إلى إنشاء حساب الخدمة ، أو بشكل أكثر دقة مفتاحه. مرة أخرى ، في الإعدادات ، انقر فوق الزر "حفظ" الأزرق في أعلى اليمين. سيتغير الزر إلى زر "العمل ..." الأخضر. بعد الانتهاء ، يجب أن ترى حقل حساب خدمة أسفل اسم المشروع مباشرةً

انقر فوق اسم حساب الخدمة. سيؤدي هذا إلى فتح صفحة حساب خدمة مشروع Google Cloud Platform. يجب أن تشاهد حساب خدمة "تكامل Dialogflow" الذي تم إنشاؤه للتو:

الخطوة التالية هي إنشاء مفتاح جديد لحساب الخدمة (المفتاح الموجود بالفعل بلا فائدة ويمكنك حذفه بعد الانتهاء). انقر على 3 نقاط رأسية في أقصى اليمين واختر ، "تفكر في إنشاء مفتاح". احتفظ بخيار نوع مفتاح JSON واضغط على "إنشاء". سيتم تنزيل ملف JSON على جهاز الكمبيوتر الخاص بك وستظهر لك رسالة "المفتاح الخاص محفوظ على جهاز الكمبيوتر الخاص بك". انقر فوق "إغلاق". أنت تقريبًا هناك! لقد حان الوقت للانتقال إلى الرمز!

نصيحة مكافأة

الدور الافتراضي لحساب الخدمة الخاص بك هو "عميل Dialogflow API". يجب أن يكون هذا كافيًا في معظم الحالات ، إلا إذا كنت بحاجة إلى جلب المقاصد والكيانات وتعديلها برمجيًا (وهو ما تريده إذا كنت ترغب في التعامل بذكاء مع الأهداف الاحتياطية على سبيل المثال - المزيد حول ذلك في المنشور التالي) ، وفي هذه الحالة ستحتاج إلى دور المسؤول.

دعونا نفعل بعض الترميز!

حسنًا ، لذلك ، تنصح Dialogflow / Google باستخدام gcloud SDK و cli ، ثم قم بتخزين ملف JSON الذي قمت بتحميله للتو في مكان آمن وتعيين متغير بيئة GOOGLE_APPLICATION_CREDENTIALS يشير إلى موقع الملف.

أجد هذا ملفوفًا جدًا وعلى عكس ممارستي للتطوير الشخصي وهي:

  1. أنا فقط نشر ملفات التعليمات البرمجية
  2. يجب تعيين أي قيم التكوين كمتغيرات البيئة.

هذا يعني أنه يجب علينا استخدام بديل لملف JSON. حسنًا ، tl؛ dr ، إليك الرمز الذي أستخدمه:

بخلاف مثال Dialogflow SDK ، أقوم بإنشاء مثيل لـ SessionClient باستخدام كائن تكوين. كل ما يحتاجه الكائن هو private_key و client_email. يمكنك العثور على قيمها في ملف JSON الذي قمت بتنزيله للتو (والذي ، يمكنك الآن حذفه لأنك لم تعد بحاجة إليه). ما عليك سوى نسخها إلى وحدة التكوين المفضلة لديك ، ومن الأفضل أن تذهب.

الآن ، كل ما عليك القيام به لتحديد نية من إدخال نص معين هو الاتصال:

دع الردود = ننتظر this.sessionClient.detectIntent (طلب)

وهذا كل شيء!

نصيحة مكافأة

ربما لاحظت أنني إما JSON.parse (private_key) أو استخدام private_key كما هي. والسبب هو أن الخيط يعمل بشكل جيد على جهاز windows المحلي (لا تحكمني). ومع ذلك ، في Heroku ، \ n (ewline) يربكها (انظر المزيد هنا).

نأمل كنت تتمتع هذه الوظيفة!