Skip to main content
Glama
event_group.go2.81 kB
package whatsapp import ( "context" "fmt" "strings" "time" "github.com/aldinokemal/go-whatsapp-web-multidevice/config" "github.com/sirupsen/logrus" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) // createGroupInfoPayload creates a webhook payload for group information events func createGroupInfoPayload(evt *events.GroupInfo, actionType string, jids []types.JID) map[string]any { body := make(map[string]any) // Create payload structure matching the expected format payload := make(map[string]any) // Add group chat ID payload["chat_id"] = evt.JID.String() // Add action type and affected users payload["type"] = actionType payload["jids"] = jidsToStrings(jids) // Wrap in payload structure body["payload"] = payload // Add metadata for webhook processing body["event"] = "group.participants" body["timestamp"] = evt.Timestamp.Format(time.RFC3339) return body } // jidsToStrings converts a slice of JIDs to a slice of strings func jidsToStrings(jids []types.JID) []string { if len(jids) == 0 { return []string{} // Return empty array instead of nil for consistent JSON } result := make([]string, len(jids)) for i, jid := range jids { result[i] = jid.String() } return result } // forwardGroupInfoToWebhook forwards group information events to the configured webhook URLs func forwardGroupInfoToWebhook(ctx context.Context, evt *events.GroupInfo) error { logrus.Infof("Forwarding group info event to %d configured webhook(s)", len(config.WhatsappWebhook)) // Send separate webhook events for each action type actions := []struct { actionType string jids []types.JID }{ {"join", evt.Join}, {"leave", evt.Leave}, {"promote", evt.Promote}, {"demote", evt.Demote}, } for _, action := range actions { if len(action.jids) > 0 { payload := createGroupInfoPayload(evt, action.actionType, action.jids) // Collect errors from all webhook URLs instead of failing fast var errors []error for _, url := range config.WhatsappWebhook { if err := submitWebhook(ctx, payload, url); err != nil { errors = append(errors, fmt.Errorf("webhook %s failed: %w", url, err)) } } // If all webhooks failed, return combined error if len(errors) == len(config.WhatsappWebhook) && len(errors) > 0 { var errMessages []string for _, err := range errors { errMessages = append(errMessages, err.Error()) } return fmt.Errorf("all webhook URLs failed: %s", strings.Join(errMessages, "; ")) } // Log partial failures if len(errors) > 0 { logrus.Warnf("Some webhook URLs failed for group %s event: %v", action.actionType, errors) } logrus.Infof("Group %s event forwarded to webhook: %d users %s", action.actionType, len(action.jids), action.actionType) } } return nil }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/samihalawa/whatsapp-go-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server