Go client for MG Bot API
Go to file
2024-02-28 14:21:39 +03:00
.github/workflows update linter and it's rules 2022-12-30 10:42:29 +03:00
v1 Add functional options for MGClient 2024-02-28 14:21:39 +03:00
.env.dist mock requests in tests 2019-03-07 12:58:20 +03:00
.gitignore add initial set of methods 2018-08-29 02:44:06 +03:00
.golangci.yml update linter and it's rules 2022-12-30 10:42:29 +03:00
go.mod go modules 2021-06-11 14:33:44 +03:00
go.sum go modules 2021-06-11 14:33:44 +03:00
LICENSE Update product name, cleanup annotations (#35) 2020-12-15 13:34:18 +03:00
README.md Update README.md 2022-05-22 13:08:10 +03:00

Build Status Coverage GitHub release Go Report Card GoLang version pkg.go.dev

Message Gateway Bot API Go client

Install

go get -u -v github.com/retailcrm/mg-bot-api-client-go

Usage

package main

import (
	"fmt"
	"net/http"

	"github.com/retailcrm/mg-bot-api-client-go/v1"
)

func main() {
    var client = v1.New("https://token.url", "cb8ccf05e38a47543ad8477d49bcba99be73bff503ea6")
    message := MessageSendRequest{
        Scope:   "public",
        Content: "test",
        ChatID:  12,
    }

    data, status, err := c.MessageSend(message)
    if err != nil {
        t.Errorf("%d %v", status, err)
    }

    fmt.Printf("%v", data.MessageID)
}

Websocket Example

package main

import (
	"encoding/json"
	"log"
	"strings"

	"github.com/gorilla/websocket"
	"github.com/retailcrm/mg-bot-api-client-go/v1"
)

func main() {
	var client = v1.New("https://token.url", "cb8ccf05e38a47543ad8477d49bcba99be73bff503ea6")

	url, headers, err := client.WsMeta([]string{"message_new"})
	if err != nil {
		log.Fatal("wsMeta:", err)
	}

	wsConn, _, err := websocket.DefaultDialer.Dial(url, headers)
	if err != nil {
		log.Fatal("dial:", err)
	}

	for {
		var wsEvent v1.WsEvent
		err = wsConn.ReadJSON(&wsEvent)
		if err != nil {
			log.Fatal("ReadJSON:", err)
		}

		var eventData v1.WsEventMessageNewData
		err = json.Unmarshal(wsEvent.Data, &eventData)
		if err != nil {
			log.Fatal("Unmarshal:", err)
		}

		if !strings.HasPrefix(eventData.Message.Content, "Hello") {
			continue
		}

		message := v1.MessageSendRequest{
			Scope:   "public",
			Content: "Bonjour!",
			ChatID:  eventData.Message.ChatID,
			Type:    "text",
		}

		_, status, err := client.MessageSend(message)
		if err != nil {
			log.Fatalf("%d %v", status, err)
		}
	}
}