Twilio Studio - Select 和解析 JSON 使用 Liquid

Twilio Studio - Select and Parse JSON Using Liquid

在 Twilio Studio 中,我正在发出 GET 请求并尝试解析 JSON 并随后根据解析的 JSON 分配变量。我在使用 returned.JSON 时遇到困难。

本质上,我试图从匹配 returned JSON 的“行”设置变量(用户拨入,输入他们的 PIN {{widgets.PIN_Entry.Digits}} ,PIN 将匹配来自 GET 请求的 returned JSON 中的“行”,我们为匹配的行设置 userID、userEmail、userName、userPin 变量。

{
  "DataSource": {
    "Id": "12345",
    "Name": "Dial-In Subscribers",
    "Rows": [
      [
        "EMP-0226",
        "ron@pawneeil.com",
        "Ron Swanson",
        "00054321"
      ],
      [
        "EMP-0267",
        "leslie@pawneeil.com",
        "Leslie Knope",
        "00012345"
      ]
    ],
    "TotalRows": 2,
    "LastUpdated": "2020-08-26T03:39:42.7670000Z",
    "CompanyId": 12345
  }
}

我可以使用 JSON 路径(Twilio studio 不支持)轻松做到这一点 select 我希望设置为变量的值,但我不知道如何使用 Liquid 来做到这一点。

userID == $.DataSource.Rows[?(@.includes('00012345'))].[0]

(会 return “EMP-0267”)

userEmail == $.DataSource.Rows[?(@.includes('00012345'))].[1]

(return "leslie@pawneeil.com")

userName == $.DataSource.Rows[?(@.includes('00012345'))].[2]

(会 return “Leslie Knope)

userPin == $.DataSource.Rows[?(@.includes('00012345'))].[3]

(return“00012345”)

谁能分享一些关于如何使用 Liquid 解析 JSON 和设置变量的想法?以下是我的想法:

  1. 将变量 {{widgets.PIN_Entry.Digits}} 匹配到 returned JSON
  2. 中的一行
  3. 解析 selected 行并为 userID、userEmail、userName、userPin 设置变量。

我在这些情况下使用 Run Function Widget,我发现它比 Liquid Syntax 的细微差别更容易处理。

    // Description
    // Make a read request to an external API
    
    // Add axios 0.20.0 as a dependency under Functions Settings, Dependencies
    const axios = require('axios');
    
    exports.handler = function (context, event, callback) {
      
      let twiml = new Twilio.twiml.VoiceResponse();
      
      // Arrays start at 0
      let selectedDigit = 0;
    
      axios
        .get(`https://x.x.x.x/myAPI`)
        .then((response) => {
          
          let { Rows } = response.data.DataSource;
    
          let result = Rows.filter((record, index) => index === selectedDigit);
          twiml.say(`The result is ${result}`);
          
          return callback(null, twiml);
        })
        .catch((error) => {
          console.log(error);
          return callback(error);
        });
    };