Перейти к документации
API

Предпросмотр перевода

Что выдал бы `translate` при отправке, при этом ничего не отправляется и ничего не сохраняется.

POSTapi.openemail.uk/emails/translate

Выполняет настоящий запрос в вашем рабочем пространстве, с вашим собственным ключом.

POST /emails/translate

Что выдал бы translate при отправке, при этом ничего не отправляется и ничего не сохраняется.

Запрос

Те же три параметра, которые разрешает отправка, минус конверт, пропускаются через ту же функцию, что вызывает путь отправки. Эта идентичность и есть вся ценность эндпоинта: предпросмотр с собственным кодом был бы обещанием, которого мы не держим, и в тот день, когда они разойдутся, то, что на экране у человека, и то, что во входящих у получателя, будут отличаться, и ничто об этом не скажет.

Параметры

tostringобязательно
Язык, на котором писать. Код BCP-47 (`de`), английское название («German») или самоназвание языка («Deutsch»). Ответ сообщает, в какой код это разрешилось, и именно эту форму стоит хранить, если вы держите язык по каждому контакту.
htmlstring
HTML-тело, до мегабайта. Требуется одно из html, text или subject.
textstring
Текстовая часть. Переводится независимо от `html`, со своей собственной проверкой длины.
subjectstring
СТРОКА темы: именно строка, а не булево значение, каким она является внутри `translate` при отправке. Это два разных вопроса: там вы говорите, переводить ли тему, которая у нас уже есть, а здесь вы её передаёте.
fromstring
Язык, на котором вы написали, в любой из тех же трёх форм. Его указание избавляет от вызова определения языка.
includeOriginalboolean
Несёт ли возвращаемый `html` ваш оригинал под переводом. По умолчанию true.

Неизвестные ключи дают 422, как и везде. Запрос, в котором нет ни html, ни text, ни subject, даёт 422 по html: «One of html, text or subject is required».

Предпросмотр

Тот самый цикл, который выполняет редактор, прежде чем показать человеку, что он собирается отправить.

curl
curl -X POST "$OE/emails/translate" -H "$AUTH" -H "Content-Type: application/json" \  -d '{    "subject": "Your September invoice",    "html": "<p>Invoice attached. Payment is due on the 14th.</p>",    "to": "de"  }'
Ответ
{  "object": "translation",  "language": { "code": "de", "label": "German", "native": "Deutsch", "flag": "🇩🇪", "rtl": false },  "detectedSourceLanguage": {    "code": "en", "label": "English", "native": "English", "flag": "🇬🇧", "rtl": false  },  "subject": "Ihre Rechnung für September",  "html": "<p>Rechnung im Anhang. Zahlbar bis zum 14.</p>\n<div style=\"margin:28px 0 0;padding:14px 0 0;border-top:1px solid #d6dae0\">\n<div style=\"margin:0 0 10px;font-size:12px;line-height:1.5;color:#6b7280\">Ursprüngliche Nachricht (English)</div>\n<div><p>Invoice attached. Payment is due on the 14th.</p></div>\n</div>",  "text": null,  "includeOriginal": true}

html, text и subject для поля, которое вы не отправляли, возвращаются как null, а не отсутствуют, поэтому клиент может отрисовать ответ, не помня, о чём спрашивал.

detectedSourceLanguage равен null, когда определение воздержалось. Это настоящий ответ, а не сбой. Тело из имён, чисел и ссылок не даёт ему ничего для чтения, и единственное следствие — что ваш оригинал подписан без указания языка.

includeOriginal возвращается в ответе, потому что он меняет содержимое html. Когда он включён, тело уже несёт ваш оригинал под переводом, и добавление собственной копии отправит его дважды.

Предпросмотр, правка, отправка

Сценарий, под который это сделано, — предпросмотр, ПРАВКА, отправка: покажите человеку перевод, дайте его изменить, затем отправьте одобренное как обычные html и subject, вообще без translate в запросе. Тогда одобренное им слово в слово совпадает с тем, что уходит.

curl
curl -X POST "$OE/emails" -H "$AUTH" -H "Content-Type: application/json" \  -d '{    "from": "[email protected]",    "to": ["[email protected]"],    "subject": "Ihre Rechnung für September",    "html": "<p>Rechnung im Anhang. Zahlbar bis zum 14.</p>"  }'

Отправка с translate после предпросмотра переводит второй раз и выбрасывает правки. Письмо ушло бы в формулировках, которых никто не читал, — а это ровно тот сбой, ради предотвращения которого предпросмотр и существует.

Во что это обходится и чего оно не делает

  • Три обращения к модели (тело, тема и ещё одно, чтобы определить, на каком языке вы написали), выполняемые вместе, поэтому ожидание равно самому долгому из трёх, а не их сумме. Указание from убирает третье. Стоимость та же, что и у отправки с translate, поэтому делайте предпросмотр один раз, а не на каждую правку.
  • Ничего не отправляется, никакая запись не создаётся и никакой id не возвращается. Здесь нечего отменять и нечего получать позже.
  • Он переводит и не делает ничего больше. Он не вычитывает, не улучшает текст и никогда не отвечает на сообщение.
  • Имена, названия компаний, ссылки, номера заказов, цены и даты возвращаются такими же, какими были переданы, поэтому перевод можно построчно сверить с оригиналом.
  • Цитируемая история не вырезается, в отличие от читающей половины. Переводится то, что вы передали, — это верно для редактора, где тело письма содержит только что написанное, и об этом стоит помнить, если вы отправляете целую цепочку ответов.
  • Ограничен emails:send, собственного scope у него нет: он не даёт ничего такого, чего отправитель и так не мог бы сделать, а scope, который никто не отличит от emails:send на экране согласия, делает каждый другой scope в этом списке чуть менее значимым.

Тело ограничено тем же мегабайтом, что и при отправке, но сам перевод отклоняет всё свыше 30 000 символов с translation_too_long. Коды ошибок те же, что возвращает переведённая отправка, и перечислены в разделе Отправка письма.