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/', и ссылки будут работать нормально.