-
Notifications
You must be signed in to change notification settings - Fork 143
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Atualização de Doc para envio de mensagem
- Loading branch information
Showing
1 changed file
with
274 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,89 +1,302 @@ | ||
import React from "react"; | ||
import { makeStyles } from "@material-ui/core/styles"; | ||
import Button from "@material-ui/core/Button"; | ||
import Container from "@material-ui/core/Container"; | ||
import Grid from "@material-ui/core/Grid"; | ||
import Paper from "@material-ui/core/Paper"; | ||
import { makeStyles } from "@material-ui/core/styles"; | ||
import TextField from "@material-ui/core/TextField"; | ||
import axios from "axios"; | ||
import React, { useEffect, useState } from "react"; | ||
import toastError from "../../errors/toastError"; | ||
import api from "../../services/api"; | ||
|
||
const useStyles = makeStyles(theme => ({ | ||
root: { | ||
display: "flex", | ||
alignItems: "center", | ||
justifyContent: "center", | ||
padding: theme.spacing(2), | ||
}, | ||
|
||
paper: { | ||
backgroundColor: theme.palette.background.paper, | ||
padding: theme.spacing(2), | ||
formContainer: { | ||
display: "flex", | ||
alignItems: "center", | ||
marginBottom: 12, | ||
flexDirection: "column", | ||
width: "100%", | ||
maxWidth: 600, | ||
backgroundColor: theme.palette.background.paper, | ||
padding: theme.spacing(4), | ||
borderRadius: "8px", | ||
boxShadow: "0 4px 8px rgba(0, 0, 0, 0.1)", | ||
position: "sticky", | ||
top: theme.spacing(8), | ||
}, | ||
|
||
settingOption: { | ||
marginLeft: "auto", | ||
instructionContainer: { | ||
padding: theme.spacing(4), | ||
backgroundColor: theme.palette.background.paper, | ||
borderRadius: "8px", | ||
boxShadow: "0 4px 8px rgba(0, 0, 0, 0.1)", | ||
}, | ||
|
||
margin: { | ||
margin: theme.spacing(1), | ||
input: { | ||
marginBottom: theme.spacing(3), | ||
}, | ||
button: { | ||
marginTop: theme.spacing(2), | ||
backgroundColor: theme.palette.primary.main, | ||
color: "#fff", | ||
}, | ||
fileInput: { | ||
marginTop: theme.spacing(2), | ||
}, | ||
|
||
color: { | ||
color: theme.palette.secondary.main, | ||
color: theme.palette.primary.main, | ||
}, | ||
|
||
text: { | ||
marginLeft: "42px", | ||
color: theme.palette.text.secondary, | ||
marginBottom: theme.spacing(1), | ||
}, | ||
|
||
textP: { | ||
marginLeft: "42px", | ||
color: theme.palette.text.secondary, | ||
marginBottom: theme.spacing(2), | ||
}, | ||
|
||
})); | ||
|
||
const Api = () => { | ||
const classes = useStyles(); | ||
const [number, setNumber] = useState(""); | ||
const [body, setBody] = useState(""); | ||
const [media, setMedia] = useState(null); | ||
const [userId, setUserId] = useState(); | ||
const [queueId, setQueueId] = useState(); | ||
const [whatsappId, setWhatsappId] = useState(); | ||
const [settings, setSettings] = useState([]); | ||
const [users, setUsers] = useState([]); | ||
const [queues, setQueues] = useState([]); | ||
const [whatsapps, setWhatsapps] = useState([]); | ||
|
||
useEffect(() => { | ||
(async () => { | ||
try { | ||
const { data } = await api.get("/queue"); | ||
setQueues(data); | ||
} catch (err) { | ||
toastError(err); | ||
} | ||
})(); | ||
}, []); | ||
|
||
useEffect(() => { | ||
(async () => { | ||
try { | ||
const { data } = await api.get("/users"); | ||
setUsers(data.users); | ||
} catch (err) { | ||
toastError(err); | ||
} | ||
})(); | ||
}, []); | ||
|
||
useEffect(() => { | ||
(async () => { | ||
try { | ||
const { data } = await api.get("/whatsapp"); | ||
setWhatsapps(data); | ||
} catch (err) { | ||
toastError(err); | ||
} | ||
})(); | ||
}, []); | ||
|
||
useEffect(() => { | ||
const fetchSession = async () => { | ||
try { | ||
const { data } = await api.get("/settings"); | ||
setSettings(data); | ||
} catch (err) { | ||
toastError(err); | ||
} | ||
}; | ||
fetchSession(); | ||
}, []); | ||
|
||
const getSettingValue = key => { | ||
const { value } = settings.find(s => s.key === key); | ||
return value; | ||
}; | ||
|
||
const handleMediaChange = (e) => { | ||
setMedia(e.target.files[0]); | ||
}; | ||
|
||
const handleSubmit = async (e) => { | ||
e.preventDefault(); | ||
const token = settings && settings.length > 0 && getSettingValue("userApiToken"); | ||
|
||
let payload; | ||
|
||
if (media) { | ||
const formData = new FormData(); | ||
formData.append("number", number); | ||
formData.append("body", body); | ||
formData.append("userId", userId); | ||
formData.append("queueId", queueId); | ||
formData.append("whatsappId", whatsappId); | ||
formData.append("medias", media); | ||
payload = formData; | ||
} else { | ||
payload = { | ||
number, | ||
body, | ||
userId, | ||
queueId, | ||
whatsappId | ||
}; | ||
} | ||
|
||
try { | ||
const response = await axios.post(`${process.env.REACT_APP_BACKEND_URL}/api/messages/send`, payload, { | ||
headers: { | ||
Authorization: `Bearer ${token}`, | ||
"Content-Type": media ? "multipart/form-data" : "application/json" | ||
} | ||
}); | ||
|
||
console.log("Mensagem enviada com sucesso:", response.data); | ||
} catch (error) { | ||
console.error("Erro ao enviar mensagem:", error); | ||
} | ||
}; | ||
|
||
return ( | ||
<div className={classes.root}> | ||
<Container> | ||
<h2>Documentação para envio de mensagens</h2> | ||
|
||
<h2 className={classes.color}>Métodos de Envio</h2> | ||
|
||
<p className={classes.text}>1. Mensagens de Texto</p> | ||
<p className={classes.text}>2. Mensagens de Mídia</p> | ||
|
||
<h2 className={classes.color}>Instruções</h2> | ||
<p><b>Observações Importantes</b></p> | ||
<ul> | ||
<li className={classes.text}>Para pegar o token da API, vá em configurações que seu token estará la, sem ele não será possivel enviar mensagens.</li> | ||
<li className={classes.text}>O número para envio não deve ter mascara ou caracteres especiais e deve ser composto por:</li> | ||
<br /> | ||
<ol> | ||
<Container className={classes.root}> | ||
<Grid container spacing={4}> | ||
<Grid item xs={12} md={6}> | ||
<Paper className={classes.instructionContainer}> | ||
<h2>Documentação para envio de mensagens</h2> | ||
<h2 className={classes.color}>Métodos de Envio</h2> | ||
<p className={classes.text}>1. Mensagens de Texto</p> | ||
<p className={classes.text}>2. Mensagens de Mídia</p> | ||
|
||
<h2 className={classes.color}>Instruções</h2> | ||
<p><b>Observações Importantes</b></p> | ||
<ul> | ||
<li className={classes.text}>Código do pais - Ex: 55 (Brasil)</li> | ||
<li className={classes.text}>DDD</li> | ||
<li className={classes.text}>Número</li> | ||
<li className={classes.text}>Para pegar o token da API, vá em API key que seu token estará lá, sem ele não será possível enviar mensagens.</li> | ||
<li className={classes.text}>O número para envio não deve ter máscara ou caracteres especiais e deve ser composto por:</li> | ||
<ul> | ||
<li className={classes.text}>Código do país - Ex: 55 (Brasil)</li> | ||
<li className={classes.text}>DDD</li> | ||
<li className={classes.text}>Número</li> | ||
</ul> | ||
</ul> | ||
</ol> | ||
</ul> | ||
<h2 className={classes.color}>1. Mensagens de Texto</h2> | ||
<p>Seguem abaixo lista de informações necessárias para envio das mensagens de texto:</p> | ||
<p className={classes.textP}><b>URL: </b>{process.env.REACT_APP_BACKEND_URL}/api/messages/send</p> | ||
<p className={classes.textP}><b>Metódo: </b>POST</p> | ||
<p className={classes.textP}><b>Headers: </b>Authorization: Bearer (token) e Content-Type application/json</p> | ||
<p className={classes.textP}><b>Body: </b>"number": "5599999999999", "body": "Enviado via api"</p> | ||
|
||
<h2 className={classes.color}>2. Mensagens de Mídia</h2> | ||
<p>Seguem abaixo lista de informações necessárias para envio de midias:</p> | ||
<p className={classes.textP}><b>URL: </b>{process.env.REACT_APP_BACKEND_URL}/api/messages/send</p> | ||
<p className={classes.textP}><b>Metódo: </b>POST</p> | ||
<p className={classes.textP}><b>Headers: </b>Authorization: Bearer (token) e Content-Type multipart/form-data</p> | ||
<p className={classes.textP}><b>Body: </b>"number": "5599999999999", "medias": "aqui vai sua midia", "body": "Enviado via api"</p> | ||
</Container> | ||
</div> | ||
|
||
<h2 className={classes.color}>1. Mensagens de Texto</h2> | ||
<p>Seguem abaixo lista de informações necessárias para envio das mensagens de texto:</p> | ||
<p className={classes.textP}><b>URL: </b>{process.env.REACT_APP_BACKEND_URL}/api/messages/send</p> | ||
<p className={classes.textP}><b>Método: </b>POST</p> | ||
<p className={classes.textP}><b>Headers: </b>Authorization: Bearer (token) e Content-Type application/json</p> | ||
<p className={classes.textP}><b>Body: </b>"number": "5599999999999", "body": "Enviado via api", "userId": "1", "queueId": "1", "whatsappId": "1"</p> | ||
|
||
<h2 className={classes.color}>2. Mensagens de Mídia</h2> | ||
<p>Seguem abaixo lista de informações necessárias para envio de mídias:</p> | ||
<p className={classes.textP}><b>URL: </b>{process.env.REACT_APP_BACKEND_URL}/api/messages/send</p> | ||
<p className={classes.textP}><b>Método: </b>POST</p> | ||
<p className={classes.textP}><b>Headers: </b>Authorization: Bearer (token) e Content-Type multipart/form-data</p> | ||
<p className={classes.textP}><b>Body: </b>"number": "5599999999999", "medias": "aqui vai sua mídia", "body": "Enviado via api", "userId": "1", "queueId": "1", "whatsappId": "1"</p> | ||
</Paper> | ||
</Grid> | ||
<Grid item xs={12} md={6}> | ||
<Paper className={classes.formContainer}> | ||
<h2>Envie Mensagens de Texto ou Mídia</h2> | ||
<form onSubmit={handleSubmit}> | ||
<TextField | ||
className={classes.input} | ||
label="Número de telefone" | ||
variant="outlined" | ||
fullWidth | ||
value={number} | ||
onChange={(e) => setNumber(e.target.value)} | ||
required | ||
/> | ||
<TextField | ||
className={classes.input} | ||
label="Corpo da mensagem" | ||
variant="outlined" | ||
fullWidth | ||
value={body} | ||
onChange={(e) => setBody(e.target.value)} | ||
required | ||
/> | ||
<Grid container spacing={2}> | ||
<Grid item xs={4}> | ||
<TextField | ||
select | ||
className={classes.input} | ||
label="User ID" | ||
variant="outlined" | ||
fullWidth | ||
value={userId} | ||
onChange={(e) => setUserId(e.target.value)} | ||
required | ||
> | ||
{users.map((user) => ( | ||
<option key={user.id} value={user.id}> | ||
{user.name} | ||
</option> | ||
))} | ||
</TextField> | ||
</Grid> | ||
|
||
<Grid item xs={4}> | ||
<TextField | ||
select | ||
className={classes.input} | ||
label="Setor ID" | ||
variant="outlined" | ||
fullWidth | ||
value={queueId} | ||
onChange={(e) => setQueueId(e.target.value)} | ||
required | ||
> | ||
{queues.map((queue) => ( | ||
<option key={queue.id} value={queue.id}> | ||
{queue.name} | ||
</option> | ||
))} | ||
</TextField> | ||
</Grid> | ||
|
||
<Grid item xs={4}> | ||
<TextField | ||
select | ||
className={classes.input} | ||
label="WhatsApp ID" | ||
variant="outlined" | ||
fullWidth | ||
value={whatsappId} | ||
onChange={(e) => setWhatsappId(e.target.value)} | ||
required | ||
> | ||
{whatsapps.map((whatsapp) => ( | ||
<option key={whatsapp.id} value={whatsapp.id}> | ||
{whatsapp.name} | ||
</option> | ||
))} | ||
</TextField> | ||
</Grid> | ||
</Grid> | ||
<input | ||
className={classes.fileInput} | ||
type="file" | ||
onChange={handleMediaChange} | ||
/> | ||
<Button | ||
className={classes.button} | ||
type="submit" | ||
fullWidth | ||
variant="contained" | ||
> | ||
ENVIAR MENSAGEM | ||
</Button> | ||
</form> | ||
</Paper> | ||
</Grid> | ||
</Grid> | ||
</Container> | ||
); | ||
}; | ||
|
||
export default Api; | ||
export default Api; |