golang本地短信网关插件gosms的使用

golang本地短信网关插件gosms的使用

什么是gosms?

gosms是一个本地短信网关插件,可以用于在没有互联网访问或无法使用Web短信网关的情况下发送短信,或者为了节省每条短信的成本,或者满足个人/内部使用的最小需求。

主要用途包括:

  • 在无法访问互联网时发送短信
  • 替代Web短信网关以节省成本
  • 满足个人或内部使用的简单需求

主要特性

  • 可在1分钟内完成部署
  • 支持Windows、GNU/Linux和Mac OS
  • 与GSM调制解调器配合工作
  • 提供基于HTTP的API来推送消息,就像基于互联网的网关一样
  • 处理队列、节流和重试
  • 支持同时使用多个设备

gosms dashboard

部署步骤

  1. 更新conf.ini文件中的[DEVICES]部分,配置你的调制解调器的COM端口
    • 例如:COM10/dev/USBtty2
  2. 运行程序

API规范

发送短信接口

  • 路径:/api/sms/ [POST]
  • 参数:
    • mobile:接收短信的手机号码(需包含国家代码前缀,如:+919890098900)
    • message:短信内容(最大长度限制为160个字符)
  • 响应示例:
{
  "status": 200,
  "message": "ok"
}

获取日志接口

  • 路径:/api/logs/ [GET]
  • 响应示例:
{
  "status": 200,
  "message": "ok",
  "summary": [ 10, 50, 2 ],
  "daycount": { "2015-01-22": 10, "2015-01-23": 25 },
  "messages": [
    {
      "uuid": "d04f17c4-a32c-11e4-827f-00ffcf62442b",
      "mobile": "+1858111222",
      "body": "Hey! Just playing around with gosms.",
      "status": 1
    }
  ]
}

消息状态码

  • 0:待处理
  • 1:已处理
  • 2:错误

示例代码

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

// SMSRequest 定义发送短信的请求结构
type SMSRequest struct {
	Mobile  string `json:"mobile"`
	Message string `json:"message"`
}

func main() {
	// 配置gosms服务地址
	apiURL := "http://localhost:8080/api/sms/"

	// 准备要发送的短信数据
	sms := SMSRequest{
		Mobile:  "+8613800138000", // 替换为实际手机号,包含国家代码
		Message: "这是一条测试短信,来自gosms网关",
	}

	// 将结构体转换为JSON
	jsonData, err := json.Marshal(sms)
	if err != nil {
		fmt.Println("JSON编码错误:", err)
		return
	}

	// 发送POST请求
	resp, err := http.Post(apiURL, "application/json", bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Println("请求发送失败:", err)
		return
	}
	defer resp.Body.Close()

	// 解析响应
	var result map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&result)

	// 输出结果
	fmt.Printf("响应状态: %v\n", resp.Status)
	fmt.Printf("响应内容: %v\n", result)
}

从源码构建

在Ubuntu上构建

  1. go get github.com/haxpax/gosms
  2. cd $GOPATH/src/github.com/haxpax/gosms/dashboard
  3. go get
  4. go build

在Windows上构建

  1. 为go-sqlite3包设置GCC
    • 32位系统:
      • 从sourceforge下载MinGW
      • 添加C:\MinGW\bin到PATH
      • 运行mingw-get install gcc
    • 64位系统:
      • 下载mingw-w64并安装
      • 添加其bin目录到PATH
  2. go get github.com/haxpax/gosms
  3. cd $GOPATH/src/github.com/haxpax/gosms/dashboard
  4. go get
  5. go build

运行dashboard可执行文件。如果要移动到另一个目录,请复制assets、templates、conf.ini和dashboard[.exe]文件。db.sqlite在首次运行时创建,如果存在也请复制。

计划中的功能

  • /api/sms/中支持一条消息发送给多个手机号
  • 支持消息的CRUD操作,可能支持消息取消
  • API的认证支持
  • 仪表板的认证支持
  • 在高失败率时向管理员发送电子邮件

更多关于golang本地短信网关插件gosms的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang本地短信网关插件gosms的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang本地短信网关插件gosms使用指南

gosms是一个轻量级的Golang短信网关插件,支持多种短信服务提供商,可以方便地集成到你的Go应用中实现短信发送功能。

安装gosms

go get -u github.com/pkg6/gosms

基本使用

1. 初始化短信网关

package main

import (
	"fmt"
	"github.com/pkg6/gosms"
	"github.com/pkg6/gosms/drivers"
)

func main() {
	// 使用阿里云短信服务
	gateway := drivers.AliyunGateway{
		AccessKeyId:     "your-access-key-id",
		AccessKeySecret: "your-access-key-secret",
		SignName:        "your-sign-name",
		TemplateCode:    "your-template-code",
	}
	
	// 创建短信发送器
	sender := gosms.NewSender(gateway)
}

2. 发送短信

// 准备短信内容
message := gosms.Message{
	TemplateParam: map[string]string{
		"code": "123456", // 模板变量
	},
	PhoneNumbers: "13800138000", // 手机号码
}

// 发送短信
result, err := sender.Send(message)
if err != nil {
	fmt.Printf("发送短信失败: %v\n", err)
	return
}

fmt.Printf("短信发送成功: %+v\n", result)

支持的多家短信服务商

gosms支持多种短信服务提供商,以下是常用的一些:

阿里云短信

aliyunGateway := drivers.AliyunGateway{
	AccessKeyId:     "your-aliyun-access-key-id",
	AccessKeySecret: "your-aliyun-access-key-secret",
	SignName:        "your-sign-name",
	TemplateCode:    "your-template-code",
}

腾讯云短信

tencentGateway := drivers.TencentGateway{
	AppId:      "your-tencent-app-id",
	AppKey:     "your-tencent-app-key",
	SignName:   "your-sign-name",
	TemplateId: "your-template-id",
}

云片短信

yunpianGateway := drivers.YunpianGateway{
	ApiKey: "your-yunpian-api-key",
}

高级功能

1. 多网关发送

// 创建多个网关
gateways := []gosms.IGateway{
	drivers.AliyunGateway{...},
	drivers.TencentGateway{...},
}

// 创建发送器
sender := gosms.NewSender(gateways...)

// 发送短信时会自动选择可用的网关
result, err := sender.Send(message)

2. 自定义短信内容

message := gosms.Message{
	Content: "您的验证码是123456,5分钟内有效", // 直接指定内容
	PhoneNumbers: "13800138000",
}

3. 批量发送

messages := []gosms.Message{
	{
		PhoneNumbers: "13800138000",
		TemplateParam: map[string]string{"code": "123456"},
	},
	{
		PhoneNumbers: "13900139000",
		TemplateParam: map[string]string{"code": "654321"},
	},
}

results, err := sender.BatchSend(messages)

错误处理

result, err := sender.Send(message)
if err != nil {
	switch e := err.(type) {
	case *gosms.GatewayError:
		fmt.Printf("网关错误: %s, 代码: %d\n", e.Message, e.Code)
	case *gosms.NetworkError:
		fmt.Printf("网络错误: %v\n", e.Err)
	default:
		fmt.Printf("未知错误: %v\n", err)
	}
	return
}

最佳实践

  1. 配置管理:将短信网关配置放在配置文件中
  2. 错误重试:对于网络错误可以实现自动重试机制
  3. 限流控制:避免短时间内发送过多短信
  4. 日志记录:记录所有短信发送记录和结果

总结

gosms是一个简单易用的Golang短信发送库,支持多种短信服务提供商,通过统一的API接口简化了短信发送的集成工作。它的模块化设计使得可以轻松切换不同的短信服务商而无需修改业务代码。

更多详细用法和最新特性请参考官方文档

回到顶部