如何解决接受电话号码并从 WebForm 启动 AutoPilot 的 Twilio 功能
我正在尝试创建一个网络表单,用户可以在其中输入他们的电话号码以发起通过 Twilio 的 Autopilot 运行的 SMS 对话。我在有关 Webhooks 的教程和有关 fetch-node 的教程之间挂断了电话,可能需要一些帮助。
目标是:
Web 表单位于 Duda 托管的网站上,他们关于获取表单提交的 API 文档在这里:https://developer.duda.co/reference#get-contact-form-data
我想不通的地方:
-
代码。它是从几个不同的地方被黑客入侵的,所以放轻松!
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 将表单提交的 webhook 发送到 Twilio 函数,这是一个好的开始。让我们看看我们应该从那里做些什么。
Duda form submission webhook is documented here。您应该能够访问使用 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,但您目前正在处理来自 Duda 的 webhook,而 Autopilot 尚未参与。您无法将 Autopilot 操作返回给 Duda 的请求,因为 Duda 不知道如何处理它们。
另一件事是您无法从 Autopilot 发出出站请求。 Autopilot 响应入站请求。因此,要让 Autopilot 参与进来,您应该设置 Twilio 号码以使用 Autopilot 机器人进行响应,但您的第一条出站消息必须使用 Twilio Messaging API。
您有要将消息发送到的电话号码,我建议您将 Twilio 电话号码添加到 Runtime Environment Variables 中,并且您需要一个出站消息正文。然后你可以发送出站消息,如下所示:
exports.handler = async function(context,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"));
}
}
我认为这应该可以解决问题。我以前没有使用过 Duda,所以我可能是错的,但希望这能让你走上解决这个问题的道路。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。