Sebelum saya mulai mengintegrasikan formulir umpan balik di salah satu proyek terakhir saya, saya mencoba menemukan pendekatan non-standar untuk menyelesaikan masalah. Email membutuhkan semacam server SMTP, dan itu hanya membosankan, terutama untuk pemula dengan aliran pesan rendah.Utusan, ini adalah alternatif yang bagus, dan ini adalah jalan yang saya pilih. Telegram menyediakan salah satu cara termudah untuk membuat bot (jika bukan yang termudah). Sebagai gantinya bisa apa saja - utusan lain, panggilan telepon (Amazon Connect) atau Yandex Dialogs.Kami tidak mencoba membuat chatbot atau antarmuka untuk korespondensi, kami ingin ini terlihat seperti bentuk umpan balik normal ketika pengirim tidak mengharapkan tanggapan langsung. Dalam contoh di bawah ini, penerima akan dapat membalas pengguna melalui email, yang akan ditinggalkannya di bidang formulir.Langkah 1: bot di Telegram, itu tidak bisa lebih mudah
Kami mengirim pesan @BotFather
dengan tim /newbot
, menetapkan nama dan hanya itu! Kami mendapat tanda . Kami menyimpannya untuk diri kita sendiri.Selain itu, kita perlu chat_id
- identifikasi obrolan ke mana pesan akan dikirim. Pelajari chat_id
sedikit lebih sulit daripada mendapatkan token , untungnya, ada perahu di bawah nama @my_id_bot
yang akan mengungkapkan Anda chat_id
.Akibatnya, kami memiliki token yang akan kami gunakan untuk "berbicara" dengan bot kami, dan chat_id
akan digunakan untuk mengirim pesan kepada Anda secara pribadi. Sekarang Anda dapat mengirim perintah ke bot kami /start
dan kami dapat melanjutkan.Telegram ditampilkan sebagai contoh dan karena kemudahan penggunaan bot, mungkin ada messenger lain atau pemicu lain di tempatnya.Langkah 2: Lambda sebagai perantara
Salah satu opsi untuk mengatur Telegram adalah dengan menyematkan seluruh kode permintaan dan "berbicara" dengan API Telegram ke dalam kode aplikasi Asli Bereaksi itu sendiri - pilihan yang baik untuk pengujian. Dalam kasus saya, API dengan beberapa fungsi Lambda aktif sudah dikonfigurasi, jadi opsi saya menyertakan Lambda sebagai lapisan perantara antara aplikasi dan API Telegram. Kode dan instruksi di bawah ini dapat digunakan dalam proyek React Native itu sendiri.Saya menggunakan kerangka Serverless untuk membuat fungsi baru dengan parameter di bawah ini (format 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
Ingat bahwa token dan chat_id
harus benar-benar disembunyikan. Dalam hal ini, saya menggunakan file variabel lingkungan yang akan digunakan di Lambda. Seperti yang Anda lihat dari baris di atas, Serverless akan mengonfigurasi Gateway API untuk permintaan POST. Perhatikan juga bahwa dalam hal ini, API terbuka untuk semua orang tanpa batasan apa pun.Dan di sini adalah bagian dari kode Lambda yang akan menerima permintaan kami. Front-end kami hanya mengumpulkan informasi - email dan pesan, dan mengirimkan permintaan ke fungsi kami, yang akan memproses permintaan di API Telegram.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);
}
};
Dua fungsi pembantu getTelegramConfig
untuk membuat URL permintaan dan createResponse
untuk menghasilkan respons standar dengan kode status dan pesan.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
digunakan untuk mengkonversi objek ke string seperti ?param1=value¶m2=value
.Sekarang, jika kami membuat permintaan POST dengan konten di bawah ini, kami akan menerima pesan kami di Telegram.{
"email": "privet@gmail.com",
"message": " . . , , , . , . , . , . . , . . . , "
}

Langkah 3: "Hubungi Kami" di Aplikasi Bereaksi Asli
Bagian ujung depan yang tersisa. Sebanyak mungkin, membutuhkan setidaknya 10 karakter untuk pesan dan memeriksa alamat email.Bagian dari BEJ . Button
- ini adalah komponennya dengan parameter tambahan disabled
status tidak aktif ( ) dan status unduhan ( loading
). Gaya juga sesuai dengan kebijaksanaan Anda.<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>
Bagian JavaScript.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();
Tombol Kirim akan tidak aktif sampai pengguna memasukkan alamat email yang benar dan setidaknya pesan 10 karakter. Ingat bahwa dalam contoh ini, API terbuka.
Seperti ini.Apa yang hilang
- Saya tidak menyentuh bagian dari API, ini adalah topik yang terpisah, banyak artikel lain dapat ditemukan tentang ini. Saya juga merekomendasikan agar Anda membiasakan diri dengan kerangka Serverless.
- Dalam contoh ini, kami menerima pesan di Telegram, tetapi kami harus menjawabnya melalui email. Ada banyak opsi berbeda dan ini hanyalah sebuah contoh.
tautan yang bermanfaat
Dalam bahasa Inggrishttps://core.telegram.org/bots/api#sendmessagehttps://core.telegram.org/bots/api#markdown-stylehttps://facebook.imtqy.com/react-native/docs/ masukan teks