Как фильтровать входящие сообщения#
Установка#
Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.
Как фильтровать входящие сообщения#
Фильтрация по типу вебхука происходит автоматически на уровне создания обработчика, пример - event.go. Другие типы фильтров реализованы с помощью метода Filter
который принимает в качестве параметра map[string][]string{}
. Ключом данной карты служит строка с именем параметра по которому будет происходить фильтрация, значение карты - срез с набором ожидаемых значений. Если в фильтре по параметру несколько ожидаемых значений, то метод возвращает true
если хотя бы одно ожидаемое значение совпадает с полем вебхука. Если метод фильтрует одновременно несколько параметров, то метод возвращает true
только если все параметры прошли проверку.
Имена параметров для фильтрации | Описание |
---|---|
text | Фильтр по тексту сообщения, если хоть один из ожидаемых значений совпадает, возвращает true |
text_regex | Фильтр по тексту сообщения, но по regex паттерну, если хотябы один паттерн в срезе подходит, возвращает true |
sender | Возвращает true , если хотя бы одно ожидаемое значение равно идентификатору отправителя сообщения |
chatId | Возвращает true , если хотя бы одно ожидаемое значение равно идентификатору чата сообщения |
messageType | Возвращает true , хотя бы одно ожидаемое значение равно значению поля messageType в вебхуке |
Ссылка на пример: filter.go .
package filter
import cb "github.com/green-api/whatsapp_chatbot_golang"
type StartScene struct {
}
func (s StartScene) Start(bot *cb.Bot) {
bot.IncomingMessageHandler(func(message *cb.Notification) {
if message.Filter(map[string][]string{"text": {"1"}}) {
message.AnswerWithText("This message text equals \"1\"")
}
if message.Filter(map[string][]string{"text_regex": {"\\d+"}}) {
message.AnswerWithText("This message has only digits!")
}
if message.Filter(map[string][]string{"text_regex": {"6"}}) {
message.AnswerWithText("This message contains \"6\" in the text")
}
if message.Filter(map[string][]string{"text": {"hi"}, "messageType": {"textMessage", "extendedTextMessage"}}) {
message.AnswerWithText("This message is a \"textMessage\" or \"extendedTextMessage\", and text equals \"hi\"")
}
})
}
Список примеров#
Описание | Ссылка на пример |
---|---|
Как инициализировать обработчик | base.go |
Как инициализировать сцену | baseScene.go |
Сцена "Эхо" | echo.go |
Как получать другие типы уведомлений | event.go |
Как фильтровать входящие сообщения | filter.go |
Как работать с состоянием бота | state.go |
Пример готового чат бота | full.go |