использование стороннего API на Watson Assistant - PullRequest
0 голосов
/ 25 октября 2018

Я использую открытую карту погоды api , чтобы получить информацию о текущей погоде и затем интегрировать ее с помощником Уотсона (я использовал это как справку для Ватсонакод помощника) перед развертыванием на терминале.Вот мой код:

var city = "Seattle";
weather.setCity(city);
function processResponse(err, response){
        if(err){
            console.log(err);
            return;
        }
        var endConversation = false;
        if(response.intents[0]){
            if(response.intents[0].intent=="CurrentWeather"){
                 weather.getDescription(function(err, desc){
                     weather.getTemperature(function(err, temp){
                         console.log("It is " + desc + " today with a temperature of " + temp + " degrees Celsius.");
                     )};
                 )};
            }
            else if(response.intents[0].intent=="end_conversation"){
                console.log(response.output.text);
                endConversation = true;
            }
        }
        if(!endConversation){
            var newMessageFromUser = prompt(">> ");
            service.message({
                workspace_id: workspace_id,
                input: {
                    text: newMessageFromUser
                },
                context: response.context
            },processResponse);
        }
}

это работает, но тогда ответ выглядит так:

>> what is the weather today in seattle
>>
It is few clouds today with a temperature of 29 degrees Celsius.
>> bye
['See ya!']

всякий раз, когда я использую любой сторонний apis, вместо того, чтобы отвечать сразу после того, как я вхожу в триггерключевые слова, терминал просит меня ввести другую запись (в сценарии выше, я ничего не вводил), прежде чем ответить.однако, когда я пытаюсь ввести ключевые слова, связанные с намерениями, чьи ответы только что были получены сразу же от помощника Ватсона (как и в случае с end_conversation), терминал отвечает сразу же.

Есть ли способ заставить меня заставитьтерминал спросить только один раз?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

следуя совету Михала Биды , я попытался внедрить сторонний API в облачной функции, и это сработало.просто создал функцию php, используя реализацию php карты openweather api и следуя инструкциям по созданию действия в php, через это руководство .для реализации я следовал этому руководству о том, как реализовать действия в watson assistant.теперь он работает, даже когда напрямую вызывается из чат-бота на стороне помощника Ватсона.

Примером ответа, который он возвращает, будет:

{"weather":"It is raining today in Seattle with a temperature of 15 degrees Celsius"}
0 голосов
/ 25 октября 2018

Существуют различные способы обойти ввод чего-либо до фактического ответа.

Взгляните на клиентские действия диалога .Ключ должен использовать флаг skip_user_input и проверять его в вашем приложении.По сути, это будет указывать вашему приложению, что вам нужно обработать некоторые данные.Приложение отправит обратно в Watson Assistant, чтобы ответить. Существует также диалоговое действие на сервере .В этом случае Watson Assistant вызывает действие IBM Cloud Functions. Учебное пособие, использующее этот подход, находится здесь, взаимодействуя с базой данных Db2 .

Другой метод - это то, что я называю замененные маркеры .Вам бы Watson Assistant вернул ответ с заполнителями.Ваше приложение заменит эти маркеры.

В-третьих, вы используете JavaScript с асинхронной обработкой.Кажется, что ваш пустой запрос обрабатывается, пока вы получаете данные о погоде.IF для погоды не зависит от пустой подсказки.Попробуйте исправить это.

...