AWS + рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд╝реЙрд░реНрдо

рдЫрд╡рд┐

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

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

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

рдЪрд░рдг 1: рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдмреЙрдЯ, рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ


рд╣рдо @BotFatherрдЯреАрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ /newbot, рдирд╛рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИ! рд╣рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдорд┐рд▓рд╛ ред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВред

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

рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЛрдХрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЗ рд╕рд╛рде "рдмрд╛рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ chat_idрд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдЖрдк рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЛ рдХрдорд╛рдВрдб рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ /startрдФрд░ рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЪрд░рдг 2: рдПрдХ рдордзреНрдпрд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛


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

рдореИрдВрдиреЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ (рдкреНрд░рд╛рд░реВрдк yaml) рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред

sendTelegramMessage:
  description: used for contact form (${self:custom.stage})
  handler: lib/additional/sendMessageTelegram.handler
  environment: ${file(env_contact.yml):${self:custom.stage}}
  events:
    - http:
      path: contact
      method: POST
      private: false
  package:
    include:
      - lib/additional/sendMessageTelegram.js

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

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

exports.handler = async (event) => {
  if (!event.body) {
    return createResponse(400, " ");
  }

  const data = JSON.parse(event.body);

  if (!data.email || !data.message) {
    return createResponse(400, " 'email'  'message' ");
  }

  try {
    const telegram = getTelegramConfig();

    await fetch(`${telegram.url}/bot${telegram.token}/sendMessage?${telegram.params(data.email, data.message)}`)

    return createResponse(200, " ");
  } catch (e) {
    return createResponse(500, e.message);
  }
};

getTelegramConfigрдЕрдиреБрд░реЛрдз URL рдмрдирд╛рдиреЗ рдФрд░ createResponseрд╕реНрдерд┐рддрд┐ рдХреЛрдб рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдирдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ ред

const getTelegramConfig = () => {
  const token = process.env.TELEGRAM_BOT_TOKEN;
  const chatId = process.env.TELEGRAM_MAIN_CONTACT;

  if (!token || !chatId) {
    throw new Error("  ");
  }

  return {
    url: "https://api.telegram.org",
    token,
    params: (email, message) => qp.encode({
      chat_id: chatId,
      parse_mode: "Markdown",
      text: "  " + email + ": ```" + message + "```"
    })
  };
};

const createResponse = (statusCode, message) => ({
  statusCode,
  body: JSON.stringify({ message }, null, 2)
});

qp.encodeрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ?param1=value¶m2=valueред

рдЕрдм, рдпрджрд┐ рд╣рдо рдиреАрдЪреЗ рджреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ POST рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

{
    "email": "privet@gmail.com",
    "message": "   .  . , ,  ,   . ,        .         ,   .  ,  .  .   ,     .          .  .    ,   "
}

рдЫрд╡рд┐

рдЪрд░рдг 3: рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдРрдк рдореЗрдВ "рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ"


рд╕рд╛рдордиреЗ рдХреЗ рднрд╛рдЧ рдХрд╛ рд╢реЗрд╖ рднрд╛рдЧред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ, рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 10 рд╡рд░реНрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдИрдореЗрд▓ рдкрддреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред JSX рдХрд╛

рд╣рд┐рд╕реНрд╕рд╛ ред - рдпрд╣ рдирд┐рд╖реНрдХреНрд░рд┐рдп ( ) рд╕реНрдерд┐рддрд┐ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд┐рддрд┐ ( ) рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдШрдЯрдХ рд╣реИ ред рд╕реНрдЯрд╛рдЗрд▓ рднреА рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣реИредButtondisabledloading

<View style={styles.container}>
  <TextInput
    value={sendersEmail}
    keyboardType="email-address"
    autoCapitalize="none"
    autoCompleteType="email"
    style={styles.input}
    onChangeText={onEmailChange}
    selectionColor="#555"
    placeholder=" "
    placeholderTextColor="#CCC"
    clearButtonMode="always"
    returnKeyType="done"
    disableFullscreenUI
  />
  <TextInput
    value={message}
    style={{ ...styles.input, ...styles.messageInput }}
    onChangeText={onMessageChange}
    selectionColor="#555"
    placeholder=" ..."
    placeholderTextColor="#CCC"
    clearButtonMode="always"
    returnKeyType="done"
    multiline
    textAlignVertical="top"
    disableFullscreenUI
  />
  <Button
    title=""
    loading={loading}
    disabled={disabled}
    onPress={onSendPress}
  />
</View>

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рдЧред

const [ sendersEmail, setSendersEmail ] = useState("");
  const [ message, setMessage ] = useState("");

  const [ loading, setLoading ] = useState(false);

  const onEmailChange = (value) => {
    setSendersEmail(value);
  };

  const onMessageChange = (value) => {
    setMessage(value);
  };

  const onSendPress = () => {
    setLoading(true);

    const url = "https://api.example.com/contact";

    fetch(url, {
      method: "POST",
      body: JSON.stringify({
        email: sendersEmail,
        message
      })
    })
    .then(() => {
      setLoading(false);
    })
    .catch(() => {
      setLoading(false);

      Alert.alert("", "    .");
    });
  };

  const isValidEmail = () => {
    const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    return emailRegex.test(sendersEmail.toLowerCase());
  };


  const disabled = message.length < 10 || !isValidEmail();

рд╕рдмрдорд┐рдЯ рдмрдЯрди рддрдм рддрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣реА рдИрдореЗрд▓ рдкрддреЗ рдФрд░ рдХрдо рд╕реЗ рдХрдо 10-рд╡рд░реНрдг рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдкреАрдЖрдИ рдЦреБрд▓рд╛ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВред

рдХреНрдпрд╛ рдЪреАрдЬрд╝ рдЫреВрдЯ рд░рд╣реА рд╣реИ


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

рдЙрдкрдпреЛрдЧреА рдХрдбрд╝рд┐рдпрд╛рдБ


рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ
https://core.telegram.org/bots/api#sendmessage
https://core.telegram.org/bots/api#markdown-style
https://facebook.imtqy.com/react-native/nocs/ рдкрд╛рда рдЗрдирдкреБрдЯ

All Articles