Следуйте этой документации:
https://developers.facebook.com/docs/wh ... h-provider
https://developers.facebook.com/docs/wh ... ementation> Я выполнил все шаги, изложенные в этих двух документах. (index.html) < /p>
xxxx- Cadastro
[*]
// DEFINICAO DE VARIAVEIS
// ------------ Minhas informacoes ------------
let APP_ID = "123"; // seu APP ID
let ID_CONFIG = "xxxx"; // seu ID de configuração
let GRAPH_API_VERSION = "v22.0"; // versao da API
// ------------ Variaveis do cliente ao concluir o fluxo ------------
let CUSTOMER_BUSINESS_PHONE_NUMBER_ID = ""; // ID do número de telefone comercial do cliente
let CUSTOMER_WABA_ID = ""; // ID da conta comercial do WhatsApp do cliente
let CUSTOMER_BUSINESS_PORTFOLIO_ID = ""; // ID do portfólio de negócios do cliente
let FLOW_FINISH_TYPE = ""; // Indica que o cliente concluiu o fluxo com sucesso
// FINISH concluiu fluxo padrao
// FINISH_ONLY_WABA concluiu fluxo sem um número de telefone
// FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING concluiu fluxo com um número do WhatsApp Business
// ------------ Variaveis do cliente ao abandonar o fluxo ------------
let CURRENT_STEP = ""; // tela q o cliente estava visualizando antes de abandonar o fluxo
// ------------ Variaveis do cliente ao entrar no fluxo e receber um erro ------------
let ERROR_MESSAGE = ""; // descrição do erro
let ERROR_ID = ""; // ID do erro
let SESSION_ID = ""; // ID de sessão (inclua este ID se entrar em contato com o suporte)
let TIMESTAMP = ""; // data e hora - indica quando o cliente utilizou o Embedded Signup
// ------------ Variaveis da ETAPA 1 trocar o CODE pelo TOKEN ------------
let CODE = ""; // código retornado pelo Cadastro incorporado ao concluir o fluxo
let APP_SECRET = ""; // chave secreta do app: Painel de Apps > Chave secreta do app > Básico
let BUSINESS_TOKEN = ""; // retorno da ETAPA 1: token da empresa do cliente
// ------------ Variaveis da ETAPA 2 assinar WEBHOOK ------------
// ------------ Variaveis da ETAPA 3 cadastrar telefone do cliente ------------
let DESIRED_PIN = ""; // definir valor como um número de 6 dígitos (PIN de confirmação)
// ------------ Variaveis da ETAPA 4 enviar mensagem de teste ------------
let WHATSAPP_USER_NUMBER = "xxxx"; // seu num de tel pra enviar/receber msg (nn pode ser de uma API nuvem)
let BODY_TEXT = "Olá! Esta é uma mensagem de teste da NAME OF THE MY BUSINESS via API WhatsApp Business"; // texto do corpo da mensagem
let WHATSAPP_USER_ID = ""; // seu número de identificação do usuário do WhatsApp
let WHATSAPP_MESSAGE_ID = ""; // ID da mensagem do WhatsApp
let CAMPO_json = "";
function insereTentativaCadJS(dados) {
fetch('enviar_bd.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(dados)
})
.then(res => res.json())
.then(response => {
console.log("Servidor respondeu:", response.mensagem);
})
.catch(err => {
console.error("Erro ao enviar dados:", err);
});
}
//
// Janela de inicialização do SDK
window.fbAsyncInit = function(){
FB.init({
appId : APP_ID, // o ID do seu aplicativo vai aqui
autoLogAppEvents : true,
xfbml : true,
version : GRAPH_API_VERSION // A versão da Graph API vai aqui
});
};
//
// Janela do ouvinte de eventos de mensagem de registro de sessão
window.addEventListener('message', (event) => {
if (!event.origin.endsWith('facebook.com')/* && (event.origin !== "https://web.facebook.com")*/){
return;
}
try{
const data = JSON.parse(event.data);
if (data.type === 'WA_EMBEDDED_SIGNUP'){
// Verifica a string JSON gerada
const jsonData = JSON.stringify(data);
// --------------------------------------- SE O CLIENTE CONCLUIU O FLUXO COM SUCESSO
if (data.event === 'FINISH' || data.event === 'FINISH_ONLY_WABA' || data.event === 'FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING'){
FLOW_FINISH_TYPE = data.event;
CUSTOMER_BUSINESS_PHONE_NUMBER_ID = data.data.phone_number_id;
CUSTOMER_WABA_ID = data.data.waba_id;
CUSTOMER_BUSINESS_PORTFOLIO_ID = data.data.business_id;
CODE = data.data.code;
CAMPO_json = JSON.stringify(data, null, 2);
const dados1 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados1);
// --------------------------------------- SE O CLIENTE ABANDONOU O FLUXO
}else if (data.event === 'CANCEL'){
CURRENT_STEP = data.data.current_step;
CAMPO_json = JSON.stringify(data, null, 2);
const dados2 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados2);
// --------------------------------------- SE O CLIENTE RECEBEU MSG DE ERRO
}else if (data.event === 'ERROR'){
ERROR_MESSAGE = data.data.error_message;
ERROR_ID = data.data.error_id;
SESSION_ID = data.data.session_id;
TIMESTAMP = data.data.timestamp;
document.getElementById("parte-fluxo").textContent = JSON.stringify(data, null, 2);
CAMPO_json = JSON.stringify(data, null, 2);
const dados3 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados3);
}
}
// Exibir os dados recebidos no HTML
document.getElementById("parte-fluxo").textContent = JSON.stringify(data, null, 2);
}catch{
console.log('message event: ', event.data);
}
});
//
// Retorno de chamada de resposta
// Sempre que um cliente empresarial concluir com sucesso o fluxo de inscrição incorporada, enviaremos um código de token trocável CODE
// Adicione seu próprio código personalizado à instrução if-else que envia esse código ao seu servidor para que você possa trocá-lo posteriormente pelo token comercial do cliente ao integrá-lo
const fbLoginCallback = (response) => {
if (response.authResponse){
CODE = response.authResponse.code;
// Exibir os dados recebidos no HTML
document.getElementById("retorno-chamada").textContent = JSON.stringify(CODE, null, 2);
document.getElementById("retorno-chamada").textContent = JSON.stringify(response, null, 2);
// Exibir variáveis iniciais na tela
const statusDiv = document.getElementById("status-output");
statusDiv.innerHTML = `
`;
document.getElementById("parte-fluxo").textContent = JSON.stringify(data, null, 2);
CAMPO_json = JSON.stringify(response, null, 2);
const dados4 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados4);
// --------------------------------------------------------------- ETAPA 1 – TROCA CODE PELO TOKEN
fetch('https://NAME OF THE MY BUSINESS.com.br/crm/whatsapp/embedded_signup/trocar_token.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code: CODE }) // code do EmbeddedSignup, não do fbLoginCallback
})
.then(res => res.json())
.then(tokenData => {
BUSINESS_TOKEN = tokenData.access_token;
CAMPO_json = JSON.stringify(res, null, 2);
const dados5 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados5);
// -------------------------------------------------------------------- ETAPA 2 – ASSINA WEBHOOK
return fetch('https://NAME OF THE MY BUSINESS.com.br/crm/whatsapp/embedded_signup/assinar_webhook.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
waba_id: CUSTOMER_WABA_ID,
business_token: BUSINESS_TOKEN
})
}).then(res => res.json())
.then(webhookData => {
DESIRED_PIN = "123456";
document.getElementById("etapa2").textContent = JSON.stringify(webhookData, null, 2);
statusDiv.innerHTML += `
`;
statusDiv.innerHTML += `
`;
CAMPO_json = JSON.stringify(webhookData, null, 2);
const dados6 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados6);
// ---------------------------------------------------------- ETAPA 3 – REGISTRA NUM CLIENTE
return fetch('https://NAME OF THE MY BUSINESS.com.br/crm/whatsapp/embedded_signup/registrar_numero.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
phone_number_id: CUSTOMER_BUSINESS_PHONE_NUMBER_ID,
business_token: BUSINESS_TOKEN,
pin: DESIRED_PIN //
})
});
}).then(res => res.json())
.then(registroData => {
document.getElementById("etapa3").textContent = JSON.stringify(registroData, null, 2);
CAMPO_json = JSON.stringify(registroData, null, 2);
const dados7 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados7);
// ------------------------------------------------------ ETAPA 4 – ENVIAR MENSAGEM DE TESTE
return fetch(`https://graph.facebook.com/v21.0/${CUST ... }/messages`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${BUSINESS_TOKEN}`
},
body: JSON.stringify({
messaging_product: "whatsapp",
recipient_type: "individual",
to: WHATSAPP_USER_NUMBER,
type: "text",
text: {
body: BODY_TEXT,
}
})
}).then(response => response.json())
.then(responseJson => {
CAMPO_json = JSON.stringify(responseJson, null, 2);
const dados8 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID,CAMPO_json};
insereTentativaCadJS(dados8);
}).catch(error => {
CAMPO_json = JSON.stringify(error, null, 2);
const dadosErro = {
APP_ID, ID_CONFIG, GRAPH_API_VERSION,
CUSTOMER_BUSINESS_PHONE_NUMBER_ID, CUSTOMER_WABA_ID,
CUSTOMER_BUSINESS_PORTFOLIO_ID, FLOW_FINISH_TYPE,
CURRENT_STEP, ERROR_MESSAGE, ERROR_ID, SESSION_ID,
TIMESTAMP, CODE, APP_SECRET, BUSINESS_TOKEN,
DESIRED_PIN, WHATSAPP_USER_NUMBER, BODY_TEXT,
WHATSAPP_USER_ID, WHATSAPP_MESSAGE_ID, CAMPO_json
};
insereTentativaCadJS(dadosErro);
});
})
})
.then(res => res.json())
.then(messageResponse => {
// Salvando os dados da resposta
if (messageResponse.contacts && messageResponse.contacts.length > 0) {
WHATSAPP_USER_ID = messageResponse.contacts[0].wa_id;
}
if (messageResponse.messages && messageResponse.messages.length > 0) {
WHATSAPP_MESSAGE_ID = messageResponse.messages[0].id;
}
const dados9 = {APP_ID,ID_CONFIG,GRAPH_API_VERSION,CUSTOMER_BUSINESS_PHONE_NUMBER_ID,CUSTOMER_WABA_ID,CUSTOMER_BUSINESS_PORTFOLIO_ID,FLOW_FINISH_TYPE,CURRENT_STEP,ERROR_MESSAGE,ERROR_ID,SESSION_ID,TIMESTAMP,CODE,APP_SECRET,BUSINESS_TOKEN,DESIRED_PIN,WHATSAPP_USER_NUMBER,BODY_TEXT,WHATSAPP_USER_ID,WHATSAPP_MESSAGE_ID};
insereTentativaCadJS(dados9);
alert("Mensagem de teste enviada com sucesso!");
})
.catch(err => {
console.error("Erro no processo de integração:", err);
alert("Erro no cadastro. Veja o console para mais detalhes.");
statusDiv.innerHTML += `
`;
});
}else{
console.log('else response.authResponse: ', response); // remover após o teste
// seu código vai aqui
}
}
//
// Método de inicialização e registro de retorno de chamada
const launchWhatsAppSignup = () => {
FB.login(fbLoginCallback,{
config_id : ID_CONFIG, // seu ID de configuração vai aqui peguei de https://developers.facebook.com/apps/11 ... 1548077814 // painel de apps > Inicio Rapido > Integração > Auxiliar de configuração do Cadastro incorporado > Configuracao do App
response_type : 'code', // must be set to 'code' for System User access token
override_default_response_type : true,
extras : {
setup : {},
featureType : '', // Deixe em branco se você estiver integrando o cliente empresarial usando o fluxo padrão
sessionInfoVersion : '3'
}
});
}
NAME OF THE MY BUSINESS
Tela de Cadastro
Importante: Habilitar Pop-ups
Para fazer login com o Facebook, você precisa permitir pop-ups neste site:
- Se você vir um ícone de pop-up bloqueado na barra de endereço, clique nele
- Selecione "Sempre permitir pop-ups de [este site]"
- Clique em "Concluído" ou "Pronto"
- Tente fazer login novamente
Como fazer login:
- Clique no botão "Continuar com Facebook" abaixo
- Você será redirecionado para a página de login do Facebook
- Faça login com suas credenciais do Facebook
- Autorize o acesso à sua conta
Login with Facebook
Session info response:
SDK response:
Status da Integração:
INFORMACOES:
< /code>
Я знаю, что код длинный, но это в основном документация с добавленной «отпечатками». И некоторые «привлечь», чтобы сделать запросы.
Подробнее здесь: https://stackoverflow.com/questions/796 ... h-provider