---
# System prepended metadata

title: '**DOG Mailer API** `v1.2.0`'
tags: [DOG]

---

---
tags: DOG
---
# **DOG Mailer API** `v1.2.0`
> API slouží pro odesílání emailů pomocí služby SendGrid. Implementuje pouze metodu mail/send. Umí zajistit základní mailové vlastnosti jako plain/html, přiložení příloh a nebo využití Dynamic Templates ze SendGridu.





---
## **Změny ve verzích**
### **v1.2.0**
#### **Přidáno**
* Přidání podpory pro načítání dokumentů z DMS

### **v1.1.0**
#### **Přidáno**
* Přidání podpory pro dynamic templates

### **v1.0.0**
* Zaváděcí verze





---
### **Umístění API**
#### **TEST** prostředí
* Lokální síť: https://dog.test.ux.bee.corp/api/v1
* Externí zóna: https://apitest.bohemiaenergy.cz/dog
#### **PROD** prostředí
* Lokální síť: https://dog.bee.corp/api/v1
* Externí zóna: https://api.bohemiaenergy.cz/dog

### **Ověření přístupu k API**
Ověření je řešeno pomocí `API-KEY` vloženého do hlavičky
* `Authorization: Bearer <API-KEY>`

V případě použití přístupu z externí zóny, je nutné ještě navíc přístupový `PROXY-KEY` pro `Proxy` umístěný do hlavičky
* `X-APP-KEY: <PROXY-KEY>`

### **Vysvětlivky**
* ==*== - označuje povinné položky
* [color=#ff4500] - další informace na konci dokumentu v Příloze

## **Způsob zpracování chyb**

#### **V případě jakékoliv chyby je vráceno například:**
```json=
{
    "intID": "b59fb26d-89df-4fea-9560-0dc3379eda82",
    "response": {
        "error": {
            "code": "MISSING_MANDATORY_DATA",
            "message": "Missing mandatory nodes: entity",
            "data": {}
        }
    }
}
```
#### **Popis:**
* **intID** `string` - interní ID DOG, pod kterým je provedeno zalogování požadavku
* **response** `object` - objekt s tělem odpovědi
  * **error** `object` - objekt s tělem chyby
    * **code** `string` - označení chyby, strojově zpracovatelný kód
    * **message** `string` - doplňující popis chyby, většinou předávaná hodnota z dalších systémů nebo lidksy čitelná podoba chyby
    * **data** `object` - další strojově zpracovatelné detaily chyby

### **Seznam kódů**

| Code                        | Message                                | Data | Popis |
| --------------------------- | -------------------------------------- |:----:| ----- |
| `INVALID_INPUT_JSON`        | Chyba z parseru                        | -    | Vstupní data nejsou validní JSON formát |
| `MISSING_MANDATORY_DATA`    | List chybějících polí vstupních dat    | -    | Kontrola vstupních dat, kontrola povinných položek a jejich struktury, případně validita stupních dat |
| `SENDGRID_INTERNAL_ERROR`  |                                         | -    | Vnitřní chyba zpracování odpovědi od Sendgridu |
| `DMS_INTERNAL_ERROR`        | Přeposlaná chyba z DMS                 | -    | Vnitřní chyna na strane DMS |
| `DOG_MAILER_INTERNAL_ERROR` |                                        | -    | Vnitřní chyba DOG Mailer |

**Způsob reportování chyb je u všech endpointů stejný. Dále nebude popisovaný.**




---
## **dog://mail/send**
> Odeslání emailu pomocí služby SendGrid
 
**Metoda:** `POST` \
**URL:** `/mail/send` \
**Tělo dotazu:** `application/json` \
**Tělo odpovědi:** `application/json`

#### **Příklad:**
```json=
{
    "from": {
        "email": "noreply@bohemiaenergy.cz",
        "name": "BOHEMIA ENERGY"
    },
    "to": [
        {
            "email": "vhorejsi@bohemiaenergy.cz",
            "name": "Václav Hořejší"
        }
    ],
    "cc": [],
    "bcc": [],
    "subject": "test email",
    "body": {
        "plain": "plain body",
        "html": "<b>html</b> body",
        "template": {
            "id": "d-fd6d82e03d114a73986720ba50428da4",
            "data": {
                "user": {
                    "firstname": "Václav",
                    "surname": "Hořejší"
                }
            }
        }
    },
    "attachments": [
        {
            "dms": {
                "id": 123456,
                "version": 4
            },
            "name": "sou.pdf",
            "cid": "xxxx",
            "data": "data:application/pdf;base64,JVBERi0xLjcKJeLjz9MKMjIgMCBvY..."
        }
    ]
}
```
#### **Popis:**
* **from** ==*== `object` - objekt s informací o odesílateli (FROM)
  * **email** ==*== `string` - adresa odesílatele
  * **name** `string` - jméno odesílatele
* **to** ==*== `array of objects` - pole objektů adresátů, má stejnou strukturu jako `from`. **Pozor, musí to být pole a musí obsahovat aspoň jeden objekt s `email`**
* **cc** `array of objects` - pole objektů adresátů v kopii. Funguje stejně jako `to`
* **bcc** `array of objects` - pole objektů skrytých adresátů v kopii. Funguje stejně jako `to`
* **subject** `string` - předmět emailu (==*== pokud není použitý `body.template`)
* **body** `object` - objekt definující tělo emailu
  * **plain** `string` - plaintextová verze těla emailu (==*== pokud není použito `body.html` nebo `body.template`)
  * **html** `string` - html verze těla emailu (==*== pokud není použito `body.plain` nebo `body.template`)
  * **template** `object` - objekt pro použití Dynamic Templates ze SendGridu. Pokud je použito, tak má vyšší prioritu než `body.plain` a `body.html`.
    * **id** `string` - identifikátor šablony z Dynamic Templates v SendGridu. Je vygenerován při založení šablony v Sendgridu.
    * **data** `object` - objekt odpovídající struktuře elementů v Dynamic Templates. Do šablony se zapisují jako `{{name}}` nebo `{{user.firstname}}`. Detailní dokumentace pro tvorbu Dynamic Templates je: https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/
* **attachments** `array of objects` - pole objektů s přílohami
  * **dms** `object` - objekt s odkazem na DMS
    * **id** `int` - ID souboru v DMS
    * **version** `int` [*1*] - verze souboru v DMS
  * **name** `string` - název souboru, bude použito pro pojmenování souboru v příloze
  * **cid** `string` - název souboru pro použití inline vložení do těla emailu pomocí `<img src="cid:xxxx">`
  * **data** `string` - data mimetype base64 soubor

#### **Poznámky:**
V případě, že je použito `attachments[].dms` je nutné u správce DMS zajistit práva na daný typ souborů pro DOG

#### **Odpověď v případě úspěšného odeslání emailu:**
```json=
{
    "intID": "0120f618-7d12-471b-aa22-151d21976173",
    "response": {
        "code": 202,
        "mailToken": "mzPllLfaTLe3OLs42FkcnA"
    }
}
```
#### **Popis:**
* **intID** `string` - interní ID DOG, pod kterým je provedeno zalogování požadavku
* **response** `object` - objekt s tělem odpovědi
  * **code** `int` - kód výsledku zpracování požadavku Sendgridem. Popis kódů: https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html
  * **mailToken** `string` - unikátní identifikátor emailu v rámci Sendgrid

#### **Odpověď v připadě chyby při odeslání emailu:**
```json=
{
    "intID": "8a226223-26ad-44e9-ba85-bdd6b81a4de2",
    "response": {
        "code": 400,
        "errors": [
            {
                "field": "from.email",
                "help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.from",
                "message": "The from email does not contain a valid address."
            }
        ]
    }
}
```
#### **Popis:**
* **intID** `string` - interní ID DOG, pod kterým je provedeno zalogování požadavku
* **response** `object` - objekt s tělem odpovědi
  * **code** `int` - kód výsledku zpracování požadavku Sendgridem. Popis kódů: https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html
  * **errors** `array of objects` - pole objektů s popisem všech chyb v rámci volání
    * **field** `string` - pole, kterého se problém týká
    * **help** `string` - odkaz do dokumentace Sendgridu k danému problému
    * **message** `string` - rychlý popis chyby





---
## Přílohy
### Číselník DOG.dog.entity[]
```json=
}
  "entity": {
    "BE": ["BE", "71", "B", "BEE", "bohemiaenergy.cz"],
    "CE": ["CE", "82", "C", "comfortenergy.cz"],
    "XE": ["XE", "81", "X", "X Energie", "xenergie.cz"],
    "3E": ["3E", "100", "E", "3-e.cz"],
    "BD": ["BD", "63", "Z", "BEZ", "bezdodavatele.cz"],
    "SE": ["SE", "72", "S", "SK", "SKE", "slovakiaenergy.sk"],
    "AM": ["AM", "75", "A", "ampermarket.cz"],
    "BPL": ["BPL", "beplan.cz"],
    "ECS": ["ECS", "77", "P", "energie-cs.cz"]
  }
}
```