DeBox Bot Go SDK Guide
Source repository:
1. SDK capabilities
The SDK provides:
- Bot init:
NewBotAPI(apiKey, apiSecret) - Message sending:
bot.Send(...) - Long polling updates:
GetUpdates/GetUpdatesChan - Inline keyboard callbacks:
InlineKeyboardMarkup+CallbackQuery - Message editing:
NewEditMessageText+bot.Send(...)
Webhook is split into a standalone guide:
2. Receiving mode notes
This document focuses on Long Polling.
If you already configured webhook in platform console, polling may receive little or no data. For webhook deployment, read:
3. Long polling usage (detailed SDK workflow)
3.1 Install
go get github.com/debox-pro/debox-chat-go-sdk
3.2 Credentials
Get from DeBox Open Platform:
API_KEY(required)API_SECRET(recommended)
3.3 Init + first message
package main
import (
"log"
boxbotapi "github.com/debox-pro/debox-chat-go-sdk/boxbotapi"
)
func main() {
bot, err := boxbotapi.NewBotAPI("YOUR_APP_KEY", "YOUR_API_SECRET")
if err != nil {
log.Fatalf("init bot failed: %v", err)
}
msg := boxbotapi.NewMessage("cc0onr82", "group", "Hello from Go SDK")
msg.ParseMode = boxbotapi.ModeRichText
sent, err := bot.Send(msg)
if err != nil {
log.Fatalf("send failed: %v", err)
}
log.Printf("sent message_id=%s", sent.MessageID)
}
3.4 Long polling via GetUpdatesChan (recommended)
package main
import (
"context"
"log"
boxbotapi "github.com/debox-pro/debox-chat-go-sdk/boxbotapi"
)
func main() {
bot, err := boxbotapi.NewBotAPI("YOUR_APP_KEY", "YOUR_API_SECRET")
if err != nil {
log.Fatal(err)
}
boxbotapi.MessageListener = true
cfg := boxbotapi.NewUpdate(0)
cfg.Timeout = 30
ctx := context.Background()
updates := bot.GetUpdatesChan(cfg)
for {
select {
case <-ctx.Done():
bot.StopReceivingUpdates()
return
case upd := <-updates:
if upd.Message != nil {
log.Printf("from=%s chat=%s text=%s", upd.Message.From.UserId, upd.Message.Chat.ID, upd.Message.Text)
}
if upd.CallbackQuery != nil {
log.Printf("callback=%s", upd.CallbackQuery.Data)
}
}
}
}
3.5 Manual polling via GetUpdates
cfg := boxbotapi.NewUpdate(0)
cfg.Timeout = 30
updates, err := bot.GetUpdates(cfg)
if err != nil {
log.Printf("get updates failed: %v", err)
return
}
for _, upd := range updates {
if upd.Message != nil {
log.Println(upd.Message.Text)
}
}
3.6 Send multiple message types
m1 := boxbotapi.NewMessage(chatID, chatType, "*bold* _italic_")
m1.ParseMode = boxbotapi.ModeMarkdownV2
_, _ = bot.Send(m1)
m2 := boxbotapi.NewMessage(chatID, chatType, "<b>Hello</b> <a href=\"https://docs.debox.pro\">docs</a>")
m2.ParseMode = boxbotapi.ModeHTML
_, _ = bot.Send(m2)
m3 := boxbotapi.NewMessage(chatID, chatType, "https://example.com/a.png")
m3.ParseMode = boxbotapi.ModeImage
_, _ = bot.Send(m3)
Available parse modes:
boxbotapi.ModeRichTextboxbotapi.ModeTextboxbotapi.ModeMarkdownboxbotapi.ModeMarkdownV2boxbotapi.ModeHTMLboxbotapi.ModeImageboxbotapi.ModeVideoboxbotapi.ModeFile
content rules by parse_mode:
richtext(default): use normal text/rich text string, e.g.Hello and welcome to DeBox Bot.text: use plain text only (no Markdown/HTML rendering), e.g.plain text only.Markdown: use Markdown string, e.g.**bold**.MarkdownV2: use MarkdownV2 string with required escaping, e.g.\\*bold\\*.HTML: use HTML fragment string, e.g.<b>Hello</b>.image: setcontentto a publicly reachable image URL, e.g.https://cdn.example.com/a.png.video: setcontentto a publicly reachable video URL, e.g.https://cdn.example.com/demo.mp4.file: setcontentto a publicly reachable file URL, e.g.https://cdn.example.com/spec.pdf.- Text modes (
richtext/text/Markdown/MarkdownV2/HTML) support up to 5000 characters.
3.7 Inline keyboard + callback
markup := boxbotapi.NewInlineKeyboardMarkup(
boxbotapi.NewInlineKeyboardRow(
boxbotapi.NewInlineKeyboardButtonData("Details", "detail"),
boxbotapi.NewInlineKeyboardButtonURL("Open site", "https://debox.pro"),
),
)
msg := boxbotapi.NewMessage("cc0onr82", "group", "Pick one")
msg.ParseMode = boxbotapi.ModeRichText
msg.ReplyMarkup = markup
_, _ = bot.Send(msg)
Callback handler:
if upd.CallbackQuery != nil {
data := upd.CallbackQuery.Data
_ = data
}
3.8 Edit message
edit := boxbotapi.NewEditMessageText("cc0onr82", "group", "MESSAGE_ID", "edited text")
edit.ParseMode = boxbotapi.ModeRichText
_, err := bot.Send(edit)
if err != nil {
log.Printf("edit failed: %v", err)
}