上次我们讲了Teams Bot开发的概述,讲了Azure Bot Service,Bot Framework SDK和我们自己的bot服务的概念,这篇文章就带大家看看Azure Bot Service和我们的bot是如何发生关系的。

我们自己开发的bot服务实际上就是一个api service,需要提供一个支持 POST 请求的endpoint。然后把这个endpoint的url注册到Azure Bot Service,这样当有人和你的bot进行聊天的时候,这个endpoint就会被Azure Bot Service所调用。

我们来看一个简单例子:用户在模拟器里对bot发送一个”hi”消息,然后bot回复一个”You said: hi”消息。整个流程如下:

  1. 当用户准备开始和bot进行聊天的时候,azure bot service就会向我们的bot endpoint上 POST 一个关于 conversationUpdate 的HTTP请求,告诉我们的bot,有一个用户准备要和bot聊天了。下面是Bot Emulator,相当于Azure Bot Service传递给我们bot endpoint的http request body
{"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"from": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User","role": "user"},"id": "5d354510-a8c4-11ea-9482-fbaa8563d339","localTimestamp": "2020-06-07T23:39:51+10:00","locale": "en-US","membersAdded": [{"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot"},{"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User"}],"membersRemoved": [],"recipient": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"serviceUrl": "https://762eb0b511e7.ngrok.io","timestamp": "2020-06-07T13:39:51.905Z","type": "conversationUpdate"
}

可以看到channelId说明是用模拟器聊天平台发出来的信息,from用户,typeconversationUpdate,具体内容是有两个新增加的成员(membersAdded),分别是UserBot。大家需要注意一个conversation id,这个id是针对这次对话的,这次对话里可以你一句,我一句,每一句的id不同,但是他们的conversation id是一样的。

  1. 当用户发送一个 “hi” 文字内容给bot,这时候我们的bot endpoint会收到另一个POST 请求,内容如下:
{"channelData": {"clientActivityID": "1591537203426cjob1jjckwm","clientTimestamp": "2020-06-07T13:40:03.426Z"},"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"entities": [{"requiresBotState": true,"supportsListening": true,"supportsTts": true,"type": "ClientCapabilities"}],"from": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User","role": "user"},"id": "6414c2c0-a8c4-11ea-9482-fbaa8563d339","localTimestamp": "2020-06-07T23:40:03+10:00","locale": "en-US","recipient": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"serviceUrl": "https://762eb0b511e7.ngrok.io","text": "hi","textFormat": "plain","timestamp": "2020-06-07T13:40:03.436Z","type": "message"
}

可以看到这此的typemessage,说明是一条消息,消息文字格式是纯文本plain,文字内容texthi

对照我们上面的conversation id,是不是发现这条的conversation id是一样的,说明这条消息和上一条是在同一个对话里进行的。

这里有一个serviceUrl,这个是我们Azure bot service模拟器的url,如果你的bot要回复用户一条消息,那这个消息就是发送到这个url上。

  1. 我们的bot收到上面这条用户发来的消息后,回复用户一条”You said: hi”的文字消息,bot就组建一个http request,POST 到上面这个service Url上,请求的body也是json格式,内容如下:
{"attachments": [],"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"entities": [],"from": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"id": "6504a100-a8c4-11ea-9482-fbaa8563d339","inputHint": "acceptingInput","localTimestamp": "2020-06-07T23:40:05+10:00","locale": "en-US","recipient": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","role": "user"},"replyToId": "6414c2c0-a8c4-11ea-9482-fbaa8563d339","serviceUrl": "https://762eb0b511e7.ngrok.io","speak": "You said: hi","text": "You said: hi","timestamp": "2020-06-07T13:40:05.008Z","type": "message"
}

可以看到conversation id没有变化,需要注意的是replyToId,它表示bot回复的”You said: hi”,是针对用户前面发的那条”hi”消息的回复。所以这个replyToId的值就是前面那个消息的id

大家看了这个流程了对应的json,是不是对bot的运作有一个具体的感觉了? :D

Teams Bot开发系列:初识Bot相关推荐

  1. Teams Bot开发系列:Bot验证

    我们今天来说一下authentication,authentication一直是一个复杂的问题.bot里的authentication也不简单.我们先来看一个概念:Bot Framework Toke ...

  2. Teams Bot开发系列:Activity和Turn

    这篇文章我们来说一下Activity和Turn这两个bot framework中最重要的两个概念,同时也介绍一下TurnContext和BotAdapter Activity 一个activity是聊 ...

  3. Teams Bot开发系列:Teams的Activity处理

    上一篇文章讲了activity处理的流程,我们bot的核心处理逻辑放在ActivityHandler的子类里,通过重载OnMessageActivityAsync()方法来实现. 这篇文章我来讲一下对 ...

  4. Teams Bot开发系列:Middleware

    middleware是目前一些framework比较流行的概念,通常一个开发框架需要提供一些可扩展可定制化的功能.所以middleware这种pattern就很实用. 熟悉asp.net core的开 ...

  5. Teams Bot开发系列:Activity处理流程

    上篇文章介绍了什么是Activity,Turn,TurnContext和BotAdapter,这篇文章我们看看这些东西是如何窜起来的,他们是如何处理用户发给bot的消息的. 我们以一个最简单的bot, ...

  6. Teams app 开发最佳实践

    经常有朋友问我,teams app开发有哪些最佳实践,我看了一些别人的分享,也结合我自己的经验,总结了一下一共有这么几点: 使用 Microsoft Graph API 访问用户数据和组织数据 Mic ...

  7. electron 图标制作_使用Electron和Microsoft Bot Framework制作Skype Bot

    electron 图标制作 聊天机器人越来越受欢迎. Facebook正在致力于提供一个构建Messenger机器人的框架,该框架将允许企业所有者完全在Facebook的消息传递应用程序内部建立其客户 ...

  8. 七巧板平台html5游戏开发之初识物理引擎

    七巧板平台html5游戏开发之初识物理引擎 七巧板平台是用于Web App.中轻度HTML5游戏及富媒体类应用开发,集开发.运营于一体的平台.它基于HTML5技术开发,具有进入门槛极低.开发极简单.跨 ...

  9. iOS开发系列--让你的应用“动”起来

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

最新文章

  1. 99% 的人都能看懂的「补偿」以及最佳实践
  2. 10个可以快速用Python进行数据分析的小技巧
  3. iOS-读写plist文件
  4. (转)C# 把我所积累的类库全部分享给博友(附件已经上传)
  5. mysql 数据库访问层_MYSQL数据库访问层
  6. 119_Power Pivot 长尾明细显示为【其他】
  7. 使用deeplearning4j训练Doc2Vec(文档向量)
  8. linux下进程的创建代码,Linux下进程创建分析
  9. 职场潜规则:公司出现这三种信号,你必须果断辞职!
  10. 沙发家具网站源码_小户型装修不会选家具?大湾网推荐你了解这些装修风格家具,装修省心空间大!...
  11. socket不能bind请求的地址_深入浅出讲解:php的socket通信
  12. 再送 5000 份红包封面!
  13. weblogic设置classpath、debug端口和log目录
  14. 超全树叶 叶子免抠元素素材网站整理
  15. 最好用的文件上传插件 bootstrap fileInput
  16. 购买vSphere虚拟化主机的配置建议清单
  17. GHOST启动盘制作
  18. 微信内转发APP及h5类域名怎么做到防封防拦截,微信域名防红技术原理
  19. word中鼠标没有反应,可以动但是点哪都没反应
  20. simulink【1】分段函数

热门文章

  1. 程序员公司选择:创业公司、中等规模公司、大公司
  2. ES6 let与const基础用法笔记
  3. 16个烧光你脑细胞的悖论
  4. 程序员最反感的十件事,你有同感吗?
  5. Linux关于文件的权限笔记
  6. 身份证号码有效性检测算法 ( js版 转 C#版 )
  7. STM32 串行通信原理
  8. .Net Core创建Docker镜像
  9. jQuery事件绑定(一)
  10. Java 网络编程1