IBM watson与twilio的集成
我正在尝试将IBMWatson机器人与twilio集成,whatsapp使用IBMCloud函数和Nodejs。我在下面的博客中找到了这段代码 请查找以下代码以供参考:IBM watson与twilio的集成,twilio,ibm-watson,whatsapp,ibm-cloud-functions,Twilio,Ibm Watson,Whatsapp,Ibm Cloud Functions,我正在尝试将IBMWatson机器人与twilio集成,whatsapp使用IBMCloud函数和Nodejs。我在下面的博客中找到了这段代码 请查找以下代码以供参考: var AssistantV2 = require( 'ibm-watson/assistant/v2' ) var twilio = require ( 'twilio' ) ; async function main ( parameters ) { try { var assistant = new
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
}
}
看起来IBM Watson的身份验证没有正确完成 在NPM文档中有以下内容
您拥有的代码对于较旧的4.x版本的npm模块ibm watson看起来是正确的。@Andrei显示的代码对于5.x版本部分正确。我猜您已经克隆了一个repo,它对4.x版本具有package.json依赖性 如果是这种情况,则需要修改package.json中的依赖关系。目前的版本是5.3.1 然后运行一个npm安装,以获取ibm watson包的更新版本 然后,您的身份验证应基于API文档- const AssistantV2=需要“ibm-watson/assistant/v2”; const{iamsauthenticator}=require'ibm-watson/auth'; 施工助理=新助理2{ 版本:“{version}”, 验证器:新验证器{ apikey:“{apikey}”, }, 网址:'https://api.jp-tok.assistant.watson.cloud.ibm.com', }; 但是,您需要创建一个会话 设sessionID=null; assistant.createSession{ 助理:“{assistant_id}” } .thenres=>{ if res&&res.session\u id{ sessionID=res.session\u id; }} } .catcherr=>{ console.logerr; }; 然后,您可以向助手服务发送消息
顺便说一句,因为您在答案中共享了您的APIKey、端点url和助手id,所以任何人都可以很容易地使用它。您将需要撤销您的密钥,并创建一个新密钥,因为您现有的密钥现在已被泄露 呼叫Watson或Twilio时出错?Twilio在身份验证方面看起来不错,我认为您缺少了Watson API的一些身份验证部分。错误是调用Watson assistant;IBM cloud functions给我的错误是“IBM watson/auth”不可用。@user3432888很抱歉,我不太清楚lib,因为我没有太多使用它,但请详细阅读,谢谢。是的,我会看一看。谢谢你让我知道分享我的APIkey、端点url和助手id。是的,我会撤销。很快发布了这个问题。因为我在节点v10中使用IBMCloud函数。
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);
});