Получение и обработка сообщений на Golang#
Установка#
Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.
Как начать получать сообщения и отвечать на них#
Чтобы начать получать уведомления, необходимо вызвать у бота метод bot.StartReceivingNotifications()
. Но перед этим необходимо добавить обработчик, это можно сделать двумя способами. Вы можете сделать это сразу в функции main
как в примере base
.
Ссылка на пример: base.go .
package base
import (
"github.com/green-api/whatsapp_chatbot_golang"
)
func main() {
bot := whatsapp_chatbot_golang.NewBot("INSTANCE_ID", "TOKEN")
bot.IncomingMessageHandler(func(message *whatsapp_chatbot_golang.Notification) {
if message.Filter(map[string][]string{"text": {"test"}}) {
message.AnswerWithText("Well done! You have write \"test\".")
} else {
message.AnswerWithText("Write \"test\"!")
}
})
bot.StartReceivingNotifications()
}
Если у вас сложные вложенные сценарии, лучше использовать сцены как в примере baseScene
. Пользоваться сценами просто - достаточно вынести логику бота в отдельную структуру, которая реализовывает интерфейс Scene
, и добавить ее в бот методом bot.SetStartScene(StartScene{})
. Стартовая сцена может вызвать следующую с помощью метода message.ActivateNextScene(NextScene{})
, тогда следующий вебхук попадет уже в новую сцену, это позволит разделить бота на отдельные части и сделает код более читаемым и редактируемым:
Ссылка на пример: baseScene.go .
package base
import (
"github.com/green-api/whatsapp_chatbot_golang"
)
func main() {
bot := whatsapp_chatbot_golang.NewBot("INSTANCE_ID", "TOKEN")
bot.SetStartScene(StartScene{})
bot.StartReceivingNotifications()
}
type StartScene struct {
}
func (s StartScene) Start(bot *whatsapp_chatbot_golang.Bot) {
bot.IncomingMessageHandler(func(message *whatsapp_chatbot_golang.Notification) {
if message.Filter(map[string][]string{"text": {"test"}}) {
message.AnswerWithText("Well done! You have write \"test\".")
message.AnswerWithText("Now write \"second scene\"")
message.ActivateNextScene(SecondScene{})
} else {
message.AnswerWithText("Write \"test\"!")
}
})
}
type SecondScene struct {
}
func (s SecondScene) Start(bot *whatsapp_chatbot_golang.Bot) {
bot.IncomingMessageHandler(func(message *whatsapp_chatbot_golang.Notification) {
if message.Filter(map[string][]string{"text": {"second scene"}}) {
message.AnswerWithText("Well done! You have write \"second scene\".")
message.ActivateNextScene(StartScene{})
} else {
message.AnswerWithText("This is second scene write \"second scene\"!")
}
})
}
Если вам нужно чтобы при создании нового состояния, оно уже имело некоторые дефолтные значения, необходимо изменить поле InitData
у структуры StateManager
. В стандартной имплементации MapStateManager
это делается так:
package main
import (
"github.com/green-api/whatsapp_chatbot_golang"
"github.com/green-api/whatsapp_chatbot_golang/examples/full"
)
func main() {
bot := whatsapp_chatbot_golang.NewBot("INSTANCE_ID", "TOKEN")
bot.StateManager = whatsapp_chatbot_golang.NewMapStateManager(
map[string]interface{}{
"defaultField1": "defaultValue1",
"defaultField2": "defaultValue2",
"defaultField3": "defaultValue3",
})
bot.SetStartScene(full.StartScene{})
bot.StartReceivingNotifications()
}
Обратите внимание, что во время выполнения запросов могут возникать ошибки, чтобы ваша программа не прерывалась из-за них, вам необходимо обрабатывать ошибки. Все ошибки библиотеки отправляются в канал ErrorChannel
, вы можете обработать их например таким способом:
package main
import (
"fmt"
"github.com/green-api/whatsapp_chatbot_golang"
"github.com/green-api/whatsapp_chatbot_golang/examples/full"
)
func main() {
bot := whatsapp_chatbot_golang.NewBot("INSTANCE_ID", "TOKEN")
bot.SetStartScene(full.StartScene{})
//Все ошибки будут просто выводиться в консоль
go func() {
select {
case err := <-bot.ErrorChannel:
if err != nil {
fmt.Println(err)
}
}
}()
bot.StartReceivingNotifications()
}
Список примеров#
Описание | Ссылка на пример |
---|---|
Как инициализировать обработчик | base.go |
Как инициализировать сцену | baseScene.go |
Сцена "Эхо" | echo.go |
Как получать другие типы уведомлений | event.go |
Как фильтровать входящие сообщения | filter.go |
Как работать с состоянием бота | state.go |
Пример готового чат бота | full.go |