我试图创建一个web表单,用户可以输入他们的电话号码,通过Twilio的自动驾驶仪启动短信对话。我在Webhooks教程和fetch-node教程之间忙得不可开交,可能需要一些帮助。
目标是:
我想不通的是:
>
我创建了一个函数(代码如下),并将该webhook放入表单的UI中--这是正确的吗?
我在Twilio错误日志中没有得到任何错误,这意味着我根本没有连接或传递数据到Twilio。正确的假设?
exports.handler = function(context, event, callback) {
const fetch = require('node-fetch');
fetch('https://api.duda.co/api/sites/multiscreen/get-forms/e5712b84', {
method: 'GET',
headers: {
'Authorization': 'Basic ZGZmOTIzMTA3Yzp3Rk9jMnRDTjRHbk8='
}
})
.then(response => response.json())
.then(json => {
console.log("Phone Number:");
console.log(json[0].Phone);
})
let actions = [];
let end = {
"redirect":{
"method": "POST",
"uri": "task://greeting"
}
};
actions.push(end);
let respObj = {
'actions': actions
};
callback(null,respObj);
};
UnhandledPromiseRejectionWarning: Unhandled promise rejection: TypeError: Cannot read property 'fieldsData' of undefined
at Object.exports.handler (/var/task/handlers/ZNbaee490d934cb9ca27e0f14907c04089.js:2:33)
at Object.exports.handler (/var/task/node_modules/runtime-handler/index.js:310:10)
at Runtime.exports.handler (/var/task/runtime-handler.js:17:17)
at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)
这里是Twilio开发者的福音传道者。
因此,当用户在Duda表单中输入电话号码时,您希望触发一条出站消息。您可以让Duda将表单提交的webhooks发送到Twilio函数,这是一个很好的开始。让我们从那里看看我们应该做什么。
Duda表单提交webhook在这里被记录下来。您应该能够访问使用Twilio函数中的event
对象提交的数据。有一个data
对象,它包含fieldsdata
,它是表单中字段的数组。根据您的代码,我猜测电话号码被输入到一个名为“phone”的字段中,因此您需要在数组中找到这个字段并获得它的field_value
。
到目前为止,这是这个步骤的一些示例代码。注意,我们不需要从Duda API获取数据,因为webhook应该包括所有数据。
exports.handler = async function(context, event, callback) {
const fieldsData = event.data.fieldsData;
const phoneField = fieldsData.find(field => {
return field.field_label === "Phone";
});
if (phoneField) {
const to = field.field_value;
// Do something with the phone number
} else {
// Return an error because we could not find the field.
callback(new Error("Could not find Phone field in webhook data"));
}
}
现在,你要做的下一件事就是给这个号码发送一条消息。你最初说你想重定向到自动驾驶,但你目前正在处理一个来自杜达的网络钩子,自动驾驶还没有参与进来。您不能将自动驾驶操作返回到来自杜达的请求,因为杜达不知道如何处理它们。
另一件事是你不能从自动驾驶仪发出出站请求。自动驾驶仪响应入站请求。因此,要让Autopilot参与进来,您应该设置Twilio号码,以便用Autopilot机器人进行响应,但是您的第一条出站消息必须使用Twilio消息传递API。
exports.handler = async function(context, event, callback) {
const fieldsData = event.data.fieldsData;
const phoneField = fieldsData.find(field => {
return field.field_label === "Phone";
});
if (phoneField) {
const to = field.field_value;
const from = context.TWILIO_PHONE_NUMBER;
const body = "Thanks for filling in the form. I have some more questions for you.";
const client = context.getTwilioClient();
try {
await client.messages.create({ to, from, body });
// Everything succeeded, respond OK to the Duda webhook
callback(null, "OK");
} catch (error) {
// Something went wrong trying to send the message
callback(error);
}
} else {
// Return an error because we could not find the field.
callback(new Error("Could not find Phone field in webhook data"));
}
}
聊天机器人:嘿,你介意回答几个问题吗? 顾客:如果是,继续提问/如果不是,向顾客致谢并停止对话。 我在Twilio Autopilot上使用了示例调查机器人,但它实际上没有“if/else”场景。如果Twilio没有它,那么还有其他适合于此的聊天机器人吗?
我正在使用带有可编程语音的Twilio自动驾驶仪作为输入通道,我想记录客户端与机器人的整个对话。 我在哪里以及如何做到这一点? 我正在使用重定向到Autopilot URL的twiML bin。
我们需要使用语音连接两位客户,但我们需要隐藏彼此的客户电话号码。我们决定使用下一种方法——用twilio屏蔽电话号码 问题是: 我们使用twilio号码连接两个客户。我们可以使用相同的号码进行另一个呼叫吗?或者在呼叫完成之前它是“忙”的? 如果它是'忙',我们可以购买例如20个电话号码,并在每次需要打电话时可用吗? 不相关,但为什么没有可能购买乌克兰电话号码。 非常感谢您的帮助。