Rhymen/go-whatsapp
GitHub: Rhymen/go-whatsapp
Go 语言实现的非官方 WhatsApp Web API 客户端库,提供消息收发、会话管理和多媒体处理能力。
Stars: 2234 | Forks: 498
# go-whatsapp
rhymen/go-whatsapp 包实现了 WhatsApp Web API,为开发者提供了一个简洁的接口。特别感谢 [sigalor/whatsapp-web-reveng](https://github.com/sigalor/whatsapp-web-reveng) 项目的所有贡献者。官方的 WhatsApp Business API 已于 2018 年 8 月发布。你可以在[这里](https://www.whatsapp.com/business/api)查看。
## 警告
此包目前未得到积极维护,并且随着 WhatsApp 更新至多设备(multi-device)模式,它很快就会无法使用。请查看 [tulir/whatsmeow](https://github.com/tulir/whatsmeow),这是一个积极维护且支持 WhatsApp 多设备模式的 Go WhatsApp Web API。
## 安装
```
go get github.com/Rhymen/go-whatsapp
```
## 用法
### 创建连接
```
import (
whatsapp "github.com/Rhymen/go-whatsapp"
)
wac, err := whatsapp.NewConn(20 * time.Second)
```
传递给 NewConn 函数的持续时间用于设置登录请求的超时时间。如果你的网络连接较差,请使用较高的超时值。此函数仅创建 websocket 连接,不处理身份验证。
### 登录
```
qrChan := make(chan string)
go func() {
fmt.Printf("qr code: %v\n", <-qrChan)
//show qr code or save it somewhere to scan
}()
sess, err := wac.Login(qrChan)
```
身份验证过程要求你使用装有 WhatsApp 的设备扫描通过 channel 发送的二维码。返回的 session 结构体可以被保存,用于恢复登录而无需再次扫描二维码。二维码的 ttl(存活时间)为 20 秒,如果超时或任何其他请求失败,login 函数将抛出超时错误。
### 恢复
```
newSess, err := wac.RestoreWithSession(sess)
```
restore 函数需要一个有效的 session,并返回新创建的 session。
### 添加消息处理器
```
type myHandler struct{}
func (myHandler) HandleError(err error) {
fmt.Fprintf(os.Stderr, "%v", err)
}
func (myHandler) HandleTextMessage(message whatsapp.TextMessage) {
fmt.Println(message)
}
func (myHandler) HandleImageMessage(message whatsapp.ImageMessage) {
fmt.Println(message)
}
func (myHandler) HandleDocumentMessage(message whatsapp.DocumentMessage) {
fmt.Println(message)
}
func (myHandler) HandleVideoMessage(message whatsapp.VideoMessage) {
fmt.Println(message)
}
func (myHandler) HandleAudioMessage(message whatsapp.AudioMessage){
fmt.Println(message)
}
func (myHandler) HandleJsonMessage(message string) {
fmt.Println(message)
}
func (myHandler) HandleContactMessage(message whatsapp.ContactMessage) {
fmt.Println(message)
}
func (myHandler) HandleBatteryMessage(message whatsapp.BatteryMessage) {
fmt.Println(message)
}
func (myHandler) HandleNewContact(contact whatsapp.Contact) {
fmt.Println(contact)
}
wac.AddHandler(myHandler{})
```
消息处理器都是可选的,除了错误处理器之外,你不需要为了实现接口而编写任何其他内容。ImageMessage、VideoMessage、AudioMessage 和 DocumentMessage 提供了一个 Download 函数来获取媒体数据。
### 发送文本消息
```
text := whatsapp.TextMessage{
Info: whatsapp.MessageInfo{
RemoteJid: "0123456789@s.whatsapp.net",
},
Text: "Hello Whatsapp",
}
err := wac.Send(text)
```
### 发送联系人消息
```
contactMessage := whatsapp.ContactMessage{
Info: whatsapp.MessageInfo{
RemoteJid: "0123456789@s.whatsapp.net",
},
DisplayName: "Luke Skylwallker",
Vcard: "BEGIN:VCARD\nVERSION:3.0\nN:Skyllwalker;Luke;;\nFN:Luke Skywallker\nitem1.TEL;waid=0123456789:+1 23 456789789\nitem1.X-ABLabel:Mobile\nEND:VCARD",
}
id, error := client.WaConn.Send(contactMessage)
```
消息将通过 websocket 发送。上面看到的属性是必需的。结构体中缺失的所有其他相关属性(如 id、timestamp、fromMe、status)都会被自动设置。目前我们仅支持文本消息,但计划在不久的将来支持其他类型。
## 法律声明
本代码绝不隶属于、未经授权、维护、赞助或认可 WhatsApp 及其任何关联机构或子公司。这是一个独立的非官方软件。使用风险自负。
## 许可证
The MIT License (MIT)
Copyright (c) 2018
特此免费向任何获得本软件及相关文档文件(以下简称“软件”)副本的人授予许可,
允许其无限制地处理本软件,
包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本的权利,
并允许向其提供软件的人员履行上述行为,
但须符合以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,
包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,
作者或版权持有人均不对因软件或使用软件或其他交易引起的
任何索赔、损害或其他责任负责,
无论是在合同诉讼、侵权行为还是其他诉讼中。
标签:API, EVTX分析, Go, Homebrew安装, Ruby工具, Websocket, 即时通讯, 日志审计, 第三方库, 网络调试, 自动化