Skip to content
Getcourse API
Menu
  • Главная
  • Продукты
    • TCD
    • Информатор
    • Помощник Геткурс
  • Услуги
    • GetCourse
    • Вебинары
    • SaleBot и создание чат-ботов
    • Инфраструктурные решения
    • Аудио/видео продакшн
  • Обо мне
Menu

Работа с голосовыми и видео сообщениями в SaleBot

Posted on 18.03.202318.03.2023 by backtrack

В этой статье расскажу, как я организовал работу с голосовыми сообщениями и кружками в SaleBot и какой путь изначально был пройден.

Основная проблема SaleBot в том, что даже сейчас, на момент написания статьи (18.03.23) этот конструктор не умеет нативно работать с такого рода контентом. Т.е нет такой возможности загрузить видео файл и на его основе отправлять кружки пользователям как и нет возможности с mp3 файла сделать голосовое сообщение. Хотя технически организовать это возможно и мне даже удалось сделать такой конвертер в одном из Telegram-ботов собственной разработки. По какой причине нет такого функционала в самом SaleBot пока всё еще загадка.

Конвертация mp4 видео в видео сообщение

Что будем делать?

Для начала разберемся, как вообще можно отправить аудио- видео- сообщения в SaleBot? В этом плане поможет документация в которой описан этот процесс с применением стороннего бота. Прочитав несколько строк по указанной ссылке, становится понятно, что вся логика отправки, что видео, что аудио сообщений крутится вокруг идентификатора файла в Telegram.

Вырезка с документации SaleBot

Так вот, вкратце, что предлагает нам документация: по сути взять уже готовое круглое видео, отправить его в сторонний бот, получить file_id и использовать обертки над функциями Telegram API tg_send_video_note и tg_send_audio_note. Первое время в принципе все так и делали, затем в тематических Telegram-чатах стал распространяться более упрощенный способ получения file_id в котором для получения этого идентификатора предложили использовать не сторонний бот, а возможности конструктора. Более того, те кто использовали такой метод, отмечали, что время жизни кружка или гс полученного таким образом было несколько дольше, чем если бы file_id получить в другом боте.

О том, что, эти сообщения «отваливаються» это вообще тема для отдельного разговора. Это связано с спецификой самого API Telegram.

file_id однозначно идентифицирует файл, но файл может иметь разные действительные file_id даже для одного и того же бота.

На скриншоте выше в документации Telegram прямым текстом указывают, что file_id уникальный, но каким-то чудом может быть разным для одного и того же файла в одном и том же боте.

Передайте file_id как строку, чтобы отправить видеозаметку, которая существует на серверах Telegram (рекомендуется), или загрузить новое видео, используя multipart/form-data. Отправка видеозаметок по URL-адресу в настоящее время не поддерживается.

И при том, что file_id может изменится тем не менее это не мешает использовать (и рекомендовать!) такой способ отправки кругляков и гс в документации Telegram.

Так что собственно делать?

И так, что у нас есть:

  • Мы знаем, что отправлять придется готовое видео-/аудио- сообщение.
  • Для конвертации mp3/mp4 в формат кругляков и гс всё равно нужен будет сторонний бот.
  • Отправлять такой контент нужно через функции API и использовать file_id
  • file_id, как мы выяснили, может внезапно «протухнуть» и работать отправка не будет.

И что нужно реализовать?

  • Какое-то более менее удобное меню для отправки кругляков и гс
  • Получение file_id
  • Максимально упростить работу с API что бы сократить время и кол-во ошибок при настройке
  • Как-то отслеживать отправку гс и кругляков и нужны уведомления, если что-то пошло не так
Вот такая схема у меня получилась в итоге

Решение задачи

Ввиду требований которые я описал выше, была разработана вот такая схемка как на скрине выше. В неё не всё относится к отправки кругляков и голосовых в бот, но раз начал делать инструмент, то почему-бы не сделать его полноценным и многофункциональным? Но обо всем по порядку.

В основе схемы мы будем использовать всё тот-же подход, который гуляет в тематических чатах, и получать file_id будем непосредственно в целевом боте, т.е в том, который подключен к SaleBot и без привлечений сторонних решений. Для того, что бы эта часть схемы работала, в константах проекта в SaleBot необходимо прописать переменную save_webhook и присвоить её значение равное единице.

Про adminid поговорим позже 🙂

Следующим шагом добавляем зеленый блок в котором размещаем удобное для Вас ключевое слово для запуска схемы. И создаем небольшое кнопочное меню.

Затем протягиваем обычную стрелку (без таймера) и создаем следующий блоки. В условии перехода стрелки выбираем соответствующие кнопки с меню в блоке выше.

Далее я приведу текстовку в блоках и их калькуляторах, саму схему следует собирать по скриншоту выше, ничего необычного в ней нет. Если будете повторять эту схему, учтите, что в большей части блоков включен режим разметки текста Markdown.

1
2
3
4
_Пришли кругляк \(видео\-сообщение\)_
И не забудь установить переменную проекта  *adminid*
 
Твой adminid `#{platform_id}`

Второй после стартового блок.

Текст

1
2
3
4
5
6
7
8
`vComm \= 'сюда впиши комментарий'
blNo \= '11882653'
aws \= get\(tg\_send\_video\_note\(platform\_id, \'#{id}\'\),'ok'\)
status\_video \= if\(aws \=\= 'false' AND notSubscribed \!\= 1,'Не работает','Активно'\)
sb\_st \= 'https://salebot\.pro/projects/\#\{project\_id\}/clients/\#\{client\_id\}'
report \= 'Статус видео: ' \+ status\_video  \+ '\\n' \+ 'Блок №:  \#\{blNo\}' \+ '\\n' \+ 'Комментарий: ' \+ vComm \+ '\\n' \+ 'Ссылка: ' \+ sb\_st
request \= if\(status\_video \!\= 'Активно','tg\_send\_message',''\)
tmp \= \#\{request\}\(adminid, report, None, None, 'html', 1\)`

Калькулятор

1
id = get(tg_request, 'message|video_note|file_id')

Третий, после стартового блок

Текст: #{none}

Калькулятор:

1
tg_send_chat_action(platform_id, 'record_video')

Четвертый блок (Test PASS, через 4 секунды):

Текст: Если тебе пришло видео-сообщение выше, значит ID получен верно,код сгенерирован верно. 
(markdown-разметка выключена)

Калькулятор (для видео сообщений):

1
2
3
4
5
6
7
8
vComm = 'сюда впиши комментарий'
blNo = 'здесь номер блока'
aws = get(tg_send_video_note(platform_id, id),'ok')
status_video = if(aws == 'false' AND notSubscribed != 1,'Не работает','Активно')
sb_st = 'https://salebot.pro/projects/#{project_id}/clients/#{client_id}'
report = '<b>Статус видео: </b>' + status_video  + '\n' + '<b>Блок №: </b>; #{blNo}' + '\n' + '<b>Комментарий: </b>' + vComm + '\n' + '<b>Ссылка: </b>' + sb_st
request = if(status_video != 'Активно','tg_send_message','')
tmp = #{request}(adminid, report, None, None, 'html', 1)

Калькулятор: (для аудио сообщений):

1
2
3
4
5
6
7
8
vComm = 'сюда впиши комментарий'
blNo = 'здесь номер блока'
aws = get(tg_send_voice(platform_id,id),'ok')
status_video = if(aws == 'false' AND notSubscribed != 1,'Не работает','Активно')
sb_st = 'https://salebot.pro/projects/#{project_id}/clients/#{client_id}'
report = 'Статус аудио: ' + status_video  + '\n' + 'Блок №:  #{blNo}' + '\n' + 'Комментарий: ' + vComm + '\n' + 'Ссылка: ' + sb_st
request = if(status_video != 'Активно','tg_send_message','')
tmp = #{request}(adminid, report, None, None, 'html', 1)

И затем следует добавить пустой блок, в который будут сходится ветки и с голосовых и с видео сообщений и возвращаться в главное меню.

Как это работает?

После ввода ключевого слово срабатывает зеленый блок и отправляет меню доп.функций в бот. В этом меню нужно выбрать, какую опцию мы хотим использовать. Например видео сообщение. После этого в нужный нам бот необходимо переслать видеосообщение (кругляк).

Отправляем кругляк в бот

В ответ бот сгенерирует код для калькулятора и проведет ряд проверок.

После этих не хитрых процедур, всё, что остается, так это просто полностью скопировать код присланный в ответ на видео или аудио сообщение и чуть-чуть настроить.

Вся настройка сводится к тому, что бы ввести комментарий в переменную vComm для того, что бы было более менее понятно, что за кругляк отправляется и где его можно искать. Для таких целей я использую хэштеги в телеграм. Основная идея следующая:
когда заказчик скидывает мне все необходимые кругляшки и голосовые, в первую очередь я пересылаю их в свой закрытый Telegram-канал. А в при пересылке я дописываю некие хэштеги по котором я могу понять, что это за сообщение, к какому проекту оно относится и т.д Хотя вообще хорошо бы под разные имеющиеся проекты заводить отдельный Telegram-канал, что бы контент не перемешивался. И вот уже после того, как у гс и кругляков появился свой хэштег, я пересылаю его в бот. А когда бот отправляет уже готовый код калькулятора, я как раз и вписываю хэштег в переменную vComm. Так же, если у вас разные листы под разные воронки, то в эту переменную можно вписать и ссылку на лист, что бы можно было быстрее понять, где искать блок, когда file_id в нем протухнет. Также я рекомендую вписывать номер блока в котором используется конкретный код в переменную blNo.

Пример настройки блока в воронке

Теперь, когда все настроено, можно смело использовать блок в составе нужной вам воронки. Вашим клиентам ничего лишнего, кроме самого контента отправляться не будет. Но особенность генерируемого таким ботом, кода в том, что в случае, когда file_id «протухнет» вы автоматически получите уведомление об этом.

Пример отправки кругляка и пример уведомления, если file_id внезапно станет более недоступен.

Работа с голосовыми сообщениями происходит абсолютно аналогичным образом и отличия от видео сообщения только в блоке калькулятора нашей системной воронки. Основная суть абсолютно одинакова. Если при создании этой системной схемы вы не допустите ошибок, то схема заработает сразу и не в какой дополнительной настройке не нуждается.

Вместо вывода

В итоге мы получаем универсальную схему, которая не нуждается в стороннем боте для получения file_id. Так же эта схема автоматически генерирует весь необходимый код калькулятора, который уже содержит элементы которые позволяют проверить, было ли отправлено такое сообщение клиенту и если отправка не удалась, система автоматически уведомит вас (администратора) о том, что что-то пошло не так. Использование автоматической кодогенерации также позволяет существенно сократить время на создание и настройку блока воронки который содержит голосовое или видео, а так же практически сводит на нет любые ошибки связанные с человеческим фактором, если до этого подобный код приходилось копировать с другого блока или же текстового документа с шаблоном (снипетом) такого кода.

И как бонус, подход, в котором контент изначально пересылаеться в закрытый канал, добавляеться к круглякам или голосовым хэштег, и затем уже происходит пересылка в бот, позволяет оперативно найти нужный контент и исправить проблему с file_id, если вдруг этот идентификатор внезапно «протух». Достаточно просто взять хэштег протухшего видео/аудио сообщения, найти его на канале и просто повторить кодогенерацию.

А про другие возможности такой, системной, воронки мы поговорим в следующий раз. Если вам нужна какая-то помощь по настройке этой воронки пишите мне в Telegram. Так же можете указать в сообщении свой email и я предоставлю вам доступ к проекту с которого вы сможете скопировать всю готовую схему в свой проект.

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики

  • Yandex DataLens
  • Дайджест новостей
  • Для начинающих
  • Курилка техспеца
  • По фану
  • Разработка

Мы используем куки для наилучшего представления нашего сайта.

Если Вы продолжите использовать сайт, мы будем считать что Вас это устраивает.

Вы можете узнать больше о том, какие файлы cookie мы используем, или отключить их в настройках.

Getcourse API
Powered by  GDPR Cookie Compliance
Политика конфеденциальности

Этот веб-сайт использует файлы cookie, чтобы мы могли предоставить вам наилучший пользовательский опыт. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас, когда вы возвращаетесь на наш веб-сайт, и помогает нашей команде в понимании того, какие разделы веб-сайта вы считаете наиболее интересными и полезными.

Строго необходимые файлы cookie

Строго необходимые файлы cookie должны быть включены постоянно, чтобы мы могли сохранить ваши предпочтения для настроек файлов cookie.

Если вы отключите этот файл cookie, мы не сможем сохранить ваши настройки. Это означает, что каждый раз, когда вы посещаете этот веб-сайт, вам нужно будет снова включать или отключать файлы cookie.