> For the complete documentation index, see [llms.txt](https://docs.mluvii.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mluvii.com/pro-it-specialisty/napojeni-chatbotu/podporovane-aktivity.md).

# Podporované aktivity

{% hint style="info" %}
***Zde naleznete 2 sady podporovaných aktivit (globálně podporované aktivity a aktivity podporované jen částečně).***
{% endhint %}

## 1) Aktivity podporované ve všech kanálech

1. [GetAvailableOperators](#getavailableoperators)
2. [GetAvailableGroups](#getavailablegroups)
3. [GetCallParams](#getcallparams)
4. [SetCallParams](#setcallparams)
5. [GetHeroCards](#getherocards)
6. [SendGuestOfflineEmail](#sendguestofflineemail)
7. [GetGuestIdentity](#getguestidentity)
8. [EndConversation](#endconversation)
9. [Forward](#forward)
10. [Handoff](#handoff)
11. [GetMediaObjects](#getmediaobjects)
12. [ShareFile (name)](#sharefile-name)
13. [ObtainCrmIdentity](#obtaincrmidentity)
14. [AssignCrmIdentity](#assigncrmidentity)

## 2) Aktivity podporované jen v některých kanálech

Ne všechny tyto aktivity fungují ve všech kanálech. Facebook například podporuje jen některé aktivity. WhatsApp podporuje pouze základní text.

<table><thead><tr><th width="239">Activity</th><th width="105">WebChat</th><th width="110">Facebook</th><th width="115">WhatsApp</th><th width="81">Apple </th><th>VK</th></tr></thead><tbody><tr><td><a href="#attachment">Attachment</a></td><td>✔</td><td>✘</td><td>✔</td><td>✘</td><td>✘</td></tr><tr><td><a href="#adaptive-cards">Adaptive Cards</a></td><td>✔</td><td>✔</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#buttons">Buttons</a></td><td>✔</td><td>✔</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#enableguestinput">EnableGuestInput</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#disableguestinput">DisableGuestInput</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#getherocards">GetHeroCards</a></td><td>✔</td><td>✘</td><td>✔</td><td>✔</td><td>✘</td></tr><tr><td><a href="#sendherocard">SendHeroCard</a></td><td>✔</td><td>✘</td><td>✔</td><td>✔</td><td>✘</td></tr><tr><td><a href="#herocardsubmission">HeroCardSubmission</a></td><td>✔</td><td>✘</td><td>✔</td><td>✔</td><td>✘</td></tr><tr><td><a href="#chatbotopenfileuploadprompt">ChatbotOpenFileUploadPrompt</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#enableguestupload">EnableGuestUpload</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#disableguestupload">DisableGuestUpload</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr><tr><td><a href="#sharefile-url">ShareFile (URL)</a></td><td>✔</td><td>✘</td><td>✘</td><td>✔</td><td>✔</td></tr><tr><td><a href="#typing">Typing</a></td><td>✔</td><td>✘</td><td>✘</td><td>✔</td><td>✘</td></tr><tr><td><a href="#requestlocation">RequestLocation</a></td><td>✔</td><td>✘</td><td>✘</td><td>✘</td><td>✘</td></tr></tbody></table>

*Apple = Apple Messages for Business*\
*Facebook = Facebook Messenger*

## Aktivity

Způsob odeslání aktivity se liší podle typu chatbota:

* [Microsoft Bot Framework](https://dev.botframework.com/) posílá aktivity pomocí [ChannelData](https://docs.microsoft.com/en-us/previous-versions/azure/bot-service/dotnet/bot-builder-dotnet-channeldata?view=azure-bot-service-3.0)
* Chatbot přes API posílá aktivity na API endpoint `/api/v1/Chatbot/{chatbotId}/activity`&#x20;

### GetAvailableOperators

Získá seznam operátorů, kteří jsou přihlášeni a mají volné kapacity.

Pokud je parametr `groupId` nastaven, je vrácen seznam dostupných operátorů z vybrané skupiny.

Pokud parametr `groupId` není nastaven, dojde k opětovnému vyhodnocení [routingových podmínek](/pro-administratory/sprava-tenantu/nastaveni/routingova-pravidla.md) a je vrácen seznam dostupných operátoru pouze ze skupin, které splňují podmínky. Routingové podmínky se znovu vyhodnocují. Lze tedy [změnit parametry sezení](#setcallparams) a dostat seznam dostupných operátoru podle aktuálních parametrů.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetAvailableOperators",
  "groupId: <volitelné id skupiny operátorů>
}
```

Odpověď aktivity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetAvailableOperatorsResponse",
  "availableOperators": [
    {
        "displayName":"Katka",
        "userId":1
    },
    {
        "displayName":"Tomáš",
        "userId":2
    }
  ]
}
```

### GetAvailableGroups

Získá seznam skupin operátorů a jejich aktuální stavy.

Pokud je pole `groupIds` definováno, je vrácen seznam skupin podle tohoto pole.

Pokud parametr `groupId` není nastaven, dojde k opětovnému vyhodnocení [routingových podmínek](/pro-administratory/sprava-tenantu/nastaveni/routingova-pravidla.md) a je vrácen seznam skupin, které splňují podmínky. Routingové podmínky se znovu vyhodnocují. Lze tedy [změnit parametry sezení](#setcallparams) a dostat seznam dostupných operátoru podle aktuálních parametrů.

**Stav skupiny může nabývat těchto hodnot:**

* ONLINE - skupina má volné operátory
* BUSY - všichni operátoři jsou obsazeni ale je volné místo ve frontě skupiny
* OFFLINE - viz pole groupOfflineReasons

**Pokud je skupina offline, pole groupOfflineReasons nabývá jedné nebo více hodnot:**

* BUSINESS\_HOURS - skupina je mimo otevírací hodiny
* NO\_OPERATORS - ve skupině nejsou přihlášeni žádní operátoři
* QUEUE\_FULL - skupina má plnou frontu
* DELETED - skupina byla smazána administrátorem
* CHANNEL\_BLOCKED - všichni operátoři mají zablokovaný kanál (ve kterém je sezení s chatbotem)

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetAvailableGroups",
  "groupIds: <volitelné pole id skupin operátorů>
}
```

Odpověď aktivity:

**groupWorkload**

* maxSlots: Součet slotů všech přihlášených operátorů ve skupině
* usedSlotsWaiting: Součet všech obsazených slotů čekajícími ve skupině
* usedSlotsAccepted: Součet všech slotů obsazených odbavovanými sezeními ve skupině
* freeSlots: Součet volných slotů všech operátorů ve skupině

**queueWorkload**

* freeQueueSlotsCountTotal: Počet volných slotů ve frontě na skupině
* inQueueCountTotal: Počet využitých slotů ve frontě na skupině
* isQueueFull: freeQueueSlotsCountTotal == 0

```json
{
  "sesionId": <nutné pouze u chatbota přes API>,
  "activity": "GetAvailableGroupsResponse",
  "availableGroups": [
    {
        "displayName": "Group one",
        "groupId": int,
        "groupState": jedna z hodnot: ONLINE, OFFLINE, BUSY,
        "groupOfflineReasons": [žadná nebo více z hodnot: BUSINESS_HOURS, NO_OPERATORS, QUEUE_FULL, DELETED, CHANNEL_BLOCKED],
        "groupWorkload": {
          "maxSlots": int,
          "usedSlotsWaiting": int,
          "usedSlotsAccepted": int,
          "freeSlots": int
        },
        "queueWorkload": {
          "freeQueueSlotsCountTotal": int,
          "inQueueCountTotal": int,
          "isQueueFull": boolean,
        }
    }
  ]
}
```

### GetCallParams

Získá CallParams spojené s aktivním sezením.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetCallParams"
}
```

Odpověď aktivity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetCallParamsResponse",
  "callParams": <dictionary>
}
```

### SetCallParams

Nastaví CallParams k aktivnímu sezení.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "SetCallParams",
  "callParams": <dictionary>
}
```

Response Activity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "SetCallParamsResponse",
  "success": <boolean>,
  "errorMessage": <string>
}
```

### SendGuestOfflineEmail

Odešle email na adresu pro zprávy z offline formuláře. Offline formulář musí být nastaven na balíčku.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "SendGuestOfflineEmail",
  "subject": <string>,
  "message": <string>,
  "location": <string> (zdroj zprávy pro rozlišení, např: "Chatbot Mluviik")
}
```

### GetGuestIdentity

Vrátí všechny známé identifikátory uživatele.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetGuestIdentity"
}
```

Odpověď aktivity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetGuestIdentityResponse",
  "trackedGuestGuid": <Guid>, (unikátní identifikátor z cookie)
  "phoneCallerId": <string>, (telefonní číslo)
  "facebookPSID": <string>, (facebook identifikátor)
  "facebookPageId": <string>, (facebook identifikátor)
  "whatsAppContactId": <string>, (whatsapp identifikátor)
  "vkContactId": <string>, (vk identifikátor)
  "AppleContactId": <string>, (apple identifikátor)
}
```

### Forward

Přesměruje interakci na živého operátora nebo skupinu. Alespoň jeden z parametrů `operatorGroupId` nebo `userId` musí být vyplněn.

Takto přesměrovaná sezení se chovají stejně jako sezení přesměrována ručně - tzn. ignorují nastavená kapacitní pravidla (velikost fronty skupiny/sloty operátora). Pokud chcete aby sezení nepřekročilo nastavená kapacitní pravidla použijte aktivitu [HandOff](#handoff) nebo před přesměrovaním zjistěte aktuální vytížení operátorů pomocí aktivit [GetAvailableOperators](#getavailableoperators) / [GetAvailableGroups](#getavailablegroups)

Routingové parametry jsou znovu nevyhodnocují. Pokud chcete zaroutovat sezení znovu (například po [změně parametrů sezení](#setcallparams)), lze použít aktivitu [HandOff](#handoff).

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "Forward",
  "operatorGroupId": <integer: optional if userId is set>,
  "userId": <integer: optional if operatorGroupId is set>
}
```

### HandOff

Vrátí interakci zpět do routingu a vyhodnotí znovu parametry sezení. Po zavolání této aktivity je chatbot ze sezení odpojen. Doporučujeme tedy nejprve zjistit dostupnost cílových operátorů/skupin pomocí aktivit [GetAvailableOperators](#getavailableoperators) / [GetAvailableGroups](#getavailablegroups).

Výsledek operace HandOff závisí na stavu skupiny:

* ONLINE - sezení se přiřadí operátorovi
* BUSY - sezení půjde do fronty skupiny
* OFFLINE - klientovi se zobrazí offline formulář

{% hint style="danger" %}
*Je nutné nastavit routingové podmínky tak, aby nedošlo ke zpětnému zaroutovaní zpět na chatbota.*
{% endhint %}

**Příklad správného použití:**

Routingová pravidla:

| Pořadové číslo |         Cíl         |          Podmínka         |
| :------------: | :-----------------: | :-----------------------: |
|        1       |   Skupina "Sales"   |   HandoffReason = Sales   |
|        2       | Skupina "Reklamace" | HandoffReason = Reklamace |
|        3       |       Chatbot       |        bez podmínky       |
|        4       |  Fallback - vypnutý |             -             |

Při prvním naroutování je vybrán chatbot, protože parametr *HandoffReason* ještě není nastaven. Chatbot by měl nastavit tento parametr pomocí aktivity [SetCallParams](#setcallparams), než vrátí sezení do routingu. Tím je zajištěno, že sezení nebude naroutováno zpět na chatbota.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "HandOff"
}
```

### EndConversation

Ukončí sezení.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "EndConversation",
}
```

### Typing

Zobrazí/skryje informaci zda chatbot má "rozepsanou" zprávu.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "typing",
  "show": true
}
```

{% hint style="info" %}
*Použijte "true" pro zapnutí a "false" pro vypnutí typingu.*
{% endhint %}

### DisableGuestInput

Skryje chatové pole a neumožní uživateli psát do chatu.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "DisableGuestInput"
}
```

Odpověď aktivity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GuestInputChangeResponse",
  "success": <bool>,
  "language": <string>,
  "source": <string>
}
```

### EnableGuestInput

Zobrazí chatové pole a umožní tak uživateli psát do chatu.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "EnableGuestInput"
}
```

Odpověď aktivity:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GuestInputChangeResponse",
  "success": <bool>,
  "language": <string>,
  "source": <string>
}
```

### GetHeroCards

Vrátí seznam existujících HeroCards.

Request:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetHeroCards"
}
```

Response:

```json
{
  "activity": "GetHeroCardsResponse",
  "heroCards": [
    {
        "displayName":"Hero Card one",
        "heroCardId":1
    },
    {
        "displayName":"Hero Card two",
        "heroCardId":2
    }
  ]
}
```

{% hint style="info" %}
*GetHeroCardsResponse vrací pouze Hero cards, které je možné poslat ve stávajícím sezení.*
{% endhint %}

### SendHeroCard

Posílá vybranou HeroCard do chatu klienta. Pro nastavení předvyplněných hodnot v HeroCard je možné využít objekt *initialParams*.&#x20;

#### HeroCard s předvyplněnou hodnotou parametru

Pokud chci poslat HeroCard, ve které je použito textové pole, které ukládá hodnotu do proměnné "call\_param\_fullname", initialParams bude vypadat následovně:

```json
initialParams: {
  "call_param_fullname": "předvyplněná hodnota"
}
```

{% hint style="info" %}
*"Běžnou" HeroCard je možné použít v rámci kanálů Webchat, WhatsApp a Apple.*
{% endhint %}

#### HeroCard s výběrem času

Pokud chci poslat hero kartu s výběrem časů (termínů) 6. 12. 2021 od 14:00 do 14:30 a k 7. 12. 2021 od 8:00 do 9:00, která ukládá hodnotu do proměnné "call\_param\_time\_picker", initialParams bude vypadat následovně:

```json
initialParams: {
  "call_param_time_picker": "[
    { \"startTime\": \"2021-12-06T14:00\", \"endTime\": \"2021-12-06T14:30\"}, 
    { \"startTime\": \"2021-12-07T08:00\", \"endTime\": \"2021-12-07T09:00\"}
  ]"
}
```

{% hint style="info" %}
*Tuto HeroCard je možné použít v rámci Webchat a WhatsApp kanálů.*
{% endhint %}

#### WhatsApp HeroCard (Template Message)

Pokud chci poslat WhatsApp hero kartu s parametry, použiji proměnnou additionalParams, která má nasledující formát:

```
"additionalParams": {"header": [], "buttons": [], "footer": [], "body": ["a", "b", "c", "d", "e"]}
```

{% hint style="info" %}
*Názvy (v hlavičce, tlačítek, v zápatí a těle) Template Message jsou dané, měníte pouze hodnoty v poli. Pokud daná sekce nemá žádné parametry, pošlete prázdnou array.*
{% endhint %}

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "SendHeroCard",
  "heroCardId": <integer:required>,
  "selectedLanguage": <string: optional>,
  "initialParams": <dictionary<string, string>: nepovinný>,
  "additionalParams": <dictionary<string,string[]>: nepovinný>
}
```

{% hint style="warning" %}

```
selectedLanguage parametr použijte ve formátu "cs", "en", "de" apod.
```

{% endhint %}

Response Activity:

```json
{
  "activity": "SendHeroCardResponse",
  "success": <boolean>,
  "errorMessage": <string>
}
```

{% hint style="success" %}
*Chatbot donedávna nebyl schopný zjistit, že došlo k potvrzení Hero Card klientem a byl odkázaný na to sledat změnu parametru sezení. To již není nutné, protože informaci o potvrzení je možné získat přes webhook.*
{% endhint %}

### HeroCardSubmission

Informace pro chatbota, že klient potvrdil HeroCard nebo vybral některou z možností (platí pro WhatsApp).

```json
{
  "activity": "HeroCardSubmission",
  "params": {
    "oo1_guest_ident": "Test"
  },
  "sessionId": 23647,
  "language": "cs",
  "source": "Default"
}
```

### ChatbotOpenFileUploadPrompt

Otevře dialog, který umožní uživateli nahrát soubor.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "ChatbotOpenFileUploadPrompt"
}
```

Odpověď aktivity:

```json
{
  "activity": "ChatbotOpenFileUploadPromptResponse",
  "fileUrl": <string | null>, (URL souboru nahraného uživatelem)
  "canceledByGuest": <boolean> (true, pokud uživatel zrušil prompt pro nahrání)
}
```

### EnableGuestUpload

Povolit funkce, které umožňují nahrávání uživatelských souborů.

Request JSON:

```json
{
  "activity": "EnableGuestUpload"
}
```

Odpověď aktivity:

```json
{
  "activity": "EnableGuestUploadResponse",
  "success": <boolean>,
  "errorMessage": <string>
}
```

### DisableGuestUpload

Zakázat funkce, které umožňují nahrávání uživatelských souborů.

Request JSON:

```json
{
  "activity": "DisableGuestUpload"
}
```

Odpověď aktivity:

```json
{
  "activity": "DisableGuestUploadResponse",
  "success": <boolean>,
  "errorMessage": <string>
}
```

### **GetMediaObjects**

Vrátí seznam souborů, které jsou uložené v mluvii a dostupné pro dané sezení.

Request JSON:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "GetMediaObjects"
}
```

Odpověď aktivity:

```json
{
  "activity": "GetMediaObjectsResponse",
  "fileStoreItems": [
    {
      "id": <integer>,
      "name": <string>
    }
  ],
  "sessionId": <integer>,
  "language": <string>,
  "source": <string>
}
```

### ObtainCrmIdentity

Vrací seznam existujících záznamů z Adresáře Kontaktů, u kterých je nalezena alespoň minimální shoda v identifikačních údajích klienta v daném sezení (např. klientovo jméno, tel. číslo, e-mail, ...).&#x20;

{% hint style="info" %}
*Chování je identické jako v případě sezení se živým operátorem, který dostává informace o nalezených shodách s existujícími záznamy v Adresáři Kontaktů.*
{% endhint %}

Request JSON:

```json
{
        "activity": "ObtainCrmIdentity",
        "sessionId": 7418277
}
```

Odpověď aktivity:

<pre class="language-json"><code class="lang-json">{
  "activity": "ObtainCrmIdentityResponse",
  "assignedCrmIdentityId": null,
  "matchedCrmIdentities": [
    {
      "crmIdentityId": 9943973,
      "score": 95,
      "data": {
        "oo1_guest_facebook_psid": [
          "1901491179944737",
          "2075406945856826"
        ],
        "oo1_guest_guid": [
          "09ac8a24-b342-14e5-f1cd-6cdf50c5a25e"
        ],
        "oo1_guest_email": [
          "marek.maly@gmail.com",
          "marek48@gmail.com",
          "malymarek@gmail.com",
          "maly@mluvii.com"
        ],
        "CrmUrl": [
          "https://org39940337.crm4.dynamics.com/main.aspx?app=d365default&#x26;forceUCI=1&#x26;pagetype=entityrecord&#x26;etn=contact&#x26;id="
        ],
        "oo1_guest_phone": [
          "+420258963147"
        ]
      }
    },
    {
      "crmIdentityId": 8527408,
      "score": 64,
      "data": {
        "oo1_guest_facebook_psid": [
          "1901491179944737"
        ],
        "oo1_guest_guid": [
          "8cc011e1-3889-9e58-2dba-07bc824ffbb3"
        ],
        "oo1_guest_email": [
          "karelsdfdfserwer"
        ],
        "oo1_guest_phone": [
          "16567879778"
        ]
      }
    }
<strong>}    
</strong></code></pre>

{% hint style="success" %}
*Často se může stát, že výsledků API vrátí více a bude na vás, podle jakého klíče označíte nejrelevantnější záznam, který chatbot vybere pro přiřazení klientské identity. Jako vodítko můžete použít parametr "score".*
{% endhint %}

### AssignCrmIdentity

Používá se pro přiřazení klientské identity k existujícímu či novému záznamu v Adresáři kontaků. Typicky tento request zavoláte na základě výsledku [ObtainCrmIdentity](#obtaincrmidentity).

Request JSON:

```json
{
        "activity": "AssignCrmIdentity",
        "existingCrmIdentityId": 9943973,
        "sessionId": 7418277
}
```

Odpověď activity:

```json
{
  "activity": "AssignCrmIdentityResponse",
  "created": false,
  "crmIdentityId": 9943973,
  "sessionId": 7417841,
  "language": "en",
  "source": "Default"
}
```

{% hint style="success" %}
*Jestliže v odpovědi na activitu ObtainCrmIdentity dostanete záznamy s určitou shodou, použijete v requestu hodnotu parametru "crmIdentityID". Pokud žádné shody nejsou nalezeny, jako hodnotu parametru "crmIdentityId" použijete "null".*
{% endhint %}

{% hint style="info" %}
*V odpovědi activity si můžete všimnout parametru "created", který nabývá hodnot "true" při vytváření nového záznamu a hodnoty "false" při napárování na existující záznam v Adresáři Kontaktů.*
{% endhint %}

### Attachment

Odesílá soubor do chatu (soubor není uložen v Souborech, ale nachází se např. na lokálním disku) .

Request JSON:

```json
{
        "activity": "Attachment",
        "file": <string>, (file URL loaded by a guest)
        "sessionId": 7418277
}
```

### ShareFile

Odešle soubor do chatu. Lze provést dvěma způsoby:

#### ShareFile (name)

Kombinace GetMediaObjects, což slouží k získání seznamu všech souborů uložených v Souborech (name + id). V druhém kroku použijete v rámci aktivity ShareFile *name* konkrétního souboru.

**Příklad:** Request JSON s použitím *name*:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "ShareFile",
  "name": <string získaný pomocí GetMediaObjects>
}
```

#### ShareFile (URL)

Volání aktivity ShareFile s URL souboru hostovaného mimo mluvii.

**Příklad:** Request JSON s použitím *url*:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "activity": "ShareFile",
  "url": <string>
}
```

Odpověď aktivity:

<pre class="language-json"><code class="lang-json">{
  "activity": "ShareFileResponse",
  "isSuccess": &#x3C;boolean>,
  "errorMessage": &#x3C;string>,
  "fileSource": "&#x3C;string>",
  "sessionId": &#x3C;integer>,
  "language": &#x3C;string>,
  "source": &#x3C;string>
<strong>} 
</strong></code></pre>

{% hint style="info" %}
*Pokud chcete zasílat do chatu URL na Youtube video, použijte typ "message" a URL vkládejte do "textu".*
{% endhint %}

**Přehled povolených souborů pro daný kanál**

Na úrovni společnosti se dají omezit povolené soubory - tato tabulka z ní vychází a upřesňuje, které soubory jsou pro který kanál funkční. Například poslání a přehrání mp3 souboru funguje pro WhatsApp sezení, ale nikoliv pro Facebook.

<table><thead><tr><th>File type</th><th>WebChat</th><th>Facebook Messenger</th><th>WhatsApp</th><th width="141">Apple Messages for Business</th><th>VKontakte</th></tr></thead><tbody><tr><td>WAV</td><td>✔</td><td>✘</td><td>✘</td><td>✔</td><td>✔</td></tr><tr><td>MP3</td><td>✔</td><td>✘</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>MP4</td><td>✔</td><td>✘</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>JPG</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>PNG</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>GIF</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>PDF</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td>TXT</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr></tbody></table>

### RequestLocation

Chatbot si vyžádá lokaci klienta skrze internetový prohlížeč a je schopen získat lokaci z desktop i mobilního zařízení.

Request JSON:

```json
{
  "activity": "RequestLocation",
  "sessionId": <integer>
}
```

Odpověď aktivity:

<pre class="language-json"><code class="lang-json">{
  "activity": "GuestLocation",
  "sessionId": &#x3C;integer>
<strong>} 
</strong></code></pre>

### Adaptive cards

API podporuje formátování zpráv podle standardu <https://adaptivecards.io>.

Příklad použití adaptive card carousel:

```json
{
  "sessionId": <nutné pouze u chatbota přes API>,
  "type": "message",
  "timestamp": "2020-06-12T12:13:39.7593384+02:00",
  "attachmentLayout": "carousel",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "title": "Street #1",
        "subtitle": "1. Street Foo 254 Czechia",
        "images": [
          {
            "url": "https://dev.virtualearth.net/REST/V1/Imagery/Map/Road?form=BTCTRL&mapArea=49.7463607788086,13.1083498001099,49.7932815551758,13.1951398849487&mapSize=500,280&pp=49.7616882324219,13.1491804122925;1;1&dpi=1&logo=always&key=ApBn8xoItlENbFx-rr1kzt_JakWdFTH24taCasYxQCgit15NtDeYrztO4chDtrg5"
          }
        ],
        "buttons": [
          {
            "type": "imBack",
            "title": "Street Foo 254",
            "value": 1
          }
        ]
      }
    },
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "title": "Street #2",
        "subtitle": "1. Ulice, Plzeň, Czechia",
        "images": [
          {
            "url": "https://dev.virtualearth.net/REST/V1/Imagery/Map/Road?form=BTCTRL&mapArea=49.7463607788086,13.1083498001099,49.7932815551758,13.1951398849487&mapSize=500,280&pp=49.7616882324219,13.1491804122925;1;1&dpi=1&logo=always&key=ApBn8xoItlENbFx-rr1kzt_JakWdFTH24taCasYxQCgit15NtDeYrztO4chDtrg5"
          }
        ],
        "buttons": [
          {
            "type": "imBack",
            "title": "Ulice, Plzeň, Czechia",
            "value": 1
          }
        ]
      }
    },
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "title": "Street #2 again",
        "subtitle": "1. Ulice, Plzeň, Czechia",
        "images": [
          {
            "url": "https://dev.virtualearth.net/REST/V1/Imagery/Map/Road?form=BTCTRL&mapArea=49.7463607788086,13.1083498001099,49.7932815551758,13.1951398849487&mapSize=500,280&pp=49.7616882324219,13.1491804122925;1;1&dpi=1&logo=always&key=ApBn8xoItlENbFx-rr1kzt_JakWdFTH24taCasYxQCgit15NtDeYrztO4chDtrg5"
          }
        ],
        "buttons": [
          {
            "type": "imBack",
            "title": "Ulice, Plzeň, Czechia",
            "value": 1
          }
        ]
      }
    }
  ]
}
```

### Buttons

Tlačítka lze poslat pomocí [adaptive cards](https://adaptivecards.io/explorer).

Request JSON:

```json
{
  "type": "message",
  "timestamp": "2020-09-09T10:03:53.4976861+02:00",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "title": "Test buttons",
        "buttons": [
          {
            "type": "imBack",
            "title": "Title of first button",
            "value": "Value of first button"
          },
          {
            "type": "imBack",
            "title": "Title of second button",
            "value": "Value of second button"
          }
        ]
      }
    }
  ]
}
```

Odpověď na vybrané tlačítko (Button 2) je pak aktivita typu *Text* v následujícím formátu:

```json
{
  "activity": "Text",
  "timestamp": "2020-12-04T16:12:57.172",
  "text": "Button 2",
  "sessionId": 13,
  "language": "cs",
  "source": "Facebook"
}
```

## Eventy

### Příchozí zpráva

Jakmile klient odešle textovou zprávu do chatu, v Callback URL se zobrazí následující aktivita:

```
{
  "sessionId": 1,
  "activity": "Text",
  "text": "Hello world"
}
```

### Příchozí soubor

Pokud klient nahraje soubor pomocí kancelářské sponky ve vstupním poli chatu, přijde botovi Aktivita v následujícím formátu.

```
{
  "activity": "GuestFileUpload",
  "fileUrl": <string>, (file URL loaded by a guest)
}
```
