рд╡реЛрд▓реНрдлрдЧреНрд░рд╛рдо рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдордмреЙрдЯ

рдкрд░рд┐рдЪрдп


рд╡рд╣ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ рдЬрдм рд╣рдмреНрд░рдмреНрд░ рдкрд░ рд╣рд░ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рдЕрдкрдиреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдордп рдХреА рдПрдХ рдЕрд╡рдзрд┐ рдмреАрдд рдЧрдИ рдЬрдм рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмреЙрдЯ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдпрд╛ рд░реВрд╕ рдореЗрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдореЗрд░рд╛ рдмреЙрдЯ рд╕рд┐рд░реНрдл рдПрдХ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рдФрд░ рдПрдкреАрдЖрдИ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм, рдЬрдм рдореИрдВрдиреЗ рдЙрд╕реЗ рдХрд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рддреЛ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдЦреЛрдЬрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╡рд┐рджреЗрд╢ рдореЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВрдиреЗ рд╡реБрд▓реНрдлреНрд░рд╛рдо рднрд╛рд╖рд╛ рдореЗрдВ рдмреЙрдЯ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛! рд╡реБрд▓реНрдлреНрд░рд╛рдо рдХреНрд▓рд╛рдЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд╕рдПрдордПрд╕ рдХреЗ рдмрд┐рдирд╛ рдЖрдк рд╡реБрд▓реНрдлрд░рд╛рдо рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдкрдиреЗ рд╕рд░рд▓ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреВрд▓реНрд╕ рдореЗрдВ рд╕реЗ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╡реБрд▓реНрдлреНрд░рд╛рдо рдмрд╛рджрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


рдХреНрд▓рд╛рдЙрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реБрд▓реНрдлреНрд░рд╛рдо рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, https://account.wolfram.com рдкрд░ рдЬрд╛рдПрдВ рдФрд░ Create One рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред



рдХрд┐рдП рдЧрдП рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, https://www.wolframcloud.com рдкрд░ рдХреНрд▓рд╛рдЙрдб рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдиреЛрдЯрдмреБрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред



рдмрд╛рдж рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рднреА рдХреЛрдб рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХреНрд▓рд╛рдЙрдб рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ


рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрдИ рд▓реЗрдЦ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреА рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдмреЙрдЯ рдХреЛ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдмрд╕ @BotFather bot рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдВ:


/newbot 

рдлрд┐рд░ рдЖрдкрдХреЛ рдмрд╕ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕рдХрд╛ рдирд╛рдо рд╡реЛрд▓реНрдлреНрд░рдо рдХреНрд▓рд╛рдЙрдб рдмреЙрдЯ рдФрд░ рд▓реЙрдЧрд┐рди @ рд╡реБрд▓реНрдлреНрд░реЗрдордХреНрд▓рд╛рдб 5973827Bot рд╣реИред



рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╣рдо @BotFather рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ рдФрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ рдХреЗ HTTP рдПрдкреАрдЖрдИ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдкреВрд░реНрдг API рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдПрдХ рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рд╕реБрд▓рдн рд╣реИ рдФрд░ рдКрдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдмреЙрдЯ рдореМрдЬреВрдж рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд░реЗрдВ:


 URLExecute["https://api.telegram.org/bot753681357:AAFqdRFN_QoODJxsBy3VN2sVwWTPKJEqteY/getMe"] 

рдмрд╛рд╣рд░ [..]: = ...
 {"ok" -> True, "result" -> {"id" -> 753681357, "is_bot" -> True, "first_name" -> "Wolfram Cloud Bot", "username" -> "WolframCloud5973827Bot"}} 

рдКрдкрд░ рдХрд╛ рдЖрджреЗрд╢ рд╡реБрд▓реНрдлрд░рд╛рдо рднрд╛рд╖рд╛ рд╕реЗ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдиреНрдп рд╕рднреА рдПрдкреАрдЖрдИ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдЖрдЗрдП рдПрдХ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ:


 TelegramBot::usage = "TelegramBot[token]"; $telegramAPI = "https://api.telegram.org"; telegramExecute[ TelegramBot[token_String], method_String, parameters: {(_String -> _)...}: {} ] := Module[{ request, requestURL, requestRules, requestBody, response, responseBody }, requestURL = URLBuild[{$telegramAPI, "bot" <> token, method}]; requestRules = DeleteCases[parameters, _[_String, Automatic | Null | None]]; requestBody = ImportString[ExportString[requestRules, "JSON"], "Text"]; request = HTTPRequest[requestURL, <| Method -> "POST", "ContentType" -> "application/json; charset=utf-8", "Body" -> requestBody |>]; response = URLRead[request]; responseBody = response["Body"]; Return[ImportString[responseBody, "RawJSON"]] ] 

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


 token = "753681357:AAFqdRFN_QoODJxsBy3VN2sVwWTPKJEqteY"; bot = TelegramBot[token]; telegramExecute[bot, "getMe"] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"ok" -> True, "result" -> <|"id" -> 753681357, "is_bot" -> True, "first_name" -> "Wolfram Cloud Bot", "username" -> "WolframCloud5973827Bot"|>|> 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдЪрд▓реЛ рдмреЙрдЯ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ:


  • getMe - рдмреЙрдЯ рдЬрд╛рдирдХрд╛рд░реА

 getMe::usage="getMe[bot]"; TelegramBot /: getMe[bot_TelegramBot] := telegramExecute[bot, "getMe"] getMe[bot] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"ok" -> True, "result" -> <|"id" -> 753681357, "is_bot" -> True, "first_name" -> "Wolfram Cloud Bot", "username" -> "WolframCloud5973827Bot"|>|> 

рдЕрдм, рдЗрд╕реА рддрд░рд╣, рдпрд╣ рдЙрди рдореВрд▓ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдмреЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ:


  • getUpdates - рдмреЙрдЯ рдХреЛ рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдирд╡реАрдирддрдо рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ

 getUpdates::usage = "getUpdates[bot, opts]"; Options[getUpdates] = { "offset" -> Automatic, "limit" -> Automatic, "timeout" -> Automatic, "allowed_updates" -> Automatic }; TelegramBot /: getUpdates[bot_TelegramBot, opts: OptionsPattern[getUpdates]] := telegramExecute[bot, "getUpdates", Flatten[{opts}]] 

  • setWebhook - рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдПрдбреНрд░реЗрд╕ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

 setWebhook::usage = "setWebhook[bot, url, opts]"; Options[setWebhook] = { "certificate" -> Automatic, "max_connections" -> Automatic, "allowed_updates" -> Automatic }; TelegramBot /: setWebhook[bot_TelegramBot, url_String, opts: OptionsPattern[setWebhook]] := telegramExecute[bot, "setWebhook", Join[{"url" -> url}, Flatten[{opts}]]] 

  • deleteWebhook - рдПрдХ рд╣реИрдВрдбрд▓рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ

 deleteWebhook::usage = "deleteWebhook[bot]"; TelegramBot /: deleteWebhook[bot_TelegramBot] := telegramExecute[bot, "deleteWebhook"] 

  • getWebhookInfo - рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА

 getWebhookInfo::usage = "getWebhookInfo[bot]"; TelegramBot /: getWebhookInfo[bot_TelegramBot] := telegramExecute[bot, "getWebhookInfo"] 

  • sendMessage - рдПрдХ рдЪреИрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ

 sendMessage::usage = "sendMessage[bot, chat, text]"; Options[sendMessage] = { "parse_mode" -> Automatic, "disable_web_page_preview" -> Automatic, "disable_notification" -> Automatic, "reply_to_message_id" -> Automatic, "reply_markup" -> Automatic }; TelegramBot /: sendMessage[bot_TelegramBot, chat_Integer, text_String, opts: OptionsPattern[sendMessage]] := telegramExecute[ bot, "sendMessage", Join[{"chat_id" -> chat, "text" -> text}, Flatten[{opts}]] ] 

рдПрдкреАрдЖрдИ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рддреИрдпрд╛рд░ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдЯ рдмрдирд╛рдПрдВред рдЬрдм рдмреЙрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ / рд╕реНрдЯрд╛рд░реНрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдкрдбреЗрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:


 updates = getUpdates[bot] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"ok" -> True, "result" -> {<|"update_id" -> 570790461, "message" -> <|"message_id" -> 1, "from" -> <|"id" -> 490138492, "is_bot" -> False, "first_name" -> "Kirill", "last_name" -> "Belov", "username" -> "KirillBelovTest"|>, "chat" -> <|"id" -> 490138492, "first_name" -> "Kirill", "last_name" -> "Belov", "username" -> "KirillBelovTest", "type" -> "private"|>, "date" -> 1542182547, "text" -> "/start", "entities" -> {<|"offset" -> 0, "length" -> 6, "type" -> "bot_command"|>}|>|>}|> 

рдЖрдк рдЕрджреНрдпрддрди рдХреА рд╕реВрдЪреА рд╕реЗ рдирд╡реАрдирддрдо рдЕрджреНрдпрддрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 lastUpdate = updates["result"][[-1]] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"update_id" -> 570790461, "message" -> <|"message_id" -> 1, "from" -> <|"id" -> 490138492, "is_bot" -> False, "first_name" -> "Kirill", "last_name" -> "Belov", "username" -> "KirillBelovTest"|>, "chat" -> <|"id" -> 490138492, "first_name" -> "Kirill", "last_name" -> "Belov", "username" -> "KirillBelovTest", "type" -> "private"|>, "date" -> 1542182547, "text" -> "/start", "entities" -> {<|"offset" -> 0, "length" -> 6, "type" -> "bot_command"|>}|>|> 

рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕ рдЪреИрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рд╕рдВрджреЗрд╢ рдЖрдпрд╛ рдерд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдкрд╛рда рд╕реНрд╡рдпрдВ:


 chat = lastUpdate["message", "chat", "id"] text = lastUpdate["message", "text"] 

рдмрд╛рд╣рд░ [..]: = ...
 490138492 /start 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рд╣реИред рдЕрдм рд╣рдо SendMessage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдЯ рдХреА рдУрд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВрдЧреЗред


 sendMessage[bot, chat, "hello"] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"ok" -> True, "result" -> <|"message_id" -> 2, "from" -> <|"id" -> 753681357, "is_bot" -> True, "first_name" -> "Wolfram Cloud Bot", "username" -> "WolframCloud5973827Bot"|>, "chat" -> <|"id" -> 490138492, "first_name" -> "Kirill", "last_name" -> "Belov", "username" -> "KirillBelovTest", "type" -> "private"|>, "date" -> 1542182601, "text" -> "hello"|>| > 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдпрд╣ рд╕реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЧреЗрдЯрдЕрдкрдбреЗрдЯреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ webhook рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╡реЗрдмрд╣реБрдХ рдмрдирд╛рдирд╛


рд╡реЛрд▓реНрд░рд╛рдо рд▓реИрдиреНрдЧреЙрдЬ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдкреАрдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 apiFunc = APIFunction[{"n" -> "Integer"}, Plot[Sin[#n * x], {x, -2Pi, 2Pi}]&, "PNG"]; apiFunc[{"n"->3}] 

рдмрд╛рд╣рд░ [..]: = ...


рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рдЙрдбрдбреЗрдкреНрд▓реЛ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред


 apiObject = CloudDeploy[apiFunc, "Deploy/apiObject"] 

рдмрд╛рд╣рд░ [..]: = ...
 CloudObject[https://www.wolframcloud.com/objects/kirillbelovtest/apiObject] 

рдлрд┐рд░ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:



рдКрдкрд░ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ред рддреЛ рдЖрдкрдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЗ рдмреЙрдбреА рдХреЛ рдЕрдкрдбреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд▓рд╛рдЙрдб рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ред рдЖрдкрдХреЛ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╡реЗрдмрд╣реВрдХ рдкрд░ рдирд╣реАрдВ рдорд┐рд▓ рдкрд╛рдПрдВрдЧреЗред


 deployWebhook[bot_TelegramBot, handler_] := CloudDeploy[APIFunction[{}, handler[HTTPRequestData["Body"]] &], "Deploy/Webhooks/" <> Hash[bot, "SHA", "HexString"], Permissions -> "Public" ] 

рд╣реИрдВрдбрд▓рд░ рдПрдХ рдФрд░ рдлрдВрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ рд╣реИред рд╣реИрдВрдбрд▓рд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдореЗрдВ рдмрджрд▓ рджреЗрдВ, рд╡рд╣рд╛рдВ рд╕реЗ рдЪреИрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ "рд╣реИрд▓реЛ" рд╢рдмреНрдж рд╡рд╛рдкрд╕ рднреЗрдЬреЗрдВред


 handlerHello[bot_TelegramBot][body_String] := Block[{json = ImportString[body, "RawJSON"], chat}, chat = json["message", "chat", "id"]; sendMessage[bot, chat, "hello"]; ] 

рдЕрдм рдмрд╛рджрд▓ рдореЗрдВ рдлрдВрдХреА рддреИрдирд╛рдд рдХрд░реЗрдВред


 webhookObject = deployWebhook[bot, handlerHello[bot]] 

рдмрд╛рд╣рд░ [..]: = ...
 CloudObject[https://www.wolframcloud.com/objects/kirillbelovtest/Deploy/Webhooks/b9bd74f89348faecd6b683ba02637dd4d4028a28] 

рдФрд░ рдЖрдЦрд┐рд░реА рдХрджрдо рдЗрд╕ рд╡рд╕реНрддреБ рдХреЗ рдкрддреЗ рдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред


 setWebhook[bot, webhookObject[[1]]] 

рдмрд╛рд╣рд░ [..]: = ...
 <|"ok" -> True, "result" -> True, "description" -> "Webhook was set"|> 

рдЕрдм рд╣рдо рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ:



рд╕рдВрд╡рд╛рдж рдХреЛ рд╡реИрдз рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рддрд░реНрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреНрд▓рд╛рдЙрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреБрдирдГ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╣реВрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


рдЙрддреНрддрд░реЛрдВ рдХрд╛ рддрд░реНрдХ


рд╡реБрд▓реНрдлреНрд░рд╛рдо рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдмреЙрдЯ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╣реЛрдЧрд╛ред рдЖрдЧреЗ, рдЙрд╕реА рддрд░рд╣, рдЖрдк рддрд░реНрдХ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдПрдкреАрдЖрдИ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╕рдВрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реАред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ / рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдмреЙрдЯ "рд╣реИрд▓реЛ" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреАрдмреЛрд░реНрдб рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдХреАрдмреЛрд░реНрдб рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдмрдЯрди рд░рд╣рддреЗ рд╣реИрдВ: "рд╣реИрд▓реЛ" рдФрд░ "рдЖрдк рдХреМрди рд╣реИрдВ?" рд╣рдореЗрдВ рдПрдХ рд╕рдВрдШ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╡рд╛рдж рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмреЙрдЯ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рдХреА рдХреБрдВрдЬреА рд╣реЛрдЧреАред рдкреНрд░рдореБрдЦ рдореВрд▓реНрдп рдмреЙрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдирдП рдХреАрдмреЛрд░реНрдб рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдмрдЯрди рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдмреЙрдЯ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЙрддреНрддрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


 keyboard[buttons : {__String}] := {"keyboard" -> {Table[{"text" -> button}, {button, buttons}]}, "resize_keyboard" -> True} $answers = <| (*user_text-><|"answer"->bot_text,"keyboard"->next_text|>*) "/start"-><|"answer"->"","keyboard"-> keyboard[{""," ?"}]|>, ""-><|"answer"->" ?", "keyboard" -> keyboard[{" ?"}]|> , " ?"-><|"answer"->"", "keyboard" -> keyboard[{""}]|> , " ?"-><|"answer"->"   Wolfram Language   ", "keyboard"->keyboard[{" ?"," ?"}]|> , " ?"-><|"answer"->"   :\nhttps://habr.com/post/422517/", "keyboard"->keyboard[{""," ?"}]|> , " ?"-><|"answer"->"  :\n@KirillBelovTest", "keyboard"->keyboard[{" ?",""}]|> , ""-><|"answer"->"", "keyboard"->keyboard[{""," ?"}]|> |>; answer[text_String] /; KeyExistsQ[$answers, text] := $answers[text] 

рдЕрдм рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдВ:


 handlerAbout[bot_TelegramBot][body_String] := Block[{json = ImportString[body, "RawJSON"], chat, text}, chat = json["message", "chat", "id"]; text = json["message", "text"]; sendMessage[bot, chat, answer[text]["answer"], "reply_markup" -> answer[text]["keyboard"]]; ] 

рдФрд░ рдХреНрд▓рд╛рдЙрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░реЗрдВ:


 deployWebhook[bot, handlerAbout[bot]]; 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдмреЙрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╕рдВрджреЗрд╢ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ:



рдХрд╛рд░реНрдп рд╡рд┐рд╕реНрддрд╛рд░


рдЕрдм рддрдХ, рдореМрдЬреВрджрд╛ рдмреЙрдЯ рдХреА рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХреЛрдИ рдмреБрдирд┐рдпрд╛рджреА рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреАрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ? рдКрдкрд░ рдХрд┐рдП рдЧрдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реЗ рдмреЙрдЯ рдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВ! рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡рд╣ рд╡реБрд▓реНрдлреНрд░рд╛рдо рд▓реИрдВрдЧреНрд╡реЗрдЬ рдФрд░ рд╡реЛрд▓реНрдлреНрд░реИрдо рдХреНрд▓рд╛рдЙрдб рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ! рдЖрдкрдХреЛ рдмрд╕ рдЙрддреНрддрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!


 answer[text_String]["keyboard"] /; StringContainsQ[text, "  "] := Automatic answer[text_String]["answer"] /; StringContainsQ[text, "  "] := ToString[Flatten[Block[{args = StringSplit[text, "  "]}, Solve[ToExpression[args[[1]]], ToExpression[args[[2]]]] ]]] deployWebhook[bot, handlerAbout[bot]]; 


рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рд╣реИ ред


рдкреНрд░рддрд┐рдмрдВрдз


рд╡реЛрд▓реНрдлреНрд░рд╛рдо рдХреНрд▓рд╛рдЙрдб рдПрдХ рдРрд╕рд╛ рдордВрдЪ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореБрдлреНрдд рдореЗрдВ рд╡реБрд▓реНрдлреНрд░рд╛рдо рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡реЛрд▓реНрдлреНрд░рд╛рдо рд░рд┐рд╕рд░реНрдЪ рдХрд╛ рдореБрдЦреНрдп рдЙрддреНрдкрд╛рдж, рдореИрдереЗрдореЗрдЯрд┐рдХрд╛, рдкреИрд╕рд╛ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╡реЗ рдмрд╣реБрдд рдордЬрдмреВрдд рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ рдордВрдЪ рдХреЗ рдореБрдлреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐ рдорд╛рд╣ 1000 рдХреНрд▓рд╛рдЙрдб рдХреНрд░реЗрдбрд┐рдЯ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЙрдб рдЛрдг рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрд▓реЗрдЦ CloudDeploy + APIFunction рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдРрд╕реА рд╡рд╕реНрддреБрдПрдБ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдордп рдХреЗ 0.1 рд╕реЗрдХрдВрдб рдореЗрдВ 1 рдХреНрд░реЗрдбрд┐рдЯ рдЦрд░реНрдЪ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 1 рдорд┐рдирдЯ рдФрд░ 40 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рд░реНрд╡рд░ рд╕рдордп рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреЙрдЯ)ред рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдмрд╣реБрдд, рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдореБрдЦреНрдп рдЬреЛрд░ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╣реИ рдЬреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдЗрд╕ рдореЛрдб рдореЗрдВ рдХреЛрдИ рд╕рдордп рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рддреНрд░ рдХреА рдЕрд╡рдзрд┐ рдФрд░ рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рд╡рд┐рдХрд╛рд╕ рдордВрдЪ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рдЧрдгрд┐рддрдЬреНрдЮ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


тЖТ рд╡реБрд▓реНрдлреНрд░рд╛рдо рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЕрдиреБрдЪреНрдЫреЗрдж рдФрд░ рдХреЛрдб

Source: https://habr.com/ru/post/hi422517/


All Articles