当前位置: 首页 > 知识库问答 >
问题:

Twilio函数接受电话号码并从WebForm启动自动驾驶

章永安
2023-03-14

我试图创建一个web表单,用户可以输入他们的电话号码,通过Twilio的自动驾驶仪启动短信对话。我在Webhooks教程和fetch-node教程之间忙得不可开交,可能需要一些帮助。

目标是:

  • 从web窗体接受电话号码
  • 传入Twilio函数
  • 解析电话号码
  • 重定向到Twilio自动驾驶启动SMS对话

我想不通的是:

>

  • 我创建了一个函数(代码如下),并将该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)
    
  • 共有1个答案

    劳嘉实
    2023-03-14

    这里是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个电话号码,并在每次需要打电话时可用吗? 不相关,但为什么没有可能购买乌克兰电话号码。 非常感谢您的帮助。