botsfw

package
v0.16.9 Latest Latest
Warning

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

Go to latest
Published: May 19, 2023 License: Apache-2.0 Imports: 19 Imported by: 7

Documentation

Index

Constants

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

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

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

DefaultTitle key

View Source
const NoMessageToSend = "<NO_MESSAGE_TO_SEND>"

NoMessageToSend returned explicitly if we don't want to reply to user intput

View Source
const ShortTitle = "short_title"

ShortTitle key

Variables

View Source
var (
	// ErrEntityNotFound is returned if entity not found in storage
	ErrEntityNotFound = errors.New("bots-framework: no such entity")
)
View Source
var ErrNoCommandsMatched = errors.New("no commands matched")
View Source
var ErrNotImplemented = errors.New("not implemented")

ErrNotImplemented if some feature is not implemented yet

View Source
var ErrorIcon = "🚨"

ErrorIcon is used to report errors to user

View Source
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

View Source
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

func CommandTextNoTrans(title, icon string) string

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

func SetLogger added in v0.16.1

func SetLogger(l Logger)

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 ChatIntID

type ChatIntID int64

ChatIntID returns chat ID as unique integer

func (ChatIntID) ChatUID

func (chatUID ChatIntID) ChatUID() string

ChatUID returns chat ID as unique string

type ChatUID

type ChatUID interface {
	ChatUID() string
}

ChatUID returns chat ID as unique string

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) String

func (c Command) String() string

func (Command) TitleByKey

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

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

type CommandAction

type CommandAction func(whc WebhookContext) (m 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 GaQueuer

type GaQueuer interface {
	Queue(message gamp.Message) error
}

GaQueuer queues messages for sending 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 Platform added in v0.9.12

type Platform string
const (
	PlatformTelegram          Platform = "telegram"
	PlatformViber             Platform = "viber"
	PlatformFacebookMessenger Platform = "fbm"
	PlatformWhatsApp          Platform = "whatsapp"
)

type SettingsBy

type SettingsBy struct {
	ByCode     map[string]BotSettings
	ByAPIToken map[string]BotSettings
	ByLocale   map[string][]BotSettings
	ByID       map[string]BotSettings
	HasRouter  bool
}

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

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

type WebhookChat interface {
	GetID() string
	GetType() string
	IsGroupChat() bool
}

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

	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) 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) Translate

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

Translate translates string

func (WebhookContextBase) TranslateNoWarning

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

TranslateNoWarning translates string without warnings

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

type WebhookEntry interface {
	GetID() interface{}
	GetTime() time.Time
}

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

type WebhookReferralMessage interface {
	Type() string
	Source() string
	RefData() string
}

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

Jump to

Keyboard shortcuts

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