Пример бота на Golang#
Установка#
Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.
Пример бота#
В качестве примера был создан бот демонстрирующий отправку методов структуры Notification
.
Запуск бота происходит командой - /start
После запуска необходимо выбрать метод из меню, и бот выполнит его.
Ссылка на пример: full,go.
Стартовая сцена ждет команду /start
, после чего отправляет меню и активирует следующую сцену PickMethodScene
. PickMethodScene
ждет ответа пользователя и выполняет выбранный метод. Если пользователь выбрал SendFileByUrl()
, то бот запустит сцену InputLinkScene
, в которой попросит ссылку на файл и отправит файл, если ссылка валидна.
package full
import (
"github.com/green-api/whatsapp_chatbot_golang"
)
type StartScene struct {
}
func (s StartScene) Start(bot *whatsapp_chatbot_golang.Bot) {
bot.IncomingMessageHandler(func(notification *whatsapp_chatbot_golang.Notification) {
if notification.Filter(map[string][]string{"text": {"/start"}}) {
notification.AnswerWithText(`Привет! Этот бот использует различные методы API.
Пожалуйста выберите метод:
1. SendMessage()
2. SendFileByUrl()
3. SendPoll()
4. SendContact()
5. SendLocation()
Пришлите номер пункта одной цифрой.`)
notification.ActivateNextScene(PickMethodScene{})
} else {
notification.AnswerWithText("Пожалуйста введите команду /start.")
}
})
}
type PickMethodScene struct {
}
func (s PickMethodScene) Start(bot *whatsapp_chatbot_golang.Bot) {
bot.IncomingMessageHandler(func(message *whatsapp_chatbot_golang.Notification) {
if message.Filter(map[string][]string{"text": {"1"}}) {
message.AnswerWithText("Hello world!")
}
if message.Filter(map[string][]string{"text": {"2"}}) {
message.AnswerWithText("Give me a link for a file, for example: https://th.bing.com/th/id/OIG.gq_uOPPdJc81e_v0XAei")
message.ActivateNextScene(InputLinkScene{})
}
if message.Filter(map[string][]string{"text": {"3"}}) {
message.AnswerWithPoll("Please choose a color:", false, []map[string]interface{}{
{
"optionName": "Red",
},
{
"optionName": "Green",
},
{
"optionName": "Blue",
},
})
}
if message.Filter(map[string][]string{"text": {"4"}}) {
message.AnswerWithContact(map[string]interface{}{
"phoneContact": 79001234568,
"firstName": "Артем",
"middleName": "Петрович",
"lastName": "Евпаторийский",
"company": "Велосипед",
})
}
if message.Filter(map[string][]string{"text": {"5"}}) {
message.AnswerWithLocation("House", "Cdad. de La Paz 2969, Buenos Aires", -34.5553558, -58.4642510)
}
if !message.Filter(map[string][]string{"text_regex": {"\\d+"}}) {
message.AnswerWithText("Ответ должен содержать только цифры!")
}
})
}
type InputLinkScene struct {
}
func (s InputLinkScene) Start(bot *whatsapp_chatbot_golang.Bot) {
bot.IncomingMessageHandler(func(message *whatsapp_chatbot_golang.Notification) {
if message.Filter(map[string][]string{"regex": {"^https://[^\\s]+$"}}) {
text, _ := message.Text()
message.AnswerWithUrlFile(text, "testFile", "This is your file!")
message.ActivateNextScene(PickMethodScene{})
} else {
message.AnswerWithText("Ссылка не должна содержать пробелы и должна начинаться на https://")
}
})
}
Список примеров#
Описание | Ссылка на пример |
---|---|
Как инициализировать обработчик | base.go |
Как инициализировать сцену | baseScene.go |
Сцена "Эхо" | echo.go |
Как получать другие типы уведомлений | event.go |
Как фильтровать входящие сообщения | filter.go |
Как работать с состоянием бота | state.go |
Пример готового чат бота | full.go |