Bot Framework - co je nového
Microsoft Bot Framework si dává za cíl zjednodušit tvorbu konverzačních agentů (pro které se vžilo označení chatbot nebo zkráceně bot) a jejich napojení na populární služby pro posílání zpráv. Díky Bot Connectoru můžete svého bota napojit na Skype, Slack, Facebook Messenger, e-mail, Telegram a další, Bot Builder vám pomůže ho naprogramovat pomocí SDK pro .NET a Node.js. V praxi vytvoříte REST API obsahující logiku vašeho bota, zaregistrujete jej na vývojářském portále Bot Frameworku, zaregistrujete jej u jednotlivých služeb (Skype, Messenger apod.) a Framework se postará o propojení.
Bot Framework se neustále vyvíjí a poslední aktualizace ukazuje, že můžeme směle říct "bouřlivě" - na základě zpětné vazby došlo k úpravě SDK a je potřeba upravit stávající kód. Co je nového?
Nové funkce
Konfigurace napojení na Skype se nyní propíše automaticky a není potřeba ručně kopírovat hodnoty mezi portály.
Nový Bot Framework Emulátor, který umí pracovat s API v3. Jmenuje se nyní Bot Framework Channel Emulator a je ke stažení na webu.
Nová šablona projektu pro Visual Studio, která reflektuje změny v novém API.
Přibyla podpora karet v klientech, které je podporují (tedy v současnosti Skype a Facebook Messenger), v ostatních se zobrazí jako prostý text s možností interakce. Kartu může tvořit obrázek, nadpis, text a tlačítka:
Případně můžete poslat tzv. carousel, tedy pás karet, s nímž se dá posouvat:
Další variantou je karta "Sign in", díky které se mohou uživatelé přihlásit k vaší službě a vystupovat pod svým účtem:
Další novinkou je možnost zahrnout bota do skupinové konverzace na Skype. V takovém případě obdrží pouze zprávy adresované přímo jemu ( @MujBot Ahoj, jak je? ).
Hodně zajímavou novinkou je Preview hlasových hovorů pro Skype. Můžete tak botem zavolat uživateli, případně přijmout jeho hovor a třeba zaznamenat zprávu do hlasové schránky. Zatím funguje jenom 1:1 s konkrétním uživatelem a nedá se použít pro skupinové hovory.
Změny v API
Bot Framework nabízí REST API a korespondující SDK pro .NET a Node.js. Následníkem verze 1 je API v3, které zavádí několik optimalizací, nové funkce a také změny v názvosloví. Proto je potřeba upravit stávající aplikace.
- Vytvořte novou větev zdrojového kódu.
- Odeberte NuGet balíčky Microsoft.Bot.Builder a Microsoft.Bot.Connector.
- Přidejte znovu Microsoft.Bot.Builder, tentokrát ve verzi 3.0.1.
- Builder a Connector jsou nyní v jednom, takže samostatný balíček pro Connector už neexistuje.
- Dejte pozor na správné verze závislostí, hlavně balíček
System.IdentityModel.Tokens.Jwt
, který musí být ve verzi 4.0.2.206221351, přestože je k dispozici novější.
- Proveďte změny v kódu.
- Autentizace ve web.config se mění:
- AppID =
MicrosoftAppID
- AppSecret =
MicrosoftAppPassword
- AppID =
- Třída Message se nyní jmenuje
Activity
. - Pro rozpoznání typu aktivity (
message.Type
) je možné použít novou enumeraciActivityType
. - BotAdded, UserAdded, BotRemoved, UserRemoved To/From Conversation jsou nyní jediná událost:
ConversationUpdated
. Address
má jiné property: To => Recipient, ChannelConversationID => Conversation.- Odpovědi se posílají asynchronně, nikoliv jako návratová hodnota (viz příklad níže).
- BotState už není součástí Messaging API, ale stojí zvlášť.
- Autentizace ve web.config se mění:
- Otestujte, že vše funguje v novém emulátoru.
- Abyste předešli chybě 401 Unauthorized, ponechte při testování v emulátoru prázdné hodnoty MicrosoftAppID a MicrosoftAppPassword (jak ve web.config, tak v emulátoru).
- Vygenerujte si na portále v sekci konfigurace vašeho bota nové App ID a Password pro v3 a vložte je do web.config.
- Publikujte aplikaci na internet.
- Pokud se chcete vyhnout přerušení fungování bota, nepřepisujte stávající web, ale použijte jiný endpoint.
- Přepněte na portál Version 1.0 na Version 3.0. Uložte.
- Pokud z nějakého důvodu nebude bot fungovat, můžete se vrátit zpět na 1.0.
Změna v posílání odpovědí
Zásadní změna se odehrává v MessageController
a jeho metodě Post
. Původní verze:
[csharp]
public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, () => new SimpleDialog());
}
else
{
return HandleSystemMessage(message);
}
}
[/csharp]
Nově může vypadat takto:
[csharp]
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new SimpleDialog());
}
else
{
HandleSystemMessage(activity);
}
return new HttpResponseMessage(HttpStatusCode.Accepted);
}
[/csharp]
Budete-li tápat, podívejte se do dokumentace, která byla aktualizována a obsahuje ukázky správného používání dialogů a komunikace s uživatelem v novém modelu.
Martin