botsfw

package
v0.71.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2025 License: Apache-2.0 Imports: 19 Imported by: 7

Documentation

Index

Constants

View Source
const (
	// MessageTextBotDidNotUnderstandTheCommand is an i18n constant
	MessageTextBotDidNotUnderstandTheCommand = "MessageTextBotDidNotUnderstandTheCommand"

	// MessageTextOopsSomethingWentWrong is an i18n constant
	MessageTextOopsSomethingWentWrong = "MessageTextOopsSomethingWentWrong"
)
View Source
const (
	// BotAPISendMessageOverHTTPS indicates message should be sent over HTTPS
	BotAPISendMessageOverHTTPS = botmsg.BotAPISendMessageChannel("https")

	// BotAPISendMessageOverResponse indicates message should be sent in HTTP response
	BotAPISendMessageOverResponse = botmsg.BotAPISendMessageChannel("response")
)
View Source
const DefaultTitle = "" //

DefaultTitle key

View Source
const ShortTitle = "short_title"

ShortTitle key

Variables

View Source
var EnvLocal = "local" // TODO: Consider adding this to init interface of setting config values
View Source
var EnvProduction = "production" // TODO: Consider adding this to init interface of setting config values
View Source
var (
	// ErrEntityNotFound is returned if entity not found in storage
	ErrEntityNotFound = errors.New("bots-framework: no such entity")
)
View Source
var ErrNotImplemented = errors.New("not implemented")

ErrNotImplemented if some feature is not implemented yet

View Source
var ErrUnknownBot = errors.New("unknown bot")
View Source
var IgnoreCommand = Command{
	Code: "bots.IgnoreCommand",
	Action: func(_ WebhookContext) (m botmsg.MessageFromBot, err error) {
		return
	},
	CallbackAction: func(_ WebhookContext, _ *url.URL) (m botmsg.MessageFromBot, err error) {
		return
	},
	TextAction: func(_ WebhookContext, _ string) (m botmsg.MessageFromBot, err error) {
		return
	},
	InlineQueryAction: func(_ WebhookContext, _ botinput.InlineQuery, _ *url.URL) (m botmsg.MessageFromBot, err error) {
		return
	},
	ChosenInlineResultAction: func(_ WebhookContext, _ botinput.ChosenInlineResult, _ *url.URL) (m botmsg.MessageFromBot, err error) {
		return
	},
}

IgnoreCommand is a command that does nothing

Functions

func CommandTextNoTrans

func CommandTextNoTrans(title, icon string) string

CommandTextNoTrans returns a title for a command (pre-translated)

func NotFoundHandler

func NotFoundHandler(w http.ResponseWriter, _ *http.Request)

NotFoundHandler returns HTTP status code 404

func PingHandler

func PingHandler(w http.ResponseWriter, r *http.Request)

PingHandler returns 'Pong' back to user

func SetAccessGranted

func SetAccessGranted(whc WebhookContext, value bool) (err error)

SetAccessGranted marks current context as authenticated

Types

type AppContext added in v0.35.0

type AppContext interface {
	botsdal.AppUserDal

	i18n.TranslationContext
}

AppContext is a context for an app that uses the botsfw

type AppUserGetter added in v0.18.0

type AppUserGetter = func(
	ctx context.Context,
	tx dal.ReadSession,
	botID string,
	appUserID string,
) (
	appUser record.DataWithID[string, botsfwmodels.AppUserData],
	err error,
)

type BotCommand added in v0.62.0

type BotCommand struct {
	Command     string `json:"command"`     // Text of the command; 1-32 characters. Can contain only lowercase English letters, digits and underscores.
	Description string `json:"description"` // Description of the command; 1-256 characters.
}

func (BotCommand) Validate added in v0.62.0

func (v BotCommand) Validate() error

type BotContext

type BotContext struct {
	AppContext  AppContext
	BotHost     BotHost      // describes current bot app host environment
	BotSettings *BotSettings // keeps parameters of a bot that are static and are not changed in runtime
}

BotContext binds a bot to a specific hosting environment

func NewBotContext

func NewBotContext(botHost BotHost, botSettings *BotSettings) *BotContext

NewBotContext creates current bot host & settings

type BotContextProvider added in v0.35.0

type BotContextProvider interface {
	// GetBotContext returns BotContext by platformID & botID
	GetBotContext(ctx context.Context, platformID botsfwconst.Platform, botID string) (botContext *BotContext, err error)
}

BotContextProvider provides BotContext by platformID & botID

func NewBotContextProvider added in v0.35.0

func NewBotContextProvider(botHost BotHost, appContext AppContext, botSettingProvider BotSettingsProvider) BotContextProvider

type BotHost

type BotHost interface {

	// Context returns a context.Context for a request. We need this as some platforms (as Google App Engine Standard)
	// require usage of a context with a specific wrapper
	Context(r *http.Request) context.Context

	// GetHTTPClient returns HTTP client for current host
	// We need this as some platforms (as Google App Engine Standard) require setting http client in a specific way.
	GetHTTPClient(c context.Context) *http.Client
}

BotHost describes current bot app host environment

type BotInputProvider

type BotInputProvider interface {
	// Input returns a webhook input from a specific bot interface (Telegram, FB Messenger, Viber, etc.)
	Input() botinput.InputMessage
}

BotInputProvider provides an input from a specific bot interface (Telegram, FB Messenger, Viber, etc.)

type BotPlatform

type BotPlatform interface {

	// ID returns bot platform ID like 'telegram', 'fbmessenger', 'viber', etc.
	ID() string

	// Version returns a version of a bot platform adapter. It is used for debugging purposes.
	Version() string
}

BotPlatform describes current bot platform

type BotProfile added in v0.18.0

type BotProfile interface {
	ID() string
	Router() Router
	DefaultLocale() i18n.Locale
	SupportedLocales() []i18n.Locale
	NewBotChatData() botsfwmodels.BotChatData
	NewPlatformUserData() botsfwmodels.PlatformUserData
	NewAppUserData() botsfwmodels.AppUserData // TODO: Can we get rit of it and instead use GetAppUserByID/CreateAppUser?
	GetTranslations() BotTranslations
}

func NewBotProfile added in v0.18.0

func NewBotProfile(
	id string,
	router Router,
	newBotChatData func() botsfwmodels.BotChatData,
	newBotUserData func() botsfwmodels.PlatformUserData,
	newAppUserData func() botsfwmodels.AppUserData,
	getAppUserByID AppUserGetter,
	defaultLocale i18n.Locale,
	supportedLocales []i18n.Locale,
	translations BotTranslations,
) BotProfile

type BotRecordsFieldsSetter added in v0.16.0

type BotRecordsFieldsSetter interface {

	// Platform returns platform name, e.g. 'telegram', 'fbmessenger', etc.
	// This method is for debug pruposes and to indicate that different platforms may have different fields
	// Though '*' can be used for a generic setter that works for all platforms
	// If both '*' and platform specific setters are defined, the generic setter will be used first.
	Platform() string

	// SetAppUserFields sets fields of app user record
	SetAppUserFields(appUser botsfwmodels.AppUserData, sender botinput.Sender) error

	// SetBotUserFields sets fields of bot user record
	SetBotUserFields(botUser botsfwmodels.PlatformUserData, sender botinput.Sender, botID, botUserID, appUserID string) error

	// SetBotChatFields sets fields of bot botChat record
	// TODO: document isAccessGranted parameter
	SetBotChatFields(botChat botsfwmodels.BotChatData, chat botinput.Chat, botID, botUserID, appUserID string, isAccessGranted bool) error
}

type BotSettings

type BotSettings struct {

	// Platform is a platform that bot is running on
	// E.g.: Telegram, Viber, Facebook Messenger, WhatsApp, etc.
	Platform botsfwconst.Platform

	// Env is an environment where bot is running
	// E.g.: Production/Live, Local/Dev, Staging, etc.
	Env string

	// Profile is a bot profile that defines bot's behavior
	// It includes commands router and some other settings
	// More in BotProfile documentation.
	Profile BotProfile

	// Code is a human-readable ID of a bot.
	// When displayed it is usually prefixed with @.
	// For example:
	//   - @listus_bot for https://t.me/listus_bot
	Code string

	// ID is a bot-platform ID of a bot. For example, it could be a GUID.
	// Not all platforms use it. For example Telegram doesn't use it.
	ID string

	// Token is used to authenticate bot with a platform when it is not responding to a webhook
	// but calling platform APIs directly.
	Token string

	// PaymentToken is used to process payments on bot platform
	PaymentToken string

	// PaymentTestToken is used to process test payments on bot platform
	PaymentTestToken string

	// VerifyToken is used by Facebook Messenger - TODO: Document how it is used and add a link to Facebook docs
	VerifyToken string

	// GAToken is Google Analytics token - TODO: Refactor tu support multiple or move out
	GAToken string

	// Locale is a default locale for a bot.
	// While a bot profile can support multiple locales a bot can be dedicated to a specific country/language
	Locale i18n.Locale

	// GetDatabase returns connection to a database assigned to a bot.
	// You can use same database for multiple bots
	// but if you need you can use different databases for different bots.
	// It's up to bots creator how to map bots to a database.
	// In most cases a single DB is used for all bots.
	GetDatabase DbGetter
	// contains filtered or unexported fields
}

BotSettings keeps parameters of a bot that are static and are not changed in runtime

func NewBotSettings

func NewBotSettings(
	platform botsfwconst.Platform,
	environment string,
	profile BotProfile,
	code, id, token, gaToken string,
	locale i18n.Locale,
	getDatabase DbGetter,
	getAppUser AppUserGetter,
) BotSettings

NewBotSettings configures bot application

func (BotSettings) GetAppUserByID added in v0.18.0

func (v BotSettings) GetAppUserByID(ctx context.Context, tx dal.ReadSession, appUserID string) (appUser record.DataWithID[string, botsfwmodels.AppUserData], err error)

type BotSettingsBy added in v0.35.0

type BotSettingsBy struct {

	// ByCode keeps settings by bot code - it is a human-readable ID of a bot
	ByCode map[string]*BotSettings

	// ByID keeps settings by bot ID - it is a machine-readable ID of a bot.
	ByID map[string]*BotSettings

	ByProfile map[string][]*BotSettings
}

SettingsBy keeps settings per different keys (ID, code, API token, Locale) TODO: Decide if it should have map[string]*BotSettings instead of map[string]BotSettings

func NewBotSettingsBy

func NewBotSettingsBy(bots ...BotSettings) (settingsBy BotSettingsBy)

NewBotSettingsBy create settings per different keys (ID, code, API token, Locale)

type BotSettingsProvider added in v0.35.0

type BotSettingsProvider func(ctx context.Context) BotSettingsBy

SettingsProvider returns settings per different keys (ID, code, API token, Locale)

type BotState

type BotState interface {
	IsNewerThen(chatEntity botsfwmodels.BotChatData) bool
}

BotState provides state of the bot (TODO: document how is used)

type BotTranslations added in v0.62.0

type BotTranslations struct {
	Description      string
	ShortDescription string
	Commands         []BotCommand
}

type BotUserCreator added in v0.18.0

type BotUserCreator func(c context.Context, botID string, apiUser botinput.Actor) (botsfwmodels.PlatformUserData, error)

type CallbackAction

type CallbackAction func(whc WebhookContext, callbackUrl *url.URL) (m botmsg.MessageFromBot, err error)

CallbackAction defines a callback action bot can perform in response to a callback command

type ChosenInlineResultAction added in v0.53.1

type ChosenInlineResultAction func(whc WebhookContext, chosenResult botinput.ChosenInlineResult, queryUrl *url.URL) (m botmsg.MessageFromBot, err error)

type ChosenInlineResultHandlerFunc added in v0.51.0

type ChosenInlineResultHandlerFunc func(whc WebhookContext, inlineQuery botinput.ChosenInlineResult) (handled bool, m botsfw2.MessageFromBot, err error)

ChosenInlineResultHandlerFunc defines a function that handles chosen inline result

type Command

type Command struct {
	Code       CommandCode
	InputTypes []botinput.Type // Instant match if != TypeUnknown && == whc.InputTypes()
	Icon       string
	Replies    []Command
	Title      string
	Titles     map[string]string
	ExactMatch string
	Commands   []string
	Matcher    CommandMatcher
	//
	Action                   CommandAction
	TextAction               TextAction
	StartAction              StartAction
	CallbackAction           CallbackAction
	LocationAction           LocationAction
	InlineQueryAction        InlineQueryAction
	ChosenInlineResultAction ChosenInlineResultAction
	PreCheckoutQueryAction   PreCheckoutQueryAction
	SuccessfulPaymentAction  SuccessfulPaymentAction
	RefundedPaymentAction
}

Command defines command metadata and action

func NewCallbackCommand

func NewCallbackCommand(code CommandCode, action CallbackAction) Command

NewCallbackCommand create a definition of a callback command

func NewInlineQueryCommand

func NewInlineQueryCommand(code CommandCode, action CommandAction) Command

func (Command) DefaultTitle

func (c Command) DefaultTitle(whc WebhookContext) string

DefaultTitle returns a default title for a command in current Locale

func (Command) String

func (c Command) String() string

func (Command) TitleByKey

func (c Command) TitleByKey(key string, whc WebhookContext) string

TitleByKey returns a short/long title for a command in current Locale

type CommandAction

type CommandAction func(whc WebhookContext) (m botmsg.MessageFromBot, err error)

CommandAction defines an action bot can perform in response to a command

type CommandCode added in v0.45.0

type CommandCode string

type CommandMatcher

type CommandMatcher func(command Command, whc WebhookContext) bool

CommandMatcher returns true if action is matched to user input

type CreateWebhookContextArgs added in v0.18.0

type CreateWebhookContextArgs struct {
	HttpRequest  *http.Request // TODO: Can we get rid of it? Needed for botHost.GetHTTPClient()
	AppContext   AppContext
	BotContext   BotContext
	WebhookInput botinput.InputMessage
	Db           dal.DB
}

func NewCreateWebhookContextArgs added in v0.18.0

func NewCreateWebhookContextArgs(
	httpRequest *http.Request,
	appContext AppContext,
	botContext BotContext,
	webhookInput botinput.InputMessage,
	db dal.DB,
) CreateWebhookContextArgs

type DbGetter added in v0.18.0

type DbGetter = func(ctx context.Context) (db dal.DB, err error)

type ErrAuthFailed

type ErrAuthFailed string

ErrAuthFailed raised if authentication failed

func (ErrAuthFailed) Error

func (e ErrAuthFailed) Error() string

type ExecutionContext added in v0.25.0

type ExecutionContext interface {
	Context() context.Context
}

ExecutionContext TODO: either specify clear purpose and added value or remove

type HttpRouter added in v0.11.0

type HttpRouter interface {
	Handle(method string, path string, handle http.HandlerFunc)
}

type InlineInputHandler added in v0.51.0

type InlineInputHandler struct {
	ProfileID                string // Not sure if we really need it
	HandleInlineQuery        InlineQueryHandlerFunc
	HandleChosenInlineResult ChosenInlineResultHandlerFunc
}

InlineInputHandler defines handlers to deal with inline inputs

type InlineQueryAction added in v0.53.1

type InlineQueryAction func(whc WebhookContext, inlineQuery botinput.InlineQuery, queryUrl *url.URL) (m botmsg.MessageFromBot, err error)

type InlineQueryHandlerFunc added in v0.50.2

type InlineQueryHandlerFunc func(whc WebhookContext, inlineQuery botinput.InlineQuery) (handled bool, m botsfw2.MessageFromBot, err error)

InlineQueryHandlerFunc defines a function that handles inline query

type InputMessage

type InputMessage interface {
	Text() string
}

InputMessage represents single input message

type LocationAction added in v0.70.2

type LocationAction func(whc WebhookContext, latitude, longitude float64) (m botmsg.MessageFromBot, err error)

type MessengerResponse

type MessengerResponse interface {
	GetMessageID() string
}

MessengerResponse represents response from a messenger

type OnMessageSentResponse

type OnMessageSentResponse struct {
	StatusCode int
	Message    MessengerResponse // TODO: change to some interface
}

OnMessageSentResponse represents response on message sent event

type PreCheckoutQueryAction added in v0.62.0

type PreCheckoutQueryAction func(whc WebhookContext, preCheckout botinput.PreCheckoutQuery) (m botmsg.MessageFromBot, err error)

type RefundedPaymentAction added in v0.62.0

type RefundedPaymentAction func(whc WebhookContext, payment botinput.RefundedPayment) (m botmsg.MessageFromBot, err error)

type Router added in v0.49.0

type Router interface {
	RegisterCommands(commands ...Command)
	RegisterCommandsForInputType(inputType botinput.Type, commands ...Command)

	// Dispatch requests to commands by input type, command code or a matching function
	Dispatch(webhookHandler WebhookHandler, responder WebhookResponder, whc WebhookContext) error

	// RegisteredCommands returns all registered commands
	RegisteredCommands() map[botinput.Type]map[CommandCode]Command
}

Router dispatches requests to commands by input type, command code or a matching function

type StartAction added in v0.64.0

type StartAction TextAction

type SuccessfulPaymentAction added in v0.62.0

type SuccessfulPaymentAction func(whc WebhookContext, payment botinput.SuccessfulPayment) (m botmsg.MessageFromBot, err error)

type TextAction added in v0.54.0

type TextAction func(whc WebhookContext, text string) (m botmsg.MessageFromBot, err error)

type TranslatorProvider

type TranslatorProvider func(c context.Context) i18n.Translator

TranslatorProvider translates texts

type WebhookAnalytics added in v0.57.0

type WebhookAnalytics interface {
	Enqueue(message analytics.Message)
}

type WebhookContext

type WebhookContext interface {
	//dal.TransactionCoordinator
	Environment() string
	BotInputProvider
	BotPlatform() BotPlatform

	Request() *http.Request

	// Context return context
	Context() context.Context

	// SetContext sets context
	SetContext(c context.Context)

	ExecutionContext() ExecutionContext

	AppContext() AppContext

	BotContext() BotContext

	MustBotChatID() string

	// GetBotCode returns bot code. This is a shortcut to BotSettings().Code
	GetBotCode() string

	// GetBotSettings returns bot settings
	GetBotSettings() *BotSettings

	// DB is a reference to database used to store data of current bot
	DB() dal.DB

	// ChatData returns data of current bot chat without ID/Key
	ChatData() botsfwmodels.BotChatData // Formerly ChatEntity()

	// BotUser returns record of current bot user
	GetBotUser() (botUser botsdal.BotUser, err error)
	GetBotUserForUpdate(ctx context.Context, tx dal.ReadwriteTransaction) (botUser botsdal.BotUser, err error)

	GetBotUserID() string

	// IsInGroup indicates if message was received in a group botChat
	IsInGroup() (bool, error) // We  need to return an error as well (for Telegram chat instance).

	// CommandText TODO: needs to be documented
	CommandText(title, icon string) string

	// SetLocale sets Locale for current session
	SetLocale(code5 string) error

	NewMessage(text string) botmsg.MessageFromBot
	NewMessageByCode(messageCode string, a ...interface{}) botmsg.MessageFromBot
	NewEditMessage(text string, format botmsg.Format) (botmsg.MessageFromBot, error)

	UpdateLastProcessed(chatEntity botsfwmodels.BotChatData) error

	AppUserID() string
	SetUser(id string, data botsfwmodels.AppUserData)

	AppUserData() (botsfwmodels.AppUserData, error)

	BotState

	// SaveBotChat // It is dangerous to allow user to pass context to this func as if it's a transactional context it might lead to deadlock
	// Previously: takes context as we might want to add timeout or cancellation or something else.
	SaveBotChat() error

	// RecordsFieldsSetter returns a helper that sets fields of bot related records
	RecordsFieldsSetter() BotRecordsFieldsSetter

	//botinput.InputMessage // TODO: Should be removed!!!
	i18n.SingleLocaleTranslator
	GetTranslator(locale string) i18n.SingleLocaleTranslator

	Responder() WebhookResponder

	Analytics() WebhookAnalytics
}

WebhookContext provides context for current request from user to bot

type WebhookContextBase

type WebhookContextBase struct {
	// contains filtered or unexported fields
}

WebhookContextBase provides base implementation of WebhookContext interface TODO: Document purpose of a dedicated base struct (e.g. example of usage by developers)

func NewWebhookContextBase

func NewWebhookContextBase(
	args CreateWebhookContextArgs,
	botPlatform BotPlatform,
	recordsFieldsSetter BotRecordsFieldsSetter,
	getIsInGroup func() (bool, error),
	getLocaleAndChatID func(c context.Context) (locale, chatID string, err error),
) (whcb *WebhookContextBase, err error)

NewWebhookContextBase creates base bot context

func (*WebhookContextBase) Analytics added in v0.57.0

func (whcb *WebhookContextBase) Analytics() WebhookAnalytics

func (*WebhookContextBase) AppContext added in v0.35.0

func (whcb *WebhookContextBase) AppContext() AppContext

AppContext returns bot app context

func (*WebhookContextBase) AppUserData added in v0.29.0

func (whcb *WebhookContextBase) AppUserData() (appUserData botsfwmodels.AppUserData, err error)

func (*WebhookContextBase) AppUserEntity

func (whcb *WebhookContextBase) AppUserEntity() botsfwmodels.AppUserData

AppUserEntity current app user entity from data storage

func (*WebhookContextBase) AppUserID added in v0.13.0

func (whcb *WebhookContextBase) AppUserID() (appUserID string)

AppUserID return current app user ID as a string. AppUserIntID() is deprecated.

func (*WebhookContextBase) BotChatID

func (whcb *WebhookContextBase) BotChatID() (botChatID string, err error)

BotChatID returns bot botChat ID

func (*WebhookContextBase) BotContext

func (whcb *WebhookContextBase) BotContext() BotContext

func (*WebhookContextBase) BotPlatform

func (whcb *WebhookContextBase) BotPlatform() BotPlatform

BotPlatform indicates on which bot platform we process message

func (*WebhookContextBase) Chat

func (whcb *WebhookContextBase) Chat() botinput.Chat

Chat returns webhook botChat

func (*WebhookContextBase) ChatData added in v0.16.2

func (whcb *WebhookContextBase) ChatData() botsfwmodels.BotChatData

ChatData returns app entity for the context (loaded from DB)

func (*WebhookContextBase) CommandText

func (whcb *WebhookContextBase) CommandText(title, icon string) string

CommandText returns a title for a command

func (*WebhookContextBase) Context

func (whcb *WebhookContextBase) Context() context.Context

Context for current request

func (*WebhookContextBase) DB added in v0.18.0

func (whcb *WebhookContextBase) DB() dal.DB

func (*WebhookContextBase) Environment

func (whcb *WebhookContextBase) Environment() string

Environment defines current environment (PROD, DEV, LOCAL, etc)

func (*WebhookContextBase) ExecutionContext

func (whcb *WebhookContextBase) ExecutionContext() ExecutionContext

ExecutionContext returns an execution context for strongo app

func (*WebhookContextBase) GetAppUser

func (whcb *WebhookContextBase) GetAppUser() (botsfwmodels.AppUserData, error)

GetAppUser loads information about current app user from persistent storage

func (*WebhookContextBase) GetBotCode

func (whcb *WebhookContextBase) GetBotCode() string

GetBotCode returns current bot code

func (*WebhookContextBase) GetBotSettings

func (whcb *WebhookContextBase) GetBotSettings() *BotSettings

GetBotSettings settings of the current bot

func (*WebhookContextBase) GetBotToken

func (whcb *WebhookContextBase) GetBotToken() string

GetBotToken returns current bot API token

func (*WebhookContextBase) GetBotUser added in v0.56.0

func (whcb *WebhookContextBase) GetBotUser() (botUser botsdal.BotUser, err error)

func (*WebhookContextBase) GetBotUserForUpdate added in v0.56.0

func (whcb *WebhookContextBase) GetBotUserForUpdate(ctx context.Context, tx dal.ReadwriteTransaction) (botUser botsdal.BotUser, err error)

func (*WebhookContextBase) GetBotUserID added in v0.16.2

func (whcb *WebhookContextBase) GetBotUserID() string

func (*WebhookContextBase) GetRecipient

func (whcb *WebhookContextBase) GetRecipient() botinput.Recipient

GetRecipient returns receiver of the message

func (*WebhookContextBase) GetTime

func (whcb *WebhookContextBase) GetTime() time.Time

GetTime returns time of the message

func (*WebhookContextBase) GetTranslator added in v0.61.0

func (whcb *WebhookContextBase) GetTranslator(locale string) i18n.SingleLocaleTranslator

func (*WebhookContextBase) HasChatData added in v0.16.2

func (whcb *WebhookContextBase) HasChatData() bool

HasChatData return true if messages is within botChat

func (*WebhookContextBase) Input

Input returns webhook input

func (*WebhookContextBase) InputType

func (whcb *WebhookContextBase) InputType() botinput.Type

InputType returns input type

func (*WebhookContextBase) IsInGroup

func (whcb *WebhookContextBase) IsInGroup() (bool, error)

IsInGroup signals if the bot request is send within group botChat

func (*WebhookContextBase) IsInTransaction

func (whcb *WebhookContextBase) IsInTransaction(context.Context) bool

IsInTransaction detects if request is within a transaction

func (*WebhookContextBase) Locale

func (whcb *WebhookContextBase) Locale() i18n.Locale

Locale indicates current language

func (*WebhookContextBase) LogRequest

func (whcb *WebhookContextBase) LogRequest()

LogRequest logs request data to logging system

func (*WebhookContextBase) MessageText

func (whcb *WebhookContextBase) MessageText() string

MessageText returns text of a received message

func (*WebhookContextBase) MustBotChatID

func (whcb *WebhookContextBase) MustBotChatID() (chatID string)

MustBotChatID returns bot botChat ID and panic if missing it

func (*WebhookContextBase) NewMessage

func (whcb *WebhookContextBase) NewMessage(text string) (m botsfw3.MessageFromBot)

NewMessage creates a new text message from bot

func (*WebhookContextBase) NewMessageByCode

func (whcb *WebhookContextBase) NewMessageByCode(messageCode string, a ...interface{}) (m botsfw3.MessageFromBot)

NewMessageByCode creates new translated message by i18n code

func (*WebhookContextBase) NonTransactionalContext

func (whcb *WebhookContextBase) NonTransactionalContext(context.Context) context.Context

NonTransactionalContext creates a non transaction context for operations that needs to be executed outside of transaction.

func (*WebhookContextBase) RecordsFieldsSetter added in v0.16.2

func (whcb *WebhookContextBase) RecordsFieldsSetter() BotRecordsFieldsSetter

func (*WebhookContextBase) Request

func (whcb *WebhookContextBase) Request() *http.Request

Request returns reference to current HTTP request

func (*WebhookContextBase) SaveBotChat added in v0.18.0

func (whcb *WebhookContextBase) SaveBotChat() error

func (*WebhookContextBase) SaveBotUser added in v0.18.0

func (whcb *WebhookContextBase) SaveBotUser(ctx context.Context) error

func (*WebhookContextBase) SetChatID

func (whcb *WebhookContextBase) SetChatID(chatID string)

SetChatID sets botChat ID - TODO: Should it be private?

func (*WebhookContextBase) SetContext

func (whcb *WebhookContextBase) SetContext(c context.Context)

SetContext sets current context // TODO: explain why we need this as probably should be in constructor?

func (*WebhookContextBase) SetLocale

func (whcb *WebhookContextBase) SetLocale(code5 string) error

SetLocale sets current language

func (*WebhookContextBase) SetUser added in v0.70.6

func (whcb *WebhookContextBase) SetUser(id string, data botsfwmodels.AppUserData)

func (WebhookContextBase) Translate

func (t WebhookContextBase) Translate(key string, args ...interface{}) string

Translate translates string

func (WebhookContextBase) TranslateNoWarning

func (t WebhookContextBase) TranslateNoWarning(key string, args ...interface{}) string

TranslateNoWarning translates string without warnings

func (WebhookContextBase) TranslateWithMap added in v0.58.0

func (t WebhookContextBase) TranslateWithMap(key string, args map[string]string) string

type WebhookDriver

type WebhookDriver interface {
	RegisterWebhookHandlers(httpRouter HttpRouter, pathPrefix string, webhookHandlers ...WebhookHandler)
	HandleWebhook(w http.ResponseWriter, r *http.Request, webhookHandler WebhookHandler)
}

WebhookDriver is doing initial request & final response processing. That includes logging, creating input messages in a general format, sending response.

type WebhookHandler

type WebhookHandler interface {

	// RegisterHttpHandlers registers HTTP handlers for bot API
	RegisterHttpHandlers(driver WebhookDriver, botHost BotHost, router HttpRouter, pathPrefix string)

	// HandleWebhookRequest handles incoming webhook request
	HandleWebhookRequest(w http.ResponseWriter, r *http.Request)

	// GetBotContextAndInputs returns bot context and inputs for current request
	// It returns multiple inputs as some platforms (like Facebook Messenger)
	// may send multiple message in one request
	GetBotContextAndInputs(c context.Context, r *http.Request) (botContext *BotContext, entriesWithInputs []botinput.EntryInputs, err error)

	// CreateWebhookContext creates WebhookContext for current webhook request
	CreateWebhookContext(args CreateWebhookContextArgs) (WebhookContext, error)

	GetResponder(w http.ResponseWriter, whc WebhookContext) WebhookResponder
	HandleUnmatched(whc WebhookContext) (m botsfw2.MessageFromBot)
}

WebhookHandler handles requests from a specific bot API This is implemented by different botsfw packages, e.g. https://github.com/bots-go-framework/bots-fw-telegram TODO: Simplify interface by decomposing it into smaller interfaces? Probably next method could/should be decoupled: CreateBotCoreStores()

type WebhookHandlerBase added in v0.16.0

type WebhookHandlerBase struct {
	WebhookDriver
	BotHost
	BotPlatform
	//RecordsMaker        botsfwmodels.BotRecordsMaker
	RecordsFieldsSetter BotRecordsFieldsSetter
	TranslatorProvider  TranslatorProvider
}

WebhookHandlerBase provides base implementation for a bot handler

func (*WebhookHandlerBase) Register added in v0.16.0

func (bh *WebhookHandlerBase) Register(d WebhookDriver, h BotHost)

Register driver

type WebhookInlineQueryContext

type WebhookInlineQueryContext interface {
}

WebhookInlineQueryContext provides context for inline query (TODO: check & document)

type WebhookNewContext

type WebhookNewContext struct {
	BotContext
	botinput.InputMessage
}

WebhookNewContext TODO: needs to be checked & described

type WebhookResponder

type WebhookResponder interface {
	SendMessage(c context.Context, m botmsg.MessageFromBot, channel botmsg.BotAPISendMessageChannel) (response OnMessageSentResponse, err error)
	DeleteMessage(c context.Context, messageID string) (err error)
}

WebhookResponder is an API provider to send messages through a messenger

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL