twilio - IBM watson 与 twilio 的集成
问题描述
我正在尝试将 IBM Watson bot 与 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
}
}
解决方案
您拥有的代码对于较旧的 4.x 版本的 npm 模块 ibm-watson 看起来是正确的。@Andrei 显示的代码对于 5.x 版本是部分正确的。我猜你已经克隆了一个对 4.x 版本具有 package.json 依赖关系的 repo。
如果是这种情况,您需要修改package.json
. 当前版本是 5.3.1
然后运行 anpm 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);
});
然后,您可以向 Google 助理服务发送消息。
顺便说一句,因为您在回答中共享了您的 APIKey、端点 url 和助手 id,所以任何人都可以很容易地使用它。您将需要撤销您的密钥并创建一个新密钥,因为您现有的密钥现在已被泄露。
推荐阅读
- python - 为什么在函数中的 IF 语句之后分配局部变量的语法无效?
- spring-boot - 如何解决spring boot null问题
- python - pyside6 QTranslator 加载文件失败
- docker - 如何在 docker build(Dockerfile)上显示 curl 进度条?
- c# - 是否有可能有重叠的正则表达式匹配?
- visual-studio - 通过 Visual Studio 调试时无法导出或导入文件
- annotations - AnyChart:适合以价格包含注释线
- java - 无法使用 Java SDK 通过 MS Graph API 在 Azure AD 中添加企业应用程序的 SAML 签名选项
- ansible - 如果在 Inventory 中找不到,Ansible 会自动添加主机
- python - Keras模型未编译