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