O que é um Menu Persistente?
Um Menu Persistente permite exibir um menu permanente com as principais ações do seu negócio, como horário de funcionamento, localizações de lojas, produtos ou outras opções usadas com frequência. O menu fica sempre visível durante uma conversa com seu bot do Facebook Messenger.

Tipos de Botão Suportados
O Menu Persistente suporta os seguintes tipos de botão:
-
Botões de URL (
web_url) -
Botões de Callback (
postback)
Criar um Menu Persistente
Use a função a seguir para criar um Menu Persistente para uma página do Facebook:
response = fb_set_persistent_menu(group_id, buttons)
Parâmetros
| Parâmetro | Descrição |
|---|---|
| group_id | ID do Bot do Facebook. Você pode encontrá-lo na seção Canal do seu projeto MaviBot. |
| buttons | Dicionário descrevendo os botões do menu. |
Estrutura do Dicionário de Botões
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
]
}
A chave default é obrigatória. Ela define os botões exibidos para usuários cujo idioma não possui um menu personalizado.
Cada botão é descrito por um array:
["tipo_botao", "Texto do botão", "Valor"]
Formatos de Botão Suportados
Botão de Callback
["postback", "Texto do botão", "texto_callback"]
| Valor | Descrição |
|---|---|
| postback | Tipo do botão. |
| Texto do botão | Texto exibido no botão. |
| texto_callback | Texto enviado ao bot quando o botão é clicado. |
Botão de URL
["web_url", "Texto do botão", "https://exemplo.com"]
| Valor | Descrição |
|---|---|
| web_url | Tipo do botão. |
| Texto do botão | Texto exibido no botão. |
| URL | Site aberto quando o botão é clicado. |
Localização
Você pode exibir menus diferentes dependendo do idioma do usuário.
Basta adicionar chaves adicionais ao dicionário de botões.
Exemplo:
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
],
"en_EN": [
["postback", "Button", "callback_text 1"],
["postback", "Button 2", "callback_text 2"],
["web_url", "Website", "https://mavibot.ai/"]
]
}
Neste exemplo, usuários com o idioma en_EN receberão um menu diferente.
Idiomas Suportados
af_ZA, ar_AR, as_IN, az_AZ, be_BY, bg_BG, bn_IN, br_FR, bs_BA, ca_ES,
cb_IQ, co_FR, cs_CZ, cx_PH, cy_GB, da_DK, de_DE, el_GR, en_GB, en_UD,
en_US, es_ES, es_LA, et_EE, eu_ES, fa_IR, ff_NG, fi_FI, fo_FO, fr_CA,
fr_FR, fy_NL, ga_IE, gl_ES, gn_PY, gu_IN, ha_NG, he_IL, hi_IN, hr_HR,
hu_HU, hy_AM, id_ID, is_IS, it_IT, ja_JP, ja_KS, jv_ID, ka_GE, kk_KZ,
km_KH, kn_IN, ko_KR, ku_TR, lt_LT, lv_LV, mg_MG, mk_MK, ml_IN, mn_MN,
mr_IN, ms_MY, mt_MT, my_MM, nb_NO, ne_NP, nl_BE, nl_NL, nn_NO, or_IN,
pa_IN, pl_PL, ps_AF, pt_BR, pt_PT, qz_MM, ro_RO, ru_RU, rw_RW, sc_IT,
si_LK, sk_SK, sl_SI, so_SO, sq_AL, sr_RS, sv_SE, sw_KE, sz_PL, ta_IN,
te_IN, tg_TJ, th_TH, tl_PH, tr_TR, tz_MA, uk_UA, ur_PK, uz_UZ, vi_VN,
zh_CN, zh_HK, zh_TW
Criar um Menu Persistente para um Usuário Específico
Para criar um menu que fique visível apenas para o usuário para o qual a função é chamada, passe 1 como terceiro parâmetro.
response = fb_set_persistent_menu(group_id, buttons, 1)
Nota
Menus Persistentes em nível de usuário são atualizados imediatamente.
Menus Persistentes em nível de página podem levar até 24 horas para serem atualizados.
O Facebook também limita as atualizações de menu em nível de usuário a 10 solicitações por usuário a cada 10 minutos.
Desabilitar o Compositor
Você pode desabilitar o compositor do Messenger para que os usuários interajam com o bot apenas através do Menu Persistente.
Isso é útil quando o bot deve permitir apenas ações predefinidas.
Desabilitar o Compositor para Todos os Usuários
response = fb_set_persistent_menu(group_id, buttons, "", 1)
Desabilitar o Compositor para um Usuário Específico
response = fb_set_persistent_menu(group_id, buttons, 1, 1)
Parâmetros
| Parâmetro | Descrição |
|---|---|
| group_id | ID do Bot do Facebook. |
| buttons | Dicionário de botões. |
| 3º parâmetro | Defina como 1 para aplicar o menu apenas ao usuário atual. Deixe vazio para aplicar à página. |
| 4º parâmetro | Defina como 1 para desabilitar o compositor do Messenger. |
Valores de Retorno
Se a função for concluída com sucesso:
{"result":"success"}
Caso contrário, uma descrição do erro é retornada.
Exemplo:
Error parse buttons data
ou
{
"error": {
"message": "(#100) param persistent_menu[0][call_to_actions] must be non-empty.",
"type": "OAuthException",
"code": 100,
"fbtrace_id": "AJtVczu7TEJJxbMfnO"
}
}
Exemplos
Criar um Menu para Todos os Usuários
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
],
"en_EN": [
["postback", "Button", "callback_text 1"],
["postback", "Button 2", "callback_text 2"],
["web_url", "Website", "https://mavibot.ai/"]
]
}
response = fb_set_persistent_menu("123456789", buttons)
Criar um Menu para Todos os Usuários e Desabilitar o Compositor
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
],
"en_EN": [
["postback", "Button", "callback_text 1"],
["postback", "Button 2", "callback_text 2"],
["web_url", "Website", "https://mavibot.ai/"]
]
}
response = fb_set_persistent_menu("123456789", buttons, "", 1)
Criar um Menu para o Usuário Atual
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
]
}
response = fb_set_persistent_menu("123456789", buttons, 1)
Criar um Menu de Usuário e Desabilitar o Compositor
buttons = {
"default": [
["postback", "Botão 1", "texto_callback 1"],
["postback", "Botão 2", "texto_callback 2"],
["web_url", "Site", "https://mavibot.ai/"]
]
}
response = fb_set_persistent_menu("123456789", buttons, 1, 1)
Excluir um Menu Persistente
Excluir o Menu em Nível de Página
response = fb_delete_persistent_menu(group_id)
Resposta de sucesso:
{"result":"success"}
Possível erro:
Bot not found
Excluir um Menu em Nível de Usuário
response = fb_delete_persistent_menu(group_id, 1)
Resposta de sucesso:
{"result":"success"}
Possível erro:
Bot not found