Botframework-solutions: VA مع المهارة المتصلة لا تعمل بشكل صحيح في WebChat

تم إنشاؤها على ١٢ يونيو ٢٠١٩  ·  20تعليقات  ·  مصدر: microsoft/botframework-solutions

الإعداد الخاص بي هو نموذج مساعد افتراضي متصل بقالب مهارة. كل شيء على ما يرام إذا حاولت تشغيل VA داخل Bot Emulator ، وتعمل بشكل صحيح في المضيف المحلي ومع Azure Endpoint ، ولكن عندما أحاول بدء حوار مهارة في VA داخل Azure WebChat ، لا أجد أي رد ، توقف VA الخاص بي فقط أجب على أسئلتي.

emulator2
emulator1

Bug

التعليق الأكثر فائدة

شكرًا - لقد تمكنت من الرد في الدردشة على الويب. غريب - التحقيق.

ال 20 كومينتر

لدي نفس المشكلة بالضبط ، لدي روبوت الرئيسي والمهارة المنشورة في اللازوردية ، عندما أختبر الروبوت داخل المحاكي يعمل بشكل جيد تمامًا ، يتم تسليم المحادثة إلى روبوت المهارة. ولكن بمجرد استخدامه إما في الدردشة على الويب أو في حالتي في تطبيق React باستخدام الخط المباشر ، يتوقف الروبوت عن الاستجابة. الاختلاف الوحيد بالنسبة لي بين التكوينين هو أننا نستخدم AppId و AppPassword في المحاكي ، فربما توجد مشكلة مصادقة تمنع اثنين من الروبوتات من التحدث مع بعضهما البعض عند نشرهما في Azure؟

المعلومات الوحيدة في appinsights هي استثناء: فشل POST لنقطة نهاية الروبوت مع حالة HTTP 500 لا توجد تفاصيل أكثر من ذلك.

شكرًا على هذا - هل يمكنك تأكيد أنه يمكنك الاستعراض إلى نقطة نهاية بيان المهارة الخاصة بالمهارة التي تم نشرها؟ على سبيل المثال http://YOURSKILLNAME.azurewebsites.net/api/skill/manifest. سيثبت هذا أن المهارة تعمل بشكل صحيح.

شكرًا على هذا - هل يمكنك تأكيد أنه يمكنك الاستعراض إلى نقطة نهاية بيان المهارة الخاصة بالمهارة التي تم نشرها؟ على سبيل المثال http://YOURSKILLNAME.azurewebsites.net/api/skill/manifest. سيثبت هذا أن المهارة تعمل بشكل صحيح.

نعم ، البيان الخاص بي على الإنترنت ويبدو جيدًا. أيضًا ، إذا كنت أرغب في استخدام الدردشة عبر الويب داخل مجموعة موارد مهارتي ، فإنها تعمل (فقط مع حوارات المهارات وبدون VA ، بالطبع). هنا البيان الخاص بي: https://hsilva-my1stskill.azurewebsites.net/api/skill/manifest.

كل شيء يعمل داخل Bot Emulator ، باستخدام نقطة نهاية VA و Skill Azure الخاصة بي ، والمشكلة داخل VA WebChat فقط عند محاولة إعادة التوجيه للمهارة.

ما عليك سوى التحقق مرتين من خدمة التطبيق للمهارة التي تم إنشاؤها باستخدام البرنامج النصي للنشر؟ في كلتا الحالتين يمكنك التحقق من تمكين Web-Sockets على خدمة التطبيقات للمهارة؟ تم تعيين هذا كجزء من نشر المهارات.

image

ما عليك سوى التحقق مرتين من خدمة التطبيق للمهارة التي تم إنشاؤها باستخدام البرنامج النصي للنشر؟ في كلتا الحالتين يمكنك التحقق من تمكين Web-Sockets على خدمة التطبيقات للمهارة؟ تم تعيين هذا كجزء من نشر المهارات.

نعم ، لقد تم تمكين مقبس الويب في كلا التطبيقين ، في VA الخاص بي وفي تطبيق Skill الخاص بي.
وأنا أفعل كل العملية بعد التوثيق ، مع البرامج النصية للنشر.

شكرًا - آخر شيء لمساعدتنا في إعادة المحاولة ، هل يمكنك مشاركة رمز html / js الخاص بالدردشة عبر الويب الذي تستخدمه لـ "استضافة" روبوت VA - مطروحًا منه أسرارك بالطبع! الرجاء عدم استخدام عنصر التحكم في دردشة الويب في صفحة Azure - بدلاً من ذلك ، قم بتوصيل قناة دردشة الويب والاختبار من خلال هذا النهج.

إذا كان ذلك يساعدك ، ففي حالتي أيضًا ، تم تنشيط مآخذ الويب ويمكن الوصول إلى البيان ، فإن كود التفاعل الذي استخدمته هو:

import React, {Component} from 'react';
import {connect} from 'react-redux';
import { DirectLine } from 'botframework-directlinejs';
import ReactWebChat from 'botframework-webchat';


class HomePage extends Component {
  constructor(props) {
    super(props);

    this.directLine = new DirectLine({ token: '' });
  }
  render() {
    return (
      <div style={{height:'500px'}}>
        <ReactWebChat directLine={ this.directLine } 
                      styleOptions={{}} 
                      locale='fr-FR' 
                      />
      </div>
    );
  }
}

const mapStateToProps = state => ({
  userInfo: state.auth.userInfo,
});

export default connect(mapStateToProps)(HomePage);


البيان الخاص بي: https://dave-skill-jooxter.azurewebsites.net/api/skill/manifest ، أنا لا أستخدم اتصالات oauth.

شكرًا - آخر شيء لمساعدتنا في إعادة المحاولة ، هل يمكنك مشاركة رمز html / js الخاص بالدردشة عبر الويب الذي تستخدمه لـ "استضافة" روبوت VA - مطروحًا منه أسرارك بالطبع! الرجاء عدم استخدام عنصر التحكم في دردشة الويب في صفحة Azure - بدلاً من ذلك ، قم بتوصيل قناة دردشة الويب والاختبار من خلال هذا النهج.

عذرًا ولكن ليس لدي html / js لمشاركته لأنني أحاول فقط استخدام Azure WebChat داخل المدخل. لذا ، لا يمكن تشغيل هذا الحوار عبر الويب؟ أريد فقط أن أعرف ما إذا كنت قد فعلت شيئًا خاطئًا أم أنه طبيعي.

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

شكرًا - لقد تمكنت من الرد في الدردشة على الويب. غريب - التحقيق.

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

لقد تحققت للتو من أن # 1540 يعمل على إصلاح المشكلة في بوت الخاص بي. بينما نقوم بإعداد حزمة مهارات جديدة ، يمكنك المضي قدمًا من خلال أخذ أحدث تصميم من myget وفي نفس الوقت ربما يكون من الحكمة أن تأخذ الحلول من myget أيضًا لأنها مبنية معًا.

يوجد مثال لسطر الأوامر حول كيفية التثبيت ولكن يمكنك أيضًا إضافة مصدر حزمة في Visual Studio إلى: https://botbuilder.myget.org/F/aitemplates/api/v3/index.json

بمجرد حصولك على هذه الإصدارات ، أعد نشر Bot إلى Azure وحاول مرة أخرى.

شكرا لمساعدتك في تشخيص هذا.

darrenj بالنسبة لي يبدو أنه يعمل الآن ، عمل رائع!

عظيم ، شكرا لإعلامنا. سننشر مجموعة جديدة من الحلول والمهارات بحلول نهاية الأسبوع.

darrenj بالنسبة لي عندما أحاول بناء مشروع مهاراتي لدي هذا الخطأ.
لا يحتوي "SkillEvents" على تعريف لـ "SkillBeginEventName" ، MainDialog.cs ، السطر 128.

احذف هذا المعالج - انتقلت حزمة المهارات الأخيرة إلى استخدام SemanticObject (عبر SkillMiddleware) بدلاً من استخدام حدث منفصل لذلك لا تحتاج إلى التعامل مع هذا المضي قدمًا.

                case SkillEvents.SkillBeginEventName:
                    {
                        var state = await _stateAccessor.GetAsync(dc.Context, () => new SkillState());

                        if (dc.Context.Activity.Value is Dictionary<string, object> userData)
                        {
                            // Capture user data from event if needed
                        }

                        break;
                    }

احذف هذا المعالج - انتقلت حزمة المهارات الأخيرة إلى استخدام SemanticObject (عبر SkillMiddleware) بدلاً من استخدام حدث منفصل لذلك لا تحتاج إلى التعامل مع هذا المضي قدمًا.

                case SkillEvents.SkillBeginEventName:
                    {
                        var state = await _stateAccessor.GetAsync(dc.Context, () => new SkillState());

                        if (dc.Context.Activity.Value is Dictionary<string, object> userData)
                        {
                            // Capture user data from event if needed
                        }

                        break;
                    }

شكرًا لك ، لقد قمت الآن بالانتشار مرة أخرى وسيحدث شيء جديد. لم ينتظر المساعد ردي وأرسل لي كل المنعطفات في مربع الحوار متعدد الأدوار (أيضًا داخل Bot Emulator).

emulator3

أعتقد أنه تم اختيار تغيير / إصلاح آخر كجزء من التحديث. @ lzc850612 واحد لإلقاء نظرة بمجرد أن تستيقظ ؛-)

لقد نشرنا للتو حزم nuget جديدة إلى nuget والتي يمكنك تحديثها وإزالتها من إصدار الإصدار اليومي. نحن فقط بعض المنطق الذي يتطلب تغييرًا في MainDialog.cs في مساعدك والذي أعتقد أنه أصل المشكلة التي رأيتها أعلاه.

ضمن RouteAsync قم بإزالة هذا السطر

  // Pass the activity we have
  var result = await dc.ContinueDialogAsync();

يعمل WebChat "خارج الصندوق" مع التغييرات الجديدة.

تأكد من تحديث جميع حزم nuget الخاصة بك ... وأن المهارات تعمل مع webchat!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات