Развертывание без сервера Watson? (Вопросы об интеграции с другими сервисами RESTful)
Введение: я чувствую, что упускаю что-то ужасно очевидное в том, как Watson Assistant должен быть спроектирован на уровне архитектуры, но, возможно, я не так.
Конкретная проблема, с которой я сталкиваюсь, заключается в том, что я не могу вернуть запросы API для получения информации в диалог.
Более серьезная проблема заключается в том, что я не уверен, что все это правильно настроил для того, что я пытаюсь достичь.
Цель: я создаю службу поддержки уровня 1 24/7 для наших управляемых сетей. Пользователь одной из наших сетей должен с помощью SMS, веб-чата, мессенджера Facebook и, в конечном счете, телефонного звонка, запросить:
- Инструкции о том, как подключить свое конкретное устройство (ПК, Mac, Chromebook, Xbox, Apple TV и т. Д.)
- Обратитесь за помощью в устранении неполадок, если инструкции не приводят к успешному соединению. (Пошаговые инструкции по удалению сохраненной сети, перезагрузке беспроводной карты и т. Д.)
- Помогите в создании дела - в этот момент разговор переходит к Уотсону, который запрашивает кучу информации, например, в какое время и в какой день они впервые столкнулись с проблемой, в любое другое время / даты, когда у них возникла проблема, их MAC-адрес и т. Д.
Проблемы: у меня большая часть диалога построена и работает хорошо. Получение информации через сущности, сохранение в контекстные переменные, выкладывание их обратно, чтобы заставить разговор работать, отступления и т. Д. Все работало.
Насколько я могу судить, я не могу понять, что я делаю неправильно, пытаясь получить информацию из внешнего API.
У нас есть "ежедневный пароль" для наших гостевых сетей, и мы хотели бы, чтобы пользователь, который запрашивает ежедневный пароль, получил его. Это включает в себя очень простой запрос GET к общедоступному серверу.
Я создал функцию BlueMix/IBM Cloud, которая отлично работает, но я не могу успешно вызывать или получать информацию от нее.
Ошибка Уотсона:
Error when updating output with output of dialog node id [node_66_xxxxxxxxxx]. Node output is [{"text":{"values":["Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.password ?>"],"selection_policy":"sequential"}}] SpEL evaluation error: Expression [ $guestNetwork.ssid ] converted to [ context['guestNetwork'].ssid ] at position 0: EL1007E: Property or field 'ssid' cannot be found on null (and there is 1 more error in the log)
Эта ошибка заставляет меня думать, что я неправильно определяю результирующую переменную в Watson или неправильно пытаюсь получить ее в разговоре - потому что я знаю, что мой код возвращает SSID и пароль при запуске в консоли BlueMix.
JSON для самого действия (и да, я устанавливаю учетные данные в предыдущем узле):
{
"output": {
"text": {
"values": [
"Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.psk ?>"
],
"selection_policy": "sequential"
}
},
"actions": [
{
"name": "get-http-resource/getGuestNetworkPassword",
"type": "server",
"credentials": "$private.myCredentials",
"result_variable": "$guestNetwork"
}
]
}
Вопрос:
Возможна ли моя идея "безсерверного" Watson с помощью внешних служб Watson <-> IBM Cloud <->? В настоящее время у нас нет "приложения" или сервера, это все интеграция между существующими сервисами.
Может кто-нибудь помочь мне понять, что я делаю неправильно, когда пытаюсь получить доступ к этой переменной?
Бонусные баллы: Как я могу получить доступ к переменной только после успешного завершения действия в облаке IBM? По сути, если доступ к информации через написанную мной функцию IBM Cloud занимает 1,5 секунды, нужно ли приостанавливать диалог на 1,5 секунды? Или я полностью упускаю вопрос о том, как получать и выводить внешнюю информацию из Уотсона?
РЕДАКТИРОВАТЬ: После просмотра видео Митча, я изменил пару вещей, и сообщение об ошибке превратилось в это:
"Ошибка при обновлении вывода с выводом идентификатора узла диалога [node_66_1533646714776]. Выход узла - [{"text":{"values ":[" Сегодняшний пароль для is "],"selection_policy":"sequential"}}] Оценка SpEL ошибка: выражение [ $guestNetwork['ssid'] ] преобразовано в [ context['guestNetwork']['ssid'] ] в позиции 24: EL1012E: Ошибка не может перейти в нулевое значение ".
2 ответа
Не видя вашего диалога, это предположение, но наиболее распространенная ошибка, которую я вижу, это то, что вам просто нужно перейти к дочернему диалоговому узлу после выполнения вызова действия. Вы не можете выполнить вызов действия и отобразить ответ в одном и том же диалоговом узле, так как диалог должен иметь шанс выполнить действие.
Это обрисовано в общих чертах в моем видео здесь: https://ibm-dte.mybluemix.net/ibm-watson-assistant?refresh смотрите видео в диалоговых выносках. Это 13 минут, я уверен, что вам нужно только около 2 из них, но все же, должно помочь.
То, что вы пытаетесь сделать, определенно возможно, особенно если это работает в среде облачных функций.
Мы воссоздали действие, используя пакет по умолчанию (не содержащий его в подпакете), и оно сразу начало работать.
На что следует обратить внимание: редактор диалогов Watson не любит тире в имени пакета.
Спасибо Митч!