From de6ee9462a15a762bc00f1a368f9c85fd59331ed Mon Sep 17 00:00:00 2001 From: DmitryZagorulko Date: Wed, 20 Jun 2018 16:14:51 +0300 Subject: [PATCH 1/3] sending text stub --- migrations/1528538599_app.down.sql | 2 +- repository.go | 4 +- telegram.go | 210 ++++++++++++++++------------- translate/translate.en.yml | 12 +- translate/translate.ru.yml | 10 ++ 5 files changed, 144 insertions(+), 94 deletions(-) diff --git a/migrations/1528538599_app.down.sql b/migrations/1528538599_app.down.sql index c8e61f9..28e2e47 100644 --- a/migrations/1528538599_app.down.sql +++ b/migrations/1528538599_app.down.sql @@ -1 +1 @@ -alter table mg_user rename to user; \ No newline at end of file +alter table mg_user rename to users; diff --git a/repository.go b/repository.go index 99727e6..8cb1dae 100644 --- a/repository.go +++ b/repository.go @@ -69,9 +69,9 @@ func (c Connection) getBotsByClientID() Bots { return b } -func getBotByChannelAndCID(connectionID int, ch uint64) *Bot { +func getBot(cid int, ch uint64) *Bot { var bot Bot - orm.DB.First(&bot, "connection_id = ? AND channel = ?", connectionID, ch) + orm.DB.First(&bot, "connection_id = ? AND channel = ?", cid, ch) return &bot } diff --git a/telegram.go b/telegram.go index 95f9237..dfec7ea 100644 --- a/telegram.go +++ b/telegram.go @@ -15,6 +15,7 @@ import ( "github.com/aws/aws-sdk-go/service/s3/s3manager" "github.com/getsentry/raven-go" "github.com/go-telegram-bot-api/telegram-bot-api" + "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/retailcrm/mg-transport-api-client-go/v1" ) @@ -76,112 +77,118 @@ func telegramWebhookHandler(w http.ResponseWriter, r *http.Request, token string var client = v1.New(c.MGURL, c.MGToken) if update.Message != nil { - if update.Message.Text != "" { - nickname := update.Message.From.UserName - user := getUserByExternalID(update.Message.From.ID) + if update.Message.Text == "" { + setLocale(update.Message.From.LanguageCode) + update.Message.Text = localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: getMessageID(update.Message)}) + } - if update.Message.From.UserName == "" { - nickname = update.Message.From.FirstName - } + nickname := update.Message.From.UserName + user := getUserByExternalID(update.Message.From.ID) - if user.Expired(config.UpdateInterval) || user.ID == 0 { - fileID, fileURL, err := GetFileIDAndURL(b.Token, update.Message.From.ID) - if err != nil { - raven.CaptureErrorAndWait(err, nil) - logger.Error(err) - w.WriteHeader(http.StatusInternalServerError) - return - } + if update.Message.From.UserName == "" { + nickname = update.Message.From.FirstName + } - if fileID != user.UserPhotoID && fileURL != "" { - picURL, err := UploadUserAvatar(fileURL) - if err != nil { - raven.CaptureErrorAndWait(err, nil) - logger.Error(err) - w.WriteHeader(http.StatusInternalServerError) - return - } - - user.UserPhotoID = fileID - user.UserPhotoURL = picURL - } - - if user.ExternalID == 0 { - user.ExternalID = update.Message.From.ID - } - - err = user.save() - if err != nil { - raven.CaptureErrorAndWait(err, nil) - logger.Error(err) - w.WriteHeader(http.StatusInternalServerError) - return - } - } - - if config.Debug { - logger.Debugf("telegramWebhookHandler user %v", user) - } - - snd := v1.SendData{ - Message: v1.SendMessage{ - Message: v1.Message{ - ExternalID: strconv.Itoa(update.Message.MessageID), - Type: "text", - Text: update.Message.Text, - }, - SentAt: time.Now(), - }, - User: v1.User{ - ExternalID: strconv.Itoa(update.Message.From.ID), - Nickname: nickname, - Firstname: update.Message.From.FirstName, - Avatar: user.UserPhotoURL, - Lastname: update.Message.From.LastName, - Language: update.Message.From.LanguageCode, - }, - Channel: b.Channel, - ExternalChatID: strconv.FormatInt(update.Message.Chat.ID, 10), - } - - data, st, err := client.Messages(snd) + if user.Expired(config.UpdateInterval) || user.ID == 0 { + fileID, fileURL, err := GetFileIDAndURL(b.Token, update.Message.From.ID) if err != nil { raven.CaptureErrorAndWait(err, nil) - logger.Error(token, err.Error(), st, data) + logger.Error(err) w.WriteHeader(http.StatusInternalServerError) return } - if config.Debug { - logger.Debugf("telegramWebhookHandler Type: SendMessage, Bot: %v, Message: %v, Response: %v", b.ID, snd, data) + if fileID != user.UserPhotoID && fileURL != "" { + picURL, err := UploadUserAvatar(fileURL) + if err != nil { + raven.CaptureErrorAndWait(err, nil) + logger.Error(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + user.UserPhotoID = fileID + user.UserPhotoURL = picURL } + + if user.ExternalID == 0 { + user.ExternalID = update.Message.From.ID + } + + err = user.save() + if err != nil { + raven.CaptureErrorAndWait(err, nil) + logger.Error(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + } + + if config.Debug { + logger.Debugf("telegramWebhookHandler user %v", user) + } + + snd := v1.SendData{ + Message: v1.SendMessage{ + Message: v1.Message{ + ExternalID: strconv.Itoa(update.Message.MessageID), + Type: "text", + Text: update.Message.Text, + }, + SentAt: time.Now(), + }, + User: v1.User{ + ExternalID: strconv.Itoa(update.Message.From.ID), + Nickname: nickname, + Firstname: update.Message.From.FirstName, + Avatar: user.UserPhotoURL, + Lastname: update.Message.From.LastName, + Language: update.Message.From.LanguageCode, + }, + Channel: b.Channel, + ExternalChatID: strconv.FormatInt(update.Message.Chat.ID, 10), + } + + data, st, err := client.Messages(snd) + if err != nil { + raven.CaptureErrorAndWait(err, nil) + logger.Error(token, err.Error(), st, data) + w.WriteHeader(http.StatusInternalServerError) + return + } + + if config.Debug { + logger.Debugf("telegramWebhookHandler Type: SendMessage, Bot: %v, Message: %v, Response: %v", b.ID, snd, data) } } if update.EditedMessage != nil { - if update.EditedMessage.Text != "" { - snd := v1.UpdateData{ - Message: v1.UpdateMessage{ - Message: v1.Message{ - ExternalID: strconv.Itoa(update.EditedMessage.MessageID), - Type: "text", - Text: update.EditedMessage.Text, - }, + if update.EditedMessage.Text == "" { + setLocale(update.EditedMessage.From.LanguageCode) + update.EditedMessage.Text = localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: getMessageID(update.Message)}) + } + + snd := v1.UpdateData{ + Message: v1.UpdateMessage{ + Message: v1.Message{ + ExternalID: strconv.Itoa(update.EditedMessage.MessageID), + Type: "text", + Text: update.EditedMessage.Text, }, - Channel: b.Channel, - } + }, + Channel: b.Channel, + } - data, st, err := client.UpdateMessages(snd) - if err != nil { - raven.CaptureErrorAndWait(err, nil) - logger.Error(token, err.Error(), st, data) - w.WriteHeader(http.StatusInternalServerError) - return - } + data, st, err := client.UpdateMessages(snd) + if err != nil { + raven.CaptureErrorAndWait(err, nil) + logger.Error(token, err.Error(), st, data) + w.WriteHeader(http.StatusInternalServerError) + return + } - if config.Debug { - logger.Debugf("telegramWebhookHandler Type: UpdateMessage, Bot: %v, Message: %v, Response: %v", b.ID, snd, data) - } + if config.Debug { + logger.Debugf("telegramWebhookHandler Type: UpdateMessage, Bot: %v, Message: %v, Response: %v", b.ID, snd, data) } } @@ -229,7 +236,7 @@ func mgWebhookHandler(w http.ResponseWriter, r *http.Request) { uid, _ := strconv.Atoi(msg.Data.ExternalMessageID) cid, _ := strconv.ParseInt(msg.Data.ExternalChatID, 10, 64) - b := getBotByChannelAndCID(c.ID, msg.Data.ChannelID) + b := getBot(c.ID, msg.Data.ChannelID) if b.ID == 0 || !b.Active { logger.Error(msg.Data.ChannelID, "mgWebhookHandler: missing or deactivated") w.WriteHeader(http.StatusBadRequest) @@ -377,3 +384,26 @@ func UploadUserAvatar(url string) (picURLs3 string, err error) { return } + +func getMessageID(data *tgbotapi.Message) string { + switch { + case data.Sticker != nil: + return "sticker" + case data.Audio != nil: + return "audio" + case data.Contact != nil: + return "contact" + case data.Document != nil: + return "document" + case data.Location != nil: + return "location" + case data.Video != nil: + return "video" + case data.Voice != nil: + return "voice" + case data.Photo != nil: + return "photo" + default: + return "undefined" + } +} diff --git a/translate/translate.en.yml b/translate/translate.en.yml index a1d1b5a..36cc424 100644 --- a/translate/translate.en.yml +++ b/translate/translate.en.yml @@ -27,4 +27,14 @@ error_creating_webhook: Error while creating webhook error_adding_bot: Error while adding bot error_save: An error occurred while saving, contact technical support missing_credentials: "Necessary credentials: {{.Credentials}}" -error_activity_mg: Check the activity with MessageGateway in CRM settings \ No newline at end of file +error_activity_mg: Check the activity with MessageGateway in CRM settings + +sticker: "[sticker]" +audio: "[audio file]" +contact: "[contact]" +document: "[document]" +location: "[location]" +video: "[video]" +voice: "[voice message]" +photo: "[image]" +undefined: "[undefined message format]" diff --git a/translate/translate.ru.yml b/translate/translate.ru.yml index 4aa4b70..e69c97f 100644 --- a/translate/translate.ru.yml +++ b/translate/translate.ru.yml @@ -28,3 +28,13 @@ error_adding_bot: Ошибка при добавлении бота error_save: Ошибка при сохранении, обратитесь в службу технической поддержки missing_credentials: "Необходимые методы: {{.Credentials}}" error_activity_mg: Проверьте активность интеграции с MessageGateway в настройках CRM + +sticker: "[стикер]" +audio: "[аудио файл]" +contact: "[контакт]" +document: "[документ]" +location: "[местонахождение]" +video: "[видео]" +voice: "[голосовое сообщение]" +photo: "[изображение]" +other: "[неопределенный формат сообщения]" From 76d9ab6e8f199a982dbcb5ebc936a9a3d2592d3c Mon Sep 17 00:00:00 2001 From: DmitryZagorulko Date: Thu, 28 Jun 2018 11:52:57 +0300 Subject: [PATCH 2/3] improve translations --- translate/translate.en.yml | 56 +++++++++++++++++++------------------- translate/translate.ru.yml | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/translate/translate.en.yml b/translate/translate.en.yml index 36cc424..7dc6013 100644 --- a/translate/translate.en.yml +++ b/translate/translate.en.yml @@ -1,33 +1,33 @@ button_save: Save -tab_settings: Connection settings +tab_settings: CRM settings tab_bots: Bots -table_name: Bot name -table_token: Bot token -table_activity: Activity -api_key: API Key -add_bot: Add bot -title: Telegram transport for retailCRM -successful: Data successfully updated +table_name: Name +table_token: Token +table_activity: Activity mark +api_key: API key +add_bot: Add a bot +title: Module of connecting Telegram to retailCRM +successful: Data was updated successfully -no_bot_token: Enter the bot token -wrong_data: Incorrect data +no_bot_token: Enter a token +wrong_data: Wrong data set_method: Set POST method -bot_already_created: Bot already created -not_found_account: The account could not be found, contact technical support -error_activating_channel: Error while activating the channel -error_deactivating_channel: Error while deactivating the channel -incorrect_url_key: Enter the correct CRM url or apiKey -error_creating_integration: Error while creating integration -error_creating_connection: Error while creating connection -connection_already_created: Connection already created -missing_url_key: Missing crm url or apiKey -incorrect_url: Enter the correct CRM url -incorrect_token: Set correct bot token -error_creating_webhook: Error while creating webhook -error_adding_bot: Error while adding bot -error_save: An error occurred while saving, contact technical support -missing_credentials: "Necessary credentials: {{.Credentials}}" -error_activity_mg: Check the activity with MessageGateway in CRM settings +bot_already_created: Bot is already created +not_found_account: Account is not found, contact technical support +error_activating_channel: Error when activating a channel +error_deactivating_channel: Error when deactivating a channel +incorrect_url_key: Enter the correct URL or API key +error_creating_integration: Error when integrating +error_creating_connection: Error when establishing a connection +connection_already_created: Connection is already established +missing_url_key: URL and API key are missing +incorrect_url: Enter the correct URL of CRM +incorrect_token: Create the correct token +error_creating_webhook: Error when creating a webhook +error_adding_bot: Error when adding a bot +error_save: Error while saving, contact technical support +missing_credentials: "Required methods: {{.Credentials}}" +error_activity_mg: Check if the integration with MessageGateway is enabled in CRM settings sticker: "[sticker]" audio: "[audio file]" @@ -36,5 +36,5 @@ document: "[document]" location: "[location]" video: "[video]" voice: "[voice message]" -photo: "[image]" -undefined: "[undefined message format]" +photo: "[photo]" +undefined: "[undefined format of a message]" diff --git a/translate/translate.ru.yml b/translate/translate.ru.yml index e69c97f..7697778 100644 --- a/translate/translate.ru.yml +++ b/translate/translate.ru.yml @@ -37,4 +37,4 @@ location: "[местонахождение]" video: "[видео]" voice: "[голосовое сообщение]" photo: "[изображение]" -other: "[неопределенный формат сообщения]" +undefined: "[неопределенный формат сообщения]" From f60e4795b366b1ed7550625b71f02471d22a24b7 Mon Sep 17 00:00:00 2001 From: DmitryZagorulko Date: Thu, 28 Jun 2018 12:17:19 +0300 Subject: [PATCH 3/3] replace activation/deactivation to delete --- migrations/1530177124_app.down.sql | 1 + migrations/1530177124_app.up.sql | 1 + models.go | 1 - repository.go | 4 +-- routing.go | 55 +++++++++--------------------- routing_test.go | 6 ++-- static/script.js | 20 +++++------ static/style.css | 2 +- telegram.go | 4 +-- templates/form.html | 8 ++--- translate/translate.en.yml | 2 +- translate/translate.ru.yml | 2 +- 12 files changed, 41 insertions(+), 65 deletions(-) create mode 100644 migrations/1530177124_app.down.sql create mode 100644 migrations/1530177124_app.up.sql diff --git a/migrations/1530177124_app.down.sql b/migrations/1530177124_app.down.sql new file mode 100644 index 0000000..013d097 --- /dev/null +++ b/migrations/1530177124_app.down.sql @@ -0,0 +1 @@ +alter table bot add column active boolean; \ No newline at end of file diff --git a/migrations/1530177124_app.up.sql b/migrations/1530177124_app.up.sql new file mode 100644 index 0000000..9ba8c8c --- /dev/null +++ b/migrations/1530177124_app.up.sql @@ -0,0 +1 @@ +alter table bot drop column active; \ No newline at end of file diff --git a/models.go b/models.go index d0845a1..90497be 100644 --- a/models.go +++ b/models.go @@ -25,7 +25,6 @@ type Bot struct { Name string `gorm:"name type:varchar(40)" json:"name,omitempty"` CreatedAt time.Time UpdatedAt time.Time - Active bool `json:"active,omitempty"` } // User model diff --git a/repository.go b/repository.go index 8cb1dae..1c62eed 100644 --- a/repository.go +++ b/repository.go @@ -48,8 +48,8 @@ func getBotByToken(token string) (*Bot, error) { return &bot, nil } -func (b *Bot) setBotActivity() error { - return orm.DB.Model(b).Where("token = ?", b.Token).Update("Active", !b.Active).Error +func (b *Bot) deleteBot() error { + return orm.DB.Delete(b, "token = ?", b.Token).Error } func getBotChannelByToken(token string) uint64 { diff --git a/routing.go b/routing.go index 6bf01e1..6df7272 100644 --- a/routing.go +++ b/routing.go @@ -61,7 +61,7 @@ func setWrapperRoutes() { http.HandleFunc("/create/", createHandler) http.HandleFunc("/actions/activity", activityHandler) http.HandleFunc("/add-bot/", addBotHandler) - http.HandleFunc("/activity-bot/", activityBotHandler) + http.HandleFunc("/delete-bot/", deleteBotHandler) } func renderTemplate(w http.ResponseWriter, tmpl string, c interface{}) { @@ -200,7 +200,6 @@ func addBotHandler(w http.ResponseWriter, r *http.Request) { } b.Channel = data.ChannelID - b.Active = true err = c.createBot(b) if err != nil { @@ -222,7 +221,7 @@ func addBotHandler(w http.ResponseWriter, r *http.Request) { w.Write(jsonString) } -func activityBotHandler(w http.ResponseWriter, r *http.Request) { +func deleteBotHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() setLocale(r.Header.Get("Accept-Language")) body, err := ioutil.ReadAll(r.Body) @@ -250,36 +249,16 @@ func activityBotHandler(w http.ResponseWriter, r *http.Request) { return } - ch := v1.Channel{ - ID: getBotChannelByToken(b.Token), - Type: "telegram", - Events: []string{ - "message_sent", - "message_updated", - "message_deleted", - "message_read", - }, - } - var client = v1.New(c.MGURL, c.MGToken) - if b.Active { - data, status, err := client.DeactivateTransportChannel(ch.ID) - if status > http.StatusOK { - http.Error(w, localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "error_deactivating_channel"}), http.StatusBadRequest) - logger.Error(b.ID, status, err.Error(), data) - return - } - } else { - data, status, err := client.ActivateTransportChannel(ch) - if status > http.StatusCreated { - http.Error(w, localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "error_activating_channel"}), http.StatusBadRequest) - logger.Error(b.ID, status, err.Error(), data) - return - } + data, status, err := client.DeactivateTransportChannel(getBotChannelByToken(b.Token)) + if status > http.StatusOK { + http.Error(w, localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "error_deactivating_channel"}), http.StatusBadRequest) + logger.Error(b.ID, status, err.Error(), data) + return } - err = b.setBotActivity() + err = b.deleteBot() if err != nil { raven.CaptureErrorAndWait(err, nil) http.Error(w, localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "error_save"}), http.StatusInternalServerError) @@ -309,15 +288,15 @@ func settingsHandler(w http.ResponseWriter, r *http.Request, uid string) { p, bots, map[string]interface{}{ - "ButtonSave": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "button_save"}), - "ApiKey": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "api_key"}), - "TabSettings": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "tab_settings"}), - "TabBots": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "tab_bots"}), - "TableName": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_name"}), - "TableToken": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_token"}), - "AddBot": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "add_bot"}), - "TableActivity": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_activity"}), - "Title": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "title"}), + "ButtonSave": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "button_save"}), + "ApiKey": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "api_key"}), + "TabSettings": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "tab_settings"}), + "TabBots": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "tab_bots"}), + "TableName": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_name"}), + "TableToken": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_token"}), + "AddBot": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "add_bot"}), + "TableDelete": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "table_delete"}), + "Title": localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "title"}), }, } diff --git a/routing_test.go b/routing_test.go index 7959441..e9076aa 100644 --- a/routing_test.go +++ b/routing_test.go @@ -103,7 +103,7 @@ func TestRouting_addBotHandler(t *testing.T) { assert.Equal(t, "123123:Qwerty", res["token"]) } -func TestRouting_activityBotHandler(t *testing.T) { +func TestRouting_deleteBotHandler(t *testing.T) { defer gock.Off() gock.New("https://test.retailcrm.pro"). @@ -114,13 +114,13 @@ func TestRouting_activityBotHandler(t *testing.T) { Reply(200). BodyString(`{"id": 1}`) - req, err := http.NewRequest("POST", "/activity-bot/", strings.NewReader(`{"token": "123123:Qwerty", "active": false, "connectionId": 1}`)) + req, err := http.NewRequest("POST", "/delete-bot/", strings.NewReader(`{"token": "123123:Qwerty", "active": false, "connectionId": 1}`)) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() - handler := http.HandlerFunc(activityBotHandler) + handler := http.HandlerFunc(deleteBotHandler) handler.ServeHTTP(rr, req) assert.Equal(t, http.StatusOK, rr.Code, diff --git a/static/script.js b/static/script.js index bde8d25..7519274 100644 --- a/static/script.js +++ b/static/script.js @@ -39,21 +39,17 @@ $("#add-bot").on("submit", function(e) { ) }); -$(document).on("click", ".activity-bot", function(e) { +$(document).on("click", ".delete-bot", function(e) { let but = $(this); - send("/activity-bot/", + send("/delete-bot/", { token: but.attr("data-token"), - active: (but.attr("data-activity") === 'true'), connectionId: parseInt($('input[name=connectionId]').val()), }, function () { - if (but.attr("data-activity") === 'true') { - but.find('i').replaceWith('play_arrow'); - but.attr("data-activity", "false") - } else { - but.find('i').replaceWith('pause'); - but.attr("data-activity", "true") + but.parents("tr").remove(); + if ($("#bots tbody tr").length === 0) { + $("#bots").addClass("hide"); } } ) @@ -89,9 +85,9 @@ function getBotTemplate(data) { ${bot.name} ${bot.token} - `; diff --git a/static/style.css b/static/style.css index 69bda59..ce9aa32 100644 --- a/static/style.css +++ b/static/style.css @@ -16,7 +16,7 @@ margin: 0 auto; } -#bots .activity-bot{ +#bots .delete-bot{ float: right; } diff --git a/telegram.go b/telegram.go index dfec7ea..b8cdc08 100644 --- a/telegram.go +++ b/telegram.go @@ -39,7 +39,7 @@ func telegramWebhookHandler(w http.ResponseWriter, r *http.Request, token string return } - if b.ID == 0 || !b.Active { + if b.ID == 0 { logger.Error(token, "telegramWebhookHandler: missing or deactivated") w.WriteHeader(http.StatusOK) return @@ -237,7 +237,7 @@ func mgWebhookHandler(w http.ResponseWriter, r *http.Request) { cid, _ := strconv.ParseInt(msg.Data.ExternalChatID, 10, 64) b := getBot(c.ID, msg.Data.ChannelID) - if b.ID == 0 || !b.Active { + if b.ID == 0 { logger.Error(msg.Data.ChannelID, "mgWebhookHandler: missing or deactivated") w.WriteHeader(http.StatusBadRequest) w.Write([]byte("missing or deactivated")) diff --git a/templates/form.html b/templates/form.html index 058b6a3..ae66278 100644 --- a/templates/form.html +++ b/templates/form.html @@ -53,7 +53,7 @@ {{.Locale.TableName}} {{.Locale.TableToken}} - {{.Locale.TableActivity}} + {{.Locale.TableDelete}} @@ -62,9 +62,9 @@ {{.Name}} {{.Token}} - diff --git a/translate/translate.en.yml b/translate/translate.en.yml index 7dc6013..ac499d5 100644 --- a/translate/translate.en.yml +++ b/translate/translate.en.yml @@ -3,7 +3,7 @@ tab_settings: CRM settings tab_bots: Bots table_name: Name table_token: Token -table_activity: Activity mark +table_delete: Delete api_key: API key add_bot: Add a bot title: Module of connecting Telegram to retailCRM diff --git a/translate/translate.ru.yml b/translate/translate.ru.yml index 7697778..cd44a72 100644 --- a/translate/translate.ru.yml +++ b/translate/translate.ru.yml @@ -3,7 +3,7 @@ tab_settings: Настройки CRM tab_bots: Боты table_name: Имя table_token: Токен -table_activity: Активность +table_delete: Удалить api_key: API Ключ add_bot: Добавить бота title: Модуль подключения Telegram к retailCRM