Wit.ai - отправка изображений через Facebook Messenger Send API

Мне нужно, чтобы мой чат-бот Wit.ai отвечал на определенные сообщения с изображениями, и, поскольку я реорганизовал свой код, чтобы он соответствовал последнему примеру мессенджера в node-wit SDK, я не могу понять, как это сделать.

Ранее эта функция сообщения FB работала для меня:

var newMessage = function (recipientId, msg, atts, cb) {
    var opts = {
        form: {
            recipient: {
                id: recipientId
            },
        }
    }

    if (atts) {
        var message = {
            attachment: {
                "type": "image",
                "payload": {
                    "url": msg
                }
            }
        }
    } else {
        var message = {
            text: msg
        }
    }
    opts.form.message = message

    newRequest(opts, function (err, resp, data) {
        if (cb) {
            cb(err || data.error && data.error.message, data)
        }
    })
}

Теперь я обновил пример Messenger для SDK node-wit:

const fbMessage = (id, text) => {
     const body = JSON.stringify({
     recipient: { id },
     message: { text },
     });
    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
    return fetch('https://graph.facebook.com/me/messages?' + qs, {
         method: 'POST',
         headers: {'Content-Type': 'application/json'},
         body,
    })
    .then(rsp => rsp.json())
    .then(json => {
         if (json.error && json.error.message) {
              throw new Error(json.error.message);
         }
    return json;
    });
};

Что я изменил, как это, чтобы попытаться заставить изображения работать:

const fbMessage = (id, text, atts) => {

    if (atts) {
        var body = {
            attachment: {
                "type": "image",
                "payload": {
                    "url": { text }
                }
            },
        };
    } else {
        var body = JSON.stringify({
            recipient: { id },
            message: { text },
        });
    }
    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
    return fetch('https://graph.facebook.com/me/messages?' + qs, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body,
    })
    .then(rsp => rsp.json())
    .then(json => {
        if (json.error && json.error.message) {
            throw new Error(json.error.message);
        }
        return json;
    });
};

Текстовые сообщения отправляются как обычно, но когда я пытаюсь отправить вложение изображения, мои URL-ссылки на изображения просто отправляются в виде строк.

Ссылка API отправки FB Messenger находится здесь

Любая помощь будет принята с благодарностью!

1 ответ

Получил работу с этим:

const fbMessage = (id, text) => {

    var x = text.substring(0,4);

    if (x == 'http') {
        var body = JSON.stringify({
            recipient: { id },
            message: {
                attachment: {
                    "type": "image",
                    "payload": {
                        "url": text
                    }
                }
            },
    });

    } else {
        var body = JSON.stringify({
            recipient: { id },
            message: { text },
        });
    }

    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
    return fetch('https://graph.facebook.com/me/messages?' + qs, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body,
    })
    .then(rsp => rsp.json())
    .then(json => {
        if (json.error && json.error.message) {
            throw new Error(json.error.message);
        }
        return json;
     });
};

* NB. Это, очевидно, не сработает, если вы планируете отправлять текстовые ответы, которые являются просто URL-адресами, т.е. " http://example.com/". Чтобы обойти это, вы можете поместить любой символ перед URL-адресом в вашем сообщении, например: '> http://example.com/', и ссылки будут работать нормально.

Другие вопросы по тегам