在靠近用户的地方部署容器
本工程教育(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按钮,然后 创建短码.
输入你喜欢的短码,从4 到5 数字,然后提交。一旦接受,复制shortcode ,并将其粘贴到上述配置中。
如果你想创建一个字母数字,请按照上一步的相同步骤使用shortcode 。
点击字母数字,然后点击 创建字母数字.
输入任何喜欢的字母数字,然后点击提交。一旦成功创建,它应该被列在表中。
启动应用程序并监听3000端口。
app.listen(3000, () => {
console.log('The application is listening on port 3000!');
})
运行以下命令来启动开发服务器。
npm run start
要查看发送的消息,我们必须启动模拟器。导航回到你的沙盒页面,在左边的窗格中,点击启动模拟器。
在接下来的弹出窗口中,输入你的电话号码,然后点击启动。你将收到一个具有以下界面的电话模拟器。

从你的浏览器,访问*http://localhost:3000/send-a-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,然后进入你的沙盒页面。在左边的窗格中,点击SMS,SMS回调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
类似文章
[

语言
如何创建一个可重复使用的React表单组件
阅读更多

语言, Node.js
用Next.js构建一个薪资系统
阅读更多

架构
在Django中创建和使用装饰器
阅读更多