Documentation
¶
Index ¶
- Constants
- Variables
- func CommandTextNoTrans(title, icon string) string
- func InitBotsFrameworkLogger(logger Logger)
- func NotFoundHandler(w http.ResponseWriter, _ *http.Request)
- func PingHandler(w http.ResponseWriter, r *http.Request)
- func SetAccessGranted(whc WebhookContext, value bool) (err error)
- func SetLogger(l Logger)
- type AnalyticsSettings
- type Attachment
- type AttachmentType
- type BotAPISendMessageChannel
- type BotAPIUser
- type BotAppContext
- type BotContext
- type BotDriver
- type BotHost
- type BotInputProvider
- type BotMessage
- type BotMessageType
- type BotPlatform
- type BotRecordsFieldsSetter
- type BotSettings
- type BotState
- type CallbackAction
- type ChatIntID
- type ChatUID
- type Command
- type CommandAction
- type CommandMatcher
- type EntryInput
- type EntryInputs
- type ErrAuthFailed
- type GaContext
- type GaQueuer
- type HttpRouter
- type InputMessage
- type Logger
- type MessageFormat
- type MessageFromBot
- type MessageUID
- type MessengerResponse
- type OnMessageSentResponse
- type Platform
- type SettingsBy
- type SettingsProvider
- type TextMessageFromBot
- func (m TextMessageFromBot) BotMessageType() BotMessageType
- func (j *TextMessageFromBot) MarshalJSON() ([]byte, error)
- func (j *TextMessageFromBot) MarshalJSONBuf(buf fflib.EncodingBuffer) error
- func (j *TextMessageFromBot) UnmarshalJSON(input []byte) error
- func (j *TextMessageFromBot) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
- type TranslatorProvider
- type TypeCommands
- type WebhookActor
- type WebhookAttachment
- type WebhookAudioMessage
- type WebhookCallbackQuery
- type WebhookChat
- type WebhookChosenInlineResult
- type WebhookContactMessage
- type WebhookContext
- type WebhookContextBase
- func (whcb *WebhookContextBase) AppUserEntity() botsfwmodels.AppUserData
- func (whcb *WebhookContextBase) AppUserID() (appUserID string)
- func (whcb *WebhookContextBase) AppUserInt64ID() (appUserID int64)
- func (whcb *WebhookContextBase) BotAppContext() BotAppContext
- func (whcb *WebhookContextBase) BotChatID() (botChatID string, err error)
- func (whcb *WebhookContextBase) BotContext() BotContext
- func (whcb *WebhookContextBase) BotPlatform() BotPlatform
- func (whcb *WebhookContextBase) Chat() WebhookChat
- func (whcb *WebhookContextBase) ChatData() botsfwmodels.ChatData
- func (whcb *WebhookContextBase) CommandText(title, icon string) string
- func (whcb *WebhookContextBase) Context() context.Context
- func (whcb *WebhookContextBase) Environment() strongo.Environment
- func (whcb *WebhookContextBase) ExecutionContext() strongo.ExecutionContext
- func (whcb *WebhookContextBase) GA() GaContext
- 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) GetBotUserID() string
- func (whcb *WebhookContextBase) GetRecipient() WebhookRecipient
- func (whcb *WebhookContextBase) GetSender() WebhookSender
- func (whcb *WebhookContextBase) GetTime() time.Time
- func (whcb *WebhookContextBase) HasChatData() bool
- func (whcb *WebhookContextBase) Input() WebhookInput
- func (whcb *WebhookContextBase) InputType() WebhookInputType
- func (whcb *WebhookContextBase) IsInGroup() bool
- 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 MessageFromBot)
- func (whcb *WebhookContextBase) NewMessageByCode(messageCode string, a ...interface{}) (m MessageFromBot)
- func (whcb *WebhookContextBase) NonTransactionalContext(context.Context) context.Context
- func (whcb *WebhookContextBase) RecordsFieldsSetter() BotRecordsFieldsSetter
- func (whcb *WebhookContextBase) Request() *http.Request
- func (whcb *WebhookContextBase) SetChatID(v string)
- func (whcb *WebhookContextBase) SetContext(c context.Context)
- func (whcb *WebhookContextBase) SetLocale(code5 string) error
- func (whcb *WebhookContextBase) Store() botsfwdal.DataAccess
- func (t WebhookContextBase) Translate(key string, args ...interface{}) string
- func (t WebhookContextBase) TranslateNoWarning(key string, args ...interface{}) string
- type WebhookConversationStarted
- type WebhookDelivery
- type WebhookDriver
- type WebhookEntry
- type WebhookHandler
- type WebhookHandlerBase
- func (j *WebhookHandlerBase) MarshalJSON() ([]byte, error)
- func (j *WebhookHandlerBase) MarshalJSONBuf(buf fflib.EncodingBuffer) error
- func (bh *WebhookHandlerBase) Register(d WebhookDriver, h BotHost)
- func (j *WebhookHandlerBase) UnmarshalJSON(input []byte) error
- func (j *WebhookHandlerBase) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
- type WebhookInlineQuery
- type WebhookInlineQueryContext
- type WebhookInput
- type WebhookInputType
- type WebhookLeftChatMembersMessage
- type WebhookMessage
- type WebhookNewChatMembersMessage
- type WebhookNewContext
- type WebhookPhotoMessage
- type WebhookPostback
- type WebhookRecipient
- type WebhookReferralMessage
- type WebhookResponder
- type WebhookSender
- type WebhookStickerMessage
- type WebhookSubscribed
- type WebhookTextMessage
- type WebhookUnsubscribed
- type WebhookUser
- type WebhookVoiceMessage
- type WebhooksRouter
- func (whr *WebhooksRouter) AddCommands(commandsType WebhookInputType, commands []Command)
- func (whr *WebhooksRouter) CommandsCount() int
- func (whr *WebhooksRouter) Dispatch(webhookHandler WebhookHandler, responder WebhookResponder, whc WebhookContext)
- func (whr *WebhooksRouter) DispatchInlineQuery(responder WebhookResponder)
- func (whr *WebhooksRouter) RegisterCommands(commands []Command)
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 = BotAPISendMessageChannel("https") // BotAPISendMessageOverResponse indicates message should be sent in HTTP response BotAPISendMessageOverResponse = BotAPISendMessageChannel("response") )
const DefaultTitle = "" //
DefaultTitle key
const NoMessageToSend = "<NO_MESSAGE_TO_SEND>"
NoMessageToSend returned explicitly if we don't want to reply to user intput
const ShortTitle = "short_title"
ShortTitle key
Variables ¶
var ( // ErrEntityNotFound is returned if entity not found in storage ErrEntityNotFound = errors.New("bots-framework: no such entity") )
var ErrNoCommandsMatched = errors.New("no commands matched")
var ErrNotImplemented = errors.New("not implemented")
ErrNotImplemented if some feature is not implemented yet
var ErrorIcon = "🚨"
ErrorIcon is used to report errors to user
var IgnoreCommand = Command{ Code: "bots.IgnoreCommand", Action: func(_ WebhookContext) (m MessageFromBot, err error) { return }, CallbackAction: func(_ WebhookContext, _ *url.URL) (m MessageFromBot, err error) { return }, }
IgnoreCommand is a command that does nothing
var WebhookInputTypeNames = map[WebhookInputType]string{ WebhookInputUnknown: "unknown", WebhookInputNotImplemented: "not implemented", WebhookInputReferral: "Referral", WebhookInputText: "Text", WebhookInputContact: "Contact", WebhookInputPostback: "Postback", WebhookInputDelivery: "Delivery", WebhookInputAttachment: "Attachment", WebhookInputInlineQuery: "InlineQuery", WebhookInputCallbackQuery: "CallbackQuery", WebhookInputChosenInlineResult: "ChosenInlineResult", WebhookInputSubscribed: "Subscribed", WebhookInputUnsubscribed: "Unsubscribed", WebhookInputConversationStarted: "ConversationStarted", WebhookInputNewChatMembers: "NewChatMembers", }
WebhookInputTypeNames names for input type
Functions ¶
func CommandTextNoTrans ¶
CommandTextNoTrans returns a title for a command (pre-translated)
func InitBotsFrameworkLogger ¶ added in v0.12.0
func InitBotsFrameworkLogger(logger Logger)
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 AnalyticsSettings ¶
type AnalyticsSettings struct {
GaTrackingID string // TODO: Refactor to list of analytics providers
Enabled func(r *http.Request) bool
}
AnalyticsSettings keeps data for Google Analytics
type Attachment ¶
type Attachment interface {
AttachmentType() AttachmentType
}
Attachment to a bot message
type AttachmentType ¶
type AttachmentType int
AttachmentType to a bot message
const ( // AttachmentTypeNone says there is no attachment AttachmentTypeNone AttachmentType = iota // AttachmentTypeAudio is for audio attachments AttachmentTypeAudio // AttachmentTypeFile is for file attachments AttachmentTypeFile // AttachmentTypeImage is for image attachments AttachmentTypeImage // AttachmentTypeVideo is for video attachments AttachmentTypeVideo )
type BotAPISendMessageChannel ¶
type BotAPISendMessageChannel string
BotAPISendMessageChannel specifies messenger channel
type BotAPIUser ¶
type BotAPIUser interface {
// FirstName returns user's first name
FirstName() string
// LastName returns user's last name
LastName() string
}
BotAPIUser provides info about current bot user
type BotAppContext ¶
type BotAppContext interface {
strongo.AppUserSettings // TODO: Do we really need it here?
i18n.TranslationContext
NewBotAppUserEntity() botsfwmodels.AppUserData
GetBotChatEntityFactory(platform string) func() botsfwmodels.ChatData
}
BotAppContext is a context for bot app
type BotContext ¶
type BotContext struct {
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 describes a bot on a specific platform
func NewBotContext ¶
func NewBotContext(host BotHost, settings BotSettings) *BotContext
NewBotContext creates current bot host & settings
type BotDriver ¶
type BotDriver struct {
Analytics AnalyticsSettings
// contains filtered or unexported fields
}
BotDriver keeps information about bots and map requests to appropriate handlers
func NewBotDriver ¶
func NewBotDriver(gaSettings AnalyticsSettings, appContext BotAppContext, host BotHost, panicTextFooter string) BotDriver
NewBotDriver registers new bot driver (TODO: describe why we need it)
func (BotDriver) HandleWebhook ¶
func (d BotDriver) HandleWebhook(w http.ResponseWriter, r *http.Request, webhookHandler WebhookHandler)
HandleWebhook takes and HTTP request and process it
func (BotDriver) RegisterWebhookHandlers ¶
func (d BotDriver) RegisterWebhookHandlers(httpRouter HttpRouter, pathPrefix string, webhookHandlers ...WebhookHandler)
RegisterWebhookHandlers adds handlers to a bot driver
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() WebhookInput
}
BotInputProvider provides an input from a specific bot interface (Telegram, FB Messenger, Viber, etc.)
type BotMessage ¶
type BotMessage interface {
BotMessageType() BotMessageType
}
BotMessage is an output message from bot to user
type BotMessageType ¶
type BotMessageType int
BotMessageType defines type of an output message from bot to user
const ( // BotMessageTypeUndefined unknown type BotMessageTypeUndefined BotMessageType = iota // BotMessageTypeCallbackAnswer sends callback answer BotMessageTypeCallbackAnswer // BotMessageTypeInlineResults sends inline results BotMessageTypeInlineResults // BotMessageTypeText sends text reply BotMessageTypeText // BotMessageTypeEditMessage edit previously sent message BotMessageTypeEditMessage // BotMessageTypeLeaveChat commands messenger to kick off bot from a chat BotMessageTypeLeaveChat // BotMessageTypeExportChatInviteLink sends invite link BotMessageTypeExportChatInviteLink )
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 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 WebhookSender) error
// SetBotUserFields sets fields of bot user record
SetBotUserFields(botUser botsfwmodels.BotUserData, sender WebhookSender, botID, botUserID, appUserID string) error
// SetBotChatFields sets fields of bot chat record
// TODO: document isAccessGranted parameter
SetBotChatFields(botChat botsfwmodels.ChatData, chat WebhookChat, botID, botUserID, appUserID string, isAccessGranted bool) error
}
type BotSettings ¶
type BotSettings struct {
Platform Platform
Env strongo.Environment
ID string
Profile string
Code string
Token string
PaymentToken string
PaymentTestToken string
VerifyToken string // Used by Facebook
Locale i18n.Locale
Router WebhooksRouter
GAToken string // TODO: Refactor tu support multiple or move out
}
BotSettings keeps parameters of a bot that are static and are not changed in runtime
func NewBotSettings ¶
func NewBotSettings(platform Platform, mode strongo.Environment, profile, code, id, token, gaToken string, locale i18n.Locale) BotSettings
NewBotSettings configures bot application
type BotState ¶
type BotState interface {
IsNewerThen(chatEntity botsfwmodels.ChatData) bool
}
BotState provides state of the bot (TODO: document how is used)
type CallbackAction ¶
type CallbackAction func(whc WebhookContext, callbackUrl *url.URL) (m MessageFromBot, err error)
CallbackAction defines a callback action bot can perform in response to a callback command
type Command ¶
type Command struct {
InputTypes []WebhookInputType // Instant match if != WebhookInputUnknown && == whc.InputTypes()
Icon string
Replies []Command
Code string
Title string
Titles map[string]string
ExactMatch string
Commands []string
Matcher CommandMatcher
Action CommandAction
CallbackAction CallbackAction
}
Command defines command metadata and action
func NewCallbackCommand ¶
func NewCallbackCommand(code string, action CallbackAction) Command
NewCallbackCommand create a definition of a callback command
func NewInlineQueryCommand ¶
func NewInlineQueryCommand(code string, 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 MessageFromBot, err error)
CommandAction defines an action bot can perform in response to a command
type CommandMatcher ¶
type CommandMatcher func(Command, WebhookContext) bool
CommandMatcher returns true if action is matched to user input
type EntryInput ¶
type EntryInput struct {
Entry WebhookEntry
Input WebhookInput
}
EntryInput provides information on parsed input from bot API request
func (*EntryInput) MarshalJSON ¶
func (j *EntryInput) MarshalJSON() ([]byte, error)
MarshalJSON marshal bytes to json - template
func (*EntryInput) MarshalJSONBuf ¶
func (j *EntryInput) MarshalJSONBuf(buf fflib.EncodingBuffer) error
MarshalJSONBuf marshal buff to json - template
func (*EntryInput) UnmarshalJSON ¶
func (j *EntryInput) UnmarshalJSON(input []byte) error
UnmarshalJSON umarshall json - template of ffjson
func (*EntryInput) UnmarshalJSONFFLexer ¶
func (j *EntryInput) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
UnmarshalJSONFFLexer fast json unmarshall - template ffjson
type EntryInputs ¶
type EntryInputs struct {
Entry WebhookEntry
Inputs []WebhookInput
}
EntryInputs provides information on parsed inputs from bot API request
func (*EntryInputs) MarshalJSON ¶
func (j *EntryInputs) MarshalJSON() ([]byte, error)
MarshalJSON marshal bytes to json - template
func (*EntryInputs) MarshalJSONBuf ¶
func (j *EntryInputs) MarshalJSONBuf(buf fflib.EncodingBuffer) error
MarshalJSONBuf marshal buff to json - template
func (*EntryInputs) UnmarshalJSON ¶
func (j *EntryInputs) UnmarshalJSON(input []byte) error
UnmarshalJSON umarshall json - template of ffjson
func (*EntryInputs) UnmarshalJSONFFLexer ¶
func (j *EntryInputs) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
UnmarshalJSONFFLexer fast json unmarshall - template ffjson
type ErrAuthFailed ¶
type ErrAuthFailed string
ErrAuthFailed raised if authentication failed
func (ErrAuthFailed) Error ¶
func (e ErrAuthFailed) Error() string
type GaContext ¶
type GaContext interface {
GaQueuer
// Flush() error
GaCommon() gamp.Common
GaEvent(category, action string) *gamp.Event
GaEventWithLabel(category, action, label string) *gamp.Event
}
GaContext provides context to Google Analytics
type HttpRouter ¶ added in v0.11.0
type HttpRouter interface {
Handle(method string, path string, handle http.HandlerFunc)
}
type InputMessage ¶
type InputMessage interface {
Text() string
}
InputMessage represents single input message
type Logger ¶ added in v0.11.0
type Logger interface {
Infof(c context.Context, format string, args ...interface{})
Errorf(c context.Context, format string, args ...interface{})
Debugf(c context.Context, format string, args ...interface{})
Warningf(c context.Context, format string, args ...interface{})
Criticalf(c context.Context, format string, args ...interface{})
}
type MessageFormat ¶
type MessageFormat int
MessageFormat specify formatting of a text message to BOT (e.g. Text, HTML, MarkDown)
const ( // MessageFormatText is for text messages MessageFormatText MessageFormat = iota // MessageFormatHTML is for HTML messages MessageFormatHTML // MessageFormatMarkdown is for markdown messages MessageFormatMarkdown )
type MessageFromBot ¶
type MessageFromBot struct {
ToChat ChatUID `json:",omitempty"`
TextMessageFromBot // This is a shortcut to MessageFromBot{}.BotMessage = TextMessageFromBot{text: "abc"}
BotMessage BotMessage `json:",omitempty"`
}
MessageFromBot keeps all the details of answer from bot to user
func (*MessageFromBot) MarshalJSON ¶
func (j *MessageFromBot) MarshalJSON() ([]byte, error)
MarshalJSON marshal bytes to json - template
func (*MessageFromBot) MarshalJSONBuf ¶
func (j *MessageFromBot) MarshalJSONBuf(buf fflib.EncodingBuffer) error
MarshalJSONBuf marshal buff to json - template
func (*MessageFromBot) UnmarshalJSON ¶
func (j *MessageFromBot) UnmarshalJSON(input []byte) error
UnmarshalJSON umarshall json - template of ffjson
func (*MessageFromBot) UnmarshalJSONFFLexer ¶
func (j *MessageFromBot) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
UnmarshalJSONFFLexer fast json unmarshall - template ffjson
type MessageUID ¶
type MessageUID interface {
UID() string
}
MessageUID is unique message ID as string
type MessengerResponse ¶
type MessengerResponse interface {
}
MessengerResponse represents response from a messenger
type OnMessageSentResponse ¶
type OnMessageSentResponse struct {
StatusCode int
TelegramMessage MessengerResponse // TODO: change to some interface
}
OnMessageSentResponse represents response on message sent event
type SettingsBy ¶
type SettingsBy 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
}
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(getRouter func(profile string) WebhooksRouter, bots ...BotSettings) (settingsBy SettingsBy)
NewBotSettingsBy create settings per different keys (ID, code, API token, locale)
type SettingsProvider ¶
type SettingsProvider func(c context.Context) SettingsBy
SettingsProvider returns settings per different keys (ID, code, API token, locale)
type TextMessageFromBot ¶
type TextMessageFromBot struct {
Text string `json:",omitempty"`
Format MessageFormat `json:",omitempty"`
DisableWebPagePreview bool `json:",omitempty"`
DisableNotification bool `json:",omitempty"`
Keyboard botsgocore.Keyboard `json:",omitempty"`
IsEdit bool `json:",omitempty"`
EditMessageUID MessageUID `json:",omitempty"`
}
TextMessageFromBot is a text output message from bot to user
func (TextMessageFromBot) BotMessageType ¶
func (m TextMessageFromBot) BotMessageType() BotMessageType
BotMessageType returns if we want to send a new message or edit existing one
func (*TextMessageFromBot) MarshalJSON ¶
func (j *TextMessageFromBot) MarshalJSON() ([]byte, error)
MarshalJSON marshal bytes to json - template
func (*TextMessageFromBot) MarshalJSONBuf ¶
func (j *TextMessageFromBot) MarshalJSONBuf(buf fflib.EncodingBuffer) error
MarshalJSONBuf marshal buff to json - template
func (*TextMessageFromBot) UnmarshalJSON ¶
func (j *TextMessageFromBot) UnmarshalJSON(input []byte) error
UnmarshalJSON umarshall json - template of ffjson
func (*TextMessageFromBot) UnmarshalJSONFFLexer ¶
func (j *TextMessageFromBot) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
UnmarshalJSONFFLexer fast json unmarshall - template ffjson
type TranslatorProvider ¶
type TranslatorProvider func(c context.Context) i18n.Translator
TranslatorProvider translates texts
type TypeCommands ¶
type TypeCommands struct {
// contains filtered or unexported fields
}
TypeCommands container for commands
type WebhookActor ¶
type WebhookActor interface {
Platform() string // TODO: Consider removing this?
GetID() interface{}
IsBotUser() bool
GetFirstName() string
GetLastName() string
GetUserName() string
GetLanguage() string
}
WebhookActor represents sender
type WebhookAttachment ¶
type WebhookAttachment interface {
Type() string // Enum(image, video, audio) for Facebook
PayloadUrl() string // 'payload.url' for Facebook
}
WebhookAttachment represents attachment to a message
type WebhookAudioMessage ¶
type WebhookAudioMessage interface {
WebhookMessage
}
WebhookAudioMessage represents single audio message
type WebhookCallbackQuery ¶
type WebhookCallbackQuery interface {
GetID() string
GetInlineMessageID() string // Telegram only?
GetFrom() WebhookSender
GetMessage() WebhookMessage
GetData() string
Chat() WebhookChat
}
WebhookCallbackQuery represents a single callback query message
type WebhookChat ¶
WebhookChat represents chat of a messenger
type WebhookChosenInlineResult ¶
type WebhookChosenInlineResult interface {
GetResultID() string
GetInlineMessageID() string // Telegram only?
GetFrom() WebhookSender
GetQuery() string
}
WebhookChosenInlineResult represents a single report message on chosen inline result
type WebhookContactMessage ¶
type WebhookContactMessage interface {
PhoneNumber() string
FirstName() string
LastName() string
UserID() interface{}
}
WebhookContactMessage represents single contact message
type WebhookContext ¶
type WebhookContext interface {
GA() GaContext
//dal.TransactionCoordinator
Environment() strongo.Environment
BotInputProvider
BotPlatform() BotPlatform
Request() *http.Request
// Context return context
Context() context.Context
// SetContext sets context
SetContext(c context.Context)
ExecutionContext() strongo.ExecutionContext
BotAppContext() BotAppContext
BotContext() BotContext
MustBotChatID() string
GetBotCode() string
GetBotToken() string
GetBotSettings() BotSettings
ChatData() botsfwmodels.ChatData // Formerly ChatEntity()
// IsInGroup indicates if message was received in a group chat
IsInGroup() bool
// CommandText TODO: needs to be documented
CommandText(title, icon string) string
// SetLocale sets locale for current session
SetLocale(code5 string) error
NewMessage(text string) MessageFromBot
NewMessageByCode(messageCode string, a ...interface{}) MessageFromBot
NewEditMessage(text string, format MessageFormat) (MessageFromBot, error)
UpdateLastProcessed(chatEntity botsfwmodels.ChatData) error
AppUserID() string
// AppUserInt64ID TODO: Deprecate: use AppUserID() instead
AppUserInt64ID() int64
AppUserData() (botsfwmodels.AppUserData, error)
BotState
Store() botsfwdal.DataAccess
// RecordsFieldsSetter returns a helper that sets fields of bot related records
RecordsFieldsSetter() BotRecordsFieldsSetter
WebhookInput // TODO: Should be removed!!!
i18n.SingleLocaleTranslator
Responder() WebhookResponder
}
WebhookContext provides context for current request from user to bot
type WebhookContextBase ¶
type WebhookContextBase struct {
// BotUserID is a user ID in bot's platform.
// Telegram has it is an integer, but we keep it as a string for consistency & simplicity.
BotUserID string
// 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( r *http.Request, botAppContext BotAppContext, botPlatform BotPlatform, botContext BotContext, webhookInput WebhookInput, botCoreStores botsfwdal.DataAccess, recordsFieldsSetter BotRecordsFieldsSetter, gaMeasurement GaQueuer, isInGroup func() bool, getLocaleAndChatID func(c context.Context) (locale, chatID string, err error), ) *WebhookContextBase
NewWebhookContextBase creates base bot context
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) AppUserInt64ID ¶ added in v0.16.12
func (whcb *WebhookContextBase) AppUserInt64ID() (appUserID int64)
AppUserInt64ID: TODO: Deprecate: use AppUserID() instead
func (*WebhookContextBase) BotAppContext ¶
func (whcb *WebhookContextBase) BotAppContext() BotAppContext
BotAppContext returns bot app context
func (*WebhookContextBase) BotChatID ¶
func (whcb *WebhookContextBase) BotChatID() (botChatID string, err error)
BotChatID returns bot chat 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() WebhookChat
Chat returns webhook chat
func (*WebhookContextBase) ChatData ¶ added in v0.16.2
func (whcb *WebhookContextBase) ChatData() botsfwmodels.ChatData
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) Environment ¶
func (whcb *WebhookContextBase) Environment() strongo.Environment
Environment defines current environment (PROD, DEV, LOCAL, etc)
func (*WebhookContextBase) ExecutionContext ¶
func (whcb *WebhookContextBase) ExecutionContext() strongo.ExecutionContext
ExecutionContext returns an execution context for strongo app
func (*WebhookContextBase) GA ¶
func (whcb *WebhookContextBase) GA() GaContext
GA provides interface to Google Analytics
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) GetBotUserID ¶ added in v0.16.2
func (whcb *WebhookContextBase) GetBotUserID() string
func (*WebhookContextBase) GetRecipient ¶
func (whcb *WebhookContextBase) GetRecipient() WebhookRecipient
GetRecipient returns receiver of the message
func (*WebhookContextBase) GetSender ¶
func (whcb *WebhookContextBase) GetSender() WebhookSender
GetSender returns sender of the message
func (*WebhookContextBase) GetTime ¶
func (whcb *WebhookContextBase) GetTime() time.Time
GetTime returns time of the message
func (*WebhookContextBase) HasChatData ¶ added in v0.16.2
func (whcb *WebhookContextBase) HasChatData() bool
HasChatData return true if messages is within chat
func (*WebhookContextBase) Input ¶
func (whcb *WebhookContextBase) Input() WebhookInput
Input returns webhook input
func (*WebhookContextBase) InputType ¶
func (whcb *WebhookContextBase) InputType() WebhookInputType
InputType returns input type
func (*WebhookContextBase) IsInGroup ¶
func (whcb *WebhookContextBase) IsInGroup() bool
IsInGroup signals if the bot request is send within group chat
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 received message
func (*WebhookContextBase) MustBotChatID ¶
func (whcb *WebhookContextBase) MustBotChatID() (chatID string)
MustBotChatID returns bot chat ID and panic if missing it
func (*WebhookContextBase) NewMessage ¶
func (whcb *WebhookContextBase) NewMessage(text string) (m MessageFromBot)
NewMessage creates new message from bot
func (*WebhookContextBase) NewMessageByCode ¶
func (whcb *WebhookContextBase) NewMessageByCode(messageCode string, a ...interface{}) (m 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) SetChatID ¶
func (whcb *WebhookContextBase) SetChatID(v string)
SetChatID sets chat ID
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) Store ¶ added in v0.16.0
func (whcb *WebhookContextBase) Store() botsfwdal.DataAccess
func (WebhookContextBase) TranslateNoWarning ¶
TranslateNoWarning translates string without warnings
type WebhookConversationStarted ¶
type WebhookConversationStarted interface {
ConversationStartedMessage() interface{}
}
WebhookConversationStarted represents a single message about new conversation
type WebhookDelivery ¶
type WebhookDelivery interface {
Payload() string
}
WebhookDelivery represents a single delivery report message
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 WebhookEntry ¶
WebhookEntry represents a single message from a messenger user
type WebhookHandler ¶
type WebhookHandler interface {
RegisterHttpHandlers(driver WebhookDriver, botHost BotHost, router HttpRouter, pathPrefix string)
HandleWebhookRequest(w http.ResponseWriter, r *http.Request)
GetBotContextAndInputs(c context.Context, r *http.Request) (botContext *BotContext, entriesWithInputs []EntryInputs, err error)
CreateBotCoreStores(appContext BotAppContext, r *http.Request) botsfwdal.DataAccess
CreateWebhookContext(appContext BotAppContext, r *http.Request, botContext BotContext, webhookInput WebhookInput, botCoreStores botsfwdal.DataAccess, gaMeasurement GaQueuer) WebhookContext //TODO: Can we get rid of http.Request? Needed for botHost.GetHTTPClient()
GetResponder(w http.ResponseWriter, whc WebhookContext) WebhookResponder
HandleUnmatched(whc WebhookContext) (m MessageFromBot)
}
WebhookHandler handles requests from a specific bot API 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
DataAccess botsfwdal.DataAccess
}
WebhookHandlerBase provides base implementation for a bot handler
func (*WebhookHandlerBase) MarshalJSON ¶ added in v0.16.0
func (j *WebhookHandlerBase) MarshalJSON() ([]byte, error)
MarshalJSON marshal bytes to json - template
func (*WebhookHandlerBase) MarshalJSONBuf ¶ added in v0.16.0
func (j *WebhookHandlerBase) MarshalJSONBuf(buf fflib.EncodingBuffer) error
MarshalJSONBuf marshal buff to json - template
func (*WebhookHandlerBase) Register ¶ added in v0.16.0
func (bh *WebhookHandlerBase) Register(d WebhookDriver, h BotHost)
Register driver
func (*WebhookHandlerBase) UnmarshalJSON ¶ added in v0.16.0
func (j *WebhookHandlerBase) UnmarshalJSON(input []byte) error
UnmarshalJSON umarshall json - template of ffjson
func (*WebhookHandlerBase) UnmarshalJSONFFLexer ¶ added in v0.16.0
func (j *WebhookHandlerBase) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error
UnmarshalJSONFFLexer fast json unmarshall - template ffjson
type WebhookInlineQuery ¶
type WebhookInlineQuery interface {
GetID() interface{}
GetInlineQueryID() string
GetFrom() WebhookSender
GetQuery() string
GetOffset() string
}
WebhookInlineQuery represents a single inline message
type WebhookInlineQueryContext ¶
type WebhookInlineQueryContext interface {
}
WebhookInlineQueryContext provides context for inline query (TODO: check & document)
type WebhookInput ¶
type WebhookInput interface {
GetSender() WebhookSender
GetRecipient() WebhookRecipient
GetTime() time.Time
InputType() WebhookInputType
BotChatID() (string, error)
Chat() WebhookChat
LogRequest()
}
WebhookInput represent a single message '/entry/messaging' for Facebook Messenger
type WebhookInputType ¶
type WebhookInputType int
WebhookInputType is enum of input type
const ( // WebhookInputUnknown is unknown input type WebhookInputUnknown WebhookInputType = iota // WebhookInputNotImplemented is not implemented input type WebhookInputNotImplemented // WebhookInputText is text input type WebhookInputText // Facebook, Telegram, Viber // WebhookInputVoice is voice input type WebhookInputVoice // WebhookInputPhoto is photo input type WebhookInputPhoto // WebhookInputAudio is audio input type WebhookInputAudio // WebhookInputContact is contact input type WebhookInputContact // Facebook, Telegram, Viber // WebhookInputPostback is unknown input type WebhookInputPostback // WebhookInputDelivery is postback input type WebhookInputDelivery // WebhookInputAttachment is delivery report input type WebhookInputAttachment // WebhookInputInlineQuery is attachment input type WebhookInputInlineQuery // Telegram // WebhookInputCallbackQuery is inline input type WebhookInputCallbackQuery // WebhookInputReferral is callback input type WebhookInputReferral // FBM // WebhookInputChosenInlineResult is chosen inline result input type WebhookInputChosenInlineResult // Telegram // WebhookInputSubscribed is subscribed input type WebhookInputSubscribed // Viber // WebhookInputUnsubscribed is unsubscribed input type WebhookInputUnsubscribed // Viber // WebhookInputConversationStarted is converstation started input type WebhookInputConversationStarted // Viber // WebhookInputNewChatMembers is new chat memebers input type WebhookInputNewChatMembers // Telegram groups // WebhookInputLeftChatMembers is left chat members input type WebhookInputLeftChatMembers // WebhookInputSticker is sticker input type WebhookInputSticker // Telegram )
type WebhookLeftChatMembersMessage ¶
type WebhookLeftChatMembersMessage interface {
BotChatID() (string, error)
LeftChatMembers() []WebhookActor
}
WebhookLeftChatMembersMessage represents single message about a member leaving a chat
type WebhookMessage ¶
type WebhookMessage interface {
IntID() int64
StringID() string
Chat() WebhookChat
}
WebhookMessage represents single message
type WebhookNewChatMembersMessage ¶
type WebhookNewChatMembersMessage interface {
BotChatID() (string, error)
NewChatMembers() []WebhookActor
}
WebhookNewChatMembersMessage represents single message about a new member of a chat
type WebhookNewContext ¶
type WebhookNewContext struct {
BotContext
WebhookInput
}
WebhookNewContext TODO: needs to be checked & described
type WebhookPhotoMessage ¶
type WebhookPhotoMessage interface {
WebhookMessage
}
WebhookPhotoMessage represents single photo message
type WebhookPostback ¶
type WebhookPostback interface {
PostbackMessage() interface{}
Payload() string
}
WebhookPostback represents single postback message
type WebhookRecipient ¶
type WebhookRecipient interface {
WebhookActor
}
WebhookRecipient represents receiver
type WebhookReferralMessage ¶
WebhookReferralMessage represents single referral message https://developers.facebook.com/docs/messenger-platform/webhook-reference/referral
type WebhookResponder ¶
type WebhookResponder interface {
SendMessage(c context.Context, m MessageFromBot, channel BotAPISendMessageChannel) (OnMessageSentResponse, error)
}
WebhookResponder is an API provider to send messages through a messenger
type WebhookSender ¶
type WebhookSender interface {
GetAvatar() string // Extension to support avatar (Viber)
WebhookActor
}
WebhookSender represents sender with avatar
type WebhookStickerMessage ¶
type WebhookStickerMessage interface {
WebhookMessage
}
WebhookStickerMessage represents single sticker message
type WebhookSubscribed ¶
type WebhookSubscribed interface {
SubscribedMessage() interface{}
}
WebhookSubscribed represents a subscription message
type WebhookTextMessage ¶
type WebhookTextMessage interface {
WebhookMessage
Text() string
IsEdited() bool
}
WebhookTextMessage represents single text message
type WebhookUnsubscribed ¶
type WebhookUnsubscribed interface {
UnsubscribedMessage() interface{}
}
WebhookUnsubscribed represents a message when user unsubscribe
type WebhookUser ¶
type WebhookUser interface {
WebhookSender
// GetCountry is an extension to support language & country (Viber)
GetCountry() string
}
WebhookUser represents sender with country
type WebhookVoiceMessage ¶
type WebhookVoiceMessage interface {
WebhookMessage
}
WebhookVoiceMessage represents single voice message
type WebhooksRouter ¶
type WebhooksRouter struct {
// contains filtered or unexported fields
}
WebhooksRouter maps routes to commands
func NewWebhookRouter ¶
func NewWebhookRouter(commandsByType map[WebhookInputType][]Command, errorFooterText func() string) WebhooksRouter
NewWebhookRouter creates new router
func (*WebhooksRouter) AddCommands ¶
func (whr *WebhooksRouter) AddCommands(commandsType WebhookInputType, commands []Command)
AddCommands add commands to a router
func (*WebhooksRouter) CommandsCount ¶
func (whr *WebhooksRouter) CommandsCount() int
func (*WebhooksRouter) Dispatch ¶
func (whr *WebhooksRouter) Dispatch(webhookHandler WebhookHandler, responder WebhookResponder, whc WebhookContext)
Dispatch query to commands
func (*WebhooksRouter) DispatchInlineQuery ¶
func (whr *WebhooksRouter) DispatchInlineQuery(responder WebhookResponder)
DispatchInlineQuery dispatches inlines query
func (*WebhooksRouter) RegisterCommands ¶
func (whr *WebhooksRouter) RegisterCommands(commands []Command)
RegisterCommands is registering commands with router