Я использую сценарии приложений Google, чтобы написать несколько дополнений для связи gmail (или электронной почты g suite) с нашей системой crm.
Моя текущая проблема - попытка передать выбранное вложение, POST, в скрипт php на удаленном сервере, который воссоздает файл (и отправляется оттуда для интеграции в наш crm).
Ниже приведена подробная информация о коде и т. Д., Хотя, по сути, файл явно не передается правильно, поэтому что-то не так в том, как файл принимается или сохраняется локально. Размер файла другой, и он не открывается. Так, например, я выбираю PDF в электронном письме размером 640 КБ, и полученный файл, созданный на моем сервере, имеет размер более 1 МБ
.
Я настроил свой сценарий с картой, которая включает в себя список вложений. Кнопка на карте пытается отправить содержимое файла на удаленный сервер, где принимающий скрипт PHP просто сохраняет его как локальный файл.
Получение списка вложений для создания переключателей:
var attachmenttosave = CardService.newSelectionInput().setType(CardService.SelectionInputType.RADIO_BUTTON).setTitle("Selected Attachment").setFieldName("attachmenttosave");
for(var i = 0; i < attachments.length; i++) {
var attachment=attachments[i];
attachmenttosave.addItem(attachment.getName(),i,false);
}
код, который получает вложение и POST для удаленного сервера:
var accessToken = e.messageMetadata.accessToken;
var accessToken = e.messageMetadata.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
var messageId = e.messageMetadata.messageId;
var message = GmailApp.getMessageById(messageId);
var atc=e['formInput'].attachmenttosave;
var attachments=message.getAttachments();
var fn=attachments[parseInt(atc)].getName();
var blob=attachments[parseInt(atc)].getAs(attachments[parseInt(atc)].getContentType());
var url="https://remote.server";
var payload={"typ":"GS_SaveAttachmentToCase","email":encodeURIComponent(user),"fn":encodeURIComponent(fn), 'att':(blob)};
var options={"method":"POST","payload":payload,"followRedirects":true,"muteHttpExceptions":true};
var result=UrlFetchApp.fetch(url, options);
var data = result.getContentText();
return CardService.newActionResponseBuilder().setNotification(CardService.newNotification().setText(data).setType(CardService.NotificationType.INFO)).build();
- Получение скрипта PHP:
`
function GS_SaveAttachmentToCase(){
$fn=urldecode($_POST['fn']);
$fp = fopen("GS/" .$fn, "w+");
fwrite($fp, (utf8_decode ($_POST['att'])));
fclose($fp);
echo "done";
}
`