Draft 2018 — MegaFSM Wiki

Tutorials and References

Создание бота

В верхнем меню нажимаем на кнопку мои боты

016

в окне которое открылось нажимаем в левой части интерфейса на кнопку создать

017

В окне которое открылась в поле название вводим название бота - это-то название которое будет отображаться у нас

018

в поле API кей вводим ключ который получили от @BotFather https://t.me/BotFather

019

020

После чего нажимаем кнопку “создать”

021

После того когда Наш бот создан, он появляется в списке ботов, тем названием (именем) которое мы ему дали.

После чего нажимаем кнопку во втором столбце “Design Robot” Которая отправить нас на панель редактирование функционала логики бота

022

По умолчанию в редакторе у нас уже есть три ноды

Редактор собой представляет графический конструктор конечных автоматов

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

023

Есть два вида переходов

На скриншоте выше видим зелёный узел (noda) (опционально точку входа при необходимости можно перебросить на другой узел, редко когда это нужно, но возможно есть).

У этого узла нет другого действия, кроме как начать работу.

Видим что зеленая стрелка идет от зелёного узла к следующему Set API Key - это безусловный переход

Когда приходит сообщение от телеграмма (это некоторый JSON), он попадает сначала зелёный узел, а потом сразу перебрасывается в узел Set API Key (что такое узел - Set API Key - рассмотрим позже Link).

сейчас мы можем сделать простой пример, когда боту нужно поздороваться с пользователем (в новой версии системы этот узел уже создан по умолчанию, но мы все равно рассмотрим его, на варианте создания узла)

В правой части интерфейса, есть модальное окно Controls (управление), в нижней части которого есть кнопка Add Node (добавить узел)

024

Нажимаем на кнопку Add Node (добавить узел)

025

в поле Name (имя) - пишем название ноды. Например Hello - Приветствие

026

в поле Comment можно написать комментарий, к который в будущем поможет нам понять что именно это надо делает, в данном случае это Default greeting - Первое приветствие

Следующий блок Default Node (узел по умолчанию) пропускаем, то есть оставляем значение None

далее переходим к полю Action (действие), днем в нём выбираем SendMessage

027

028

SendMessage - это непосредственно обращение API Telegram для отправки сообщений

Какой принцип:

Ниже есть поле Request Data где мы нажимаем плюсик “+” после чего прописываем JSON, который полностью соответствует документации телеграма Чтобы ознакомиться с документацией телеграма, ищите в Гугле telegram bot api

029

или перейдите по ссылке https://core.telegram.org/bots/api

030

Ищем в правой колонке Available methods
https://core.telegram.org/bots/api#available-methods

031

После чего выбираем верхний пункт sendMessage https://core.telegram.org/bots/api#sendmessage

032

Для референса рассмотрим пример с параметрами chat_id и text Эти параметры на данный момент для нас считаются важными, и на их примере мы будем начинать работать.

Возвращаемся к Мега боту. В поле Request Data записывается JSON, начинается и заканчивается он фигурными скобками { и } .

033

Ключи пишутся в кавычках - , то есть не JS объекты, а именно JSON - в кавычках. В поле Request Data нужно чтобы был следующий JSON

{"text":"Hello, Student!","chat_id":"${global.message.chat.id}"}

В данном примере (и во всём JSON), всё что пишется левее от двоеточия является ключами , text и chat_id И просьба запомнить, что ключи всегда пишутся в кавычках. А всё что пишется правее от двоеточия, является параметрами или значение ключа "Hello, Student!" и "${global.message.chat.id}" В некоторых случаях значение ключа могут писаться без кавычек. Если интересно какие именно - смотрите API Telegram. https://core.telegram.org/bots/api

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

"text":"Hello, Student!" - это да фраза которую бот напишет при первом обращении пользователя “text” и “Hello, Student!” обязательно нужно писать в кавычках, между ними двоеточие “:”, Пробелы после кавычек или перед/после двоеточия, не являются обязательными и их можно не ставить, но если сделать ошибку, пропустить кавычки, поставить лишнее, или не поставить вообще - JSON поломается и бот не сможет отработать. Поэтому постоянно нужно быть сосредоточенным на коде.

Для параметра chat_id чтобы бот ответил конкретно нам нужно написать:

"chat_id":"${global.message.chat.id}" Давайте рассмотрим почему именно так. В течение сессии у нас есть контекст, контекстные переменные с которыми Мы работаем. У верхнего уровня основных переменных всего две: global и data

global - это основной контекст, начнем него. Самое первое сообщение которое мы разбудили схему, оно дублируется global. Но на самом деле оно находится в data. Это сделано для того чтобы в любое время можно было достать chat.id Для референса наших переменных, мы используем Знак доллара $ и фигурные скобки {} Это пишем внутри кавычек "${global.message.chat.id}" - Заметьте что кавычки должны быть стандартными, а не угловыми, и если код с какого либо сайта, проверяйте, правильно ли они скопировались. В виду того, что если кавычки будут нестандартные, то JSON работать перестанет.

Дальше вникаем в то, чем мы дергаем сообщение…. …На самом деле есть chat.id и from.id - их нужно различать. Потому что когда ты общаешься с Ботом в приватном чате, Они одинаковые. Но если Бота подключить в какой-то групповой чат то тогда: chat.id - идентификатор чата from.id - идентификатор того кто написал На данном этапе мы рекомендуем брать chat.id в связи с тем, что это более универсальное решение. Кроме того случая когда мы пишем боту в групповой чат, а бот отвечает нам в личку.

То есть наш конечный JSON которий должен быть в поле Request Data будет выглядеть так:

{"text":"Hello, Student!","chat_id":"${global.message.chat.id}"}

034

чтобы сохранить изменения и создать узел (ноду), нажимаем кнопку Save или на клавиатуре комбинацию клавиш Ctrl+S

035

После чего он появится на схеме (но в нашем случае он уже там, и с логическим переходом)

036

теперь нам нужно создать логический переход от узла Set API Key к только что созданному нами узлу, для этого перемещаем наш узел по центру ( Например сразу под узел Set API Key).

037

После чего кликаем один раз правой кнопкой мышки на узел Set API Key
В модальном окне которое находится справа выбираем дефолтную ноду (пункт Default Node) и ее параметр Hello. Сохраняем!

038

Дефолтная нода - это безусловный переход. В нашем случае механика работы следующая: бот получает сообщение и отвечает нам привет! ( совпадение А в)




на даний момент в системе работают “живые логи”, тоесть можна открыть консоль разработчика, и там посмотреть. рекомендуем зразу передвинуть консоль для удобства в право.

открыть ее можна по F12, после чего ее лучше очистить

056

video{.youtube} расшифровано ВСЕ до - 14:39


https://www.youtube.com/playlist?list=PLp6CsmZqbHvWxPY93rRAyiNSlBNBXJk34

Video_2018-10-23_165518

Открываем браузер http://www.mega-bot.com авторизируемся L: student P: student123

055

Переходим на вкладку мои боты http://www.mega-bot.com/bots

039

Вызов окна редактора

Чтобы начать быстрое редактирование параметров узла, достаточно кликнуть правой кнопкой мышки на необходимом узле ( этим его выделив) - цвет узла изменится на жёлтый

040

когда узел выбран, достаточно нажать +, чтобы открылось окно с редактором.

041

После того как вы завершите редактирование, нажмите кнопку Cохранить или Save (находится в верхнем левом углу).

Если надобности в сохранении нет, нажмите на клавиатуре клавишу ****, и модальное окно редактора закроется без сохранения изменений.

ручной запуск задачи для отладки схем. Кнопка [Run Task]

042

Для проверки этого функционала необходимо перейти к разделу верхнего навигационного меню боты или в англоязычном интерфейсе MyBots

http://www.mega-bot.com/bots

043

После чего в левой верхней части окна нажать на Зеленую кнопку [+Cоздать] или в англоязычном интерфейсе [+Create]

Или перейти по ссылке http://www.mega-bot.com/bots/create

044

на странице которая открылась

задаем имя бота например float

Выбираем тип модуль (Module)

API Key для данного типа бота (Module) не нужен. Поэтому поле API Key оставляем пустым. (написал issue)

045

Внизу нажимаем зелёную кнопку [+Cоздать] или в англоязычном интерфейсе [+Create]

После создания бота, На странице http://www.mega-bot.com/bots/index или http://www.mega-bot.com/bots

Нажимаем на оранжевую кнопку [Design Robot] - чтобы продолжить редактировать бота

046

Происходит переход на страницу редактирования суббота

047

Для продолжения нужно нажать синюю кнопку [+] на поле Controls правой части экрана

048

После чего нажать кнопку **[Restore] **

049

В диалоговом окне выбрать файл который будет содержать необходимые данные для Restore

050

В нашем случае содержание файла float.json приводится ниже:

{"nodes":[{"action":{"headers":[],"url":"","method":"POST","delay":{"soft":"0","duration":"0","softrule":"long fast, short slow etc"}},"posY":"364","posX":"643","n_name":"initial","nodeID":"882140a416f14efea29d1fd9dfda6535","namespace":"float","initial":true,"defaultNode":"fc8333cbe56a4c95954ce03f5f970c1d","comment":""},{"defaultNode":"76ed704ee3db4ae1ba19bdeb652d7255","action":{"headers":[],"url":"aaf4da30-0cac-4b3a-af9b-a3d0bed1acca","method":"POST","data":{"code":"var nodes=[];\n//Обязательный узел входа\nvar nodeInitial={\"initial\":true,\"nodeID\":\"1\",\"action\":{\"url\":\"debug\",\"data\":{\"initVal\":\"{data.hi}\"}}, defaultNode:\"999\"};\n//Опциональный узел выхода \"goback\" для возвращения в нашу схему\nvar nodeLast={\"nodeID\":\"999\",\"action\":{\"url\":\"goback\",\"data\":{\"lastVal\":\"200\"}}};\n//Собираем узлы в список\nnodes.push(nodeInitial, nodeLast);\n//Обязательно экранируем переменные $\nglobal.inject={title:'sexy', body:JSON.stringify(nodes).replace(\"${\",\"@{\")};"}},"nodeID":"fc8333cbe56a4c95954ce03f5f970c1d","comment":"","n_name":"prepareNodes","posY":"468","posX":"643","namespace":"float"},{"defaultNode":"7feddbdd2cc8416f89fc7ae6fb0edc8c","action":{"headers":[],"url":"639f1050-2253-47b6-8a36-b91bae014b25","method":"POST","data":{"namespace":"${global.inject.title}","params":"${data}","body":"${global.inject.body}"}},"nodeID":"76ed704ee3db4ae1ba19bdeb652d7255","comment":"","n_name":"ExecNodes","posY":"558","posX":"643","namespace":"float"},{"defaultNode":"04fa54a49b6c48fb935f87b692b87b7b","action":{"headers":[],"url":"6048883a-9fee-4ba6-9d6f-e429f2196392","method":"POST"},"nodeID":"7feddbdd2cc8416f89fc7ae6fb0edc8c","comment":"","n_name":"finish","posY":"653.9174461364746","posX":"641.7523422241211","namespace":"float"},{"defaultNode":"","action":{"headers":[],"url":"84662d72-f07c-4b88-ba7b-631199d6dc87","method":"POST","data":{"json2":{"message":"${data}"}}},"nodeID":"04fa54a49b6c48fb935f87b692b87b7b","comment":"","n_name":"Report","posY":"731.2136325836182","posX":"641.6481781005859","namespace":"float"}],"namespace":"float"}

После Удачного прохождения Restore браузер выдает уведомление

051

нажимаем кнопку [OK]

После чего загружается обновлённая схема

052

Для следующей работы необходимо открыть консоль браузера. нажимаем на клавиатуре F12

для запуска нужно нажать кнопку [Run Task]

053

после чего, открывается модальное окно

054

{"hi":"me"}

000