Documentation
¶
Index ¶
- Constants
- Variables
- func CommandTextNoTrans(title, icon string) string
- func NotFoundHandler(w http.ResponseWriter, _ *http.Request)
- func PingHandler(w http.ResponseWriter, r *http.Request)
- func SetAccessGranted(whc WebhookContext, value bool) (err error)
- type AppContext
- type AppUserGetter
- type BotCommand
- type BotContext
- type BotContextProvider
- type BotHost
- type BotInputProvider
- type BotPlatform
- type BotProfile
- type BotRecordsFieldsSetter
- type BotSettings
- type BotSettingsBy
- type BotSettingsProvider
- type BotState
- type BotTranslations
- type BotUserCreator
- type CallbackAction
- type ChosenInlineResultAction
- type ChosenInlineResultHandlerFunc
- type Command
- type CommandAction
- type CommandCode
- type CommandMatcher
- type CreateWebhookContextArgs
- type DbGetter
- type ErrAuthFailed
- type ExecutionContext
- type HttpRouter
- type InlineInputHandler
- type InlineQueryAction
- type InlineQueryHandlerFunc
- type InputMessage
- type LocationAction
- type MessengerResponse
- type OnMessageSentResponse
- type PreCheckoutQueryAction
- type RefundedPaymentAction
- type Router
- type StartAction
- type SuccessfulPaymentAction
- type TextAction
- type TranslatorProvider
- type WebhookAnalytics
- type WebhookContext
- type WebhookContextBase
- func (whcb *WebhookContextBase) Analytics() WebhookAnalytics
- func (whcb *WebhookContextBase) AppContext() AppContext
- func (whcb *WebhookContextBase) AppUserData() (appUserData botsfwmodels.AppUserData, err error)
- func (whcb *WebhookContextBase) AppUserEntity() botsfwmodels.AppUserData
- func (whcb *WebhookContextBase) AppUserID() (appUserID string)
- func (whcb *WebhookContextBase) BotChatID() (botChatID string, err error)
- func (whcb *WebhookContextBase) BotContext() BotContext
- func (whcb *WebhookContextBase) BotPlatform() BotPlatform
- func (whcb *WebhookContextBase) Chat() botinput.Chat
- func (whcb *WebhookContextBase) ChatData() botsfwmodels.BotChatData
- func (whcb *WebhookContextBase) CommandText(title, icon string) string
- func (whcb *WebhookContextBase) Context() context.Context
- func (whcb *WebhookContextBase) DB() dal.DB
- func (whcb *WebhookContextBase) Environment() string
- func (whcb *WebhookContextBase) ExecutionContext() ExecutionContext
- func (whcb *WebhookContextBase) GetAppUser() (botsfwmodels.AppUserData, error)
- func (whcb *WebhookContextBase) GetBotCode() string
- func (whcb *WebhookContextBase) GetBotSettings() *BotSettings
- func (whcb *WebhookContextBase) GetBotToken() string
- func (whcb *WebhookContextBase) GetBotUser() (botUser botsdal.BotUser, err error)
- func (whcb *WebhookContextBase) GetBotUserForUpdate(ctx context.Context, tx dal.ReadwriteTransaction) (botUser botsdal.BotUser, err error)
- func (whcb *WebhookContextBase) GetBotUserID() string
- func (whcb *WebhookContextBase) GetRecipient() botinput.Recipient
- func (whcb *WebhookContextBase) GetTime() time.Time
- func (whcb *WebhookContextBase) GetTranslator(locale string) i18n.SingleLocaleTranslator
- func (whcb *WebhookContextBase) HasChatData() bool
- func (whcb *WebhookContextBase) Input() botinput.InputMessage
- func (whcb *WebhookContextBase) InputType() botinput.Type
- func (whcb *WebhookContextBase) IsInGroup() (bool, error)
- func (whcb *WebhookContextBase) IsInTransaction(context.Context) bool
- func (whcb *WebhookContextBase) Locale() i18n.Locale
- func (whcb *WebhookContextBase) LogRequest()
- func (whcb *WebhookContextBase) MessageText() string
- func (whcb *WebhookContextBase) MustBotChatID() (chatID string)
- func (whcb *WebhookContextBase) NewMessage(text string) (m botsfw3.MessageFromBot)
- func (whcb *WebhookContextBase) NewMessageByCode(messageCode string, a ...interface{}) (m botsfw3.MessageFromBot)
- func (whcb *WebhookContextBase) NonTransactionalContext(context.Context) context.Context
- func (whcb *WebhookContextBase) RecordsFieldsSetter() BotRecordsFieldsSetter
- func (whcb *WebhookContextBase) Request() *http.Request
- func (whcb *WebhookContextBase) SaveBotChat() error
- func (whcb *WebhookContextBase) SaveBotUser(ctx context.Context) error
- func (whcb *WebhookContextBase) SetChatID(chatID string)
- func (whcb *WebhookContextBase) SetContext(c context.Context)
- func (whcb *WebhookContextBase) SetLocale(code5 string) error
- func (whcb *WebhookContextBase) SetUser(id string, data botsfwmodels.AppUserData)
- func (t WebhookContextBase) Translate(key string, args ...interface{}) string
- func (t WebhookContextBase) TranslateNoWarning(key string, args ...interface{}) string
- func (t WebhookContextBase) TranslateWithMap(key string, args map[string]string) string
- type WebhookDriver
- type WebhookHandler
- type WebhookHandlerBase
- type WebhookInlineQueryContext
- type WebhookNewContext
- type WebhookResponder
Constants ¶
const ( // MessageTextBotDidNotUnderstandTheCommand is an i18n constant MessageTextBotDidNotUnderstandTheCommand = "MessageTextBotDidNotUnderstandTheCommand" // MessageTextOopsSomethingWentWrong is an i18n constant MessageTextOopsSomethingWentWrong = "MessageTextOopsSomethingWentWrong" )
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") )
const DefaultTitle = "" //
DefaultTitle key
const ShortTitle = "short_title"
ShortTitle key
Variables ¶
var EnvLocal = "local" // TODO: Consider adding this to init interface of setting config values
var EnvProduction = "production" // TODO: Consider adding this to init interface of setting config values
var ( // ErrEntityNotFound is returned if entity not found in storage ErrEntityNotFound = errors.New("bots-framework: no such entity") )
var ErrNotImplemented = errors.New("not implemented")
ErrNotImplemented if some feature is not implemented yet
var ErrUnknownBot = errors.New("unknown bot")
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 ¶
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) 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 ErrAuthFailed ¶
type ErrAuthFailed string
ErrAuthFailed raised if authentication failed
func (ErrAuthFailed) Error ¶
func (e ErrAuthFailed) Error() string
type ExecutionContext ¶ added in v0.25.0
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 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 ¶
func (whcb *WebhookContextBase) Input() botinput.InputMessage
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) TranslateNoWarning ¶
TranslateNoWarning translates string without warnings
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
Source Files
¶
- analytics.go
- app_context.go
- bot_context.go
- bot_profile.go
- bot_records_fields_setter.go
- bot_user_creator.go
- command_ignore.go
- commands.go
- const.go
- context_auth.go
- context_new.go
- errors.go
- handler.go
- inline_input_handler.go
- interfaces.go
- logging.go
- misc.go
- router_interface.go
- settings.go
- translator.go
- translator_provider.go
- webhook_context.go
- webhook_context_base.go
- webhook_context_dummy.go
- webhook_driver.go
- webhook_handler_base.go