Alguém pode me informar como obter a ação INIT?
Espero que a ação INIT seja acionada automaticamente quando o usuário tocar no botão "Preencher formulário" para abrir o formulário da mensagem enviada a ele.
Experimentei enviar mensagens iniciais usando vários modelos de marketing e utilitários, cada um com estruturas diferentes. Também tentei a abordagem que descobri aqui, em que a ação "INIT" é incluída no payload da mensagem do modelo. Além disso, tentei usar um tipo interativo, conforme sugerido pelo ChatGPT. No entanto, não estou recebendo a ação "INIT".
Nos logs, vejo constantemente uma ação "ping" e, em seguida, uma entrada de log subsequente aparece quando envio meu data_exchange para MYFIRSTSCREEN. Mas o user_id só pode ser recuperado pela ação INIT, então não consigo prosseguir com meu fluxo.
Ao testar o fluxo com o construtor , percebo que a ação INIT é enviada com um código de resposta 200, e posso vê-lo nos logs nesse caso.
Por favor, me diga o que posso estar fazendo errado ou como posso obter o user_id (to_number) enquanto trabalho com o fluxo. O corpo descriptografado contém apenas os dados que enviei durante a troca de dados usando o JSON do fluxo.
message = {
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": user_id,
"type": "interactive",
"interactive": {
"type": "flow",
"header": {
"type": "text",
"text": "Welcome"
},
"body": {
"text": "Click fill form"
},
"action": {
"name": "flow",
"parameters": {
"flow_message_version": "3",
"flow_cta": "Fill form",
"flow_name": "my_main_form_name"
}
}
}
}
message = {
"messaging_product": "whatsapp",
"to": user_id,
"type": "template",
"template": {
"name": "main_flow_en",
"language": {"code": "en"},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "profile_name",
"text": profile_name
}
]
},
{
"type": "button",
"sub_type": "flow",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": json.dumps({
"action": "INIT",
"data": {
"to_number": str(user_id)
}
})
}
]
}
]
}
}
E tentei estes parâmetros:
{
"type": "button",
"sub_type": "flow",
"index": "0",
"parameters": [
{
"type": "action",
"action": {
"flow_action_data": {
"user_id": user_id,
"user_name": profile_name
}
}
}
]
}
Código de ponto final de fluxo:
def handle_form_submission(event, context):
body = json.loads(event.get('body', '{}'))
decrypted = decrypt_flow_data(body)
logger.info("✅ Decrypted body: %s", decrypted)
user_id = decrypted.get('to_number')
action = decrypted.get('action')
screen = decrypted.get('screen')
data = decrypted.get('data') or {}
flow_token = decrypted.get('flow_token')
if action == 'INIT':
logger.info("🚀 INIT state")
profile = get_user_profile(user_id)
store_user_data(user_id, {
'SK': 'META',
'flow_token': flow_token,
'profile_name': profile,
'started_at': iso_now()
})
response = {'version': '3.0', 'screen': 'MYFIRSTSCREEN',
'data': {'greeting': 'Welcome'}}
elif action == "ping":
response = {"version": "3.0", "data": {"status": "active"}}
elif action == 'data_exchange' and screen == 'MYFIRSTSCREEN':
....
Pronto. O que você deve fazer para inicializar o processo é definir a ação de fluxo como troca de dados. Experimente esta abordagem e me diga se funciona para você.