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, 即时通讯, 日志审计, 第三方库, 网络调试, 自动化