如何使用Elarian和Node.js 构建一个USSD服务

279 阅读7分钟

开始使用Elarian

客户服务对于任何企业品牌都是至关重要的。然而,挑选和选择适当的数字渠道来接触你的客户可能是困难的。出于这个原因,企业拥抱客户参与软件以保持相关性是有意义的。

Elarian是一个框架,帮助你建立一个与你的业务目标相一致的客户服务战略。它的重点是通过短信、UUSD、Telegram机器人、WhatsApp等渠道吸引客户,简化构建数据驱动的应用程序。

本教程将使用Elarian和Node.js 构建一个USSD服务。

先决条件

  1. 对于开发,我推荐[VS Code]文本编辑器。
  2. 在你的机器上安装一个[Node.js]运行时。
  3. 对[JavaScript]编程语言有基本了解,最好是ES6及以上版本。
  4. 你将需要一个Elarian账户。要创建一个仪表板,请注册[elarian]。

创建一个账户

要开始工作,请到elarian,用你的电子邮件和密码注册。另外,你也可以使用谷歌和GitHub等供应商来登录。

Elarian SignIn

在您访问仪表板之前,Elarian将发送一个电子邮件验证链接。登录成功后,你将进入Elarian仪表板,看起来像。

dashboard

设置Node.js项目

要设置该项目,打开你的终端并创建一个名为elarian-app-demo 的文件夹。

mkdir elarian-app-demo

接下来,在该文件夹内导航,使用命令初始化Node.js应用程序。

cd elarian-app-demo && npm init -y

现在让我们在VS Code中打开该项目文件夹。

code .

命令npm init -y 创建一个package.json 文件,以保存与我们的应用程序相关的元数据,如项目描述、版本、依赖性等。

对于我们的应用程序,我们需要从npm获得以下包。

  • 带有Node.js版本8或以上的Elarian JavaScript SDK

  • Dotenv:为了安全地存储API密钥,我们将在我们的应用程序中从.env 文件中注入环境变量,避免硬编码任何敏感数据。确保在你的.gitignore文件中添加一个.env,以便不把这个推送到GitHub仓库中。

  • Nodemon: nodemon包将监控我们应用程序中的所有变化,并不断重启我们的服务器。

在你的终端上,使用下面的命令安装这些包。

npm i elarian dotenv

对于nodemon ,我们将把该模块作为开发依赖来安装。

npm install --save-dev nodemon

为了启动,在elarian-app-demo 目录内创建根index.js 文件,并导入Elariandotenv 包,作为。

const { Elarian } = require('elarian');
const dotenv = require('dotenv');

dotenv.config()

要创建一个Elarian 的客户端实例,我们必须传递orgIdappId ,和apiKey 。因此,让我们回到仪表板上抓取这些凭证。为了管理客户,我们需要创建一个组织作为命名空间,持有客户将参与的应用程序和渠道。

点击New Organization 按钮,在我们的仪表板上的左侧面板上创建一个组织。

new org

在我们的案例中,我们将创建一个测试沙盒环境,并将其命名为elarian-demo 。然而,在从设置部分生成API密钥之前,让我们创建一个应用程序并将其命名为customer-demo-app

new app

然后,在设置下,我们将生成一个API密钥。

API key

你需要将orgIdappIdapiKey 安全地存储在一个.env 文件中。你的.env 文件将有如下变量。

ELARIAN_ORGID=your_org_id
ELARIAN_APPID=your_app_id
ELARIAN_API_KEY=your_api_key

由于我们已经在我们的index.js 中初始化了dotenv.config() ,我们可以安全地将elarianClient 对象实例化。

const elarianClient = new Elarian({
    orgId: process.env.ELARIAN_ORGID,
    appId: process.env.ELARIAN_APPID,
    apiKey: process.env.ELARIAN_API_KEY
});

注意:在.gitignore 文件中,一定要排除.env ,这样凭证就不会提交到任何 GitHub 公共仓库。

然后,我们需要监听来自我们的elarianClient 实例的错误和连接事件,以测试连接情况。注意Elarian是如何使用错误先处理程序来为错误对象保留第一个事件的。否则,与Elarian的成功连接应该把成功信息记录到控制台。

elarianClient
        .on("error", (error) => {
          console.log("A connection error", error)
        })
        .on("connected", () => {
          console.log("Elarian connection is successful")
        })
        .connect()

管理Elarian的客户数据

Elarian是以客户为抽象单位建立的。为了实现这一点,它以反应式的范式管理数据。

大的类别包括。

  1. 元数据持有一个与独特客户信息相关的键值数据存储。
  2. 通过AppData,我们可以在我们的应用程序中存储跟踪用户状态的数据。例如,在我们的USSD应用程序中,AppData将保存用户在不同转换和应用程序生命周期中的状态。此外,这些数据被存储在内存中,以便快速访问。
  3. 身份数据将允许你从你的应用程序中唯一地识别客户。有了这个,Elarian可以发起请求并生成数据,以帮助您改善客户的情况。

我们将在以下章节中使用上述策略来管理客户数据。

Node.js中的Elarian USSD服务

在使用USSD服务之前,我们需要从我们的仪表板上注册一个频道。前往你的账户,点击渠道标签下。对于我们的情况,点击USSD Service code section

USSD Channel

我们需要选择USSD代码和我们的频道将使用的应用程序。对于我们的测试案例,USSD代码是*350#

channel code and app

在先前成功建立了Elarian连接后,我们现在需要一个函数来处理我们的ussdSession 。就在elarianClient 连接方法的上方,添加以下代码段。

elarianClient.on('ussdSession', USSDHandler);

在这里,我们监听ussdSession ,从用户与我们的应用程序的互动中启动,从而执行我们稍后将创建的USSDHandler

我们的USSDHandler 函数处理用户与我们应用程序会话的互动。由于我们使用USSD服务代码作为通道,我们的函数将需要将通道数据作为参数传入。

渠道数据是客户在与渠道互动时产生的数据。这可以触发事件,如通知或回调以获得用户响应。让我们在下面定义USSDHandler 函数。

const USSDHandler = async (notification, customer, appData, callback) => {
    try {
    const input = notification.input.text;
    let screen = "home";

    // appData 
    if (appData) {
      screen = appData.screen;
    }

    const customerData = await customer.getMetadata();

    let { email, name, age, password } = customerData;

    const menu = {
      text: "",
      isTerminal: false,
    };

    let nextScreen = screen;

    if (screen === "home" && input !== "") {
      if (input === "1") {
        nextScreen = "request-email";
      } else if (input === "2") {
        nextScreen = "request-password";
      } else if (input === "3") {
        nextScreen = "quit";
      }
    }

    if (screen === "home" && input === "") {
      if (name) {
        nextScreen = "request-password";
      }
    }
    }
}

让我们简单地剖析一下上面的代码。

  • 从我们的客户对象,我们使用方法getMetaData ,该方法持有客户数据,如电子邮件、姓名、年龄和密码,用于我们的通信协议。
  • 通知对象包含input 和响应用户所需的通信渠道。
  • AppData将状态存储在内存中,以便快速访问并跟踪屏幕之间的过渡。
  • 默认情况下,屏幕被设置为home 。然后我们需要根据用户的互动来改变状态和屏幕视图。

从我们的USSD会话中,我们需要保存客户的电子邮件、姓名、年龄和密码。每一步都涉及到不同的屏幕,将使用开关语句来处理。


    switch (nextScreen) {
      case "quit":
        menu.text = "Great having you";
        menu.isTerminal = true;
        nextScreen = "home";
        callback(menu, {
          screen: nextScreen,
        });
        break;

      case "info":
        name = input;
        menu.text = `Hello ${name}`;
        menu.text = "Thank you for joining us,";
        menu.isTerminal = true;
        nextScreen = "home";
        callback(menu, {
          screen: nextScreen,
        });
        break;

      case "request-email":
        menu.text = "Please enter your email";
        nextScreen = "request-name";
        callback(menu, {
          screen: nextScreen,
        });
        break;

      case "request-name":
        menu.text = "Please enter First and Last names";
        nextScreen = "request-age";
        callback(menu, {
          screen: nextScreen,
        });
        const resp = await customer.updateMetadata({
          email: input,
        });
        console.log(resp);
        break;

      case "request-age":
        menu.text = "Please Enter your Age";
        nextScreen = "password";
        callback(menu, {
          screen: nextScreen,
        });
        await customer.updateMetadata({
          name: input,
        });
        break;

      case "request-password":
        menu.text = "Enter your password";
        (nextScreen = "info"),
          callback(menu, {
            screen: nextScreen,
          });
        break;

      case "password":
        menu.text = "Please set a password";
        nextScreen = "authorize-account";
        callback(menu, {
          screen: nextScreen,
        });
        await customer.updateMetadata({
          age: input,
        });
        break;

      case "authorize-account":
        menu.text = `Great! ${name}, you have joined Elarian!`;
        menu.isTerminal = true;
        nextScreen = "home";
        callback(menu, {
          screen: nextScreen,
        });
        await customer.updateMetadata({
          password: input,
        });
        break;

      case "home":
      default:
        menu.text = "Welcome to Elarian!\n1. Register\n2. Login\n3. Quit";
        menu.isTerminal = false;
        callback(menu, {
          screen: nextScreen,
        });
        break;
    }
  } 

为了检查一切是否正常,我们可以运行一个测试,回到仪表板。在左下方,启动USSD模拟器。模拟器将提示电话号码和USSD代码。这里是一个工作测试!

first screen

在USSD提示成功后,我们应该在模拟器关闭前看到以下信息。

final screen

结论

总之,Elarian是一个有助于实现客户至上的商业模式的服务提供商。它通过与庞大的供应商渠道的无缝整合,帮助满足你的业务需求。

它以一种反应式的编程风格做到这一点,在基础设施的部署和管理方面是强大的,可扩展的,并且无忧无虑。