Перейти к содержанию

Как фильтровать входящие сообщения#

Установка#

Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.

Как фильтровать входящие сообщения#

Фильтрация по типу вебхука происходит автоматически на уровне создания обработчика, пример - 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