IBM watson Интеграция с Twilio - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь интегрировать бота IBM Watson с twilio, WhatsApp, используя облачные функции IBM, используя Nodejs. Я следовал за следующим блогом, чтобы придумать этот код

https://www.codechain.com.br/2019/02/20/ibm-cloud-alem-do-watson-whatsapp-gateway-100-serverless/

Ниже приведен код для справки:

var AssistantV2 = require( 'ibm-watson/assistant/v2' )

var twilio = require ( 'twilio' ) ;
async function main ( parameters ) { 
   try {
       var assistant = new AssistantV2({
       version: '2019-02-28',
       iam_apikey: '',
       url: ''
       });
      // printing values ​​received by twilio (message sent by the user)
      console.log ( 'parameters received from twilio:' , parameters ) ;
      console.log ( 'AccountSid:' + parameters.AccountSid ) ;
      console.log ( 'Body:'+ parameters.Body ) ;
      console.log ( 'From:'+ parameters.From ) ;
      console.log ( 'NumMedia:' + parameters.NumMedia ) ;
      console.log ( 'MediaContentType0:' + parameters.MediaContentType0 ) ;
      console.log ( 'MediaUrl0:' + parameters.MediaUrl0 ) ;
      // inform the user who received your message
      // this line is only for testing, in a real scenario a chatbot integration should be called
      parameters.message = assistant.message({
                            assistantId: '',
                            sessionId: parameters.sid,
                        input: {
                                'message_type': 'text',
                                'text': parameters.Body
                                }
                       })

  .then(res => {
    console.log(JSON.stringify(res, null, 2));
  })
  .catch(err => {
    console.log(err);
  });
     await callTwilio ( parameters ) ;
     console.log ( 'whatsapp call ended' ) ;
     return {
        statusCode: 200 ,
        headers: { 'Content-Type' : 'application / json' } ,  
        body: { Body: 'success' } , 
     } ;
   } catch ( err ) {   
      console.log ( err )
     return Promise. reject ( {
        statusCode: 500 ,
        headers: { 'Content-Type' : 'application / json' } ,  
        body: { message: err.message } ,
     } ) ;
   }
}
async function callTwilio ( parameters ) {
   console.log ( 'joined twilio' ) ;
   var client = new twilio ( parameters.AccountSid, parameters.authToken ) ;
   await client.messages. create ( {
      body: parameters.message,
      to: parameters.From,
      from: 'whatsapp:+' + parameters.telephoneOrigin
   } )
   . then ( ( message ) => console. log ( message.sid ) ) ;
   console.log ( 'left twilio' ) ;

}

Но я получаю следующее сообщение об ошибке:

Results:
{
  "error": {
    "body": {
      "message": "username is required"
    },
    "headers": {
      "Content-Type": "application / json"
    },
    "statusCode": 500
  }
}

Ответы [ 2 ]

1 голос
/ 31 января 2020

Код, который у вас есть, выглядит корректно для более старых версий 4.x модуля npm ibm-watson. Код, который показывает @Andrei, частично верен для версий 5.x. Я предполагаю, что вы клонировали репо с пакетом. json зависимость для версии 4.x.

В этом случае вам необходимо изменить зависимость в package.json. Текущая версия - 5.3.1

. Затем запустите npm install, чтобы получить обновленную версию пакета ibm-watson.

Ваша аутентификация должна основываться на документах API - https://cloud.ibm.com/apidocs/assistant/assistant-v2?code=node

const AssistantV2 = require('ibm-watson/assistant/v2');
const { IamAuthenticator } = require('ibm-watson/auth');

const assistant = new AssistantV2({
  version: '{version}',
  authenticator: new IamAuthenticator({
    apikey: '{apikey}',
  }),
  url: 'https://api.jp-tok.assistant.watson.cloud.ibm.com',
});

, но затем вам нужно создать сеанс.


let sessionID = null;

assistant.createSession({
  assistantId: '{assistant_id}'
})
  .then(res => {
    if (res && res.session_id) {
      sessionID = res.session_id;
    }}
  })
  .catch(err => {
    console.log(err);
  });

Затем вы можете отправлять сообщения в службу Assistant.

Кстати, поскольку в своем ответе вы указали свой APIKey, URL-адрес конечной точки и идентификатор помощника, его легко использовать всем. Вам нужно будет отозвать свой ключ и создать новый, потому что ваш существующий теперь взломан.

0 голосов
/ 30 января 2020

Похоже, что аутентификация не выполняется правильно для IBM Watson

в NPM документах. Вот следующее https://www.npmjs.com/package/ibm-watson

const AssistantV2 = require('ibm-watson/assistant/v2');
const { IamAuthenticator } = require('ibm-watson/auth');

const assistant = new AssistantV2({
  authenticator: new IamAuthenticator({ apikey: '<apikey>' }), // need to use this
  url: 'https://gateway.watsonplatform.net/assistant/api/',
  version: '2018-09-19'
});

assistant.message(
  {
    input: { text: "What's the weather?" },
    assistantId: '<assistant id>',
    sessionId: '<session id>',
  })
  .then(response => {
    console.log(JSON.stringify(response.result, null, 2));
  })
  .catch(err => {
    console.log(err);
  });
...