使用Node.js实现非洲的通话短信API

191 阅读8分钟

在靠近用户的地方部署容器

本工程教育(EngEd)计划由科支持。

在全球范围内即时部署容器。Section是经济实惠、简单而强大的。

免费开始

使用Node.js实现非洲的通话短信API

1月26日, 2022

在这篇文章中,我们将使用TypeScript和Node.js在一个RESTful API上实现Africas Talking SMS API。

非洲之声短信API是由非洲之声提供的基础设施,使软件平台能够通过短信与用户沟通。

在本文结束时,我们将创建一个RESTful API,可以发送消息,接收收到的消息,并显示已发送消息的交付报告。

前提条件

要继续学习本教程,你需要。

  • TypeScript的一些基本知识。
  • 在你的电脑上安装Node.js

目录

设置一个账户

如果你已经有一个Africa's Talking的账户,请从这里登录。在重定向的页面上,点击进入沙盒应用程序

如果你没有账户,请从这里访问注册页面,输入所需的详细信息并点击注册

通过点击发送到你的电子邮件地址的链接来验证你的电子邮件地址。在重定向的仪表板页面上,点击进入沙盒应用程序

设置Node.js应用程序

我们将使用以下第三方软件包。

  • ngrok: 用于将我们的本地开发服务器暴露给非洲的Talking SMS API。
  • express。用于设置使用Node.js的RESTful架构。由于Express的简单性和效率,它是首选。
  • africastalking-ts。用于使用支持TypeScript的非洲谈话短信API。

进入你想要的项目位置,运行以下命令,用默认配置初始化你的node项目。

npm init -y

通过运行以下命令安装上述软件包。

npm i ngrok express africastalking-ts

为了在我们的项目上启用TypeScript支持,安装以下dev 依赖项。

npm i --save-dev @types/express @types/node ts-node typescript

package.json中,在scripts下,添加以下内容。

"start":"ts-node ./src/index.ts", // For starting the development server
"ngrok":"ngrok http 3000" // For starting the ngrok server

在项目文件夹内创建一个src目录,如下图所示。

mkdir src

进入src目录,并创建一个index.ts文件。

touch index.ts

发送短信

src/index.ts文件中。

用相应的类型导入Express应用请求,和响应

import express,{Application,Request,Response} from 'express';

接下来,从africastalking包中导入Client

import {Client}  from 'africastalking-ts';

然后用你的apiKey用户名初始化一个客户端

const africasTalking = new Client({
    apiKey:"your_api_key",
    username:"sandbox"
});

要获得你的API密钥。

导航到你的沙盒页面,在左边的菜单上,点击设置,然后点击API密钥

输入你的密码,然后点击生成。复制生成的API密钥并将其粘贴到上述代码中。

由于我们将在一个沙盒环境中,我们的用户名将是沙盒。我们现在可以初始化Express应用程序了。

const app:Application = express();

我们还需要解析带有JSON有效载荷的传入请求,如下图所示。

app.use(express.json());

我们使用下面的代码来解析带有URL编码有效载荷的传入请求。

app.use(express.urlencoded({extended:true}));

接下来,设置一个get 路线来发送消息。

app.get('/send-a-message', (req:Request, res:Response) => {
    try{
        await africasTalking.sendSms({
            to:["your-phone-number-with-currency-code"], // Your phone number
            message:"Hello there, We are on sandbox", // Your message
            from:"your-shortcode-or-alphanumeric" // Your shortcode or alphanumeric
        });
        return res.status(200).json({message:"Well done message sent"}); // Success message
    }catch(error){
        return res.status(500).json({message:"An error occurred"}); // Error message
    }
})

在上面的代码中,我们在一个try/catch块上从africasTalking客户端调用sendSMS函数,因为它是基于承诺的

sendSMS函数中,我们要发送以下参数。

  • 。收件人的手机号码。确保你包括你的国家代码。
  • message:你希望发送的短信息。
  • shortcode/alphanumeric:短码是用来发送和接收信息的,而字母数字则只用来发送信息。要生成一个短代码。

导航到您的沙盒应用程序。在左边的窗格中,点击SMS

接下来,按下Shortcodes按钮,然后 创建短码.

输入你喜欢的短码,从45 数字,然后提交。一旦接受,复制shortcode ,并将其粘贴到上述配置中。

如果你想创建一个字母数字,请按照上一步的相同步骤使用shortcode

点击字母数字,然后点击 创建字母数字.

输入任何喜欢的字母数字,然后点击提交。一旦成功创建,它应该被列在表中。

启动应用程序并监听3000端口。

app.listen(3000, () => {
    console.log('The application is listening on port 3000!');
})

运行以下命令来启动开发服务器。

npm run start

要查看发送的消息,我们必须启动模拟器。导航回到你的沙盒页面,在左边的窗格中,点击启动模拟器

在接下来的弹出窗口中,输入你的电话号码,然后点击启动。你将收到一个具有以下界面的电话模拟器。

Simulator-interface

从你的浏览器,访问*http://localhost:3000/send-a-message。*如果一切正常,你将收到以下信息。

message-sent-response

你还会在模拟器中看到一条新信息。

simulator-new-message

如果你得到一个错误,请重新审视上述步骤。

接收短信

我们首先需要添加一个路由来监听传入的消息。

app.post('/incoming-messages', (req:Request,res:Response) => {
    const data = req.body;
    console.log(`Received message \n`,data);
    res.sendStatus(200);
});

在上面的代码中,我们设置了一个POST路由。在其中,我们只是简单地记录收到的消息并发送一个successful 状态。

这个路由必须是一个POST路由,以便API服务器能够成功到达。按CTRL+C重新启动开发服务器,然后执行以下命令。

npm run dev

接下来,在你的终端上打开一个单独的标签,用下面的命令启动ngrok

npm run ngrok

为了接收短信,我们将需要添加一个回调。该回调将是我们暴露的服务器,通过ngrok

复制你启动ngrok时记录的HTTPS URL,例如*:https://e9ab-102-222-146-62.ngrok.io*

在你的沙盒页面,在左边的窗格中,点击SMS

在出现的下拉菜单中,点击SMS回调URLs,然后点击Incoming Messages

在出现的表格中,粘贴你的callback url ,然后附加上*/incoming-messages来定位路由,然后点击提交*。

为了接收传入信息,我们将不得不发送一个测试信息。你还必须确保你在发送消息时使用了一个短码,因为它能使你发送和接收消息。当使用字母数字时,你将不会收到消息。

确保你已经启动了你的模拟器。

点击模拟器上的短信标签。在出现的屏幕上,点击浮动的行动按钮,然后选择新信息

在 "收件人"栏输入你的短代码,然后在下面输入你的信息,然后点击发送。在你的控制台,你应该收到如下所示的类似格式的数据。

{
  linkId: 'specific-link-id',
  text: 'your-message',
  to: 'your-shortcode',
  id: 'specific message id',
  date: 'date sent',
  from: 'your-phone-number'
}

在一个生产应用中,你可以配置服务器在有新消息时通知你。

接收发送报告

每当你发送一条短信并成功到达收件人时,就会产生发送报告。

我们将首先添加一个路由来监听发送报告。

app.post('/delivery-reports',(req:Request,res:Response) => {
    const data = req.body;
    console.log(`Received delivery report `,data);
    res.sendStatus(200);
});

在上面的代码中,我们正在获取从API发送的数据并将其记录到控制台。

CTRL+C重新启动你的开发服务器,然后运行下面的命令。

npm run dev

复制你在上一步骤中使用的HTTPSURL,然后进入你的沙盒页面。在左边的窗格中,点击SMSSMS回调URLs,然后点击交付报告

在下一个表格中,粘贴HTTPS链接并附加*/delivery-reports*。然后点击提交

确保你已经启动了模拟器。

为了得到一个交付报告,我们将不得不发送一个短信。在你的浏览器中,导航到http://localhost:3000/send-a-message。

一旦你成功地发送了消息,你将收到以下响应,它将被记录在你的控制台。

{
  phoneNumber: 'your-phone-number',
  retryCount: '0',
  id: 'unique-id',
  status: 'Success',
  networkCode: 'random-number'
}

在生产应用中,一旦每条消息被标记为送达,你可以生成一份报告。

总结

在这篇文章中,我们用以下的用例实现了非洲之声的SMS API。

欢迎从这个GitHub仓库访问整个代码。

进一步阅读


同行评审投稿人:。Wanja Mike

类似文章

[

How to Create a Reusable React Form component Hero Image

语言

如何创建一个可重复使用的React表单组件

阅读更多

](www.section.io/engineering…

Building a payroll system with next.js Hero Image

语言, Node.js

用Next.js构建一个薪资系统

阅读更多

](www.section.io/engineering…

Creating and Utilizing Decorators in Django example image

架构

在Django中创建和使用装饰器

阅读更多

](www.section.io/engineering…)