在Facebook Messenger上将持久性菜单更改为其他语言

时间:2018-03-04 18:43:36

标签: python-3.x facebook messenger

我制作了多种语言(俄语,英语,希伯来语)机器人,并希望任何用户都可以将持久性菜单切换到其他语言。他能这样吗?

这是第一部分。我初始化了持久性菜单:设置问候语,设置开始按钮(GET_STARTED_PAYLOAD)和设置菜单

def init_facebook() -> None:
"""
Init configuration for the facebook bot.
"""
# Set greeting for the bot
requests.post(
    url=API_URL,
    params={'access_token': PAT},
    data=json.dumps({
        'greeting': [
            {"locale": "default",
             "text": 'Welcome to the'
                     ' Jew Calendar Bot!\nFor start,'
                     ' press the \"Get Started\" button and send your'
                     ' location.\nFor help press'
                     ' \"Contact\" button.'},
            {"locale": "en_US",
             "text": 'Welcome to the'
                     ' Jew Calendar Bot!\nFor start,'
                     ' press the \"Get Started\" button and send your'
                     ' location.\nFor help press'
                     ' \"Contact\" button.'
             },
            {"locale": "ru_RU",
             "text": 'Добро пожаловать'
                     ' в Jew Calendar Bot!\nЧтобы начать,'
                     ' нажмите кнопку \"Начать\" и'
                     ' отправьте вашу геолокацию.\nДля справки нажмите'
                     ' кнопку \"Связаться\".'
             }
        ]

    }),
    headers={'Content-type': 'application/json'}
)
# Set start button for the bot
requests.post(
    url=API_URL,
    params={'access_token': PAT},
    data=json.dumps({
        'get_started': {
            'payload': 'GET_STARTED_PAYLOAD'
        }
    }),
    headers={'Content-type': 'application/json'}
)

# Set persistent menu for the bot
requests.post(
    url=API_URL,
    params={'access_token': PAT},
    data=json.dumps({
        'persistent_menu': [
            {
                'locale': 'default',
                'composer_input_disabled': True,
                'call_to_actions': [
                    {
                        'title': 'Change Language',
                        'type': 'nested',
                        'call_to_actions': [
                            {
                                'title': 'English',
                                'type': 'postback',
                                'payload': 'ENGLISH_PAYLOAD'
                            },
                            {
                                'title': 'Русский',
                                'type': 'postback',
                                'payload': 'RUSSIAN_PAYLOAD'
                            },
                            {
                                'title': 'עִברִית',
                                'type': 'postback',
                                'payload': 'HEBREW_PAYLOAD'
                            }
                        ]
                    },
                    {
                        'title': 'Update location',
                        'type': 'postback',
                        'payload': 'UPDATE_LOCATION_PAYLOAD_EN'
                    },
                    {
                        'title': 'Contact',
                        'type': 'web_url',
                        'url': 'http://telegra.ph/'
                               'Hebrew-Calendar-Bot-FAQ-05-10',

                    }
                ]
            },
            {
                'locale': 'en_US',
                'composer_input_disabled': True,
                'call_to_actions': [
                    {
                        'title': 'Change Language',
                        'type': 'nested',
                        'call_to_actions': [
                            {
                                'title': 'English',
                                'type': 'postback',
                                'payload': 'ENGLISH_PAYLOAD'
                            },
                            {
                                'title': 'Русский',
                                'type': 'postback',
                                'payload': 'RUSSIAN_PAYLOAD'
                            },
                            {
                                'title': 'עִברִית',
                                'type': 'postback',
                                'payload': 'HEBREW_PAYLOAD'
                            }
                        ]
                    },
                    {
                        'title': 'Update location',
                        'type': 'postback',
                        'payload': 'UPDATE_LOCATION_PAYLOAD_EN'
                    },
                    {
                        'title': 'Contact',
                        'type': 'web_url',
                        'url': 'http://telegra.ph/'
                               'Hebrew-Calendar-Bot-FAQ-05-10',

                    }
                ]
            },
            {
                'locale': 'ru_RU',
                'composer_input_disabled': True,
                'call_to_actions': [
                    {
                        'title': 'Сменить Язык',
                        'type': 'nested',
                        'call_to_actions': [
                            {
                                'title': 'English',
                                'type': 'postback',
                                'payload': 'ENGLISH_PAYLOAD'
                            },
                            {
                                'title': 'Русский',
                                'type': 'postback',
                                'payload': 'RUSSIAN_PAYLOAD'
                            },
                            {
                                'title': 'עִברִית',
                                'type': 'postback',
                                'payload': 'HEBREW_PAYLOAD'
                            }
                        ]
                    },
                    {
                        'title': 'Обновить местоположение',
                        'type': 'postback',
                        'payload': 'UPDATE_LOCATION_PAYLOAD_RU'
                    },
                    {
                        'title': 'Связаться',
                        'type': 'web_url',
                        'url': 'http://telegra.ph/'
                               'Hebrew-Calendar-Bot-FAQ-05-10',

                    }
                ]
            },
            {
                'locale': 'he_IL',
                'composer_input_disabled': True,
                'call_to_actions': [
                    {
                        'title': 'לשנות את השפה',
                        'type': 'nested',
                        'call_to_actions': [
                            {
                                'title': 'English',
                                'type': 'postback',
                                'payload': 'ENGLISH_PAYLOAD'
                            },
                            {
                                'title': 'Русский',
                                'type': 'postback',
                                'payload': 'RUSSIAN_PAYLOAD'
                            },
                            {
                                'title': 'עִברִית',
                                'type': 'postback',
                                'payload': 'HEBREW_PAYLOAD'
                            }
                        ]
                    },
                    {
                        'title': 'עדכון מיקום',
                        'type': 'postback',
                        'payload': 'UPDATE_LOCATION_PAYLOAD_IL'
                    },
                    {
                        'title': 'צור קשר',
                        'type': 'web_url',
                        'url': 'http://telegra.ph/'
                               'Hebrew-Calendar-Bot-FAQ-05-10',

                    }
                ]
            }
        ]
    }),
    headers={'Content-type': 'application/json'}
)

这是第二部分。我尝试重复第2点和第3点,在使用bot时重置菜单。菜单没有任何反应,机器人也没有响应其他命令

def send_message(token: str, recipient: str, message: dict,
             message_type: str) -> None:
"""
    Send the message text to recipient with id recipient.
"""
if message_type is 'postback':
    r = requests.post(
        url=API_URL_PROFILE,
        params={'access_token': token},
        data=json.dumps({
            'get_started': {
                'payload': 'GET_STARTED_PAYLOAD'
            }
        }),
        headers={'Content-type': 'application/json'}
    )
    print(f'Set get_started result: status {r.status_code},'
          f' response {r.text}')

    requests.post(
        url=API_URL_PROFILE,
        params={'access_token': token},
        data=json.dumps(message),
        headers={'Content-type': 'application/json'})
else:
    requests.post(
        API_URL_MESSAGE,
        params={'access_token': token},
        data=json.dumps({
            "messaging_type": "RESPONSE",
            'recipient': {'id': recipient},
            'message': message
        }),
        headers={'Content-type': 'application/json'}
    )

1 个答案:

答案 0 :(得分:0)

持久性菜单存储在页面级别,无法为每个用户定制。如果您通过Messenger Profile API更新菜单,则会为所有用户进行更改。

更多详情:https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu