Подключение распознавания файлов в различных каналах
Редактирование настроек канала VK
В VK доступны реакции на фото, документы, видео, аудио и стикеры.
При создании канала необходимо для каждого типа файлов выбрать свои настройки:
1. Выбрать реакцию на файл:
2. Добавить контекст NLP при необходимости.
3. Если для файла не должен срабатывать Fallback скрипт, то проставить метку Отключить Fallback.
Редактирование настроек канала MAX
В MAX доступны реакции на фото, документы, видео, аудио и стикеры.
При создании канала необходимо для каждого типа файлов выбрать свои настройки:
1. Выбрать реакцию на файл:
2. Добавить контекст NLP при необходимости.
3. Если для файла не должен срабатывать Fallback скрипт, то проставить метку Отключить Fallback.
Редактирование настроек канала Telegram
В Telegram доступны реакции на фото, документы, видео, аудио, голосовые сообщения и стикеры.
При создании канала необходимо для каждого типа файлов выбрать свои настройки:
1. Выбрать реакцию на файл:
- Игнорировать - бот не будет реагировать на файлы данного типа;
- Только NLP - бот будет реагировать на файлы данного типа ответом из NLP системы;
- Только меню - бот будет реагировать на файлы данного типа
- Штатная (NLP и меню) - бот будет реагировать обоими способами.
2. Добавить контекст NLP при необходимости.
3. Если для файла не должен срабатывать Fallback скрипт, то проставить метку Отключить Fallback.
Редактирование настроек канала Metabot Widget
В канале Metabot Widget через редактирование необходимо:
1. Поставить активность чекбокса Разрешить отправку файлов.
2. В поле Список поддерживаемых расширений файлов добавить список разрешенных форматов файлов:
| pdf,doc,docx,xls,xlsx,csv,txt,png,jpe,jpg,jpeg,gif,bmp,ico,svg,svgz,tif,tiff,jfif,ai,drw,pct,psp,xcf,psd,raw,webp,xbm,dib,pgp,apng,pjpeg,avif,avi,divx,flv,m4v,mkv,mov,mp4,mpeg,mpg,ogm,ogv,ogx,rm,rmvb,smil,webm,wmv,xvid,3gp,3g2,qt,asx |
3. Выбрать Толькореакцию менюна вфайл:
4. Сохранить настройки.
Создание маршрута
Для приема файлов необходимо создать маршрут со следующими настройками:
// Импортируем модули для работы с запросами и базой данных
require("Common.Integrations.Request")
require("Common.DB.Update")
let httpRequest = CommonIntegrationsRequest
let database = CommonDBUpdate
// Входные данные - массив с информацией о файле
let attachments = bot.getAllAttachments()
// Проверяем, есть ли вложения,
// если нет - прекращаем выполнение
if (!attachments.length) {
return false
}
// URL API для загрузки файла
const channelData = lead.getChannelData();
const platformToken = channelData.webhook_url;
const regexBaseUrl = /^https?:\/\/[^\/]+/;
const platformUrl = channelData
.full_webhook_url
.match(regexBaseUrl)?.[0] ?? null;
if (!platformUrl) {
return false;
}
const apiUrl = platformUrl
+`/api/v1/storage/uploadLeadFile/`
+ platformToken;
let fileUrl = "@" + attachments[0]?.url
let requestBody = {
files: [fileUrl], // Передаём массив файлов
lead_id: leadId // ID лида, к которому прикрепляется файл
}
let requestHeaders = {}
if (lead.getChannelCode() === 'telegram') {
httpRequest.useProxy(true)
}
let uploadResponse = httpRequest.sendFileFromUrl(
"POST",
apiUrl,
requestBody,
requestHeaders,
true
)
database.insertBotLogs(uploadResponse?.response)
lead.setAttr("file", JSON.stringify(uploadResponse?.response))
return false
Редактирование настроек скрипта с типом Fallback
В название скрипта Fallback рекомендуем добавить “+ ФАЙЛЫ” для оперативного поиска в списке скриптов. Необходимо проверить корректность настроек NLP в скрипте.скрипте:
Затем наполните скрипт командами:командами.
Для работы с разными мессенджерами добавьте отдельные команды с условиями:
return lead.getChannelCode()
=== "telegram";
ПервойДлякомандойначаладолжнадобавьтеидтикомандыкомандаобработкиВыполнитьфайловJavaScript,длякотораякаждогополучаетканалаизботавебхука(описанысобытие: есть ли в сообщении с распознанным текстом файл и добавляет переменнуюis_attachment, что файл есть;ниже).
let whJob = bot.getWebhookJob()
let eventType = whJob.event_typememory.setAttr('is_attachment', false) if (eventType === 'user_attachments') { memory.setAttr('is_attachment', true) bot.disableRepeatMessageText() // погасит вывод сообщения с повтором вопроса bot.hideRepeatMessageButtons() // погасит вывод меню с повтором вопроса }
// Библиотека с помощью которой можно записать в карочку лида данные не отправля их в тг
let TelegramMessage = require('Common.Integrations.Telegram')
let msg = new TelegramMessage()// Все входящие файлы let attachments = bot.getAllAttachments()
if(Boolean(attachments?.[0]?.url)){
uploadData = bot.downloadFileFromUrl(attachments[0].url) msg.debug('Пользователь отправил файл: ' + uploadData.url)
lead.setAttr('file', uploadData.url) // Запуск скрипта... bot.runScriptByCodeForLead("recieveFile", lead.getData('id'))
bot.stop() }
// Условие
return !(memory.getAttr('is_attachment')*1)
и
// JavaScript
var randomStrings = [
"Не совсем понимаю, о чём вы.",
"Извините, я вас не понял. Перефразируйте, пожалуйста.",
"Попробуйте воспользоваться разделами меню или сказать другими словами.",
"Простите, не понял вас, попробуйте снова."
];
randomIndex = Math.ceil((Math.random()*randomStrings.length-1));
lead.setAttr('randomAnswer', randomStrings[randomIndex]);
var ДатаСообщения = new Date(Date.now());
var ДатаСообщенияСтр =
ДатаСообщения.getFullYear() + "-" +
("0" + (ДатаСообщения.getMonth()+1)).slice(-2) + "-" +
("0" + ДатаСообщения.getDate()).slice(-2);
var GoogleSheetsService = require('Common.Integrations.GoogleSheets') // Плагин для работы с Google Sheets
GoogleSheetsService.sheetId = '1pLbxTJG2YI6LghJ4FMCCBkQ7ybTL0Y7ZGw4yvaGCsQo' // ID скопированный из таблицы
GoogleSheetsService.listName = 'Рехау.Про' // Название листа
// Параметры где ключ - название столбца, значение - данные которые занесутся в строку
let params = {
"Bot ID": botId,
"Лид ID": leadId,
"Время": ДатаСообщения,
"Сообщение": bot.getIncomingMessage(),
}
let result = GoogleSheetsService.addRow(params) // Функция для добавления строк в таблицу
debug(result)
ЧетвертойВторой командой должна идти команда Отправить текст с рандомным текстом, которая срабатывает в случае, когда файла в сообщениях нет (проверка в условии);
// Условие
return !(memory.getAttr('is_attachment')*1)
| Текст команды |
| {{ $randomAnswer }} |
ПятойТретей командой должна идти команда Отправить текст с текстом, которая срабатывает в случае, когда в сообщении есть файл (проверка в условии);// Условиеreturn (memory.getAttr('is_attachment')*1)
Текст команды Файл принят, передадим на изучения группе поддержки. С вами свяжутся либо через чат-бота, либо через имеющиеся контакты.
А пока что можете воспользоваться автоматическим функционалом чат-бота.
- При необходимости
шестойчетвертой командой должна идти команда Email, которая срабатывает в случае, когда в сообщении есть файл (проверка в условии). На почту отправляется письмо с файлом пользователя;
// Условие
return (memory.getAttr('is_attachment')*1)
| Получатель | email, на который необходимо отправить письмо. ({{ $bot.botSupportMails }}) |
| Тема | *Название бота поддержки*: лид отправил в бота файл |
| Содержимое | В чат-боте пользователь прислал в бота файл <br> <br>ID клиента для поиска в диалогах на платформе Metabot: {{ &$leadId }} <br> <br>Ссылка на файл: {{ $is_attachment }} <br> <img src="{{ $is_attachment }}" alt="Отправленный файл" width="400" height="341" /> <br> С уважением, <br> Ваш Metabot |
При необходимости, можно создать системный атрибут с ключом botSupportMails, типом variable и значением равным всем почтам, на которые должно поступить письмо.
- Последней командой должна идти команда Повторить вопрос.
Виджет
Для обработки файлов виджета необходим следующий перечень команд:
let whJob = bot.getWebhookJob()
let eventType = whJob.event_type
memory.setAttr('is_attachment', false)
if (eventType === 'user_attachments'){
memory.setAttr('is_attachment', true) bot.disableRepeatMessageText()
// погасит вывод сообщения с повтором вопроса
bot.hideRepeatMessageButtons()
// погасит вывод меню с повтором вопроса
}
// Библиотека с помощью которой можно записать в карочку лида данные не отправля их в тг
let TelegramMessage = require('Common.Integrations.Telegram')
let msg = new TelegramMessage()
// Все входящие файлы let attachments = bot.getAllAttachments()
if(Boolean(attachments?.[0]?.url)){
uploadData = bot.downloadFileFromUrl(attachments[0].url) msg.debug('Пользователь отправил файл: ' + uploadData.url)
lead.setAttr('file', uploadData.url) // Запуск скрипта...
bot.runScriptByCodeForLead("recieveFile", lead.getData('id'))
bot.stop()
}
Telegram
Для обработки файлов Telegram необходим следующий код:
// Библиотека с помощью которой можно записать в карочку лида данные не отправля их в тг
let TelegramMessage = require('Common.Integrations.Telegram')
let msg = new TelegramMessage()
// Все входящие файлы
let attachments = bot.getAllAttachments()
if(Boolean(attachments?.[0]?.url)){
uploadData = bot.downloadFileFromUrl(attachments[0].url)
msg.debug('Пользователь отправил файл: ' + uploadData.url)
lead.setAttr('file', uploadData.url)
// Запуск скрипта...
bot.runScriptByCodeForLead("recieveFile", lead.getData('id'))
bot.stop()
}
VK и MAX
Для обработки файлов VK и MAX необходим следующий код:
// Все входящие файлы
let attachments = bot.getAllAttachments()
if (Boolean(attachments?.[0]?.url)) {
const uploadData = bot.downloadFileFromUrl(attachments[0].url)
if (lead.getData('bot_debug_level')) {
let data = 'Пользователь отправил файл: ' + uploadData.url;
bot.sendMessage("🛠️ Отладочная информация \n\n" + data);
}
//lead.setAttr('file', uploadData.url)
lead.setJsonAttr('fileDebug', uploadData)
// Запуск скрипта...
bot.runScriptByCodeForLead("recieveFile", leadId)
bot.stop()
}
Как достать данные вложений
Для Telegram используйте метод bot.getAllAttachments()
let attachments = bot.getAllAttachments()
if(Boolean(attachments?.[0]?.url)){
uploadData = bot.downloadFileFromUrl(attachments[0].url) msg.debug('Пользователь отправил файл: ' + uploadData.url)
lead.setAttr('file', uploadData.url) }
Для других каналов bot.getWebhookPayload()
let attachments = bot.getWebhookPayload()
if(attachments.payload.attachments[0].url){
uploadData = bot.downloadFileFromUrl(attachments.payload.attachments[0].url)
lead.setAttr('file', uploadData.url) }
В данных примерах в атрибут записывается url вложения для скачивания с помощью метода bot.downloadFileFromUrl().




