Введение: мне кажется, что мне не хватает чего-то ужасно очевидного о том, как Watson Assistant должен быть разработан на уровне архитектуры, но, возможно, это не так.
Конкретная проблема, с которой я столкнулся, заключается в том, что я не могу получать вызовы API для получения информации обратно в беседу.
Более серьезная проблема заключается в том, что я не уверен, что правильно настроил все это для долгосрочной перспективы того, что я пытаюсь выполнить.
Цель: я создаю круглосуточную службу поддержки клиентов уровня 1 для наших управляемых сетей. Пользователь одной из наших сетей должен иметь возможность с помощью SMS, веб-чата, мессенджера Facebook и, в конечном итоге, по телефону, запрашивать:
- Инструкции по подключению их конкретного устройства (ПК, Mac, Chromebook, Xbox, Apple TV и т. Д.)
- Обратитесь за помощью в устранении неполадок, если инструкции не приводят к успешному подключению. (Пошаговые инструкции по удалению сохраненной сети, перезапуску беспроводной карты и т. Д.)
- Помогите создать дело - в этот момент разговор превращается в Watson, запрашивающего кучу информации, например, в какое время и дату они впервые столкнулись с проблемой, какие-либо другие времена / даты, когда они столкнулись с проблемой, их MAC-адрес и т. Д. И т. Д.
Проблемы: у меня большая часть диалогов построена и работает хорошо. Получение информации через Entities, сохранение в контекстных переменных, вывод их обратно, чтобы разговор работал, отклонения и т. Д. - все работает.
Я не могу, хоть убей, понять, что я делаю неправильно, пытаясь ПОЛУЧИТЬ информацию из внешнего API.
У нас есть «ежедневный пароль» для наших гостевых сетей, и мы хотели бы, чтобы пользователь, запрашивающий ежедневный пароль, получил его. Это включает очень простой запрос GET к общедоступному серверу.
Я создал функцию BlueMix / IBM Cloud, которая отлично работает, но я не могу успешно позвонить или получить от нее информацию.
Ошибка Watson:
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 секунды? Или я совершенно не понимаю, как получать внешнюю информацию в Watson и из него?
РЕДАКТИРОВАТЬ: после просмотра видео Митча я изменил пару вещей, и сообщение об ошибке превратилось в следующее:
"Ошибка при обновлении вывода с выводом идентификатора диалогового узла [node_66_1533646714776]. Вывод узла: [{" text ": {" values ": [" Сегодняшний пароль для is "]," selection_policy ":" sequence "}}] Оценка SpEL ошибка: Выражение [$ guestNetwork ['ssid']] преобразовано в [context ['guestNetwork'] ['ssid']] в позиции 24: EL1012E: Невозможно проиндексировать ошибку с нулевым значением.