Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説
whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。
「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。
whatsmeowは、あなたのアプリケーションにリアルタイムなコミュニケーション機能を組み込むことで、業務やサービスを大きく進化させる可能性を秘めています。
| 活用例 | 説明 |
| カスタムボットの作成 | 顧客からの問い合わせに自動応答したり、特定のキーワードに反応して情報を送るような、高性能なWhatsAppボットを開発できます。 |
| 通知システムの構築 | サービスの重要なアラート(在庫切れ、システムエラー、支払い通知など)を、ユーザーのWhatsAppに直接、タイムリーに送信する仕組みを構築できます。 |
| CRM/サポートツールの統合 | 既存の顧客管理システム(CRM)やヘルプデスクツールとWhatsAppを連携させ、サポート担当者が一つのプラットフォームで顧客とやり取りできるようにします。 |
| データ分析・監視 | 大量のメッセージのやり取りをプログラムで収集・分析し、ユーザーの動向やトレンドを把握するシステムを構築できます。 |
これらは、もはや「手動でスマホを操作する」世界ではなく、コードが自動で、しかも高速にWhatsAppのコミュニケーションを担ってくれる、夢のような世界なんです!
Goプロジェクトへの whatsmeow の導入は、とてもシンプルです。
あなたのGoプロジェクトのターミナルで、以下のコマンドを実行するだけです。
go get go.mau.fi/whatsmeow
whatsmeowは、セッション情報やメッセージ履歴を保存するためにデータベースを使用します。SQLite、PostgreSQL、MySQLなど、多くのDBに対応していますが、手軽に始めるならSQLiteがおすすめです。
GoでSQLiteを使うためのドライバも取得しておくと良いでしょう。
go get github.com/mattn/go-sqlite3
ここでは、最も基本的で重要なステップである「アカウントへのログイン(認証)」と「メッセージの受信」のシンプルな例を見てみましょう。
whatsmeowを使うには、まずWhatsAppアカウントをライブラリにリンクさせる必要があります。これは、WhatsApp Webと同様にQRコードをスキャンして行います。
package main
import (
"context"
"fmt"
"os"
"go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/store/sqlstore" // データベースストア
"go.mau.fi/whatsmeow/util/waqrcode" // QRコード生成
_ "github.com/mattn/go-sqlite3" // SQLiteドライバ
waLog "go.mau.fi/whatsmeow/util/log"
)
func main() {
// ログレベルの設定
waLog.Set<ctrl62>### 2. メッセージイベントの処理
ログインが完了したら、次はメッセージが来たときに何かアクションを起こすためのイベントハンドラを設定します。
```go
package main
// (前述のimportとmain関数の一部は省略)
import (
// ... 既存のimport ...
"go.mau.fi/whatsmeow/event"
"go.mau.fi/whatsmeow/types"
"go.mau.fi/whatsmeow/proto/waNmsge"
)
// イベントハンドラ関数
func eventHandler(evt interface{}) {
switch v := evt.(type) {
case *event.Message:
// メッセージイベントを受信
sender := v.Info.Sender.String()
textMsg := v.Message.GetConversation() // テキストメッセージの内容を取得
fmt.Printf(" メッセージ受信: %s から\n", sender)
fmt.Printf(" 内容: %s\n", textMsg)
// 【応用例】もし「こんにちは」というメッセージが来たら返信する
if textMsg == "こんにちは" {
replyText := "こんにちは!自動応答ボットです"
// テキストメッセージの送信
_, err := cli.SendMessage(context.Background(), v.Info.Sender, &waNmsge.Message{
Conversation: &replyText,
})
if err != nil {
fmt.Printf("返信エラー: %v\n", err)
}
fmt.Printf(" 返信完了: %s\n", replyText)
}
}
}
func main() {
// ... (データベースとクライアントの設定は省略) ...
// イベントハンドラを登録
cli.AddEventHandler(eventHandler)
// ... (ログイン処理と待機処理は省略) ...
}
このサンプルは非常に単純ですが、*event.Message の処理を工夫することで、複雑なビジネスロジックを持つボットを構築していくことができるんです!